haproxy是一个开源的,高性能的,负载均衡软件,借助haproxy可以快速,可靠的构建一个负载均衡群集。
优点如下:
1、可靠性和稳定性非常好,可以和硬件级的负载均衡设备F5相媲美。
2、最高可同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个。
3、支持8种负载均衡算法,支持回话保持。
4、支持虚拟主机功能。
5、支持连接拒绝,全透明代理并且有一个功能强大的服务器状态监控界面。
6、拥有功能强大的ACL支持。
haproxy真的很强大。这里不对他的功能一样一样展示,读者可自行去网上了解其他功能。
用haproxy构建群集的时候,比如后方代理两个http,如果haproxy宕机,后方的http正常运行网站也是瘫痪状态,这就造成了单点故障。
解决方案是什么呢?
这时keepalived就登场了!
keepalived基于vrrp协议,两台主机之间生成一个虚拟的ip,我们称漂移ip,漂移ip由主服务器承担,一但主服务器宕机,备份服务器就会抢占漂移ip,继续工作,有效的解决了群集中的单点故障。
--------------------------------------------------------------------------------------------------------------------------
让haproxy监听keepalived的漂移ip工作,一但haproxy宕机,备份抢占漂移ip继续承担着代理的工作。
有人问过我一个问题,两台keepalived应该是主服务器性能好一点还是备份服务器性能好一点呢,当时我毫不犹豫的说当然是主的性能更好,这个问题的答案是应该是备份的服务器性能更好一点才对。为什么呢?
如果你的主服务器承担不了网站的访问量,宕机了 ,备份服务器接管主服务器的工作,如果备份服务器还没有主服务器性能好过不了多久也会再次宕机!!
这里就不考虑后方的数据库,监控,缓存等等一些东西了,就以两个http上面都是html文件 测试整体的高可靠性。
----------------------------------------------------------------------------------------------------------------------
环境 centos7.3
主haproxy 192.168.43.31
备haproxy 192.168.43.32
HTTP1 192.168.43.33
HTTP2 192.168.43.34
漂移ip 192.168.43.100
1,构建keepalived
备份服务器的配置信息
yum install -y keepalived vi /etc/keepalived/keepalived.conf global_defs { #这里关于邮箱的都删掉了现在用不到。 smtp_connect_timeout 30 #连接超时时间 router_id LVS_DEVEL01 #相当于给这个服务器起个昵称 } vrrp_instance VI_1 { state MASTER #定义为主服务器 interface ens32 #承载漂移ip的网卡 7的系统 ens开头 virtual_router_id 51 #定义一个热备组,可以认为这是51号热备组 priority 100 #主服务器优先级要比备服务器高 advert_int 1 #1秒互相通告一次,检查对方死了没。 authentication { auth_type PASS #认证类型 auth_pass 1111 #认证密码 这些相当于暗号 } virtual_ipaddress { 192.168.43.100 #漂移ip } }
备份服务器的配置信息
global_defs { smtp_connect_timeout 30 router_id LVS_DEVEL02 #两个服务器不能一样 } vrrp_instance VI_1 { state BACKUP #备份服务器 是backup interface ens32 virtual_router_id 51 priority 90 #优先级要低 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.43.100 #漂移ip } }
systemctl stop NetworkManager 两边都关掉 不然有影响。 systemctl start keepalived #开启keepalived服务 ip a 可以看到漂移ip 在主服务器上
备服务器上面没
关掉主的network服务,模拟故障
可以看到已经漂移到了备份服务器
2,构建haproxy服务器 haproxy的包可以去官网下载
https://www.haproxy.org/download/1.7/src/
这里使用的1.7的haproxy
如果使用的最小化安装,需要安装一下gcc环境
yum install -y gcc gcc-c++
[root@localhost haproxy-1.7.9]# make TARGET=linux2628 PREFIX=/usr/local/haproxy [root@localhost haproxy-1.7.9]# make install PREFIX=/usr/local/haproxy TARGET=linux2628,内核版本大于2.6.28的使用linux2628 [root@localhost haproxy-1.7.9]# cp examples/haproxy.init /etc/init.d/haproxy #启动脚本 [root@localhost haproxy-1.7.9]# chmod +x /etc/init.d/haproxy [root@localhost haproxy-1.7.9]# cp /usr/local/haproxy/sbin/haproxy /usr/sbin/ #启动脚本里要用 [root@localhost haproxy-1.7.9]# useradd haproxy -s /sbin/nologin [root@localhost haproxy-1.7.9]# mkdir /etc/haproxy #配置文件需要自己创建 [root@localhost haproxy-1.7.9]# vi /etc/haproxy/haproxy.cfg #vi自己添加配置内容 下面是配置内容,两个haproxy可以一样
global log 127.0.0.1 local3 info user haproxy group haproxy daemon maxconn 4000 defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 frontend http_front bind 192.168.43.100:80 #haproxy的状态管理页面,通过/haproxy?stats来访问 stats uri /haproxy?stats default_backend http_back backend http_back balance roundrobin option httpchk GET /index.html option forwardfor header X-Forwarded-For server node1 192.168.43.33:80 check inter 2000 rise 3 fall 3 weight 30 server node2 192.168.43.34:80 check inter 2000 rise 3 fall 3 weight 30
解析--------------------------------------------------
global log 127.0.0.1 local3 info 用127.0.0.1上的rsyslog服务中的local3设备记录日志,日志级别为info user haproxy 用户 group haproxy 组 daemon 以守护进程的方式运行 maxconn 4000 最大并发连接数 defaults log global 表示用global模块中定义的日志配置 mode http 模式 使用http模式 option httplog 默认haproxy日志,不记录http请求,开启记录http请求 option dontlognull 保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。 timeout connect 5000 成功连接一台服务器最长等待时间 单位毫秒 timeout client 50000 连接客户端最长等待时间 单位毫秒 timeout server 50000 服务器回应客户端最长等待时间 单位毫秒 frontend http_front bind 192.168.43.100:80 监听本服务器 192.168.43.100的ip 80端口 stats uri /haproxy?stats haproxy的状态管理页面,通过/haproxy?stats来访问 default_backend http_back 定义一个服务器组 http_back backend http_back balance roundrobin 轮询 option httpchk GET /index.html 启动http的健康检查 option forwardfor header X-Forwarded-For 设置后端服务器可以看到客户端ip 访问日志中 server node1 192.168.43.33:80 check inter 2000 rise 3 fall 3 weight 30
server node2 192.168.43.34:80 check inter 2000 rise 3 fall 3 weight 30
后端服务器昵称node1
ip和端口
check 关键字
inter 健康检查间隔 2000毫秒
rise 检测 3次 认为正常
fall 检测3次认为失败
weight 权重 30
注意 这里监听了漂移ip
--------------------------------------------------------
两个haproxy配置可以一样
下面启动haproxy
如果遇到启动不成功看系统日志排错。一般是配置文件有问题
-----------------------
备服务器会报错 因为监听了漂移ip 但是备服务器上没漂移ip
解决方法
vi /etc/sysctl.conf 添加
net.ipv4.ip_nonlocal_bind = 1 忽略监听ip的检查
sysctl -p
----------------------------------------
server node1 192.168.43.33:80 check inter 2000 rise 3 fall 3 weight 30
server node2 192.168.43.34:80 check inter 2000 rise 3 fall 3 weight 30
配置文件中指定的后面的两台web服务器就不演示了 保证可以互相通信 网站可以访问就可以。
测试效果---------------------------------------
访问漂移ip 可以看到haproxy的代理效果
关掉主服务器的network服务模拟故障,漂移ip由备份服务器承担 ,继续工作