使用 keepalived 实现 PostgreSQL主从异步流复制的高可用

keepalived HA 与 PostgreSQL HA 自动切换测试

搭建环境

服务器 角色
10.10.56.19 PostgreSQL master
10.10.56.18 PostgreSQL slave
10.10.56.87 VIP
10.10.56.19 keepalived master
10.10.56.18 keepalived slave

背景

通过keepalive 来实现  PostgreSQL 数据库的主从自动切换,以达到高
可用,当主节点宕机时,从节点可自动切换为主节点,继续对外提供服务,
同时为了保证 keepalived 不会出现单点故障,所以keepalived 也搭建
主备节点,防止单点故障。

架构图

keepalived 架构拓扑图

搭建环境

  • 搭建PostgreSQL 主备异步流环境此处略

  • 请确保 19服务器和18服务器时间同步

  • keepalived 下载 keepalived-1.2.12-3.1.12.x86_64.rpm

  • 安装keepalived
rpm -ivh keepalived-1.2.12-3.1.12.x86_64.rpm
  • 查看安装的 keepalived 文件位置
postgres@CLW-DB4:~/pgsoft/HA> whereis keepalived
keepalived: /usr/sbin/keepalived /etc/keepalived /usr/share/man/man8/keepalived.8.gz
postgres@CLW-DB4:~/pgsoft/HA>
  • 配置 keepalived.conf
CLW-DB3:/etc/keepalived # vim keepalived.conf

! Configuration File for keepalived
global_defs {
   notification_email {
     976124272@qq.com
   }
   smtp_server 10.10.56.19
   smtp_connect_timeout 30
   router_id pg19
}


vrrp_script check_pg_alived {
        script "/etc/keepalived/scripts/check_pg.sh"
        interval 5
        fall 3 # require 3 failures for KO
}

virtual_server 10.10.56.87 5432 {
    delay_loop 6 # 每个6秒查询Realserver状态
    lb_algo rr   # lvs算法
    lb_kind DR   # Direct Route
    persistence_timeout 0 # 同一IP链接60秒内被分配到同一台realserver
    protocol TCP            #用tcp协议检查realserver状态

    real_server 10.10.56.18 5432{
        weight 100
        TCP_CHECK {
            connect_timeout 5 #10秒钟无响应超时
            nb_get_retry 3
            delay_before_retry 3
            connect_port 5432
        }
    }

    real_server 10.10.56.19 5432{
        weight 100
        TCP_CHECK {
            connect_timeout 5 #10秒钟无响应超时
            nb_get_retry 3
            delay_before_retry 3
            connect_port 5432
        }
    }
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 80
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass abcdefgh
    }

    track_script {
        check_pg_alived
    }

    virtual_ipaddress {
        10.10.56.87
    }
   smtp_alert
      notify_master "/etc/keepalived/scripts/failover.sh"
      notify_fault "/etc/keepalived/scripts/fault.sh"
}
  • 对主从PG 进行状态监控,监控脚本 check_pg.sh,且分配 755 执行权限
CLW-DB3:/etc/keepalived/scripts # vim check_pg.sh

#!/bin/bash

export PGDATABASE=ha
export PGPORT=5432
export PGUSER=postgres
export PGHOME=/opt/pgsql-10/bin
export PATH=$PATH:$PGHOME
export PGMIP=127.0.0.1
LOGFILE=/etc/keepalived/log/pg_status.log

SQL2='update sr_delay set sr_date = now() where id =1;'

#pg_port_status=`lsof -i :$PGPORT | grep LISTEN | wc -l`
#pg_port_status=`ps -ef | grep LISTEN | wc -l`

SQL1='SELECT pg_is_in_recovery from pg_is_in_recovery();'

SQL3='SELECT 1;'

db_role=`echo $SQL1  | $PGHOME/psql  -d $PGDATABASE -U $PGUSER -At -w`

#if [ $pg_port_status -lt 1 ];then
#    echo -e `date +"%F %T"` "Error: The postgreSQL is not running,please check the postgreSQL server status!" >> $LOGFILE
#    exit 1
#fi

