Keepalived高可用服务搭建

6 篇文章 0 订阅

前情提要

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(如Nginx、Haproxy、My-SQL等)的高可用解决方案软件

Keepalived软件主要是通过VRRP协议实现高可用功能的,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)

Keepalived服务的3个重要功能:
1.管理LVS负载均衡软件
2.实现对LVS集群节点健康的检查功能
3.作为系统网络服务的高可用功能: Keepalived可以实现任意两台主机之间,如MASTER和BACKUP主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡、Nginx反向代理这样的服务器

Keepalived高可用服务搭建准备

1.安装Keepalived环境

Nginx负载均衡的系统环境来安装Keepalived服务,因为后面的实战案例是实现Nginx反向代理的高可用案例。

2.开始安装Keepalived软件

[root@lb02 nginx]$ yum install keepalived -y

提示:1)上述安装过程需要在lb01和lb02两台服务器上同时进行。

3.启动Keepalived服务并检查

我这里笔记本的网卡在虚拟机里显示为 ifcfg-ens33 ,keepalived的默认配置文件网卡名为 ech0,所以直接启动会提示错误,需要修改配置文件里的网卡名称。

4.Keepalived配置文件简单说明,跟详细的参数应该到官网查看。

[root@lb01 keepalived]# cat keepalived.conf
        global_defs {
            router_id lb01        #<== ID为lb01,不同的keepalived.conf此ID要唯一。
            }
        vrrp_instance VI_1 {       #<==实例名字为VI_1,相同实例的备节点名字要和这个相同。
            state MASTER           #<==状态为MASTER,备节点状态需要为BACKUP。
            interface eth0         #<==通信接口为eth0,对于此参数,备节点设置和主节点相同。
            virtual_router_id 51  #<==实例ID为55, keepalived.conf里唯一。
            priority 150            #<==优先级为150,备节点的优先级必须比此数字低。
            advert_int 1            #<==通信检查间隔时间1秒。
            authentication {
                auth_type PASS     #<==PASS认证类型,对于此参数,备节点设置和主节点相同。
                auth_pass 1111     #<==密码是1111,对于此参数,备节点设置和主节点相同。
            }
            virtual_ipaddress {
                10.0.0.3/24 dev eth0 label eth0:3
        #<==虚拟IP,即VIP,子网掩码为24位,绑定接口为eth0,别名为eth0:3,对于此参数,备节点
            设置和主节点相同。
            }
        }
        #提示:此处设置的虚拟IP为10.0.0.3,即网站域名绑定的IP。

keepalived双实例双主模式配置(如果只有一个VRRP组则为单实例)

Keepalived还支持多实例多业务双向主备模式,即A业务在lb01上是主模式,在lb02上是备模式,而B业务在lb01上是备模式,在lb02上是主模式,下面就以双实例为例讲解不同业务实现双主的配置。
Keepalived双实例双主模式的IP及VIP规划表,如下:
在这里插入图片描述

首先,配置lb01 192.168.3.155 的keepalived.conf,步骤及内容如下:

[root@lb01 keepalived]# cat keepalived.conf
global_defs {
            router_id lb01
        }
        vrrp_instance VI_1 {
            state MASTER
            interface ens33
            virtual_router_id 51
            priority 150
            advert_int 1
            authentication {
                auth_type PASS
                auth_pass 1111
            }
            virtual_ipaddress {
            	192.168.3.200/24 dev ens33 label ens33:3
              }
          }
          vrrp_instance VI_2 {
              state BACKUP
              interface ens33
              virtual_router_id 52
              priority 100
              advert_int 1
              authentication {
                  auth_type PASS
                  auth_pass 1111
              }
              virtual_ipaddress {
                  192.168.3.201/24 dev ens33 label ens33:4
              }
          }

强调一下 :我这里笔记本的网卡在虚拟机里显示为 ifcfg-ens33 ,keepalived的默认配置文件网卡名为 ech0,所以直接启动会提示错误,需要修改配置文件里的网卡名称。

然后配置lb02 192.168.3.124 的keepalived.conf,注意跟lb01的区别,步骤及内容如下:

