写点什么

如何通过 PG-Pool-II 来搭建一个高可用 Postgresql 集群

作者:Kevin_913
  • 2023-10-04
    广东
  • 本文字数:1493 字

    阅读完需:约 5 分钟

请注意目前 PG-Pool-II 只针对 PG 数据库,这篇文章也是通过 docker-compose 的方式在本地验证部署,Production 环境,可以根据容器的配置来修改启动配置。

准备工作

  • Docker 环境。

  • docker-compose。

  • PG 的 repmgr 镜像:docker.io/bitnami/postgresql-repmgr:14

  • pgpool 的镜像:docker.io/bitnami/pgpool:4

完整配置

version: '2.1'services:  pg-0:    image: docker.io/bitnami/postgresql-repmgr:14    ports:      - 5433:5432    volumes:      - ./pg_0_data:/bitnami/postgresql    environment:      - POSTGRESQL_POSTGRES_PASSWORD=888888 //对应postgres用户的密码      - POSTGRESQL_USERNAME=kevin //自定义数据库用户名称      - POSTGRESQL_PASSWORD=888888 //自定义数据库用户密码      - POSTGRESQL_DATABASE=ha //初始化数据库      - POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1 //replicas数量,你可以启动多个replica,跟nodes保持一致      - REPMGR_PRIMARY_HOST=pg-0 // 主数据库      - REPMGR_PARTNER_NODES=pg-1,pg-0 // 集群中数据库的节点      - REPMGR_NODE_NAME=pg-0 // 集群中数据库的标识      - REPMGR_NODE_NETWORK_NAME=pg-0 // 集群中数据库的网络标识      - REPMGR_USERNAME=repmgr // 做数据备份用的用户,这个image自带的,如果需要修改,需要修改pg_hba.conf,然后创建一个新的用户      - REPMGR_PASSWORD=repmgrpassword // 备份数据用户的密码,同上。  pg-1:    image: docker.io/bitnami/postgresql-repmgr:14    ports:      - 5434:5432    volumes:      - ./pg_1_data:/bitnami/postgresql    environment:      - POSTGRESQL_POSTGRES_PASSWORD=888888      - POSTGRESQL_USERNAME=kevin      - POSTGRESQL_PASSWORD=888888      - POSTGRESQL_DATABASE=ha      - POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1      - REPMGR_PRIMARY_HOST=pg-0      - REPMGR_PARTNER_NODES=pg-0,pg-1      - REPMGR_NODE_NAME=pg-1      - REPMGR_NODE_NETWORK_NAME=pg-1      - REPMGR_USERNAME=repmgr      - REPMGR_PASSWORD=repmgrpassword  pgpool:    image: docker.io/bitnami/pgpool:4    ports:      - 5432:5432    environment:      - PGPOOL_BACKEND_NODES=0:pg-0:5432,1:pg-1:5432 // 节点列表,需要加上端口      - PGPOOL_SR_CHECK_USER=kevin // 用来检测节点状态的用户。      - PGPOOL_SR_CHECK_PASSWORD=888888      - PGPOOL_ENABLE_LDAP=no       - PGPOOL_POSTGRES_USERNAME=postgres // postgresql的用户      - PGPOOL_POSTGRES_PASSWORD=888888      - PGPOOL_ADMIN_USERNAME=admin // 管理员用户      - PGPOOL_ADMIN_PASSWORD=888888      - PGPOOL_ENABLE_LOAD_BALANCING=yes // 有多个read的节点的时候的配置      - PGPOOL_POSTGRES_CUSTOM_USERS=kevin // 应用程序中的使用的用户      - PGPOOL_POSTGRES_CUSTOM_PASSWORDS=888888    healthcheck:      test: [ "CMD", "/opt/bitnami/scripts/pgpool/healthcheck.sh" ] // 节点健康检查      interval: 10s // 检查间隔      timeout: 5s // 超时时间      retries: 5 // 检测次数,当超过检测次数的时候,如果主节点不可用,会自动切换到下一个节点,slave节点不可用的时候 会被移除。
复制代码

使用方式。

  • 在代码中使用 pgpool 的链接,这样代码层面不需要去关注读写分离的操作。

  • 只有主数据能写数据,slave 节点都是 read-only 状态。

  • 数据库主键尽量手动设置,避免未知问题。


参考资料


视频地址: 如何通过PG-Pool-II搭建一个高可用Postgresql数据库_哔哩哔哩_bilibili

发布于: 刚刚阅读数: 5
用户头像

Kevin_913

关注

纸上得来终觉浅,绝知此事要躬行。 2019-02-25 加入

专注于代码和设计15+年。 主要涉及Java,Golang,云平台。

评论

发布
暂无评论
如何通过PG-Pool-II来搭建一个高可用Postgresql集群_数据库_Kevin_913_InfoQ写作社区