if [ $db_role == 't' ];then
   echo -e `date +"%F %T"` "Attention1:the current database is standby DB!" >> $LOGFILE
   exit 0
fi
# 备库不检查存活,主库更新状态

echo $SQL3 | psql -p $PGPORT -d $PGDATABASE -U $PGUSER -At -w

if [ $? -eq 0 ] ;then
   echo $SQL2 | psql -p $PGPORT -d $PGDATABASE -U $PGUSER -At -w
   echo -e `date +"%F %T"` "Success: update the master sr_delay successed!" >> $LOGFILE
   exit 0
else
   echo -e `date +"%F %T"` "Error:Is the server is running?" >> $LOGFILE
   exit 1
fi
  • 当主库挂掉后,切换脚本 failover.sh,且分配 755 执行权限
CLW-DB3:/etc/keepalived/scripts # vim failover.sh

#!/bin/bash
export PGPORT=5432
export PGUSER=postgres
export PG_OS_USER=postgres
export PGDBNAME=ha
export LANG=zh_CN.UTF-8
export PGPATH=/opt/pgsql-10/bin
export PATH=$PATH:$PGPATH
export PGMIP=127.0.0.1
LOGFILE=/etc/keepalived/log/failover.log

# 主备数据库同步时延,单位为秒
sr_allowed_delay_time=10000

SQL1='select pg_is_in_recovery  from pg_is_in_recovery();'

#SQL2="select sr_date as delay_time from sr_delay where now()-sr_date < interval \' $sr_allowed_delay_time \';"
SQL2="select sr_date as delay_time from sr_delay where now()-sr_date < interval '100';"

db_role=`echo $SQL1 | psql -At -p $PGPORT -U $PGUSER -d $PGDBNAME -w`
db_sr_delaytime=`echo $SQL2 | psql -p $PGPORT -d $PGDBNAME -U $PGUSER -At -w`

SWITCH_COMMAND='pg_ctl promote -D /pgdata/ha/slave19data'
#SWITCH_COMMAND='touch /pgdata/ha/slavedata/trigger_file.bak'


# 如果为备库,且延迟大于指定时间则切换为主库
if [ $db_role == f ];then
   echo -e `date +"%F %T"` "Attention:The current postgreSQL DB is master database,cannot switched!" >> $LOGFILE
   exit 0
fi


if [ $db_sr_delaytime -gt 0 ];then
     echo -e `date +"%F %T"` "Attention:The current master database is health,the standby DB cannot switched!" >> $LOGFILE
     exit 0
fi


if [ !$db_sr_delaytime ];then
      echo -e `date +"%F %T"` "Attention:The current database is statndby,ready to switch master database!" >> $LOGFILE
      su - $PG_OS_USER -c "$SWITCH_COMMAND"
elif [ $? eq 0 ];then
          echo -e `date +"%F %T"` "success:The current standby database successed to switched the primary PG database !" >> $LOGFILE
          exit 0
else
          echo -e `date +"%F %T"` "Error: the standby database failed to switch the primary PG database !,pelease checked it!" >> $LOGFILE
          exit 1
fi
  • keepalived 进入错误状态时执行的脚本 fault.sh,且分配 755 执行权限
CLW-DB3:/etc/keepalived/scripts # vi fault.sh

#!/bin/bash

LOGGFILE=/etc/keepalived/log/pg_db_fault.log
PGPORT=5432
PGMIP=10.10.56.19
echo -e `date +"%F %T"` "Error:Because of the priamry DB happend some unknown problem,So turn off the PostgreSQL Database!" >> $LOGFILE

#PGCOUNT=`ps -ef|grep '/opt/pgsql-10/bin/postgres -D /pgdata/10/data' |wc -l`