[root@lb01 keepalived]# cat keepalived.conf
global_defs {
            router_id lb01
        }
        vrrp_instance VI_1 {
            state BACKUP
            interface ens33
            virtual_router_id 51
            priority 100
            advert_int 1
            authentication {
                auth_type PASS
                auth_pass 1111
            }
            virtual_ipaddress {
            	192.168.3.200/24 dev ens33 label ens33:3
              }
          }
          vrrp_instance VI_2 {
              state MASTER
              interface ens33
              virtual_router_id 52
              priority 150
              advert_int 1
              authentication {
                  auth_type PASS
                  auth_pass 1111
              }
              virtual_ipaddress {
                  192.168.3.201/24 dev ens33 label ens33:4
              }
          }

提示:以vrrp_instance VI_1在lb02 192.168.3.124服务器上的角色为备,vrrp_instance VI_2在lb02 192.168.3.124服务器上的角色为主,注意配置的不同。

接着,在lb01、lb02上分别重启Keepalived服务,观察初始VIP设置情况。lb01操作的结果如下:

[root@lb01 ~]$ ip addr| grep 192.168
    inet 192.168.3.155/24 brd 192.168.3.255 scope global noprefixroute ens33
    inet 192.168.3.200/24 scope global secondary ens33:3

提示:启动lb01后,初始状态已经启动了192.168.3.200 VIP,即lb01由VI_1实例配置的VIP对外提供服务,如可以把yeye.com解析到192.168.3.200上。
lb02操作的结果如下:

[root@lb02 nginx]$ ip addr | grep 192.168
    inet 192.168.3.124/24 brd 192.168.3.255 scope global noprefixroute ens33
    inet 192.168.3.201/24 scope global secondary ens33:4

提示:启动lb02后,初始状态已经启动了192.168.3.124 VIP,即lb02由VI_2实例配置的VIP对外提供服务。例如,可以把bbs.yeye.com解析到192.168.3.124上。

下面停掉任意一端服务器或者Keepalived服务,查看VIP是不是会漂移到另一端。停止lb01的Keepalived服务:

[root@lb01 ~]$ systemctl stop keepalived
[root@lb01 ~]$ ip addr | egrep "192.168.3.200| 192.168.3.201"
[root@lb01 ~]$ 

可以看到,停掉lb01的Keepalived服务后,VIP 192.168.3.200 即被释放。现在,检查lb02服务器上IP的接管情况:

[root@lb02 nginx]$ ip addr | egrep "192.168.3.200| 192.168.3.201"
    inet 192.168.3.201/24 scope global secondary ens33:4
    inet 192.168.3.200/24 scope global secondary ens33:3
[root@lb02 nginx]$ 

可以看到,已经接管了lb01的VIP 129.168.3.200。再次启动lb01的Keepalived服务:

[root@lb01 ~]$ systemctl start keepalived
[root@lb01 ~]$ ip addr | egrep "192.168.3.200| 192.168.3.201"
    inet 192.168.3.200/24 scope global secondary ens33:3
[root@lb01 ~]$ 

在lb01上启动Keepalived服务后,很快它就接管回了自己的VIP。此时,检查lb02服务器上此时IP的设置情况:

[root@lb02 nginx]$ ip addr | egrep "192.168.3.200| 192.168.3.201"
    inet 192.168.3.201/24 scope global secondary ens33:4
[root@lb02 nginx]$ 

可以看到,已经释放了lb01的VIP。同理,若是停止lb02的Keepalived服务,VIP 192.168.3.201也立即被释放。

至此,我们发现lb01、lb02主备节点已经实现了初始状态各自服务器设置了初始的VIP提供服务,当任意一端宕机,VIP可以实现互相切换接管。在实际工作中,可以把yeye.com解析到VIP192.168.3.200上提供服务,把bbs.yeye.com解析到VIP192.168.3.201上提供服务,当然了,lb01、lb02也要配置相应服务。例如:Nginx反向代理服务等。

双实例双主模式的配置文件对比

在这里插入图片描述
下图为Keepalived双多实例双主模式配置文件的区别。
在这里插入图片描述
可以看到主备节点在增加的实例方面就两项区别:
❑ state(状态)。
❑ priority(竞选优先级)。
其中,优先级决定VIP在哪个机器上初始运行。

