目录

1 说明:

2. 基于docker的集群实践

2.1 方案设计

2.2 docker-compose.yml

2.2.1 要点

2.2.2 pg-0

2.2.3 pg-1

2.2.4 pgpool

2.3 测试

2.3.1 节点断掉后重连,数据自动同步

3. 单机开发环境安装

4. 宝塔下的postgres扩展安装

参考 :

附录:

工具

安装扩展

相关命令

repmgr管理

pq 控制台


1 说明:

在做任何系统之前,选择哪种数据底座做支持很重要,是一栋大厦地基牢不牢固的根本问题,这里用Postgresql基于docker实现了分布式的集群实践,分享之。

2. 基于docker的集群实践

2.1 方案设计

- 两个已安装了docker的Ubuntu22.04虚拟机,其中pg-0为主节点, pg-1为从节点,pgpool为负载均衡节点。

- 使用最新镜像: bitnami/postgresql-repmgr:latest, 当前版本是16.4

Hosts IP:Port 备注
pg-0 192.168.0.130:5432 主节点
pg-1 192.168.0.131:5432 从节点
pgpool 192.168.0.130:9999 负载平i衡器,连接池

构建成功后如图:

2.2 docker-compose.yml
2.2.1 要点

- 因为Server装的是单独的docker环境, 并非Docker Swarm, 又由于是容器分离的环境,所以Docker的Network Mode需使用host类型 (之前试过映射端口的连接,怎样都加不到集群)

- 将/tmp映射出来,当不正常开关机时,会有错误:"[ERROR] PID file "/tmp/repmgrd.pid" exists and seems to contain a valid PID",可通过删除 该目录下pid文件解决

2.2.2 pg-0
services:
  pg-0:
    image: bitnami/postgresql-repmgr:latest
    container_name: pg-0
    network_mode: host
    ports:
      - 5432
    volumes:
      - /data0/Server/Db/pq-repmgr:/bitnami/postgresql
      - /data0/Server/Temp/pq-repmgr:/tmp
    environment:
      - POSTGRESQL_POSTGRES_PASSWORD=星星
      - POSTGRESQL_USERNAME=postgres
      - POSTGRESQL_PASSWORD=星星
      - POSTGRESQL_DATABASE=postgres
      - POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1
      - REPMGR_PASSWORD=星星
      - REPMGR_PRIMARY_HOST=pg-0
      - REPMGR_PRIMARY_PORT=5432
      - REPMGR_PARTNER_NODES=pg-0:5432,pg-1:5432
      - REPMGR_NODE_NAME=pg-0
      - REPMGR_NODE_NETWORK_NAME=pg-0
      - REPMGR_PORT_NUMBER=5432
    restart: always
    extra_hosts:
      - "pg-0:192.168.0.130"
      - "pg-1:192.168.0.131"
2.2.3 pg-1
services:
  pg-1:
    image: bitnami/postgresql-repmgr:latest
    container_name: pg-1
    network_mode: host
    ports:
      - 5432
    volumes:
      - /data0/Server/Db/pq-repmgr:/bitnami/postgresql
      - /data0/Server/Temp/pq-repmgr:/tmp
    environment:
      - POSTGRESQL_POSTGRES_PASSWORD=星星
      - POSTGRESQL_USERNAME=postgres
      - POSTGRESQL_PASSWORD=星星
      - POSTGRESQL_DATABASE=postgres
      - POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1
      - REPMGR_PASSWORD=星星
      - REPMGR_PRIMARY_HOST=pg-0
      - REPMGR_PRIMARY_PORT=5432
      - REPMGR_PARTNER_NODES=pg-0:5432,pg-1:5432
      - REPMGR_NODE_NAME=pg-1
      - REPMGR_NODE_NETWORK_NAME=pg-1
      - REPMGR_PORT_NUMBER=5432
    restart: always
    extra_hosts:
      - "pg-0:192.168.0.130"
      - "pg-1:192.168.0.131"
2.2.4 pgpool

加入配置 REPMGR_PRIMARY_HOST=pg-0 (即主服务),则读写都可以了,否则是只读模式, 当通过连接pgpool删减或增加表时,自动同步到pg-0与pg-1

services:
  pgpool:
    image: bitnami/pgpool:latest
    container_name: "pgpool"
    ports:
      - 9999:5432
    environment:
      - PGPOOL_BACKEND_NODES=0:pg-0:5432,1:pg-1:5432
      - PGPOOL_SR_CHECK_USER=repmgr
      - PGPOOL_SR_CHECK_PASSWORD=星星
      - PGPOOL_ENABLE_LDAP=no
      - PGPOOL_POSTGRES_USERNAME=postgres
      - PGPOOL_POSTGRES_PASSWORD=星星
      - PGPOOL_ADMIN_USERNAME=admin
      - PGPOOL_ADMIN_PASSWORD=星星
      - PGPOOL_ENABLE_LOAD_BALANCING=yes
      - PGPOOL_POSTGRES_CUSTOM_USERS=customuser
      - PGPOOL_POSTGRES_CUSTOM_PASSWORDS=星星
      - REPMGR_PRIMARY_HOST=pg-0
    restart: always
    extra_hosts:
      - "pg-0:192.168.0.130"
      - "pg-1:192.168.0.131"
    healthcheck:
      test: ["CMD", "/opt/bitnami/scripts/pgpool/healthcheck.sh"]
      interval: 10s
      timeout: 5s
      retries: 5

2.3 测试

2.3.1 节点断掉后重连,数据自动同步

- 停掉pg-1节点, 然后连接pgpool,新增一个t1表,插入一条数据, 重启pg-1节点,观察相应数据库是否有新增t1表及数据完整性,测试通过。

3. 单机开发环境安装

系统 ubuntu22.04

# 安装 postgresql16
apt-get update
apt-get install postgresql-16

# 完后开用户,修改postgres超管密码
su postgresql
psql

CREATE USER fsft_t1 PASSWORD 'xxx';
ALTER USER postgres WITH PASSWORD 'xxx';

# 允许外部ip访问
vi /etc/postgresql/16/main/pg_hba.conf

添加下面
host    all             all             0.0.0.0/0               scram-sha-256

4. 宝塔下的postgres扩展安装

宝塔下带有快速的pq数据库安装,可按以下步骤安装扩展:

1. 设置环境

# 搜索pg_config路径
find /www -name pg_config

# 添加PG_CONFIG路径到/etc/profil
export PG_CONFIG=/www/server/pgsql/bin/pg_config

# 重载环境
source /etc/profile


2 获取并安装扩展

cd /tmp
git clone --branch v0.8.0 https://github.com/pgvector/pgvector.git
cd pgvector
make
make install # may need sudo

参考 :

- pgpool 参数: containers/bitnami/pgpool at main · bitnami/containers · GitHub

PostgreSQL添加UUID扩展 

附录:

工具
安装扩展
# 用apt安装pq扩展, 装完后无需重启pq服务
apt search postgresql-16
apt install postgresql-16-pgvector

# 查看当前数据库已启用的扩展
SELECT * FROM pg_extension;

# 查看当前pq可用的扩展
SELECT * FROM pg_available_extensions;

# 为当前数据库启用扩展
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "vector";


相关命令
repmgr管理
# 查看连接的节点
/opt/bitnami/scripts/postgresql-repmgr/entrypoint.sh repmgr -f /opt/bitnami/repmgr/conf/repmgr.conf cluster show
pq 控制台
# 查看版本
select version();

# 查看插件
select * from pg_extension;
SELECT * FROM pg_available_extensions;

# 为数据库安装插件
CREATE EXTENSION vector;

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