Keepalived的所有功能是配置keepalived.conf文件来实现的,下面我们来配置keepalived.conf
一。 Master节点(192.168.43.129)配置 vi /usr/local/program/keepalived/etc/keepalived/keepalived.conf
! Configuration File for keepalived
#全局部分
global_defs {
notification_email {
admin@jstudio.org #设置报警邮件单个或多个地址
service@jstudio.org
manager@jstudio.org
}
notification_email_from monitor@jstudio.org #邮件的发送地址
smtp_server 192.168.200.1 #smtp 地址
smtp_connect_timeout 30 #连接smtp服务器的超时时间
router_id NODE_A #本节点的标识
}
## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。
## 如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少。
## 其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
## 检测 nginx 状态的脚本
vrrp_script chk_nginx {
script "/usr/local/program/keepalived/sbin/nginx_check.sh" # 检测 nginx 状态的脚本路径
interval 2 # 检测时间间隔
weight -20 # 如果条件成立,权重-20
}
## 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state MASTER # 指定A节点为主节点 备用节点上设置为BACKUP即可
interface eno16777736 # 绑定的网卡,我机器上是eno16777736,用ifconfig查看
virtual_router_id 51 # VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
mcast_src_ip 192.168.43.129 # 本机 IP 地址
priority 100 # 主节点的优先级(1-254之间),备用节点必须比主节点优先级低
nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 # 设定主备之间检查时间(组播信息发送间隔),两个节点设置必须一样
authentication { # 设置验证信息,两个节点必须一致
auth_type PASS # 设定验证类型
auth_pass 1111 # 设定密码
}
## 虚拟IP池, 两个节点设置必须一样
virtual_ipaddress { # 虚拟 ip,可以定义多个
192.168.43.120
}
## 将 track_script 块加入 instance 配置块
track_script {
chk_nginx ## 执行 Nginx 监控的服务
}
}
email通知(notification_email、smtp_server、smtp_connect_timeout):用于服务有故障时发送邮件报警,可选项,不建议用。需要系统开启sendmail服务,建议用第三独立监控服务,如用nagios全面监控代替。
二。 Slave节点(192.168.43.130)配置 vi /usr/local/program/keepalived/etc/keepalived/keepalived.conf
! Configuration File for keepalived
#全局部分
global_defs {
notification_email {
admin@jstudio.org #设置报警邮件单个或多个地址
service@jstudio.org
manager@jstudio.org
}
notification_email_from monitor@jstudio.org #邮件的发送地址
smtp_server 192.168.200.1 #smtp 地址
smtp_connect_timeout 30 #连接smtp服务器的超时时间
router_id NODE_B #本节点的标识
}
## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。
## 如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少。
## 其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
## 检测 nginx 状态的脚本
vrrp_script chk_nginx {
script "/usr/local/program/keepalived/sbin/nginx_check.sh" # 检测 nginx 状态的脚本路径
interval 2 # 检测时间间隔
weight -20 # 如果条件成立,权重-20
}
## 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state BACKUP # 指定B节点为备用节点 主节点上设置为MASTER即可
interface eno16777736 # 绑定的网卡,我机器上是eno16777736,用ifconfig查看
virtual_router_id 51 # VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
mcast_src_ip 192.168.43.130 # 本机 IP 地址
priority 80 # 主节点的优先级(1-254之间),备用节点必须比主节点优先级低
nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 # 设定主备之间检查时间(组播信息发送间隔),两个节点设置必须一样
authentication { # 设置验证信息,两个节点必须一致
auth_type PASS # 设定验证类型
auth_pass 1111 # 设定密码
}
## 虚拟IP池, 两个节点设置必须一样
virtual_ipaddress { # 虚拟 ip,可以定义多个
192.168.43.120
}
## 将 track_script 块加入 instance 配置块
track_script {
chk_nginx ## 执行 Nginx 监控的服务
}
}
三。 编写 Nginx 状态检测脚本 /usr/local/program/keepalived/sbin/nginx_check.sh ( 在keepalived.conf配置中被keepalived调用)
#!/bin/bash
nginx_state=`ps -C nginx --no-header | wc -l`
if [ $nginx_state == 0 ];then
/home/zsg/program/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` == 0 ];then
killall keepalived
fi
fi
四。启动 Keepalived
# service keepalived start
Starting keepalived: [ OK ]
[root@zk-02 conf]# ps -ef|grep keepalived
root 7901 1 0 17:13 ? 00:00:00 /usr/local/program/keepalived/sbin/keepalived -D -f /usr/local/program/keepalived/etc/keepalived/keepalived.conf
root 7902 7901 0 17:13 ? 00:00:00 /usr/local/program/keepalived/sbin/keepalived -D -f /usr/local/program/keepalived/etc/keepalived/keepalived.conf
root 7903 7901 0 17:13 ? 00:00:00 /usr/local/program/keepalived/sbin/keepalived -D -f /usr/local/program/keepalived/etc/keepalived/keepalived.conf
root 7911 3035 0 17:14 pts/0 00:00:00 grep --color=auto keepalived
我们在master节点(192.168.43.129)上输入命令
# ip add
可以看到网卡绑定了虚拟ip 192.168.43.120
五。Keepalived 服务管理命令:
停止:service keepalived stop
启动:service keepalived start
重启:service keepalived restart
查看状态:service keepalived status