在lb01和lb02上配置Nginx负载均衡,实现负载均衡高可用

结合之前的Nginx负载均衡的环境,根据下图调整好主负载均衡器lb01、备用负载均衡器lb02服务器上Nginx负载均衡环境,两台服务器的安装基础环境一致。(这里只配置了web02,web03)
在这里插入图片描述

这里使用的Nginx负载均衡的配置如下:

lb01配置如下(提示:此配置仅代理了www.yeye.com域名。):

[root@lb02 nginx]$ cat conf/nginx.conf
worker_processes   1;
events {
        worker_connections   1024;
       }
    http {
        include         mime.types;
        default_type   application/octet-stream;
        sendfile          on;
        keepalive_timeout   65;
        upstream www_pools {     #<==这里定义代理的负载均衡域名虚拟主机。
              server 192.168.3.101:80   weight=1;
              server 192.168.3.99:80   weight=1;
        }
        server {
            listen         192.168.3.200:80;    #<==请注意这里的配置,指定IP监听了。
            server_name   www.yeye.com;
            location / {
            proxy_pass http://www_pools;		#<==访问yeye.com,请求发送给www_pools里面的节点。
	    proxy_set_header Host   $host;
	    proxy_set_header X-Forwarded-For $remote_addr;
            }
	}
    }

配置修改后重载nginx。

lb02配置如下(提示:此配置仅代理了bbs.yeye.com域名。):

[root@lb02 nginx]$ cat conf/nginx.conf
worker_processes   1;
events {
        worker_connections   1024;
       }
    http {
        include         mime.types;
        default_type   application/octet-stream;
        sendfile          on;
        keepalive_timeout   65;
        upstream www_pools {
              server 192.168.3.101:80   weight=1;
              server 192.168.3.99:80   weight=1;
        }
        server {
            listen         192.168.3.201:80;
            server_name   bbs.yeye.com;
            location / {
            proxy_pass http://www_pools;
	    proxy_set_header Host   $host;
	    proxy_set_header X-Forwarded-For $remote_addr;
            }
	}
    }

配置修改后重载nginx。

  • 在lb01和lb02上配置Keepalived服务

lb01上Keepalived服务双主节点的配置如下:

[root@lb01 ~]$ cat /etc/keepalived/keepalived.conf

global_defs {
            router_id lb01        
            }
        vrrp_instance VI_1 {       
            state MASTER           
            interface ens33         
            virtual_router_id 51  
            priority 150            
            advert_int 1            
            authentication {
                auth_type PASS     
                auth_pass 1111     
            }
            virtual_ipaddress {
                192.168.3.200/24 dev ens33 label ens33:3
            }
        }
        vrrp_instance VI_2 {
              state BACKUP
              interface ens33
              virtual_router_id 52
              priority 100
              advert_int 1
              authentication {
                  auth_type PASS
                  auth_pass 1111
              }
              virtual_ipaddress {
                  192.168.3.201/24 dev ens33 label ens33:4
              }
        }

配置修改后重启keepalived。
提示:vrrp_instance VI_1组的 VIP为192.168.3.200,即工作时需要把Nginx负载均衡代理的www.yeye.com解析到这个VIP。

lb02上Keepalived服务双主节点的配置如下:

[root@lb02 nginx]$ cat /etc/keepalived/keepalived.conf 

global_defs {
            router_id lb01        
            }
        vrrp_instance VI_1 {       
            state BACKUP           
            interface ens33         
            virtual_router_id 51  
            priority 100            
            advert_int 1            
            authentication {
                auth_type PASS     
                auth_pass 1111     
            }
            virtual_ipaddress {
                192.168.3.200/24 dev ens33 label ens33:3
            }
        }
        vrrp_instance VI_2 {
              state MASTER
              interface ens33
              virtual_router_id 52
              priority 150
              advert_int 1
              authentication {
                  auth_type PASS
                  auth_pass 1111
              }
              virtual_ipaddress {
                  192.168.3.201/24 dev ens33 label ens33:4
              }
        }


配置修改后重启keepalived。

  • 用户访问准备及模拟实际访问

