abr*_*low 5 postgresql replication failover
我已经通过本手册安装了 postgres 主节点和从节点:
在主 (10.0.0.1) 处:
sudo -u postgres initdb -D /data/postgres/main
Run Code Online (Sandbox Code Playgroud)
更改 postgresql.conf:
listen_addresses = '*'
wal_level = hot_standby
max_wal_senders = 2
logging_collector = on
max_wal_senders = 5
Run Code Online (Sandbox Code Playgroud)
将复制记录添加到 pg_hba.conf:
host replication replica 10.0.0.2/32 md5
Run Code Online (Sandbox Code Playgroud)
然后启动postgres
service postgresql start
Run Code Online (Sandbox Code Playgroud)
创建复制用户:
CREATE USER replica WITH REPLICATION ENCRYPTED PASSWORD '123456';
Run Code Online (Sandbox Code Playgroud)
并添加复制槽:
SELECT pg_create_physical_replication_slot('standby_slot');
Run Code Online (Sandbox Code Playgroud)
在从站 (10.0.0.2):
pg_basebackup -h 10.0.0.1 -U replica -D /db/postgres/main -X s -P
Run Code Online (Sandbox Code Playgroud)
在 postgresql.conf 中将状态更改为备用:
hot_standby = on
Run Code Online (Sandbox Code Playgroud)
添加recovery.conf:
standby_mode = 'on'
primary_conninfo = 'host=10.0.0.1 port=5432 user=replica password=123456'
primary_slot_name = 'standby_slot'
trigger_file = 'trigger'
Run Code Online (Sandbox Code Playgroud)
开始待机:
service postgresql start
Run Code Online (Sandbox Code Playgroud)
因此,复制工作正常。如果我创建数据库,它会同时出现在 master 和 slave 上。
如果 slave 宕机然后启动,所有的变化都会出现。这一切也很好。
但是如果主人宕机了,我就会遇到问题。当它停止时,我在从站创建触发文件。然后我在从属数据库创建另一个数据库,现在是主数据库。之后我启动master,触发自动删除文件,recovery.conf也自动重命名为recovery.done。好的。但是如何同步从slave(新primary)到master(旧primary)的变化呢?
我发现我必须做这四个步骤:
在大师处:
停止 postgres:
service postgresql stop
Run Code Online (Sandbox Code Playgroud)
在奴隶:
打开备份模式:
SELECT pg_backup_start('backup', true);
Run Code Online (Sandbox Code Playgroud)
然后将新数据从从站同步到主站。
然后关闭备份模式:
SELECT pg_backup_stop();
Run Code Online (Sandbox Code Playgroud)
最后一步后,我收到消息
NOTICE: WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup
Run Code Online (Sandbox Code Playgroud)
然后,如果我启动 master,它不会以日志消息开头:
FATAL: could not locate required checkpoint record
Run Code Online (Sandbox Code Playgroud)
我不明白,如何在 master 上获取新数据并使其再次成为主要数据。
所以在未来我计划安装 pgpool2 用于平衡和故障转移,但测试安装不起作用,因为我不知道这种机制应该如何工作。
一旦发生故障转移到备用服务器,就只有一台服务器在运行。这被称为简并状态。以前的备用数据库现在是主要数据库,但以前的主要数据库已关闭并且可能会保持关闭状态。要恢复正常操作,必须在以前的主系统启动时重新创建备用服务器,或者在第三个系统(可能是新系统)上重新创建。
为此,你需要一位recovery.conf
老师傅。这应该与当前的几乎相同,只是连接必须指向其他地方。