Postgresql通过docker进行高可用部署 pgpool-II

在postgresql官网看了pgpool-II的文档,发现部署比较麻烦

pgpool-II官方文档:Documentation - pgpool Wiki

为了方便快捷还是使用docker部署,然后在dockerhub上找到了相关的镜像:

bitnami/postgresql-repmgrbitnami/pgpool

从如下截图中可以看到下载量还是很高的:

简单介绍就是:

bitnami/postgresql-repmgrPostgreSQL HA对应的docker镜像,PostgreSQL HA 是 PostgreSQL 集群解决方案,其中包括 PostgreSQL 复制管理器,这是一个用于管理 PostgreSQL 集群上的复制和故障转移的开源工具。

bitnami/pgpoolPgpool-II 对应的docker镜像,是 PostgreSQL 代理。它位于 PostgreSQL 服务器和它们的客户端之间,提供连接池、负载平衡、自动故障转移和复制。

试验环境

两台机器:server-0:192.168.30.141、server-1:192.168.30.134

pg-0、pg-1代表postgresql-repmgr容器

pg-0做主库,pg-1做从库

系统:ubuntu20.04

docker版本20.10.12

docker-compose版本1.25.0

需要准备的镜像

bitnami/postgresql-repmgr:14 对应着postgresql14

bitnami/pgpool:4

修改hosts文件

分别修改server-0、server-1上的hosts文件

sudo vim /etc/hosts添加下面的内容

text

192.168.30.141 pg-0
192.168.30.134 pg-1

部署数据库服务器

在server-0的创建文件:touch ~/pgdb/docker-compose.yml

yaml

version: '2'

services:
  pg-0:
    image: bitnami/postgresql-repmgr:14
    network_mode: "host"
    container_name: "pgrepmgr0"
    ports:
      - 5432
    volumes:
      - ./data:/bitnami/postgresql
    environment:
      - POSTGRESQL_POSTGRES_PASSWORD=adminpassword
      - POSTGRESQL_USERNAME=customuser
      - POSTGRESQL_PASSWORD=custompassword
      - POSTGRESQL_DATABASE=customdatabase
      - POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1
      - REPMGR_USERNAME=repmgr
      - REPMGR_PASSWORD=repmgrpassword
      - REPMGR_PRIMARY_HOST=pg-0
      - REPMGR_PRIMARY_PORT=5432
      - REPMGR_PARTNER_NODES=pg-0,pg-1:5432
      - REPMGR_NODE_NAME=pg-0
      - REPMGR_NODE_NETWORK_NAME=pg-0
      - REPMGR_PORT_NUMBER=5432
    restart: always
      

在server-1的创建文件:touch ~/pgdb/docker-compose.yml

yaml

version: '2'

services:
  pg-1:
    image: bitnami/postgresql-repmgr:14
    network_mode: "host"
    container_name: "pgrepmgr1"
    volumes:
      - ./data:/bitnami/postgresql
    environment:
      - POSTGRESQL_POSTGRES_PASSWORD=adminpassword
      - POSTGRESQL_USERNAME=customuser
      - POSTGRESQL_PASSWORD=custompassword
      - POSTGRESQL_DATABASE=customdatabase
      - POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1
      - REPMGR_USERNAME=repmgr
      - REPMGR_PASSWORD=repmgrpassword
      - REPMGR_PRIMARY_HOST=pg-0
      - REPMGR_PRIMARY_PORT=5432
      - REPMGR_PARTNER_NODES=pg-0,pg-1:5432
      - REPMGR_NODE_NAME=pg-1
      - REPMGR_NODE_NETWORK_NAME=pg-1
      - REPMGR_PORT_NUMBER=5432
    restart: always

为了数据持久化,我们把/bitnami/postgresql目录挂载到当前的data目录中

docker-compose up的时候应该会出现权限问题,这个时候我们给新建的data目录相应权限就行了,执行如下命令:

sudo chgrp -R root data

sudo chmod -R g+rwX data

再次docker-compose up -d应该就好了

部署pgpool

server-0中

为了后续方便修改配置文件,我们把配置文件挂载出来

首先在创建配置文件./conf/myconf.conf

然后在创建文件touch ~/pgpool/docker-compose.yml

yaml