准备工作如下:
1)在客户端hosts文件里把www.yeye.com域名解析到VIP 192.168.3.200上,bbs.yeye.com域名解析到VIP 192.168.3.201上,正式场景需通过DNS解析。

2)两台服务器也要配好Nginx负载均衡服务,并且确保后面代理的Web节点可以测试访问。

[root@lb01 ~]$ netstat -luntp |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3752/ngin: master  

下面模拟实际的访问。
1)通过在客户端浏览器输入“www.etiantian.org”测试访问,按Ctrl+F5组合键刷新几次,正常应该可以出现如图所示的两种访问结果。
在这里插入图片描述
2)此时停止lb01服务器或者停掉Keepalived服务,观察业务是否正常:

[root@lb01 ~]$ systemctl stop keepalived
i[root@lb01 ~]$ ip addr | grep 192.168.3.200
[root@lb01 ~]$ 

再次在客户端浏览器输入www.yeye.com测试访问,按Ctrl+F5组合键刷新几次,正常应该可以出现和切换lb02前相同的访问结果。

4)开启lb01的Keepalived服务。

[root@lb01 ~]$ ip addr | grep 192.168.3.200
    inet 192.168.3.200/24 scope global secondary ens33:3
[root@lb01 ~]$ 

可以看到,VIP很快就接管回来了,此时浏览器访问结果依然正常。bbs.yeye.com测试正常结果应该是一样的。

关于keepalived可能出现的问题汇总

- 解决服务监听的网卡上不存在IP地址的问题

如果配置使用“listen 10.0.0.3:80; ”的方式指定IP监听服务,而本地的网卡上没有10.0.0.3这个IP, Nginx可能(也可能不错出)就会报错。(这个问题在个人实验双主配置是为出现)
在这里插入图片描述

如果要实施双主(即主备)同时提供不同的服务,配置文件里指定了IP监听,备节点则会因为网卡实际不存在VIP报错。出现上面问题的原因就是在物理网卡上没有与配置文件里监听的IP相对应的IP,我们要让Nginx服务在网卡上没有指定监听的IP时也能启动,不报错,解决办法是在 /etc/sysctl.conf 中加入如下内核参数配置:
在这里插入图片描述
也可通过如下命令快速追加:
在这里插入图片描述
最后执行sysctl -p使上述修改生效。

- 解决高可用服务只是针对物理服务器的问题

默认情况下,Keepalived软件仅仅在对方机器宕机或者Keepalived停掉的时候才会接管业务。但在实际工作中,有业务服务停止而Keepalived服务还在工作的情况,这就会导致用户访问的VIP无法找到对应的服务,那么,如何解决业务服务宕机就可以将IP漂移到备节点接管提供服务呢?

方法一:可以写守护进程脚本来处理。当Nginx业务出现问题时就停掉本地的Keep-alived服务,实现IP漂移到对端接管提供服务。实际工作中部署及开发的示例脚本如下:

[root@lb01 keepalived]# cd /server/scripts/
        [root@lb01 scripts]# vim check_nginx.sh
        #! /bin/sh
        while true
        do
            if [ 'netstat -lntup|grep nginx|wc -l' -ne 1 ]; then
                    systemctl stop keepalived
                    break
            fi
                sleep 5
        done

此脚本的基本思想是若没有80端口存在,就停掉Keepalived服务实现释放本地的VIP。

在后台执行上述脚本并检查:

[root@lb01 scripts]# sh /server/scripts/check_nginx.sh &
        [1] 15990
        [root@lb01 scripts]# ps -ef|grep check
        root   15990   15386   0 11:52 pts/2   00:00:00 sh /server/scripts/check_nginx.sh

使用命令,确认Nginx以及Keepalived服务是正常的。

然后模拟Nginx服务停掉,看IP是否发生切换。

[root@lb01 script]# nginx -s stop
[root@lb01 script]# systemctl status keepalved
keepalived已停
[root@lb01 script]# netstat -lntup|grep nginx

此时,备节点已接管:

[root@lb02 conf]# ip add|grep   10.0.0.3
    inet   10.0.0.3/24 scope global secondary eth0:3