#if [ $PGCOUNT -gt 1 ];then
#  PGPID="`netstat -anp|grep $PGPORT |awk '{printf $7}'|cut -d/ -f1`"
#  kill -9 $PGPID
#  echo -e `date +"%F %T"` "Error:Because of the priamry DB happend some unknown problem,So turn off the PostgreSQL Database!" >> $LOGFILE
#  exit 1
#fi

PGPID="`netstat -anp|grep $PGPORT |awk '{printf $7}'|cut -d/ -f1`"
service keepalived stop
kill -9 $PGPID
if [ $? eq 0 ];then
  echo -e `date +"%F %T"` "Error:Because of the priamry DB happend some unknown problem,So turn off the PostgreSQL Database!" >> $LOGFILE
  service keepalived stop
  exit 1
fi

19 服务器 keepalived 状态

  • 19服务器 启动keepalived 服务器
CLW-DB4:/etc/keepalived # service keepalived start
  • 查看19服务器 keepalived 状态
CLW-DB4:/etc/keepalived # service keepalived status
● keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-06-13 17:09:57 CST; 5s ago
  Process: 18364 ExecStart=/opt/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 18368 (keepalived)
    Tasks: 3 (limit: 512)
   CGroup: /system.slice/keepalived.service
           ├─18368 /opt/keepalived/sbin/keepalived -D
           ├─18369 /opt/keepalived/sbin/keepalived -D
           └─18370 /opt/keepalived/sbin/keepalived -D

Jun 13 17:10:02 CLW-DB4 Keepalived_vrrp[18370]: VRRP_Instance(VI_1) Entering MASTER STATE
Jun 13 17:10:02 CLW-DB4 Keepalived_vrrp[18370]: VRRP_Instance(VI_1) setting protocol VIPs.
Jun 13 17:10:02 CLW-DB4 Keepalived_vrrp[18370]: Sending gratuitous ARP on eth0 for 10.10.56.87
Jun 13 17:10:02 CLW-DB4 Keepalived_vrrp[18370]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 10.10.56.87
Jun 13 17:10:02 CLW-DB4 Keepalived_vrrp[18370]: Sending gratuitous ARP on eth0 for 10.10.56.87
Jun 13 17:10:02 CLW-DB4 Keepalived_vrrp[18370]: Sending gratuitous ARP on eth0 for 10.10.56.87
Jun 13 17:10:02 CLW-DB4 Keepalived_vrrp[18370]: Sending gratuitous ARP on eth0 for 10.10.56.87
Jun 13 17:10:02 CLW-DB4 Keepalived_vrrp[18370]: Sending gratuitous ARP on eth0 for 10.10.56.87
Jun 13 17:10:02 CLW-DB4 Keepalived_vrrp[18370]: Opening script file /etc/keepalived/scripts/failover.sh
Jun 13 17:10:02 CLW-DB4 Keepalived_vrrp[18370]: SMTP connection ERROR to [10.10.56.19]:25.
  • 日志介绍
`Active: active (running) since Wed 2018-06-13 17:09:57 CST; 5s ago` 表示`keepalived`状态,正在运行
`VRRP_Instance(VI_1) Entering MASTER STATE` 表示 该服务器keepalived 进入主节点
`VRRP_Instance(VI_1) setting protocol VIPs.` 表示设置VIP
`VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 10.10.56.87` 表示发送arp到etho网卡,检查网卡通信
  • 查看19服务器 /var/log/message 系统日志
