我有两台主机,设置为非常简单的主从。所有服务器都连接到浮动 IP 10.1.1.10。
主持人A:
Designation: Master
Floating IP - 10.1.1.10
Standard IP - 10.1.1.11
relevant pg_hba.conf - these match so I can fail back\forth
host replication replica_user 10.1.1.11/32 md5
host replication replica_user 10.1.1.12/32 md5
host replication replica_user 10.1.1.10/32 md5
relevant postgersql.conf - these match so I can fail back\forth
checkpoint_timeout = 30min # range 30s-1d
max_wal_size = 2GB
min_wal_size = 1GB
checkpoint_completion_target = 0.7 # checkpoint target duration, 0.0 - 1.0
主持人B:
Designation: Slave
Floating IP - N\A
Standard IP - 10.1.1.12
relevant pg_hba.conf - these match so I can fail back\forth
host replication replica_user 10.1.1.11/32 md5
host replication replica_user 10.1.1.12/32 md5
host replication replica_user 10.1.1.10/32 md5
relevant postgersql.conf - these match so I can fail back\forth
checkpoint_timeout = 30min # range 30s-1d
max_wal_size = 2GB
min_wal_size = 1GB
checkpoint_completion_target = 0.7 # checkpoint target duration, 0.0 - 1.0
使用`
systemctl postgresql stop
rm -rf /var/lib/pgsql/12/data/
pg_basebackup -h 10.1.1.11 -D /var/lib/pgsql/12/data -U replica_user -P -v -R -Xs
我知道这是有效的,因为我看到从服务器从主服务器“拉”。从服务器还有一个 postgresql.auto.conf,它告诉它“拉”
我的故障转移过程如下。一旦完成,服务器就开始向主机 B(新的主服务器)写入数据。
Host A:
systemctl stop postgrsql
Drop interface 10.1.1.10
Host B:
pg_ctl promote /var/lib/pgsql/12/data
Bring interface up
Restart postgresql
现在,当我想进行故障恢复时,问题就出现了。故障恢复似乎非常笨拙,因为我现在必须转到主机 A
Host A:
systemctl postgresql stop
rm -rf /var/lib/pgsql/12/data/
pg_basebackup -h 10.1.1.12 -D /var/lib/pgsql/12/data -U replica_user -P -v -R -Xs
现在主机 A 是一个合适的从属服务器。我等待所有更改从主机 B 传播到主机 A(我在 A 上进行维护时执行的插入\更新)。现在是时候让 B 再次成为从属服务器了。
Host A:
pg_ctl promote /var/lib/pgsql/12/data
Flip IP
At this point 'A' is the master and receiving writes. There is no slave. Now it's time to make B a slave.
Host B:
systemctl postgresql stop
rm -rf /var/lib/pgsql/12/data/
pg_basebackup -h 10.1.1.11 -D /var/lib/pgsql/12/data -U replica_user -P -v -R -Xs
现在 A 再次成为主服务器,而 B 正在拉取。我不明白为什么我必须复制整个数据库才能翻转故障恢复。主机 B 实际上是主机 A,但有一些差异(在维护期间,服务器有一些更新\插入)。为什么我不能只将差异从主机 B 复制到 A,翻转它,然后将现在的额外更改从 A 推送到 B。
看起来这个主\从翻转应该是一个单一命令。