Keepalived是一个高性能的服务器高可用或热备解决方案,Keepalived主要用来防止服务器单点故障发生的问题,可以通过其与Nginix的配合来实现Web服务端的高可用。
关于安装Keepalived我这里就不介绍了,网上的一大堆,但是注意的是,一般我们会将Keepalived安装成系统服务。
下面最主要是keepalived的配置文件和检测nginx的脚本文件。我们现在做两个Nginx的高可用。
下面是Master的Keepalived.conf:
! Configuration File for keepalived
global_defs {
router_id hyf112 ##标识节点的字符串,通常为hostname
}
## keepalived 会定时执行脚本并且对脚本的执行结果进行分析,动态调整vrrp_instance的优先级。这里的权重weight 是与下面的优先级priority有关,如果执行了一次检查脚本成功,则权重会-20,也就是由100 - 20 变成了80,Master 的优先级为80 就低于了Backup的优先级90,那么会进行自动的主备切换。
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ##执行脚本位置
interval 2 ##检测时间间隔
weight -20 ## 如果条件成立则权重减20(-20)
}
## 定义虚拟路由 VI_1为自定义标识。
vrrp_instance VI_1 {
state MASTER ## 主节点为MASTER,备份节点为BACKUP
## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是eth0)
interface eth0
virtual_router_id 112 ## 虚拟路由ID号(主备要一致)
mcast_src_ip 192.168.1.112 ## 本机ip地址
priority 100 ##优先级配置(0-254的值)
Nopreempt ##
advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication {
auth_type PASS
auth_pass hyf ## 真实生产环境下对密码进行匹配
}
track_script {
chk_nginx ##vrrp_script
}
virtual_ipaddress {
192.168.1.110 ## 虚拟ip(vip),可以换行指定多个
}
}
Backup节点的keepalived.conf:
! Configuration File for keepalived
global_defs {
router_id hyf113
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP ##备节点
interface eth0
virtual_router_id 112 ##主备一致
mcast_src_ip 192.168.1.113
priority 90 ##优先级配置
advert_int 1
authentication {
auth_type PASS
auth_pass hyf
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.1.110
}
}
keepalived.conf需要注意的点:
1、首先关于优先级,减去权重后要能区分出哪个权重更高
2、vrrp_instance中的virutal_router_id,记得是主备一致,不然虚拟IP不按优先级分配
3、vrrp_instance中的advert_int,主备一定要一致
4、vrrp_instance中的interface是当前IP所在网络接口
检测Nginx脚本(主备一样):
1、先通过命令看nginx是否在启动中,
2、如果没启动就命令启动nginx,然后休眠2秒让足够时间启动nginx
3、再次通过命令查看nginx是否已经启动,如果还是没启动就直接kill掉keepalived
#!/bin/sh
A = `ps -C nginx --no-header | wc -l`
if [ $A -eq 0];then
/usr/local/nginx/sbin/nginx
sleep 2
if [`ps -C nginx --no-header | wc -l`];then
killall keepalived
fi
fi
测试:首先启动两台服务器的nginx和keepalived
1、看两台机器的ip a命令下谁有虚拟ip。很明显112的权重比113的权重大,虚拟ip必须在112机子上。
浏览器访问虚拟IP192.168.1.110:
2、停掉主节点112的keepalived,看是否会切换到113.
先用ip a命令看是否虚拟IP移到113机子上:
继续访问浏览器看看:
3、我们假如重新启动112机子的keepalived服务,可以发现nginx也被一起启动了,而且虚拟ip肯定是重新移到112机子上,因为112的权重是100,而113是90.
访问浏览器:
4、我们可以测试在nginx出现问题的情况下,实现切换,这个时候我们只需要把nginx的配置文件进行修改,让其变得不可用,然后强杀掉nginx进程即可,发现也会实现自动切换服务器节点。