CLW-DB4:/etc/keepalived # tail -f /var/log/messages
2018-06-13T17:10:02.395427+08:00 CLW-DB4 Keepalived_vrrp[18370]: VRRP_Instance(VI_1) setting protocol VIPs.
2018-06-13T17:10:02.395772+08:00 CLW-DB4 Keepalived_vrrp[18370]: Sending gratuitous ARP on eth0 for 10.10.56.87
2018-06-13T17:10:02.396171+08:00 CLW-DB4 Keepalived_vrrp[18370]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 10.10.56.87
2018-06-13T17:10:02.396528+08:00 CLW-DB4 Keepalived_vrrp[18370]: Sending gratuitous ARP on eth0 for 10.10.56.87
2018-06-13T17:10:02.397578+08:00 CLW-DB4 Keepalived_vrrp[18370]: message repeated 3 times: [ Sending gratuitous ARP on eth0 for 10.10.56.87]
2018-06-13T17:10:02.397920+08:00 CLW-DB4 Keepalived_vrrp[18370]: Opening script file /etc/keepalived/scripts/failover.sh
2018-06-13T17:10:02.398277+08:00 CLW-DB4 Keepalived_vrrp[18370]: SMTP connection ERROR to [10.10.56.19]:25.
2018-06-13T17:10:07.395923+08:00 CLW-DB4 Keepalived_vrrp[18370]: Sending gratuitous ARP on eth0 for 10.10.56.87
2018-06-13T17:10:07.396537+08:00 CLW-DB4 Keepalived_vrrp[18370]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 10.10.56.87
2018-06-13T17:10:07.396935+08:00 CLW-DB4 Keepalived_vrrp[18370]: Sending gratuitous ARP on eth0 for 10.10.56.87

18服务器keepalive 状态

  • 18服务器 启动备库keepalived
CLW-DB3:/etc/keepalived # service keepalived start
  • 查看 18服务器 keepalived 状态
CLW-DB3:/etc/keepalived # service keepalived status
● keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-06-13 17:24:12 CST; 14s ago
  Process: 8641 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 8645 (keepalived)
    Tasks: 3 (limit: 512)
   CGroup: /system.slice/keepalived.service
           ├─8645 /usr/sbin/keepalived -D
           ├─8646 /usr/sbin/keepalived -D
           └─8647 /usr/sbin/keepalived -D

Jun 13 17:24:12 CLW-DB3 Keepalived_vrrp[8647]:      check_pg_alived no match, ignoring...
Jun 13 17:24:12 CLW-DB3 Keepalived_vrrp[8647]: Configuration is using : 65634 Bytes
Jun 13 17:24:12 CLW-DB3 Keepalived_vrrp[8647]: Using LinkWatch kernel netlink reflector...
Jun 13 17:24:12 CLW-DB3 Keepalived_vrrp[8647]: VRRP_Instance(VI_1) Entering BACKUP STATE
Jun 13 17:24:12 CLW-DB3 Keepalived_vrrp[8647]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
Jun 13 17:24:12 CLW-DB3 Keepalived_vrrp[8647]: SMTP connection ERROR to [10.10.56.18]:25.
Jun 13 17:24:12 CLW-DB3 Keepalived_healthcheckers[8646]: Using LinkWatch kernel netlink reflector...
Jun 13 17:24:12 CLW-DB3 systemd[1]: Started LVS and VRRP High Availability Monitor.
Jun 13 17:24:12 CLW-DB3 Keepalived_healthcheckers[8646]: Activating healthchecker for service [10.10.56.18]:5432
Jun 13 17:24:12 CLW-DB3 Keepalived_healthcheckers[8646]: Activating healthchecker for service [10.10.56.19]:5432
CLW-DB3:/etc/keepalived #
  • 查看18 服务器 /var/log/message 系统日志
CLW-DB3:/etc/keepalived # tail -f /var/log/messages
2018-06-13T17:24:12.215646+08:00 CLW-DB3 Keepalived_vrrp[8647]:      check_pg_alived no match, ignoring...
2018-06-13T17:24:12.215948+08:00 CLW-DB3 Keepalived_vrrp[8647]: Configuration is using : 65634 Bytes
2018-06-13T17:24:12.216238+08:00 CLW-DB3 Keepalived_vrrp[8647]: Using LinkWatch kernel netlink reflector...
2018-06-13T17:24:12.216527+08:00 CLW-DB3 Keepalived_vrrp[8647]: VRRP_Instance(VI_1) Entering BACKUP STATE
2018-06-13T17:24:12.216830+08:00 CLW-DB3 Keepalived_vrrp[8647]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
2018-06-13T17:24:12.217139+08:00 CLW-DB3 Keepalived_vrrp[8647]: SMTP connection ERROR to [10.10.56.18]:25.
2018-06-13T17:24:12.217451+08:00 CLW-DB3 Keepalived_healthcheckers[8646]: Using LinkWatch kernel netlink reflector...
2018-06-13T17:24:12.217779+08:00 CLW-DB3 systemd[1]: Started LVS and VRRP High Availability Monitor.
2018-06-13T17:24:12.218153+08:00 CLW-DB3 Keepalived_healthcheckers[8646]: Activating healthchecker for service [10.10.56.18]:5432
2018-06-13T17:24:12.218468+08:00 CLW-DB3 Keepalived_healthcheckers[8646]: Activating healthchecker for service [10.10.56.19]:5432