方法二:可以使用Keepalived的配置文件参数触发写好的监测服务脚本。

首先要开发监测服务脚本,注意这个脚本与上一个脚本的区别。

[root@lb01 scripts]# vim chk_nginx_proxy.sh
#! /bin/sh
if [ 'netstat -lntup|grep nginx|wc -l' -ne 1 ]; then
    systemctl stop keepalived
fi
[root@lb01 scripts]# chmod +x chk_nginx_proxy.sh
[root@lb01 scripts]# ls -l chk_nginx_proxy.sh
-rwxr-xr-x 1 root root 97 717 22:50 chk_nginx_proxy.sh

此时,Keepalived服务的完整配置如下:

[root@lb01 keepalived]# cat keepalived.conf
global_defs {
    router_id lb01
}
	vrrp_script chk_nginx_proxy {                      #<==定义VRRP脚本,检测HTTP端口。
    	script "/server/scripts/chk_nginx_proxy.sh" #<==执行脚本,当Nginx服务出现问题时,就停掉Keepalived服务。
        interval 2                                        #<==间隔2秒。
        weight 2
    }
    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/24 dev eth0 label eth0:3
              }
              track_script {
              chk_nginx_proxy                                  #<==触发检查。
              }
          }

下面测试接管结果,

[root@lb01 keepalived]# lsof -i :80
COMMAND    PID   USER    FD    TYPE DEVICE SIZE/OFF NODE NAME
nginx    17180   root     6u   IPv4   80121        0t0   TCP *:http (LISTEN)
nginx    17181 nginx     6u   IPv4   80121        0t0   TCP *:http (LISTEN)
[root@lb01 keepalived]# ps -ef|grep keep
root        17257        1   0 12:41 ?          00:00:00 /usr/sbin/keepalived -D
root        17258   17257   0 12:41 ?          00:00:00 /usr/sbin/keepalived -D
root        17259   17257   0 12:41 ?          00:00:00 /usr/sbin/keepalived -D
root        17637   16157  0 12:43 pts/0     00:00:00 grep --color=auto keep
[root@lb01 keepalived]# ip add|grep 10.0.0.3
		inet 10.0.0.3/24 scope global secondary eth0:3
[root@lb01 keepalived]# nginx -s stop
[root@lb01 keepalived]# ip add|grep 10.0.0.3
[root@lb01 keepalived]# ps -ef|grep keep
        root        17714   16157   0 12:43 pts/0     00:00:00 grep --color=auto keep

当停掉Nginx的时候,Keepalived 2秒钟内会被自动停掉,IP被释放,由对端接管,这样就实现了即使服务宕机也进行IP漂移、业务切换,如果此时把Nginx和Keepalvied同时启动,IP又会被接管回来。
lb01的日志是Keepalived停掉的消息。

   [root@lb01 keepalived]# cat /var/log/messages
        May 20 12:43:39 lb01 Keepalived[17257]: Stopping
        May 20 12:43:39 lb01 Keepalived_vrrp[17259]: VRRP_Instance(VI_1) sent 0 priority
        May 20  12:43:39  lb01  Keepalived_vrrp[17259]:  VRRP_Instance(VI_1)  removing
            protocol VIPs.
        May 20 12:43:39 lb01 Keepalived_healthcheckers[17258]: Stopped
        May 20 12:43:39 lb01 Keepalived_vrrp[17259]: Stopped
        MMay 20  12:43:39  lb01  Keepalived[17257]:  Stopped  Keepalived  v1.3.5  (03/19,
            2017), git commit v1.3.5-6-g6fa32f2

