
1、说明
keepalived本身只是监控自身的进程是否挂掉,如果机器并没有挂机,只是nginx挂了,那么keepalived是不会做切换主备的,所以我们需要写个脚本来监控nginx进程是否存在。
2、上传脚本
上传脚本check_nginx.sh到/etc/keepalived目录。
#!/bin/bash# 如果进程中没有nginx则将keepalived进程kill掉A=`ps -C nginx --no-header |wc -l` ## 查看是否有 nginx进程 把值赋给变量Aif [ $A -eq 0 ];then ## 如果没有进程值得为 零service keepalived stop ## 则结束 keepalived 进程fi
设置check_nginx.sh脚本可执行权限:
chmod 755 check_nginx.sh 或者 chmod +x check_nginx.sh
如果执行脚本出错,需要使用dos2unix工具转化下格式:
安装dos2unix: yum -y install dos2unix
使用:dos2unix check_nginx.sh
3、修改keepalived.conf
3.1 定义监控脚本
vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh" ##监控脚本interval 2 ##时间间隔,2秒weight 2 ##权重}
3.2 在实例中加入启用监控
vrrp_instance VI_1 {state BACKUP #标示状态为MASTER 备份机为BACKUPinterface eth0 #设置实例绑定的网卡virtual_router_id 51 #同一实例下virtual_router_id必须相同priority 100 #MASTER权重要高于BACKUP 比如BACKUP为99advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒authentication { #设置认证auth_type PASS #主从服务器验证方式auth_pass 8888}virtual_ipaddress { #设置vip192.168.0.55 #可以多个虚拟IP,换行即可}track_script {check_nginx #监控脚本}}
4、keepalived.conf配置示例
! Configuration File for keepalived#全局配置global_defs {notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc #指定发件人#smtp_server 192.168.200.1 #指定smtp服务器地址#smtp_connect_timeout 30 #指定smtp连接超时时间router_id LVS_DEVEL #运行keepalived机器的一个标识}vrrp_instance VI_1 {state MASTER #标示状态为MASTER 备份机为BACKUPinterface eth0 #设置实例绑定的网卡virtual_router_id 51 #同一实例下virtual_router_id必须相同priority 100 #MASTER权重要高于BACKUP 比如BACKUP为99advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒authentication { #设置认证auth_type PASS #主从服务器验证方式auth_pass 1111}virtual_ipaddress { #设置vip192.168.0.55 #可以多个虚拟IP,换行即可}}#虚拟服务器 80端口的配置virtual_server 192.168.0.55 80 {delay_loop 6 #(每隔10秒查询realserver状态)lb_algo rr #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dhlb_kind DR #负载均衡转发规则NAT|DR|RUN#nat_mask 255.255.255.0 #掩码persistence_timeout 50 #会话保持时间(同一IP的连接60秒内被分配到同一台realserver)protocol TCP #使用的协议#实际服务器的IP和端口real_server 192.168.0.48 80 {weight 1 #默认为1,0为失效HTTP_GET { #使用http get检测方式url {path /index.html#digest ff20ad2481f97b1754ef3e12ecd3a9cc #http://192.168.0.48/index.html的digest值status_code 200 #http://192.168.0.48/index.html的返回状态码}connect_timeout 3 #连接超时时间nb_get_retry 3 #重连次数delay_before_retry 3 #重连间隔时间}}}
文章转载自棉花糖老丫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