此时19 keepalived 为主,18 keepalived

  • 日志分析
`VRRP_Instance(VI_1) Entering BACKUP STATE` 表示该服务器keepalived 进入备节点
`Activating healthchecker for service [10.10.56.18]:5432` 表示激活对18服务器 5432端口健康检查监控
`Activating healthchecker for service [10.10.56.19]:5432` 表示激活对19服务器 5432端口健康检查监控

查看 VIP 绑定

  • 查看19服务器 IP地址
CLW-DB4:/etc/keepalived/scripts # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether fa:16:3e:19:a7:a8 brd ff:ff:ff:ff:ff:ff
    inet 10.10.56.19/24 brd 10.10.56.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.10.56.87/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe19:a7a8/64 scope link
       valid_lft forever preferred_lft forever
CLW-DB4:/etc/keepalived/scripts #
  • 查看18 服务器 ip 地址
CLW-DB3:/etc/keepalived # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether fa:16:3e:8b:7c:28 brd ff:ff:ff:ff:ff:ff
    inet 10.10.56.18/24 brd 10.10.56.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe8b:7c28/64 scope link
       valid_lft forever preferred_lft forever
CLW-DB3:/etc/keepalived #

发现此时 VIP 10.10.56.87 绑定在 19主库

查看数据库角色

  • 查看19 master PostgreSQL数据库角色, f 表示为主库
ha=# select * from pg_is_in_recovery();
 pg_is_in_recovery
-------------------
 f
(1 row)

ha=#
  • 查看18 slave PostgreSQL数据库角色t 表示为备库
ha=# select * from pg_is_in_recovery();
 pg_is_in_recovery
-------------------
 t
(1 row)
ha=# 
  • 查看19服务器的 流复制信息
ha=# select pid ,usename,application_name,client_addr,client_port,state,sync_priority ,sync_state from pg_stat_replication;
  pid  | usename | application_name | client_addr | client_port |   state   | sync_priority | sync_state
-------+---------+------------------+-------------+-------------+-----------+---------------+------------
 18002 | repl    | slave1           | 10.10.56.18 |       60568 | streaming |             0 | async
(1 row)
ha=#

发现服务器 19为master ,服务器 18为slave 数据库之间为异步流复制

  • 查看 19服务器中 sr_delay表中 sr_date字段的状态,该更新时间间隔为keepalived的 健康检查时间
ha=# select * from sr_delay ;
 id |          sr_date
----+----------------------------
  1 | 2018-06-13 17:20:12.891595
(1 row)

ha=# select * from sr_delay ;
 id |          sr_date
----+----------------------------
  1 | 2018-06-13 17:20:17.891332
(1 row)

ha=# select * from sr_delay ;
 id |          sr_date
----+----------------------------
  1 | 2018-06-13 17:20:22.893416
(1 row)

ha=#
  • 查看18 服务器中 sr_delay 表字段 sr_date 是否也同时变化
ha=# select * from sr_delay ;
 id |          sr_date
----+----------------------------
  1 | 2018-06-13 17:20:37.895103
(1 row)

ha=# select * from sr_delay ;
 id |          sr_date
----+----------------------------
  1 | 2018-06-13 17:20:42.896588
(1 row)

