目录

一、项目背景:

负载均衡器包含了:

如果负载均衡器上的nginx出现了程序问题,keepalived是否还有价值?

 程序解析:

二、项目简介:

三、实例:

监控本机的nginx是否运行,如果nginx进程不运行,就立马降低本机的优先级30,并观察vip是否发生漂移

1、编写监控nginx的脚本

2、在keepalived.conf文件里面定义监控脚本

3、在keepalived里调用监控脚本

4、通过tcpdump来查看对应的vip 和 其中的优先级

四、keepalived的一些其他功能:

1、notify_master

2、notify_backup        

实现:如果检查到nginx进程关闭,立马关闭keepalived的服务软件

3、notify_stop

五、参考文章:


一、项目背景:

keepalived 一键部署 keepalived 执行脚本_运维

负载均衡器包含了:

        1、nginx  --》实现负载均衡

        2、keepalived  --》实现高可用 HA

如果负载均衡器上的nginx出现了程序问题,keepalived是否还有价值?

        keepalived的价值是建立在nginx能正常工作的情况下的,如果nginx出现异常,这台机器就不是负载均衡器了,需要停止它的master角色的身份,会将它的优先级降低,让位给其他的机器。所以它的背后就需要一个健康检测系统。

 程序解析:

keepalived 一键部署 keepalived 执行脚本_运维_02

二、项目简介:

keepalived 一键部署 keepalived 执行脚本_运维_03

三、实例:

监控本机的nginx是否运行,如果nginx进程不运行,就立马降低本机的优先级30,并观察vip是否发生漂移

1、编写监控nginx的脚本

如何判断nginx是否运行?

        1、使用killall -0 nginx 来判断nginx是否运行了没有

        2、也可以使用 pidof nginx来查找nginx的进程号,如果进程号不存在则表示nginx服务被终止了

[root@mysql /]# cd nginx
[root@mysql nginx]# ls
nginx-1.23.2         onekey_install_henshan_nginx.sh
nginx-1.23.2.tar.gz
[root@mysql nginx]# vim check_nginx.sh       #创建一个检测nginx是否运行的脚本
[root@mysql nginx]# cat check_nginx.sh 
#!/bin/bash

#检测nginx是否正常运行
if /usr/sbin/pidof nginx  &>/dev/null ;then
	exit 0
else
	exit 1
fi
[root@mysql nginx]# 

[root@mysql nginx]# ps aux|grep nginx        #检查nginx是否正在进行服务
root        915  0.0  0.1  67876  1408 ?        Ss   4月06   0:00nginx: master process /usr/local/scnginx66/sbin/nginx
clay        918  0.0  0.2  68744  2308 ?        S    4月06   0:00nginx: worker process
clay        919  0.0  0.2  68744  2308 ?        S    4月06   0:00nginx: worker process
clay        920  0.0  0.2  68744  2308 ?        S    4月06   0:00nginx: worker process
clay        921  0.0  0.2  68744  2804 ?        S    4月06   0:00nginx: worker process
root       3750  0.0  0.0 112824   988 pts/1    R+   03:10   0:00 grep --color=auto nginx
[root@mysql nginx]# bash check_nginx.sh       #nginx成功运行输出0 不成功运行输出1
[root@mysql nginx]# echo $?                   #判断是否运行成功
0
[root@mysql nginx]# 
[root@mysql nginx]# nginx -s stop            #停止nginx服务
[root@mysql nginx]# ps aux|grep nginx
root       3774  0.0  0.0 112824   988 pts/1    R+   03:20   0:00 grep --color=auto nginx
[root@mysql nginx]# bash check_nginx.sh 
[root@mysql nginx]# echo $?
1
[root@mysql nginx]# 

[root@mysql nginx]# ll
总用量 1092
-rw-r--r-- 1 root root     110 4月   7 03:12 check_nginx.sh
drwxr-xr-x 9 clay clay     186 10月 19 15:56 nginx-1.23.2
-rw-r--r-- 1 root root 1108243 3月  14 00:30 nginx-1.23.2.tar.gz
-rw-r--r-- 1 root root    1562 3月  14 01:01 onekey_install_henshan_nginx.sh
[root@mysql nginx]# chmod +x check_nginx.sh      #给它增加可执行权限
[root@mysql nginx]# ll
总用量 1092
-rwxr-xr-x 1 root root     110 4月   7 03:12 check_nginx.sh
drwxr-xr-x 9 clay clay     186 10月 19 15:56 nginx-1.23.2
-rw-r--r-- 1 root root 1108243 3月  14 00:30 nginx-1.23.2.tar.gz
-rw-r--r-- 1 root root    1562 3月  14 01:01 onekey_install_henshan_nginx.sh
[root@mysql nginx]#

