PostgreSQL 9.1 中的自动故障转移

Cra*_*ein 18 postgresql failover

如何在 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"'  
Run Code Online (Sandbox Code Playgroud)

pg_hba.conf:

 host  replication   all   10.0.66.1/32      trust
 host  replication   all   10.0.66.2/32      trust
Run Code Online (Sandbox Code Playgroud)

备用服务器

postgresql.conf 和 pg_hba.conf 与主服务器上配置的相同。

恢复.conf:

 standby_mode = 'on'
 primary_conninfo = 'host=10.0.66.1'
 trigger_file = '/opt/pgsql91/data/trigger.txt'
Run Code Online (Sandbox Code Playgroud)

感谢 hzRoot,我现在明白了如何将服务器从备用服务器切换到主服务器。

使用以下命令,我可以将新从站与新主站同步,然后获取复制备份并运行。

在新主 (10.0.66.2) 上

  1. su - postgres
  2. 触摸 /opt/pgsql91/data/ 中的 trigger.txt
  3. recovery.conf 变成 recovery.done
  4. psql -c ";SELECT pg_start_backup('backup', true)";
  5. rsync -a -v -e ssh /opt/pgsql91/data/ 10.0.66.1:/opt/pgsql91/data/ --exclude postmaster.pid
  6. psql -c ";SELECT pg_stop_backup()";

在新从站 (10.0.66.1) 上

  1. 创建 recovery.conf : cp recovery.done to recovery.conf
  2. vi recovery.conf 更改ip地址:primary_conninfo = 'host=10.0.66.2'
  3. 启动 postgresql

所以我现在的问题是:

  1. 这是转换角色的正确方法吗?
  2. 有没有人自动化这个过程,如果是这样,你做了什么?
  3. 如果启用同步复制,我注意到新的主服务器不会提交任何事务,因为它正在等待从服务器响应。但是没有从服务器,因为另一台服务器,旧主服务器已关闭。这是正确的还是我需要在新从站关闭时暂时禁用同步复制?

Fra*_*ens 8

查看repmrg

repmgr 是一组开源工具,可帮助 DBA 和系统管理员管理 PostgreSQL 数据库集群。

通过利用 PostgreSQL 9 中引入的 Hot Standby 功能,repmgr 极大地简化了设置和管理具有高可用性和可扩展性要求的数据库的过程。

repmgr 通过以下方式简化了管理和日常管理,提高了生产力并降低了 PostgreSQL 集群的总体成本:

  • 监控复制过程;允许 DBA 发出高
  • 可用性操作,例如切换和故障转移。

它做两件事:

  1. repmgr:在集群上执行任务然后退出的命令程序
  2. repmgrd:管理和监控守护进程,监视集群并可以自动执行远程操作。

对于自动故障转移, repmgrd 可以解决问题,并且它不是网络中的 SPOF,如 pgPool。但是,监视所有守护进程并在失败后将它们恢复仍然很重要。

2.0 版即将发布,包括 RPM。