lb02上接管的日志信息如下:

   [root@lb02 scripts]# cat   /var/log/messages
    May 20  12:43:40  lb02  Keepalived_vrrp[15097]:  VRRP_Instance(VI_1)  Transition
        to MASTER STATE
    May 20  12:43:41  lb02  Keepalived_vrrp[15097]:  VRRP_Instance(VI_1)  Entering
        MASTER STATE
    May 20  12:43:41  lb02  Keepalived_vrrp[15097]:  VRRP_Instance(VI_1)  setting
        protocol VIPs.
    May 20  12:43:41  lb02  Keepalived_vrrp[15097]:  Sending  gratuitous  ARP  on  eth0
        for 10.0.0.3
    May 20  12:43:41  lb02  Keepalived_vrrp[15097]:  VRRP_Instance(VI_1)  Sending/
        queueing gratuitous ARPs on eth0 for 10.0.0.3
    May 20  12:43:41  lb02  Keepalived_vrrp[15097]:  Sending  gratuitous  ARP  on  eth0
        for 10.0.0.3
    May 20  12:43:41  lb02  Keepalived_vrrp[15097]:  Sending
    May 20  12:43:46  lb02  Keepalived_vrrp[15097]:  Sending  gratuitous  ARP  on  eth0
            for 10.0.0.3
        May 20  12:43:46  lb02  Keepalived_vrrp[15097]:  Sending  gratuitous  ARP  on  eth0
            for 10.0.0.3
        May 20  12:43:46  lb02  Keepalived_vrrp[15097]:  Sending  gratuitous  ARP  on  eth0
            for 10.0.0.3
        May 20  12:43:46  lb02  Keepalived_vrrp[15097]:  Sending  gratuitous  ARP  on  eth0
            for 10.0.0.3
        May 20 12:45:01 lb02 systemd: Started Session 257 of user root.

当停掉Nginx的时候,Keepalived 2秒钟内会被自动停掉,IP被释放,由对端接管,这样就实现了即使服务宕机也进行IP漂移、业务切换,如果此时把Nginx和Keepalvied同时启动,IP又会被接管回来。

这时候如果没有配置之前解决服务监听的网卡上不存在IP地址的问题解决方法,就会出现nginx启动不了的问题,因为keepalived关闭,VIP地址浮动到了BACKUP节点上了,导致netstat命令查询nginx的返回值一直为0,Keepalived的配置文件参数触发的监测服务脚本一直stop keepalived服务,这就造成了互相依赖的死锁。所以要配置nginx服务监听不存在ip也可以启动。如果使用方法一,杀死脚本进程即可。

[root@lb01 scripts]$ /application/nginx/sbin/nginx
nginx: [emerg] bind() to 192.168.3.200:80 failed (99: Cannot assign requested address)
[root@lb01 scripts]$ 

- 解决多组Keepalived服务器在一个局域网内冲突的问题

当在同一个局域网内部署了多组Keepalived服务器而又未使用专门的心跳线通信时,可能会发生高可用接管的严重故障问题。前文已经讲解过Keepalived高可用功能是通过VRRP协议实现的,VRRP协议默认通过IP多播的形式实现高可用服务对之间的通信,如果同一个局域网内存在多组Keepalived服务器对,就会造成IP多播地址冲突问题,导致接管错乱,不同组的Keepalived都会使用默认的224.0.0.18作为多播地址。此时的解决办法是在同组的Keepalived服务器所有的配置文件里指定各自独一无二的多播地址,配置如下:
在这里插入图片描述
1)不同实例的通信认证密码也最好不同,以确保接管正常。
2)另一款高可用软件Heartbeat,如果采用多播方式实现主备通信,同样会有多播地址冲突问题。

- 配置指定文件接收Keepalived服务日志

默认情况下,Keepalived服务日志会输出到系统日志/var/log/messages,和其他日志信息混合在一起,查看起来很不方便,可以将其调整成由独立的文件记录Keepalived服务日志。操作步骤如下:1)编辑配置文件/etc/sysconfig/keepalived,将“KEEPALIVED_OPTIONS=“-D””修改为“KEEPALIVED_OPTIONS=“-D -d -S 0””,快速修改方法如下:

        [root@lb01  server]#  sed  -i  '14  s#KEEPALIVED_OPTIONS="-D"#KEEPALIVED_OPTIONS="-D -d -S 0"#g' /etc/sysconfig/keepalived
        [root@lb01 server]# sed -n '14p' /etc/sysconfig/keepalived KEEPALIVED_OPTIONS="-D -d -S 0"
        说明:可以查看/etc/sysconfig/keepalived里注释获得上述参数的说明。
        # --dump-conf            -d     导出备份配置数据。
        # --log-detail          -D     详细日志。
        # --log-facility        -S     设置本地的syslog设备,编号0-7(default=LOG_DAEMON)。
        #-S 0 表示指定为local0设备。

