keepalived起初是专门为lvs设计的,用于对后端负载均衡集群做检测,之后又引入了vrrp链路冗余协议,以主备模式构成高可用集群。
脑裂:由于心跳检测线断开导致主备之间相互检测不到对方信息,就会都以为对方宕机而相互争抢资源,导致服务无法正常的运行。
keepalived构成:
core模块:用于配置文件的加载,启动
check模块:用于对后端做健康检查,包括通过,http,icmp,tcp等方式来确保后端服务器状态。
vrrp模块:会生成vrrpd进程,通过主备之间相互发送vrrp报文来确保相互之间的存活,当主设备宕机之后,备设备会立即接管主设备的资源来确保整个集群的正常运行。
服务部署:
两台主机分别下载keepalived软件,并且修改配置文件,形成主备设备,做成简单高可用集群
修改网卡ens160,设为master主设备。优先级改为100,修改vip
备份设备,将master改为slave备份,优先级改为80,其余与主设备相同。
测试:在集群启动后,vip首先会被绑定到master设备上(优先级高),在将master设备宕机后,vip或发生漂移,此时vip会漂移到备设备网卡上。由于keepalived默认是抢占模式,所以当msater设备上线后vip还会再次漂移到master设备上。
vrrp抢占和非抢占模
非抢占模式:
主设备与从设备都要配置nopreempt参数,在主设备宕机从并重启上线后主设备不会再次抢占资源
抢占模式:
keepalived默认是抢占模式,也就是主设备在重启重新上线后会恢复主设备身份,抢占资源
抢占延迟:
为了避免主设备上线后抢占资源。而导致网络波动,设置了抢占延迟时间,即使服务器上上线后在该时间内,仍然不会抢占备份设备的资源。
keepalived的双主架构
在单主模式的基础上,再次添加vrrp_instance VI_1模块。绑定不同的VIP,设定优先级。
keepalived+LVS实现高可用负载均衡集群:
使用双主架构分别实现mysql四层负载和nginx七层负载
配置nginx虚拟主机
virtual_server 192.168.79.200 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
real_server 192.168.79.146 80 {
weight 1
TCP_CHECK {
connect_timeout 5
retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.79.147 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
retry 3
delay_before_retry 1
}
}
}配置mysq虚拟主机
virtual_server 192.168.79.222 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
real_server 192.168.79.146 3306 {
weight 1
TCP_CHECK {
connect_timeout 5
retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 192.168.79.147 3306 {
weight 1
TCP_CHECK {
connect_timeout 5
retry 3
delay_before_retry 1
connect_port 3306
}
}
}
备份主机上与msater主机上配置一致 ,同时下载ipvsadm软件。在后端服务器上要配置nignx服务与mysql服务。
mysql服务:
root@rs1 ~]# vim /etc/my.cnf
server-id=1
[root@rs1 ~]# systemctl enable --now mariadb
[root@rs1 ~]# mysql -e "grant ALL on *.* to hx@'%' identified by 'hx';"
[root@rs1 ~]# mysql -ulee -plee -h192.168.79.146 -e 'select @@server_id;'
147后端服务器主机上将server-id改成2
测试访问:
keepalived和haproxy实现高可用负载均衡:
单主模式下使用脚本检测haproxy服务状态,用来实现VIP漂移。单主模式下只要master设备配置脚本检查
[root@localhost ~]# cat /b/test.sh
killall -0 haproxy
在配置文件里添加脚本检查模块
在haproxy配置文件里编辑前后端: