primary
添加replication用户
sudo -u postgres psql
-
CREATE USER rep REPLICATION CONNECTION LIMIT 30 ENCRYPTED PASSWORD 'rep-user-password';
用户名可自定义
编辑 pg_hba.conf
- 追加
host replication rep standby-private-ip/32 md5
编辑 postgresql.conf
listen_addresses = 'localhost,primary-private-ip'
max_connections = 610 # 客户端连接数+max_wal_senders
wal_level = hot_standby
max_wal_senders = 50
wal_keep_segments=200
hot_standby = on
重启 postgresql 服务
- 如果用 apt 安装并用 systemd 部署,则执行
sudo systemctl restart postgresql@9.5-main.service
standby (hot_standby)
停止 postgresql 服务
- 如果用 apt 安装并用 systemd 部署,则执行
sudo systemctl stop postgresql@9.5-main.service
生成初始数据
sudo mv /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main.old
sudo -u postgres pg_basebackup -h primary-private-ip -D /postgres/data -U rep -v -P --xlog-method=stream
- Password: (使用rep user的密码)
编辑 postgresql.conf
listen_addresses = 'localhost,standby-private-ip'
max_connections = 610 # 和primary保持一致
wal_level = hot_standby # 和primary保持一致
max_wal_senders = 50 # 和primary保持一致
wal_keep_segments=200 # 和primary保持一致
hot_standby = on # 和primary保持一致
recovery.conf
sudo cp /usr/share/postgresql/9.5/recovery.conf.sample /postgres/data/recovery.conf
sudo chown postgres:postgres /postgres/data/recovery.conf
- 编辑 recovery.conf
sudo vi /postgres/data/recovery.conf
- 修改相应的配置项
standby_mode = on primary_conninfo = 'host=primary-private-ip port=5432 user=rep password=rep-user-password'
启动 postgresql 服务
- sudo chmod 700 /postgres/data
- 如果用 apt 安装并用 systemd 部署,则执行
sudo systemctl start postgresql@9.5-main.service
trouble shooting
wal_keep_segments
- wal_keep_segments 要足够大,否则会造成standby server中断同步数据
max_connections
- max_connections 要根据 max_wal_senders 做调整
standby如何提升为primary
当 primary 宕机后,提升 standby 继续提供服务
- 命令格式 pg_ctl promote [-D datadir]
- 参考形式
sudo su postgres -c "/usr/lib/postgresql/9.5/bin/pg_ctl promote -D /var/lib/postgresql/9.5/main"
-- 注意数据路径可能不同
其他注意事项
-
要配置日志,便于排查问题。
-
primary and standby 的 postgresql.conf 除部分配置项不能相同外,其他尽量保持一致。便于后期维护,特别是当需要提升standby为primary时。
-
primary and standby 部署的机器和操作系统尽量保持一致。
网友评论