ha=# select * from sr_delay ;
 id |          sr_date
----+----------------------------
  1 | 2018-06-13 17:20:47.897596
(1 row)

ha=#

通过上 sr_date 字段变化,可知此时keepalived 健康检查正常,每隔5s检查一次,更新该 sr_delay 字段

自动切换测试

  • 停止19服务器PostgreSQL 主库
postgres@CLW-DB4:~> pg_ctl -D /pgdata/10/data/ stop
waiting for server to shut down..... done
server stopped
postgres@CLW-DB4:~>
  • 查看18服务器 postgreSQL数据库状态

ha=# select * from pg_is_in_recovery();
 pg_is_in_recovery
-------------------
 f
(1 row)
ha=#

f表示该数据库为主库

  • 查看18服务器提升后的主库 sr_delay字段
ha=# select * from sr_delay;
 id |          sr_date
----+----------------------------
  1 | 2018-06-13 18:04:41.286085
(1 row)

ha=# select * from sr_delay;
 id |          sr_date
----+----------------------------
  1 | 2018-06-13 18:04:41.286085
(1 row)

ha=#
  • 查看18 keepalived 状态
CLW-DB3:/etc/keepalived/scripts # service keepalived status
● keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-06-13 17:24:12 CST; 24min ago
  Process: 8641 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 8645 (keepalived)
    Tasks: 3 (limit: 512)
   CGroup: /system.slice/keepalived.service
           ├─8645 /usr/sbin/keepalived -D
           ├─8646 /usr/sbin/keepalived -D
           └─8647 /usr/sbin/keepalived -D

Jun 13 17:48:31 CLW-DB3 Keepalived_healthcheckers[8646]: Removing service [10.10.56.19]:5432 from VS [10.10.56.87]:5432
Jun 13 17:48:31 CLW-DB3 Keepalived_healthcheckers[8646]: SMTP connection ERROR to [10.10.56.18]:25.
Jun 13 17:48:39 CLW-DB3 Keepalived_vrrp[8647]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jun 13 17:48:40 CLW-DB3 Keepalived_vrrp[8647]: VRRP_Instance(VI_1) Entering MASTER STATE
Jun 13 17:48:40 CLW-DB3 Keepalived_vrrp[8647]: VRRP_Instance(VI_1) setting protocol VIPs.
Jun 13 17:48:40 CLW-DB3 Keepalived_vrrp[8647]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 10.10.56.87
Jun 13 17:48:40 CLW-DB3 Keepalived_vrrp[8647]: Opening script file /etc/keepalived/scripts/failover.sh
Jun 13 17:48:40 CLW-DB3 Keepalived_healthcheckers[8646]: Netlink reflector reports IP 10.10.56.87 added
Jun 13 17:48:40 CLW-DB3 Keepalived_vrrp[8647]: SMTP connection ERROR to [10.10.56.18]:25.
Jun 13 17:48:45 CLW-DB3 Keepalived_vrrp[8647]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 10.10.56.87
CLW-DB3:/etc/keepalived/scripts #
  • 日志参数介绍
 `VRRP_Instance(VI_1) Entering MASTER STATE` 表示此时18服务器 keepalived 进入master 状态,
` VRRP_Instance(VI_1) setting protocol VIPs` 给网卡绑定 `VIP`
  • 查看 18 服务器 IP地址
CLW-DB3:/etc/keepalived # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether fa:16:3e:8b:7c:28 brd ff:ff:ff:ff:ff:ff
    inet 10.10.56.18/24 brd 10.10.56.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.10.56.87/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe8b:7c28/64 scope link
       valid_lft forever preferred_lft forever
CLW-DB3:/etc/keepalived #

发现此时 VIP 绑定在18服务器网卡上

测试结果:当19服务器主库宕机后,通过keepalive ,18服务器备库自动切换为主库,VIP绑定在该服务器,并可继续对外提供服务,从而实现
高可用。

猜你喜欢

转载自blog.csdn.net/yaoqiancuo3276/article/details/80797620