version: '2.1'
services:
  pgpool:
    image: bitnami/pgpool:4
    container_name: "pgpool"
    network_mode: "bridge"
    ports:
      - 9999:5432
    volumes:
      - ./conf/myconf.conf:/config/myconf.conf
    environment:
      - PGPOOL_USER_CONF_FILE=/config/myconf.conf
      - PGPOOL_BACKEND_NODES=0:pg-0:5432,1:pg-1:5432
      - PGPOOL_SR_CHECK_USER=repmgr
      - PGPOOL_SR_CHECK_PASSWORD=repmgrpassword
      - PGPOOL_ENABLE_LDAP=no
      - PGPOOL_POSTGRES_USERNAME=postgres
      - PGPOOL_POSTGRES_PASSWORD=adminpassword
      - PGPOOL_ADMIN_USERNAME=admin
      - PGPOOL_ADMIN_PASSWORD=adminpassword
      - PGPOOL_ENABLE_LOAD_BALANCING=yes
      - PGPOOL_POSTGRES_CUSTOM_USERS=customuser
      - PGPOOL_POSTGRES_CUSTOM_PASSWORDS=custompassword
    restart: always
    extra_hosts:
      - "pg-0:192.168.30.141"
      - "pg-1:192.168.30.134"
    healthcheck:
      test: ["CMD", "/opt/bitnami/scripts/pgpool/healthcheck.sh"]
      interval: 10s
      timeout: 5s
      retries: 5

docker-compose up后看没有报错就好了,通过pgpool可以实现数据库的负载均衡和读写分离

测试

测试数据能否共享

用navicat连接pgpoll

创建一个表插入数据后看pg-0和pg-1是否一致

创建users表然后插入两条数据:

而且pg-1从库只能读不能写,在pg-1中直接修改数据会报如下错误:

测试能否故障转移

我们停掉主库pg-0后查看pgpool服务日志

从日志中可以看到当pg-0挂掉后会再重试5次,如果还访问不了会执行find_primary_node方法查找可以作为主节点的节点,然后把找到节点设置为新的主节点,所以现在pg-1是主节点,这个时候我们访问pgpoll还是能访问的,现在在users表里面再添加一行数据:

然后去pg-1中查看一下,数据是同步的

我们在把pg-0启动起来。然后看pgpool日志如下,pg-1是可以成功链接到pgpool的

看pg-1的日志如下:

会发现就算pg-0重新启动器来了,但是pg-1还是主节点不变,pg-0又会成为副节点。

去pg-0中查看,刚刚新插入的数据也能同步的。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
pgpool-ii的配置可以通过源码安装或者使用yum安装来完成。如果选择源码安装,可以按照以下步骤进行配置: 1. 解压源码包:使用命令`tar -xvf pgpool-II-4.2.2.tar.gz`解压源码包。 2. 进入解压后的目录:使用命令`cd pgpool-II-4.2.2`进入解压后的目录。 3. 配置安装路径:使用命令`./configure --prefix=/usr/package/pgpool-II-4.2.2`配置安装路径。 4. 编译和安装:使用命令`make && make install`进行编译和安装。 如果选择使用yum安装,可以按照以下步骤进行配置: 1. 安装yum源:使用命令`yum install -y https://www.pgpool.net/yum/rpms/4.2/redhat/rhel-7-x86_64/pgpool-II-release-4.2-1.noarch.rpm`安装pgpool的yum源。 2. 安装pgpool:使用命令`yum install -y pgpool-II-pg11-devel.x86_64`安装pgpool。 3. 启用pgpool服务:使用命令`systemctl enable pgpool.service`启用pgpool服务。 无论是源码安装还是yum安装,配置文件都可以在`/usr/package/pgpool-II-4.2.2/etc`目录下找到。可以将`pgpool.conf.sample-stream`复制为`pgpool.conf`进行配置。 需要注意的是,从Pgpool-II 4.2版本开始,所有的配置都将通过`/etc/pgpool/`目录下的`pgpool_node_id`文件来区分节点。 另外,如果需要进行postgresql的配置流同步,可以先安装postgresql,然后根据具体需求进行配置。 希望以上信息对您有所帮助。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [pgpool-II的安装及配置读写分离的高可用pg集群](https://blog.csdn.net/qq_35997793/article/details/114028254)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值