ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

keepalive安装部署踩坑参考

2020-09-04 14:31:20  阅读:494  来源: 互联网

标签:脚本 script 部署 参考 keepalived VIP vrrp notify keepalive


之前就想写一个关于keepalive的,但因为网上的资料很多,想算了。后来自己又操作了一下,觉得还是自己写得用起来方便。

目录

安装:

下载keepalived最新源码包:

https://www.keepalived.org/download.html

安装方法一:

./configure
make
make install

安装方法二:

源码包中自带spec,使用rpmbuild -bb命令,把包编译成rpm然后给服务器安装。
安装命令:

rpm -ivh keepalived-2.1.5-1.el7.x86_64.rpm

安装方法三:

直接用"yum -y install keepalived"安装,但这样安装的包不是最新版本也勉强能用。

配置及启停

配置

! Configuration File for keepalived

vrrp_script check_ngx_alive {
    script "/etc/keepalived/check_ngx_alive.sh"  # 状态检测脚本
    interval 2   # 状态检测时间间隔
    weight -10   # 当状态检测脚本返回非0值时当前节点priority在设置值基础上降低多少
}
global_defs {
   notification_email {
     #acassen@firewall.loc
     #failover@firewall.loc
     #sysadmin@firewall.loc
   }
   #notification_email_from Alexandre.Cassen@firewall.loc
   #smtp_server 192.168.200.1
   #smtp_connect_timeout 30
   router_id LVS_DEVEL_112   # 保证名称唯一
   script_user root          # 指定脚本运行的用户
   enable_script_security    
   #vrrp_skip_check_adv_addr
   #vrrp_strict
   #vrrp_garp_interval 0
   #vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface ens32      #发vrrp包的接口,可以选择一对专用接口做心跳线
    virtual_router_id 51
    priority 112         #优先级,keepalived会根据优先级判断是主是从
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {   # 设置VIP
        192.168.15.110/24 dev ens32   # 还可以设置得更复杂一点如"192.168.1.33/24 brd 192.168.1.255 dev eno1 label eno1:1",如果不指定王凯,就绑定到interface配置的接口
    }
    track_script {        # 设置检测脚本
        check_ngx_alive   # vrrp_script上面定义的检测脚本的名称
    }
	notify_master "/etc/keepalived/arp_update.sh"   # 变成主节点后执行的脚本
	notify_backup "/etc/keepalived/notify.sh backup" #同理,变成bakup时执行的脚本
	notify_fault  "/etc/keepalived/notify.sh fault"  
	preempt_delay 3  # 变成主节点后多长时间抢占VIP,如果不需要切换可直接写nopreempt
}

virtual_server 192.168.15.110 8034 { # LVS的相关配置
    delay_loop 6    # 每隔6秒查询realserver状态
    lb_algo rr      # lvs的调度算法
    lb_kind DR      # lvs的集群模式
    persistence_timeout 50  #指定时间内来自同一Client的请求会被发送到同一个RealServer
    protocol TCP   

    real_server 192.168.15.112 8034 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 1554
        }
    }
}

启停

systemctl start keepalived     #启动
systemctl stop keepalived      #停止
systemctl restart keepalived   #重启
systemctl status keepalived    #查看状态

脚本参考

check_ngx_alive.sh

if [ `ps aux | grep nginx | grep -v grep | wc -l` -eq 0 ];then
    exit 1
fi
exit 0

keepalive.conf

! Configuration File for keepalived

vrrp_script check_ngx_alive
{
    script "/etc/keepalived/check_ngx_alive.sh"
    interval 2
    weight -30
    user root
}
global_defs {
   notification_email {
     #acassen@firewall.loc
     #failover@firewall.loc
     #sysadmin@firewall.loc
   }
   router_id LVS_DEVEL_112
   script_user root
   enable_script_security
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens32
    virtual_router_id 51
    priority 112
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.15.110/24 dev ens32
    }
    track_script {
        check_ngx_alive
    }
    notify_master "/etc/keepalived/arp_update.sh"
    #nopreempt
    preempt_delay 3
}

验证及结果

场景1 双机热备

使用keepalive做主备有两种方法
前提:主priority + 主vrrp_script.weight < 备priority (注:vrrp_script.weight是一个负数)
方法一:
主设置nopreempt,state:MASTER,vrrp_script指定的脚本中,当服务不存在时执行"systemctl stop keepalived"
方法二:
两个节点都设置为"preempt_delay 3,state:BACKUP",vrrp_script指定的脚本中不需要停止keepalive

场景2 冷备

配置方法:
两个节点都设置为"preempt_delay 3,state:BACKUP",vrrp_script指定的脚本中不需要停止keepalive
主priority > 备priority; 主priority + 主vrrp_script.weight < 备priority + 备vrrp_script.weight
备的notify_master脚本中添加启动服务的命令;在备机中,服务最初处于关闭状态.

原理描述:当主上的服务挂掉之后,主priority小于备机的priority,备机变成master,触发备机的notify_master脚本,此时备机上的服务被开启,备机的优先级升高。

遇到的问题和解决方法

1. vrrp_script不执行;

答:(1)先用"tail -f /var/log/message"查看报了什么错。
(2)赋予脚本权限 chmod 755 xxx.sh,记住一定要是755.
(3)手动执行脚本,看脚本是否正常执行;(后来发现,如果用 echo "$(date)" >> xxx.log的方式判断是否执行判断不出来,好像echo已经被屏蔽了一样。但是脚本确实已经执行了,从启停服务上看是正常的.)
(4)脚本的名称问题,比如叫"check_nginx_status.sh"结果脚本里判断条件是"ps -ef | grep nginx | grep -v grep | wc -l -eq 2",这时候会导致运行脚本的进程会被算到ps的统计里面去,导致脚本执行不准;

2.notify_master等脚本不生效的问题;

答:首先查看是否打开了SELINUX;

getenforce

如果是,那有几种办法:
(1)关掉SELINUX

setenforce 0   #临时关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config #重启后永久生效

(2)赋予脚本安全执行权限;

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

3.如何判断VIP是否漂移?

方法一:在服务器上使用"ip addr"命令,查看VIP在哪台上,就是漂移到哪台上了。
方法二:查看/var/log/message日志
方法三: 在其他终端上ping以下VIP,然后用"arp -a"命令查看vip对应的MAC地址是哪个就是哪个了。

4.VIP漂移很慢的问题;

答:这个也没有什么好办法,可以用下面的脚本试试;就是用arping更新arp信息,写在notify_master脚本中;

VIP=192.168.15.110
GATEWAY=192.168.15.253
/sbin/arping -I ens32 -c 5 -s $VIP $GATEWAY &>/dev/null

不知道在你的环境中是怎样的,我测试的结果是失败的。在同网段不管用不用arping VIP漂移都是实时生效的,但是跨网段很长时间都是连接异常。
网关的arp列表有时候迟迟不刷新,有时候刷新了还是连接不上,折腾了一阵还是没有解决。
难道是需要路由器开启VRRP协议?理论上是不需要的,路由器的VRRP协议是为了备份路由的,好像和KeepAlive没有管理。因为家用路由器没那选项,公司的路由器还没试过。有条件的同学可以尝试一下:
参考地址:https://www.cisco.com/c/en/us/support/docs/security/vpn-3000-series-concentrators/7210-vrrp.html
如果成功了记得回复我一下。

标签:脚本,script,部署,参考,keepalived,VIP,vrrp,notify,keepalive
来源: https://www.cnblogs.com/bugutian/p/13613673.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有