如何在 PostgreSQL 9.1 中设置两台相同的服务器以进行自动故障转移。
操作系统
Centos 5
PostgreSQL 9.1 从源代码编译
postgres 用户帐户存在于两台机器上,并且有一个 ssh 无密码密钥来连接到两台机器。
我当前的设置:
主服务器配置:
postgresql.conf:
listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16
wal_keep_segments = 8
archive_mode = on
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'
pg_hba.conf:
host replication all 10.0.66.1/32 trust
host replication all 10.0.66.2/32 trust
备用服务器
postgresql.conf 和 pg_hba.conf 与主服务器上的配置相同。
恢复.conf:
standby_mode = 'on'
primary_conninfo = 'host=10.0.66.1'
trigger_file = '/opt/pgsql91/data/trigger.txt'
多亏了 hzRoot,我现在明白了如何将服务器从备用服务器切换到主服务器。
使用以下命令,我可以将新的从服务器与新的主服务器同步,然后进行复制备份并运行。
在新主机上 (10.0.66.2)
- su - postgres
- /opt/pgsql91/data/ 中的 touch trigger.txt
- recovery.conf 变为 recovery.done
- psql -c ";SELECT pg_start_backup('backup', true)";
- rsync -a -v -e ssh /opt/pgsql91/data/ 10.0.66.1:/opt/pgsql91/data/ --exclude postmaster.pid
- psql -c ";SELECT pg_stop_backup()";
在新的奴隶 (10.0.66.1)
- 创建 recovery.conf:cp recovery.done 到 recovery.conf
- vi recovery.conf 更改 ip 地址:primary_conninfo = 'host=10.0.66.2'
- 启动 postgresql
所以我现在的问题是:
- 这是转换角色的正确方法吗?
- 有没有人自动化这个过程,如果有,你做了什么?
- 如果启用了同步复制,我注意到新的主服务器不会提交任何事务,因为它正在等待从属服务器响应。但是没有从服务器,因为另一台服务器,旧的主服务器已关闭。这是正确的还是我需要在新的从属设备关闭时暂时禁用同步复制?
查看repmrg:
它做了两件事:
对于自动故障转移,repmgrd 可以解决问题,它不是网络中的 SPOF,如 pgPool。但是,监视所有守护进程并在失败后将它们恢复过来仍然很重要。
2.0 版即将发布,包括 RPM。
在您的 recovery.conf 文件中,您应该添加一行,告诉 postgres 从主服务器故障转移到从服务器。你应该添加
当您在给定路径上创建此文件时。节点会改变。(文件不包含任何内容,它只是一个触发器)
您可以找到有关流式复制的其他信息
另一方面,也许可以通过一些技巧使其自动创建,但使用监控工具和手动进行故障转移会更好..
有没有人考虑过为此使用 pgpool-II?
http://pgpool.projects.postgresql.org/contrib_docs/simple_sr_setting/index.html
我为 PostgreSQL 设置复制。当老主人回来时,棘手的部分似乎发生了。
从我读过的内容来看,pgpool 似乎可以自动化其中的大部分内容。但是我不确定是否利用了 PostgreSQL 9.1 中已经存在的复制功能。