keepalive方式执行脚本作用优化
发布日期:2021-06-30 20:51:36 浏览次数:2 分类:技术文章

本文共 3128 字,大约阅读时间需要 10 分钟。

优化的前期准备环境基于博客

《keepalive服务高可用快速切换、keepalive方式执行脚本、实现双主配置》其中的keepalive方式执行脚本方式

使用脚本方式执行时,脚本配置如下:

[root@lb01 script]# cat /server/script/web_check.sh #!/bin/bash 	   web_info=$(ps -ef|grep -v grep|grep -c nginx) 	   if  [ $web_info -lt 2 ]	   then 	       systemctl stop keepalived 	   fi

这样的方式的弊端是,如果nginx修复好了,keepalive服务也不会将资源抢回来(因为keepalive服务已经停掉了)

如果使用权重的方式,就可以不让keepalive服务以停掉的方式让出vip。

如何利用权重值和优先级做运算(利用这种方式,可以防止nginx停止以后,自己又好了,但是keepalive服务不会自己启动的问题,如果是nginx停止以后,keepalive不是停止的方式进行切换而是根据权重值,让给备服务器,那么就可以在nginx服务恢复时,自动运算权重值,抢回资源)

情况一:关注weight设置是否为正数信息
a 加载脚本执行成功:脚本执行完返回值为 0 实际优先级 = 权重值 + 设置优先级
b 加载脚本执行失败:脚本执行完返回值非 0 实际优先级 = 设置优先级
应用在备服务器上(增加权重值)

情况二:关注weight设置是否为负数信息

a 加载脚本执行成功:脚本执行完返回值为 0 实际优先级 = 设置优先级
b 加载脚本执行失败:脚本执行完返回值非 0 实际优先级 = 设置优先级 - 权重值
应用在主服务器上(降低权重值)

但是我们在这里使用的效果是想让nginx停止以后,我们的优先级减低,所以我们只设置exit 1就行了。虽然讲了exit 0 的使用,但是我们在这里用不到的。因为我们只在一台上配置一种方式就可以

我这里在主keepalive上配置一种方式,采用负数的方式

编写的思路

主keepalive服务器中的nginx正常------优先级不变(初始设置主150 备100)
如果主keepalive服务器中的ngin挡掉,----返回值为非0-------降低优先级(-100)—变为50
从而实现vip地址飘向备keepalive服务器。

如果主的nginx服务又启动了,那么则返回值0—优先级不变(150)----vip地址又飘向主keepalive服务器。

主keepalive的配置文件:

[root@lb01 conf.d]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs {
router_id lb01}vrrp_script check_web {
script "/server/script/web_check.sh" interval 2 weight -100 }vrrp_instance VI_1 {
state MASTER interface eth0 virtual_router_id 51 priority 150 advert_int 1 authentication {
auth_type PASS auth_pass 1111 } virtual_ipaddress {
10.0.0.3 } track_script {
check_web}}

注意:上次我们配置双主配置时只在备keepalive上配置了一种监听不存在的10.0.0.3的方式,这次在主配置上也要配置(因为说不定什么时候keepalive的vip地址又从飘向服务器上,nginx就会发生启动不起来的情况)

出现的错误提示如下:

[root@lb01 conf.d]# nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: [emerg] bind() to 10.0.0.3:80 failed (99: Cannot assign requested address)nginx: configuration file /etc/nginx/nginx.conf test failed

解决方法

[root@lb01 conf.d]# echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf[root@lb01 conf.d]# sysctl -pnet.ipv4.ip_nonlocal_bind = 1

主配置的脚本信息

[root@lb01 conf.d]# cat /server/script/web_check.sh#!/bin/bash 	   web_info=$(ps -ef|grep -v grep|grep -c nginx) 	   if  [ $web_info -lt 2 ]	   then               exit 1           else              exit 0	   fi

备服务器的配置文件(备服务器不必编写判断脚本!)

前提是已经配置好了可以监听不存在时的vip地址10.0.0.3

[root@lb02 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs {
notification_email {
acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server smtp.162.com smtp_connect_timeout 30 router_id lb02}vrrp_instance VI_1 {
state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication {
auth_type PASS auth_pass 1111 } virtual_ipaddress {
10.0.0.3 }}

实验证明可以实现 nginx修复好以后,主keepalive服务器又自动抢回资源,可以不用人为启动keepalive服务。

是出现一点问题就是,一开始配置好以后,没有出现预期的效果,调试一段时间后,可以实现了(具体我也没改变哪些东西,就是我发出的这些配置,我也很郁闷一开始的配置和如今的配置没有区别,为啥一开始就没成功,现在成功了。)

转载地址:https://liushiya.blog.csdn.net/article/details/104420584 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:linux系统的日志管理和时间管理
下一篇:Linux中运行有时间限制的命令(timeout)

发表评论

最新留言

不错!
[***.144.177.141]2024年04月19日 16时03分07秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章