本文共 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上配置一种方式,采用负数的方式
编写的思路
:
如果主的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
备服务器的配置文件(备服务器不必编写判断脚本
!)
[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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!