PostgreSQL集群的一种解决方案

……………

集群要考虑的问题

当作PostgreSQL集群时应考虑数据间的同步问题,并发读写问题,故障自动切换问题,数据库备份问题,以下为这些问题的一种解决方案

数据同步采用流复制

关于配置可参考官方文档高可用性与负载均衡与复制部分

用pgpool-II实现负载均衡

pgpool-II 是一个位于 PostgreSQL 服务器和 PostgreSQL 数据库客户端之间的中间件,具体介绍及使用看官方文档,它提供以下功能:

  • 连接池
  • 复制
  • 负载均衡
  • 限制超过限度的连接

用repmgr作流复制主从间复制流向的切换

虽然pg本身有流复制功能可以保证有多个备库,可要做到自动切换还是不容易的,缺点是自动切换后原来的主库就要重新手工调整,这个太麻烦了,而repmgr可以用来解决此问题,使用可以参考这篇文章

pgpool-II单点故障问题

至于pgpool-II的高可用问题,自从pgpool 3.2以后提供了watchdog功能以消除pgpool的单点故障,不过需要对外暴露一个虚拟IP,考虑在阿里云服务器上IP是分配好的不好再虚拟一个出来,这块可以在客户端连接数据库的配置处同时配置两个pgpool2的连接,以实现让客户
端自己处理pgpool2的高可用问题

测试

使用 pgbench 进行数据库压力测试,验证集群的效果,使用参考

数据库备份

数据库备份可以自己写脚本也可用现场的工具,这里可以使用barnman,使用手册参考文章

小结

以上repmgr,barnman工具都来自这个公司,还有其它工具也可尝试

整体配置可参考这篇文章