环境:centos7.6 最小化安装
主:10.11.1.32
从:10.11.1.33
VIP:10.11.1.130
修改主节点主机名:
hostnamectl set-hostname web_balance_01
修改从节点主机名:
hostnamectl set-hostname web_balance_02
一、安装nginx(两个节点都需要安装)
配置官方nginx源
1cat /etc/yum.repos.d/nginx.repo 2[nginx] 3name=nginx repo 4baseurl=http://nginx.org/packages/centos/7/$basearch/ 5gpgcheck=0 6enabled=1
yum方式安装nginx
yum install nginx
二、安装keepalived(两个节点都需要安装)
安装环境依赖
yum -y install libnl libnl-devel
下载keepalived包,并解压
1cd /tmp 2wget https://www.keepalived.org/software/keepalived-2.0.19.tar.gz 3tar -xf keepalived-2.0.19.tar.gz
编译安装
1./configure --prefix=/usr/local/keepalived 2make -j2 3make install
拷贝启动脚本至/etc/init.d/目录下
1cd /tmp/keepalived-2.0.19 2cp keepalived/etc/init.d/keepalived /etc/init.d/ 3 4cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 5mkdir /etc/keepalived 6cp etc/keepalived/keepalived.conf /etc/keepalived/
四、修改主节点keepalived.conf配置文件
1cd /etc/keepalived/ 2cp -r keepalived.conf keepalived.conf_bak 3vi keepalived.conf
主节点keepalived.conf配置如下:
1! Configuration File for keepalived 2 3global_defs { 4 router_id web_balance_01 #标识本节点的名称,通常为hostname 5} 6 7## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。 8##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0, 9##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。 10 11vrrp_script chk_nginx { 12 script "/etc/keepalived/nginx_check.sh" 13 interval 2 #每2秒检测一次nginx的运行状态 14 weight -20 #失败一次,将自己的优先级-20 15} 16 17vrrp_instance VI_1 { 18 state MASTER # 状态,主节点为MASTER,备份节点为BACKUP 19 interface enp175s0f0 # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口 20 virtual_router_id 51 #虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址 21 mcast_src_ip 10.11.1.32 # 本机IP地址 22 priority 100 # 节点优先级,值范围0~254,MASTER要比BACKUP高 23 advert_int 1 # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒 24 nopreempt #非抢占模式使用 25 26 # 设置验证信息,两个节点必须一致 27 authentication { 28 auth_type PASS 29 auth_pass 1111 30 } 31 32 # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个 33 virtual_ipaddress { 34 10.11.1.130 35 } 36 37 track_script { 38 chk_nginx # nginx存活状态检测脚本 39 } 40}
从节点keepalived.conf配置如下:
1! Configuration File for keepalived 2 3global_defs { 4 router_id web_balance_02 #标识本节点的名称,通常为hostname 5} 6 7## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。 8##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0, 9##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。 10 11vrrp_script chk_nginx { 12 script "/etc/keepalived/nginx_check.sh" 13 interval 2 #每2秒检测一次nginx的运行状态 14 weight -20 #失败一次,将自己的优先级-20 15} 16 17vrrp_instance VI_1 { 18 state BACKUP # 状态,主节点为MASTER,备份节点为BACKUP 19 interface enp175s0f0 # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口 20 virtual_router_id 51 #虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址 21 mcast_src_ip 10.11.1.33 # 本机IP地址 22 priority 90 # 节点优先级,值范围0~254,MASTER要比BACKUP高 23 advert_int 1 # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒 24 nopreempt #非抢占模式使用 25 26 # 设置验证信息,两个节点必须一致 27 authentication { 28 auth_type PASS 29 auth_pass 1111 30 } 31 32 # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个 33 virtual_ipaddress { 34 10.11.1.130 35 } 36 37 track_script { 38 chk_nginx # nginx存活状态检测脚本 39 } 40}
五、创建nginx存在状态检测脚本(两个节点都需要创建)
1cd /etc/keepalived 2more nginx_check.sh 3#!/bin/bash 4A=`ps -C nginx --no-header | wc -l` 5if [ $A -eq 0 ];then 6 systemctl restart nginx #尝试重新启动nginx 7 sleep 2 #睡眠2秒 8 if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then 9 killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点 10 fi 11fi
添加脚本执行权限
chmod +x /etc/keepalived/nginx_check.sh
六、依次启动主节点和从节点上的nginx和keepalived服务
1systemctl start nginx 2systemctl enable nginx 3systemctl start keepalived 4systemctl enable keepalived
七、在主节点上查询VIP绑定状态

八、停止任意节点的nginx服务,检查keepalived 是否会通过脚本自动启动nginx服务

九、停止主节点的keepalived服务可以看到VIP已经绑定到从节点上

