但这样的话有没有发现所有请求都经过了HAproxy代理,自然当并发量越来越高时HAproxy就成了瓶颈,突发时HAproxy就会挂掉,或HAproxy服务器出现故障,这时外部唯一的请求入口没有了,怎么办?重启是个办法,但还是需要抢修时间,这期间内客户都无法访问损失的锅又得程序猿来背。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuYzY2UGZhZmYjVGM0QGM3IzNkVDOiZ2MihDO5AzYmFDMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
这种情况下备胎出现了, Keepalived登场,他可以解决服务宕机自动无缝切换。
Keepalived采用VRRP(virtual router redundancy protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案——由多台路由器组成一个热备组。通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失败,其他服务器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。 keepalived 默认需要使用D类多播地址224.0.0.18 进行心跳通信 keepalived 使用vrrp协议(虚拟路由冗余协议)进行通信(协议号码为112)
Keepalived也可以与LVS、Nginx、MySQL等结合使用,形成可靠的主备机,给了你宝贵的抢修时间。
下面来讲如何一步步搭建。
CentOS6.X
HAProxy 1.7.3
Keepalived 1.3.4
用root用户安装
若在线安装不用下载,可直接通过yum命令安装(建议),不过需要联网。
去官网下载 :http://www.keepalived.org/software/keepalived-1.3.4.tar.gz
下载后放进CentOS中的/usr/local/ 文件夹中
分两种:
1、在线装:yum install -y ipvsadm keepalived (建议)
2、安装包;
此处按照下载好的安装包操作:
在此之前还需要设置主备机的时间一致,可用ntpdate向时间服务器同步,具体的方法有时间再详细说明。
修改keepalived.conf文件配置
具体配置内容:
说明:
因为Keepalived在转换状态时会依照状态来呼叫: 当进入Master状态时会呼叫notify_master 当进入Backup状态时会呼叫notify_backup 当发现异常情况时进入Fault状态呼叫notify_fault 当Keepalived程序终止时则呼叫notify_stop
配置中notify.sh:
配置内容:
其中chk_haproxy.sh
添加内容:
将以上三个文件全部更改后 复制一份到备机;注意根据上述高亮描述进行更改。(非常重要)
还要给chk_haproxy.sh和notify.sh执行脚本的权限。
配置完后进行启动keepalived 和haproxy,主备机均要启动:
service keepalived start
其它命令:
down掉主机的haproxy,查看haproxy监控访问VIP:192.168.80.32:8089/stats,看haproxy的ID是否有变化,然后重启主机的haproxy,再看haproxy的ID是否有变化。
执行ip a查看VIP在两台机子上有变化
虚拟IP必须与master 和 备机 在同一网段,经测试若虚拟IP与他们不在同一网段访问不了VIP。
防止keepalived互抢IP的办法,这个也有网有提出过,有相应的方法。
主备机互作主备,即主机也是备机,可以做配置多个实例来实现。
有网友测试出Keepalived限制死20个VIP问题,那这个是怎么解决的。