Repmgrd宕机
主从上的Repmgrd宕机不影响服务运行,及时启动即可
仅在repmgrd宕机后发生再发生PG或服务器宕机,则无法正常切换
从服务器宕机
前置状态
- 3为主服务器
- 2为从服务器
- VIP为6,主服务器才能具备VIP
模拟场景
2服务器宕机
通过停止reboot操作系统模拟该场景
预期结果
主和VIP能够正常访问和写入数据
检查VIP状态
通过VIP6访问PG,验证是否正常
后续手动操作
1启动数据库
2检查复制状态
主3服务器查询
SELECT * FROM pg_stat_replication;
从2服务器查询
SELECT * FROM pg_stat_wal_receiver
3注册为从
在从2和主3上查询状态
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf cluster show
应看到类似如下信息
ID | Name | Role | Status | Upstream | Location | Connection string
----+----------+---------+-----------+----------+----------+-----------------------------------------------------------
2 | emppgs02 | standby | running | emppgs03 | default | host=10.8.1.2 user=repmgr dbname=repmgr connect_timeout=2
3 | emppgs03 | primary | * running | | default | host=10.8.1.3 user=repmgr dbname=repmgr connect_timeout=2
4检查repmgrd状态
检查
ps -ef | grep repmgrd
如果进程不存在,启动repmgrd
从数据库服务宕机,服务器正常
前置状态
- 3为主服务器
- 2为从服务器
- VIP为6,主服务器才能具备VIP
模拟场景
从2数据库服务宕机,服务器正常
通过停止数据库模拟该场景
预期结果
主和VIP能够正常访问和写入数据
检查VIP状态
通过VIP6访问PG,验证是否正常
后续手动操作
1启动数据库
启动从2数据库服务
2检查复制状态
主3服务器查询
SELECT * FROM pg_stat_replication;
从2服务器查询
SELECT * FROM pg_stat_wal_receiver
3注册为从
在从2和主3上查询状态
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf cluster show
应看到类似如下信息
ID | Name | Role | Status | Upstream | Location | Connection string
----+----------+---------+-----------+----------+----------+-----------------------------------------------------------
2 | emppgs02 | standby | running | emppgs03 | default | host=10.8.1.2 user=repmgr dbname=repmgr connect_timeout=2
3 | emppgs03 | primary | * running | | default | host=10.8.1.3 user=repmgr dbname=repmgr connect_timeout=2
4检查repmgrd状态
检查
ps -ef | grep repmgrd
如果进程不存在,启动repmgrd
从服务器网络故障
前置状态
- 3为主服务器
- 2为从服务器
- VIP为6,主服务器才能具备VIP
模拟场景1
3服务器与外界网络断开
通过防火墙或腾讯云安全组模拟
3服务器只允许访问22端口入站,不限制任何出站
2服务器不限制任何出入站
预期结果1
2由于和3网络不通,认为3宕机,认为自己成为主,但由于无法从3拿到VIP,实际上无法对外提供服务
实际上仍然由3作为主,并具有VIP
模拟场景2
3服务器与外界网络断开后恢复正常
预期结果2
仍然由3作为主,并具有VIP
检查VIP状态
通过VIP6访问PG,验证是否正常
恢复后续手动操作
手动将2变为从并跟随主3
1从主3克隆数据到2
2的数据库实例必须先关闭
删除数据库实例data下所有数据
注意不要删除/data/pgdata10文件夹,否则重新创建该文件夹并给postgres用户授权
rm -rf /data/pgdata10/*
测试能否使用主服务器进行clone
su postgres
repmgr -h 10.8.1.3 -U repmgr -d repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby clone --dry-run
如果未出现Error,执行Clone
repmgr -h 10.8.1.3 -U repmgr -d repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby clone --fast-checkpoint
注:pgdat下所有文件如postgresql.conf, postgresql.auto.conf, pg_hba.conf和pg_ident.conf都将被拷贝,可能需要手动修改其中的配置
修改完PostgreSQL的配置文件后,启动3的PG服务
2检查复制状态
主3服务器查询
SELECT * FROM pg_stat_replication;
从2服务器查询
SELECT * FROM pg_stat_wal_receiver
3注册为从
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby register
如果因节点已存在而失败,强制注册
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby register --force
在从2和主3上查询状态
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf cluster show
应看到类似如下信息
ID | Name | Role | Status | Upstream | Location | Connection string
----+----------+---------+-----------+----------+----------+-----------------------------------------------------------
2 | emppgs02 | standby | running | emppgs03 | default | host=10.8.1.2 user=repmgr dbname=repmgr connect_timeout=2
3 | emppgs03 | primary | * running | | default | host=10.8.1.3 user=repmgr dbname=repmgr connect_timeout=2
4检查repmgrd状态
检查
ps -ef | grep repmgrd
如果进程不存在,启动repmgrd
主服务器宕机
前置状态
- 3为主服务器
- 2为从服务器
- VIP为6,主服务器才能具备VIP
模拟场景
3服务器宕机
通过停止reboot操作系统模拟该场景
预期结果
30秒后2自动提升为主并对外服务
1.检查集群节点状态
在新主2服务器上检查
su postgres
# 查询集群节点状态
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf cluster show
预期结果:
2服务器 role为primary,status为* running,例如
ID | Name | Role | Status | Upstream | Location | Connection string
----+----------+---------+-----------+----------+----------+-----------------------------------------------------------
2 | emppgs02 | primary | * running | | default | host=10.8.1.2 user=repmgr dbname=repmgr connect_timeout=2
3 | emppgs03 | primary | - failed | | default | host=10.8.1.3 user=repmgr dbname=repmgr connect_timeout=2
2.检查VIP状态
通过VIP6访问PG,验证是否正常
后续手动操作
手动将老主3变为从并跟随新主2
1从新主2克隆数据到旧主3
旧主3的数据库实例必须先关闭
删除数据库实例data下所有数据
注意不要删除/data/pgdata10文件夹,否则重新创建该文件夹并给postgres用户授权
rm -rf /data/pgdata10/*
测试能否使用主服务器进行clone
su postgres
repmgr -h 10.8.1.2 -U repmgr -d repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby clone --dry-run
如果未出现Error,执行Clone
repmgr -h 10.8.1.2 -U repmgr -d repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby clone --fast-checkpoint
注:pgdat下所有文件如postgresql.conf, postgresql.auto.conf, pg_hba.conf和pg_ident.conf都将被拷贝,可能需要手动修改其中的配置
修改完PostgreSQL的配置文件后,启动3的PG服务
2检查复制状态
主3服务器查询
SELECT * FROM pg_stat_replication;
从2服务器查询
SELECT * FROM pg_stat_wal_receiver
3注册为从
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby register
如果因节点已存在而失败,强制注册
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby register --force
在从3和主2上查询状态
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf cluster show
应看到类似如下信息
ID | Name | Role | Status | Upstream | Location | Connection string
----+----------+---------+-----------+----------+----------+-----------------------------------------------------------
2 | emppgs02 | primary | * running | | default | host=10.8.1.2 user=repmgr dbname=repmgr connect_timeout=2
3 | emppgs03 | standby | running | emppgs02 | default | host=10.8.1.3 user=repmgr dbname=repmgr connect_timeout=2
4检查repmgrd状态
检查
ps -ef | grep repmgrd
如果进程不存在,启动repmgrd
主数据库宕机,服务器正常
前置状态
- 2为主服务器
- 3为从服务器
- VIP为6,主服务器才能具备VIP
模拟场景
2数据库宕机后,2服务器正常
通过停止pg服务模拟该场景
预期结果
30秒后3自动提升为主并对外服务
1.检查集群节点状态
在新主3服务器上检查
su postgres
# 查询集群节点状态
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf cluster show
预期结果:
3服务器 role为primary,status为* running,例如
ID | Name | Role | Status | Upstream | Location | Connection string
----+----------+---------+-----------+----------+----------+-----------------------------------------------------------
2 | emppgs02 | primary | - failed | | default | host=emppgs02 user=repmgr dbname=repmgr
3 | emppgs03 | primary | * running | | default | host=10.8.1.3 user=repmgr dbname=repmgr connect_timeout=2
2.检查VIP状态
通过VIP6访问PG,验证是否正常
后续手动操作
手动将老主变为从并跟随新主
1从新主3克隆数据到旧主2
旧主2的数据库实例必须先关闭
删除数据库实例data下所有数据
注意不要删除/data/pgdata10文件夹,否则重新创建该文件夹并给postgres用户授权
rm -rf /data/pgdata10/*
测试能否使用主服务器进行clone
su postgres
repmgr -h 10.8.1.3 -U repmgr -d repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby clone --dry-run
如果未出现Error,执行Clone
repmgr -h 10.8.1.3 -U repmgr -d repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby clone --fast-checkpoint
注:pgdat下所有文件如postgresql.conf, postgresql.auto.conf, pg_hba.conf和pg_ident.conf都将被拷贝,可能需要手动修改其中的配置
修改完PostgreSQL的配置文件后,启动2的PG服务
2检查复制状态
主3服务器查询
SELECT * FROM pg_stat_replication;
从2服务器查询
SELECT * FROM pg_stat_wal_receiver
3注册为从
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby register
如果因节点已存在而失败,强制注册
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby register --force
在从2和主3上查询状态
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf cluster show
应看到类似如下信息
ID | Name | Role | Status | Upstream | Location | Connection string
----+----------+---------+-----------+----------+----------+-----------------------------------------------------------
2 | emppgs02 | standby | running | emppgs03 | default | host=10.8.1.2 user=repmgr dbname=repmgr connect_timeout=2
3 | emppgs03 | primary | * running | | default | host=10.8.1.3 user=repmgr dbname=repmgr connect_timeout=2
4检查repmgrd状态
检查
ps -ef | grep repmgrd
如果进程不存在,启动repmgrd
主服务器网络故障
前置状态
- 2为主服务器
- 3为从服务器
- VIP为6,主服务器才能具备VIP
模拟场景
-
2服务器与外界网络断开
通过防火墙或腾讯云安全组模拟
2服务器只允许访问22端口入站,不限制任何出站
3服务器不限制任何出入站 -
2服务器与3之间断开。2和3可以正常访问其他主机
预期结果
30秒后3自动提升为主并对外服务
1.检查集群节点状态
在新主3服务器上检查
su postgres
# 查询集群节点状态
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf cluster show
预期结果:
3服务器 role为primary,status为* running,例如
ID | Name | Role | Status | Upstream | Location | Connection string
----+----------+---------+-----------+----------+----------+-----------------------------------------------------------
2 | emppgs02 | primary | - failed | | default | host=10.8.1.2 user=repmgr dbname=repmgr connect_timeout=2
3 | emppgs03 | primary | * running | | default | host=10.8.1.3 user=repmgr dbname=repmgr connect_timeout=2
2.检查VIP状态
通过VIP6访问PG,验证是否正常
恢复后续手动操作
手动将老主2变为从并跟随新主3
从新主3克隆数据到旧主2
旧主2的数据库实例必须先关闭
删除数据库实例data下所有数据
注意不要删除/data/pgdata10文件夹,否则重新创建该文件夹并给postgres用户授权
rm -rf /data/pgdata10/*
测试能否使用主服务器进行clone
su postgres
repmgr -h 10.8.1.3 -U repmgr -d repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby clone --dry-run
如果未出现Error,执行Clone
repmgr -h 10.8.1.3 -U repmgr -d repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby clone --fast-checkpoint
注:pgdat下所有文件如postgresql.conf, postgresql.auto.conf, pg_hba.conf和pg_ident.conf都将被拷贝,可能需要手动修改其中的配置
修改完PostgreSQL的配置文件后,启动3的PG服务
检查复制状态
主3服务器查询
SELECT * FROM pg_stat_replication;
从2服务器查询
SELECT * FROM pg_stat_wal_receiver
2注册为从
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby register
如果因节点已存在而失败,强制注册
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf standby register --force
在从2和主3上查询状态
repmgr -f /opt/repmgr/4.0.5/etc/repmgr.conf cluster show
应看到类似如下信息
ID | Name | Role | Status | Upstream | Location | Connection string
----+----------+---------+-----------+----------+----------+-----------------------------------------------------------
2 | emppgs02 | standby | running | emppgs03 | default | host=10.8.1.2 user=repmgr dbname=repmgr connect_timeout=2
3 | emppgs03 | primary | * running | | default | host=10.8.1.3 user=repmgr dbname=repmgr connect_timeout=2
4检查repmgrd状态
检查
ps -ef | grep repmgrd
如果进程不存在,启动repmgrd