2)修改rsyslog的配置文件vi /etc/rsyslog.conf,在结尾处加入如下两行内容:

#keepalived
        local0.* /var/log/keepalived.log

上述配置表示来自local0设备的所有日志信息都记录到了/var/log/keepalived.log文件中。然后在如下信息的第一列结尾加入“; local0.none”,注意有分号。

*.info; mail.none; authpriv.none; cron.none; local0.none    /var/log/messages

上述配置表示来自local0设备的所有日志信息不再记录于/var/log/messages里。
3)配置完成后,重启rsyslog服务。
在这里插入图片描述
4)测试Keepalived日志记录结果。在重启Keepalived服务后,就会把日志信息输出到rsyslog定义的/var/log/keepalived.log文件中,如下:

[root@lb02 server]# systemctl restart keepalived
        [root@lb02 server]# tail /var/log/keepalived.log
        May 20 12:53:14 lb02 Keepalived_healthcheckers[18468]: Default script uid:gid 0:0
        May 20  12:53:14  lb02  Keepalived_healthcheckers[18468]:  ------<  SSL
            definitions >------
        May 20  12:53:14  lb02  Keepalived_healthcheckers[18468]:  Using  autogen  SSL
            context
        May 20  12:53:14  lb02  Keepalived_vrrp[18469]:  VRRP_Instance(VI_1)  Entering
            BACKUP STATE
        May 20  12:53:14  lb02  Keepalived_vrrp[18469]:  VRRP  sockpool:  [ifindex(2),
            proto(112), unicast(0), fd(10,11)]
        May 20  12:53:14  lb02  Keepalived_vrrp[18469]:  VRRP_Script(chk_nginx_proxy)
            succeeded
        May 20  12:53:15  lb02  Keepalived_vrrp[18469]:  VRRP_Instance(VI_2)  Transition
            to MASTER STATE
        May 20  12:53:15  lb02  Keepalived_vrrp[18469]:  VRRP_Instance(VI_1)  Changing

如果要求更高,还可以在/var/log/messages上设置对/var/log/keepalived.log进行轮询,以防单个日志文件变得太大。

- 开发监测Keepalived“裂脑”的脚本
检测思路:在备节点上执行脚本,如果可以ping通主节点并且备节点有VIP就报警,让工作人员介入检查是否裂脑。
1)在lb02备节点开发脚本并执行。

[root@lb02 scripts]# cat check_split_brain.sh
        #! /bin/sh
        lb01_vip= 10.0.0.3
        lb01_ip=10.0.0.5
        while true
        do
        ping -c 2-W 3 $lb01_ip &>/dev/null
            if [ $? -eq 0-a 'ip add|grep "$lb01_vip"|wc -l' -eq 1 ]
                then
                    echo "ha is split brain.warning."
        else
                    echo "ha is ok"
        fi
        sleep 5
        done
        [root@lb02 scripts]# sh check_split_brain.sh
        ha is ok
        ha is ok

正常情况下,主节点活着,VIP 10.0.0.3在主节点,因此不会报警,提示"ha isok"。
2)停止Keepalived服务看lb02脚本执行情况。lb01上:

[root@lb01 scripts]# systemctl stop keepalived
[root@lb01 scripts]# ip add|grep 10.0.0.3

在lb02上观察即可,此前脚本已经执行。

[root@lb02 scripts]# sh check_split_brain.sh
	ha is ok
	ha is ok
	ha is split brain.warning.
	ha is split brain.warning.
	ha is split brain.warning.

3)关掉lb01服务器,然后再观察lb02脚本的输出。

[root@lb02 scripts]# sh check_split_brain.sh
ha is ok
ha is ok
ha is split brain.warning.
ha is split brain.warning.
ha is split brain.warning.
ha is split brain.warning.
ha is split brain.warning.
ha is split brain.warning.
ha is ok
ha is ok
ha is ok
ha is ok

裂脑报警恢复了。
4)可以将此脚本整合到Nagios或Zabbix监控服务里,进行监控报警。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值