Postgresql - Master\Slave 异步复制 - 如何快速来回失败?

Postgresql - Master\Slave 异步复制 - 如何快速来回失败?

我有两台主机,设置为非常简单的主从。所有服务器都连接到浮动 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。

看起来这个主\从翻转应该是一个单一命令。

相关内容