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

keepalived HA 与 PostgreSQL HA 自动切换测试

搭建环境

服务器角色
10.10.56.19PostgreSQL master
10.10.56.18PostgreSQL slave
10.10.56.87VIP
10.10.56.19keepalived master
10.10.56.18keepalived 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绑定在该服务器,并可继续对外提供服务,从而实现
高可用。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值