keepalived 会通过查看脚本执行的返回值来判断脚本是否正确执行

        0 表示执行成功 nginx还在运行

        1 表示执行失败 nginx运行失败

(在两台负载均衡器里都必须完成该脚本,而且两个脚本都必须赋予可执行权限)

2、在keepalived.conf文件里面定义监控脚本

在global_defs下面定义

定义监控脚本的执行方式 和 执行后所产生的条件:

keepalived 一键部署 keepalived 执行脚本_nginx_04

 当 keepalived发现这个脚本check_nginx.sh这个脚本的返回值为0的时候,不执行下面的wegiht  -30 的操作, 当发现返回值非0的时候,就会执行给优先级减30 的操作

这条命令是1s中执行一次,1s中刷新执行

3、在keepalived里调用监控脚本

 撰写调用监控脚本:

 

keepalived 一键部署 keepalived 执行脚本_nginx_05

第二台负载均衡器上也需要进行配置

4、通过tcpdump来查看对应的vip 和 其中的优先级

首先需要刷新服务:service keepalived restart

如果出现错误,需要查看日志:tail  /var/log/massages

安装tcpdump : yum install tcpdump -y

使用tcpdump查看ens33网卡的vrrp协议包的交流记录:

tcpdump -i ens33 vrrp -vv

-vv 表达的是以数字的形式

通过打开nginx和关闭nginx可以查看对应产生的效果

可以通过 ip add 来查看vip是否发生了漂移,并且与nginx产生的情况是否相互对应

四、keepalived的一些其他功能:

当本节点服务器成为某个角色的时候,我们去执行某个脚本

1、notify_master

notify_master:当当前节点成为master时,通知脚本执行任务(一般用于启动某服务,比如nginx,haproxy等)

如:notify_master /mail/master.sh

2、notify_backup        

notify_backup:当当前节点成为backup时,通知脚本执行任务(一般用于关闭某服务,比如nginx,haproxy等)

notify_backup /mail/backup.sh

实现:如果检查到nginx进程关闭,立马关闭keepalived的服务软件

1、编写halt_keepalived脚本,用来实现对keepalived的关闭

[root@mysql nginx]# vim halt_keepalived.sh      #创建一个能直接关闭keepalived服务的脚本
[root@mysql nginx]# cat halt_keepalived.sh 
#!/bin/bash

#关闭keepalived服务
service keepalived stop
[root@mysql nginx]# bash halt_keepalived.sh 
Redirecting to /bin/systemctl stop keepalived.service
[root@mysql nginx]# ps aux|grep keepalived
root       5155  0.0  0.0 112824   988 pts/1    R+   04:08   0:00 grep --color=auto keepalived
[root@mysql nginx]# chmod +x halt_keepalived.sh    #给予可执行权限
[root@mysql nginx]# ll
总用量 1096
-rwxr-xr-x 1 root root     112 4月   7 03:17 check_nginx.sh
-rwxr-xr-x 1 root root      61 4月   7 04:07 halt_keepalived.sh
drwxr-xr-x 9 clay clay     186 10月 19 15:56 nginx-1.23.2
-rw-r--r-- 1 root root 1108243 3月  14 00:30 nginx-1.23.2.tar.gz
-rw-r--r-- 1 root root    1562 3月  14 01:01 onekey_install_henshan_nginx.sh
[root@mysql nginx]#

2、在keepalived.conf文件里调用 notify_backup 命令,用于调用脚本

keepalived 一键部署 keepalived 执行脚本_运维_06

然后打开keepalived服务和nginx服务 进行测试

当我们把该负载均衡器的nginx关闭的时候,keepalived也会随之关闭,因此实现了我们想要的功能

3、notify_stop

notify_fault:当当前节点出现故障,执行的任务; 

notify_stop /mail/stop.sh