HAProxy负载均衡原理及企业级实例部署haproxy集群
一 HAProxy简介
HAProxy是一种高效、可靠、免费的高可用及负载均衡解决方案,非常适合于高负载站点的七层数据请求。客户端通过HAProxy代理服务器获得站点页面,而代理服务器收到客户请求后根据负载均衡的规则将请求数据转发给后端真实服务器。
同一客户端访问服务器,HAProxy保持回话的三种方案:
1 HAProxy将客户端ip进行Hash计算并保存,由此确保相同IP访问时被转发到同一真实服务器上。
2 HAProxy依靠真实服务器发送给客户端的cookie信息进行回话保持。
3 HAProxy保存真实服务器的session及服务器标识,实现会话保持功能。
haproxy拓扑结构图
二 配置文件解析
Haproxy安装后默认没有配置文件,需要手动创建/etc/haproxy.cfg。启动haproxy时用-f指定配置文件路径。haproxy的配置文件包含全局设置段与代理段,global是全局段,defaults、listen、frontend、backend为代理段。frontend用来匹配客户端请求的域名或者URL;backend定义后端服务器集群
haproxy配置文件参数详细解析
配置项 | 描述 | |
global |
chroot<jail dir> | 将工作目录切换到<jail dir>并执行chroot |
daemon | 后台工作模式 | |
uid | 进程账户id,建议设置为haproxy专用账户 | |
gid | 进程组id,建议设置为haproxy专用组 | |
log<address><facility> | 配置全局syslog,可以设置两台日志服务器 | |
nbproc<number> | 指定后台进程数量 | |
pidfile<file> | 指定pid文件 | |
ulimit-n<number> |
设置每个进程最大文件描述符数量 |
|
maxconn<number> | 每个进程支持的最大并发数 | |
tune.bufsize<number> | 设置buffer大小,默认16384B | |
代理 设置 |
mode | 可选tcp、http、health |
timeout check<timeout> | 设置检查超时时间 | |
contimeout<timeout> | 设置连接超时时间 | |
balance roundrobin | 设置轮询负载 | |
bind<address>:port | 定义一个或者多个监听地址和端口 | |
stats auth admin:admin | 设置监控界面的用户名和密码 | |
stats refresh<number> | 统计页面刷新间隔时间 | |
option httplog | 使用http日志 | |
cookie<name> | 启用cookie的保持连接功能 | |
option forwardfor | 允许插入这种数据包头,可以让后端服务器获取客户端ip | |
option abortonclose | 负载高时,自动关闭处理时间长的请求 | |
option allbackups | 后端服务器宕机,是否激活全部备机,默认启动第一个备机 | |
option dontlognull | 不记录空连接日志,主要用于不记录健康检查日志 | |
option redispatch | 后端某个机器宕机,强制把请求转发给健康机器 | |
monitor-uri<URi> | 检查uri文件是否存在,依次判断主机的健康状态 | |
monitor-fail if site_dead | 服务器宕机时,返回503代码 | |
option httpchk<uri> | 使用http协议检查服务器健康状态 | |
retries<value> | 服务器连接失败后的重试次数 | |
timeout client | 客户端最大超时时间,单位毫秒 | |
timeout server | 服务器最大超时时间,单位毫秒 | |
timeout connect | 最大连接超时时间,单位毫秒 | |
default_backend | 默认后端服务器组 | |
use_backend | 当条件满足时,指定后端服务器组 | |
acl<name><criterion> | 定义访问控制列表 |
三 Haproxy实例部署
本例使用listen定义一个监控端口;
使用frontend定义一个前端80端口;
通过backend定义名为inside_servers 和 external_servers的服务器组;
使用default_backend定义默认服务器组external_servers;
external_servers包括web1.test.com和web2.test.com 两台服务器
inside_servers包含web3.test.com 一台服务器
服务器名称 | 网络配置 |
haproxy.test.com | eth0:10.10.10.10 |
eth1:192.168.1.2 | |
web1.test.com | eth0:192.168.1.3 |
web2.test.com | eth0:192.168.1.4 |
web3.test.com | eth0:192.168.1.5 |
1 首先配置web服务器
在web1 web2 web3上安装httpd并配置网卡
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.3
NETMASK=255.255.255.0
GATEWAY=192.168.1.2
ONBOOT=yes
TYPE=Ethernet
service network restart
yum install -y httpd
iptables -F
iptables -X
service iptables save
setenforce 0
sed -i s/enforcing/disabled/g /etc/sysconfig/selinux
echo "web1 192.168.1.3" > /var/www/html/index.html
service httpd restart
chkconfig httpd on
web2 web3机器上执行与web1相同步骤,注意修改部分参数
2 接着haproxy服务器配置
设置两块网卡
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.10.10.10
NETMASK=255.0.0.0
ONBOOT=yes
TYPE=Ethernet
vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=192.168.1.2
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
TYPE=Ethernet
service network restart
service iptables stop
内核调优,修改系统文件
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
配置日志文件,添加三行
vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
local3.* /var/log/haproxy.log
yum -y install gcc
wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.11.tar.gz
tar zxf haproxy-1.6.11.tar.gz -C /usr/src/
cd /usr/src/haproxy-1.6.11/
make TARGET=linux2628
make install
mkdir /var/haproxy
3 创建配置文件
vim /etc/haproxy.cfg
global
maxconn 4096
log 127.0.0.1 local3 info
chroot /var/haproxy
uid 99
gid 99
daemon
nbproc 1
pidfile /var/run/haproxy.pid
ulimit-n 65535
stats socket /var/tmp/stats
defaults
log global
mode http
maxconn 20480
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
option abortonclose
stats refresh 30
retries 3
balance roundrobin
cookie SRV
timeout check 2000ms
timeout connect 5000ms
timeout server 50000ms
timeout client 50000ms
listen admin_status #定义haproxy的监控界面
bind 0.0.0.0:6553
mode http
log 127.0.0.1 local3 info
stats enable
stats refresh 5s #监控页面自动刷新时间5s
stats realm Haproxy\ Statistics #登录监控页面提示符
stats uri /admin?stats #监控页面URL路径
stats auth admin:123456 #监控页面的账户密码
stats hide-version #隐藏haproxy版本
frontend web_service #定义前端服务器
bind 0.0.0.0:80
mode http
log global
option httplog
option httpclose
option forwardfor
#acl inside_src src 192.168.1.0/24 #定义acl
#use_backend inside_servers if inside_src #判断acl的源地址,把请求转发到inside_servers组
default_backend external_servers #默认服务器组
backend external_servers
mode http
balance roundrobin #轮询真实服务器
option httpchk GET /index.html #检查index文件,判断服务器是否健康
##定义后端真实服务器,向cookie中插入web1信息,check进行健康检查,检查时间间隔为2000ms,##连续两次健康则认为是正常开启的,连续三次检查失败则认为宕机,服务器权重1
server web1 192.168.1.3:80 cookie web1 check inter 2000 rise 2 fall 3 weight 1
server web2 192.168.1.4:80 cookie web2 check inter 2000 rise 2 fall 3 weight 1
#backend inside_servers
#mode http
#balance roundrobin #轮询真实服务器
#option httpchk GET /index.html #检查index文件,判断服务器是否健康
#server web3 192.168.1.5:80 cookie web3 check inter 2000 rise 2 fall 3 weight 1
4 启动haproxy服务
service rsyslog restart #重启系统日志服务
haproxy -f /etc/haproxy.cfg #启动haproxy服务
echo "/usr/local/sbin/haproxy -f /etc/haproxy.cfg" >> /etc/rc.local
5 测试验证
浏览器访问监控页面
在一个ip为10.10.10.100的机器上访问http://10.10.10.10:6553/admin?stats
多次刷新访问将得到web1和web2 不同页面信息
如果配置文件中开启使用inside_servers,则在192.168.1.0/24网段机器上访问http://192.168.1.2,服务器返回的会一直是web3的页面信息。
HAProxy负载均衡原理及企业级实例部署haproxy集群的更多相关文章
- Nginx进阶使用-负载均衡原理及配置实例
介绍 跨多个应用程序实例的负载平衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术.可以将Nginx用作非常有效的HTTP负载平衡器,以将流量分配到多个应用程序服务器,并使用N ...
- 干货 | Nginx负载均衡原理及配置实例
一个执着于技术的公众号 Nginx系列导读 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文件详解 理解正向代理与反向代理的区别 ...
- [转]Nginx负载均衡原理初解
什么是负载均衡 我们知道单台服务器的性能是有上限的,当流量很大时,就需要使用多台服务器来共同提供服务,这就是所谓的集群. 负载均衡服务器,就是用来把经过它的流量,按照某种方法,分配到集群中的各台服务器 ...
- [记录]HAproxy负载均衡配置教程
HAproxy负载均衡配置教程 一.简介 haproxy是一个开源的高性能负载均衡软件:支持双机热备.虚拟主机和图形化的管理界面,自带强大的对RS健康检查功能:支持TCP(四层).HTTP(七层)应用 ...
- LVS实现负载均衡原理
负载均衡集群是load balance 集群的简写.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备有F5.NetsNetscale.这里主要是学习lvs. === ...
- HAProxy详解(三):基于虚拟主机的HAProxy负载均衡系统配置实例【转】
一.基于虚拟主机的HAProxy负载均衡系统配置实例 1.通过HAProxy的ACL规则配置虚拟主机: 下面将通过HAProxy的ACL功能配置一套基于虚拟主机的负载均衡系统.这里操作系统环境为:Ce ...
- Nginx/LVS/HAProxy负载均衡软件的优缺点详解
PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...
- Nginx/LVS/HAProxy负载均衡软件的优缺点详解(转)
PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...
- Nginx/LVS/HAProxy负载均衡软件的优缺点详解(转)
PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...
随机推荐
- nm 命令 程序符号信息查看
http://www.cnblogs.com/wangkangluo1/archive/2012/07/02/2572438.html 用途 显示关于对象文件.可执行文件以及对象文件库里的符号信息. ...
- kafka delete topic
Don't think it is supported yet. Take a look at this JIRA tracking Delete Topic. For delete manually ...
- VB调用VC dll的返回方式
第一种类型:数值传递 注意:在VB中,默认变量传递方式为ByRef为地址,而传递值就是用ByVal,还要注意在C++中,int类型的变量是32位的,在VB中要用long型变量来配合.VC++部分: e ...
- This Handler class should be static or leaks might occur,Handler和Context使用的注意事项!
Android中.在使用到Handler的时候,假设按例如以下代码编写: private Handler handler; @Override public void onCreate(Bundle ...
- 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Wen. ...
- Linux对包管理阐述
Centos/Redhat/Fedora的软件包,都是rpm后缀的文件.包管理器rpm(Redhat packages manager) linux的哲学思想是简单命令解决复杂任务,因此每个软件的功 ...
- 转:一个多目录结构C程序的Makefile
来源: ChinaUnix博客 一个多目录结构的C程序Makefile,代码存在main init input output exit目录. CC = gcc RDIR = RelsMAIN_DIR ...
- iOS自定义从底部弹上来的View
概述 自定义蒙层弹起View,点击一下遮罩或界面上关闭按钮,页面会自动下去(从上向下) 详细 代码下载:http://www.demodashi.com/demo/10724.html 在一些少数据没 ...
- java随机函数使用方法Random
import java.util.Random; public class RandomNumber{ public static void main(String[] args) { // 使用ja ...
- 查看Windows端口及端口关闭方法(转)
摘自:http://www.hackbase.com/tech/2011-05-17/63766.html 查看Windows端口及端口关闭方法 一.查看已开放的端口: 1.借助系统自带MS-DOS命 ...