keepalived作用
Keepalived 是一款轻量级HA集群应用,它的设计初衷是为了做LVS集群的HA,即探测LVS健康情况,从而进行主备切换,不仅如此,还能够探测LVS代理的后端主机的健康状况,动态修改LVS转发规则。
举个例子,我们经常用nginx作反向代理负载均衡,通过nginx将客户端请求用轮询方式或者其他方式发送给后端的tomcat服务器。即使后面一台tomcat挂了以后还有其他tomcat可以提供服务。但是当nginx挂了怎么办 ???
所以使用keepalived可以保证nginx的高可用,他能监控nginx的健康状态,当nginx出现宕机时自动主备切换
高可用架构图
image.png
1.两台ngxin分别是128,129 同时作为tomcat的反向代理,128为主,129为备
2.分别在两台nginx上加上keepalived,并设置vip为192.168.199.131
3.用户通过访问192.168.199.131,根据配置上的优先级先将请求发往128,当128挂了以后,通过keepalived上的监控脚本监控nginx宕机,并将128的优先级降低,129作为主机
keepalievd安装
# 使用yum直接安装
yum install -y keepalived
#安装成功后在ect目录下会有对应的配置文件keepalived.conf
[root@server-2 ~]# cd /etc/keepalived/
[root@server-2 keepalived]# ls
keepalived.conf nginx_check.sh
安装nginx
https://www.runoob.com/w3cnote/openresty-intro.html
启动128 129
image.png
image.png
配置keepalived和监控脚本
修改keepalived.conf
192.168.199.128
! Configuration File for keepalived
global_defs {
router_id keep128
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
#执行脚本的周期 2秒钟检查一次
interval 2
#当检查到nginx挂后,优先级-20,让129成为主
weight -20
}
vrrp_instance VI_1 {
state MASTER
#eth0 对应的网卡,如果网卡名称不是这个需要跟网卡命名一致
interface eth0
virtual_router_id 128
mcast_src_ip 192.168.199.128
#优先级
priority 100
#重启后还是主节点
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
#vip-虚拟ip
192.168.199.130
}
}
192.168.199.129
! Configuration File for keepalived
global_defs {
router_id keep129
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
#执行脚本的周期 2秒钟检查一次
interval 2
#当检查挂掉后权重-20使其能成为主节点
weight -20
}
vrrp_instance VI_1 {
state BACKUP
#eth0 对应的网卡,如果网卡名称不是这个需要跟网卡命名一致
interface eth0
virtual_router_id 129
mcast_src_ip 192.168.199.129
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
#vip-虚拟ip
192.168.199.130
}
}
检查脚本 nginx_check.sh
当检测到nginx为空时,杀掉keepalived进程
#!/bin/bash
A=`ps -C nginx -no-header |wc -l`
if [$A -eq 0]; then
/usr/local/openresty/nginx/sbin
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ]; then
killall keepalived
fi
fi