Keepalived教程
环境
环境准备
# 安装必要依赖包
yum -y install libnl libnl-devel libnfnetlink-devel
# 下载keepalived包(1.3.4)
wget https://www.keepalived.org/software/keepalived-1.3.4.tar.gz
安装
安装配置
# 解压
tar -zxvf keepalived-1.3.4.tar.gz
# 进入文件夹
cd keepalived-1.3.4
# 执行
./configure --prefix=/usr/local/keepalived --sysconf=/etc
# 编译安装
make
make install
配置Keepalived.conf文件
文件配置
vrrp_instance VI_1 {
state MASTER
interface eth0 //配置本机IP地址名称,需变更本机ip网卡名称
virtual_router_id 51 //路由组id,一般不变
priority 200 //权重值,越大比重越高
advert_int 1
authentication { //安全认证,不变
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { //虚拟地址,一般一个IP即可
192.168.101201
# 192.168.200.17
# 192.168.200.18
}
}
启动
启动查看效果
keepalived启动之后,会出现已经配置的ip
浏览器访问,可以成功
防软件故障问题处理
keepalived 监控服务软件
创建监控脚本
#!/bin/bash
#统计 nginx 进程是否存在
A=`ps -C nginx --no-header |wc -l`
#为 0, 表明 nginx 停止了
if [ $A -eq 0 ];then
#尝试重启 nginx
/usr/local/nginx/sbin/nginx
#nginx 重启失败, 则 keepalived 自杀, 进行 VIP 转移
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
#杀掉, vip 就漫游到另一台机器
killall keepalived
fi
fi
配置脚本
# 心跳检测脚本
vrrp_script chk_keepalived_sh {
# 心跳检测脚本地址
script "/etc/keepalived/monitor_keepalived.sh"
# 检测脚本的执行时间
interval 2
weight 2
}
# 检测调用脚本
track_script {
chk_keepalived_sh
}
重启keepalived查看效果
可以看出来,nginx自动启动了
Keepalived一组多从配置
131机器
131机器配置为nginx-a.html页面
keepalived.conf中权重配置为200 :priority 200
访问页面情况
132机器
132机器配置为nginx-b.html页面
keepalived.conf中权重配置为100 :priority 100
访问页面情况
VIP成功漂移
如上图所示,131权重比132机器权重值大,那么131机器就为master,
而132为backup,若先启动从机,再启动主机,那么vip就会漂移到主机去
Keepalived权重失效
问题描述
机器131权重值比重大,理论为master,
机器132权重值比重小,理论为backup,
机器131、132先后顺序开启keepalived,那么两台机器都会出现VIP,
并且权重值失效,浏览器访问的Nginx为后启动机器。
抓包验证
# 抓包命令
tcpdump -i eth0 vrrp -n
问题解决
firewall
# 开启vrrp 协议,主备都运行下面的命令
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
# 重启防火墙
firewall-cmd --reload
iptables
# master
-A INPUT -i em1 -p vrrp -s 192.168.101.131 -j ACCEPT #(192.168.101.131 主机IP)
# backup
-A INPUT -i em1 -p vrrp -s 192.168.101.132 -j ACCEPT #(192.168.101.132 从机IP)
# 重启防火墙
service iptables restart