三条命令docker安装pgpool2、pgsql

docker run --detach --rm   -p 5432:5432 --name pg-0 \
  --network my-network \
  --env REPMGR_PARTNER_NODES=pg-0,pg-1 \
  --env REPMGR_NODE_NAME=pg-0 \
  --env REPMGR_NODE_NETWORK_NAME=pg-0 \
  --env REPMGR_PRIMARY_HOST=pg-0 \
  --env REPMGR_PASSWORD=repmgrpass \
  --env POSTGRESQL_POSTGRES_PASSWORD=adminpassword \
  --env POSTGRESQL_USERNAME=customuser \
  --env POSTGRESQL_PASSWORD=custompassword \
  --env POSTGRESQL_DATABASE=customdatabase \
  bitnami/postgresql-repmgr:latest

docker run --detach --rm -p 5432:5432  --name pg-1 \
  --network my-network \
  --env REPMGR_PARTNER_NODES=pg-0,pg-1 \
  --env REPMGR_NODE_NAME=pg-1 \
  --env REPMGR_NODE_NETWORK_NAME=pg-1 \
  --env REPMGR_PRIMARY_HOST=pg-0 \
  --env REPMGR_PASSWORD=repmgrpass \
  --env POSTGRESQL_POSTGRES_PASSWORD=adminpassword \
  --env POSTGRESQL_USERNAME=customuser \
  --env POSTGRESQL_PASSWORD=custompassword \
  --env POSTGRESQL_DATABASE=customdatabase \
  bitnami/postgresql-repmgr:latest


docker run --detach --rm --name pgpool -v  -p 9999:5432 \
  --network my-network \
  --env PGPOOL_BACKEND_NODES=0:pg-0:5432,1:pg-1:5432 \
  --env PGPOOL_SR_CHECK_USER=customuser \
  --env PGPOOL_SR_CHECK_PASSWORD=custompassword \
  --env PGPOOL_ENABLE_LDAP=no \
  --env PGPOOL_POSTGRES_USERNAME=postgres \
  --env PGPOOL_POSTGRES_PASSWORD=adminpassword \
  --env PGPOOL_ADMIN_USERNAME=admin \
  --env PGPOOL_ADMIN_PASSWORD=adminpassword \
  bitnami/pgpool:latest

以上方法非常简单,最后程序直接访问9999端口即可实现读写分离。

缺点:

1.只能再一个宿主机上执行,不能跨主机。

2.不能挂载数据库路径,数据安全无法保证。

### PostgreSQL 读写分离实现方式 PostgreSQL 的读写分离可以通过多种方法实现,其中一种常见的方式是通过 `pgpool-II` 来管理主从节点之间的流量分配。以下是基于引用内容和专业知识整理的详细说明。 #### 主从架构概述 在 PostgreSQL 中,通常会设置一个主节点用于处理写操作(INSERT、UPDATE、DELETE),并配置多个只读副本(从节点)来分担负载查询请求。这种架构可以显著提高系统的吞吐量和响应速度[^1]。 --- #### 使用 pgpool-II 实现读写分离 ##### 安装与初始化 安装 `pgpool-II` 并将其配置为主从模式。假设主库 IP 地址为 `192.168.0.101`,两个从库分别为 `192.168.0.102` 和 `192.168.0.103`: ```bash # 下载并编译安装 pgpool-II wget https://www.pgpool.net/download.php?f=pgpool-II-4.3.5.tar.gz tar zxvf pgpool-II-4.3.5.tar.gz cd pgpool-II-4.3.5/ ./configure --with-pgsql=/usr/pgsql-13/bin/pg_config make && make install ``` 编辑 `pgpool.conf` 文件以定义主从关系: ```ini backend_hostname0 = '192.168.0.101' backend_port0 = 5432 backend_weight0 = 1 backend_data_directory0 = '/var/lib/pgsql/data' backend_hostname1 = '192.168.0.102' backend_port1 = 5432 backend_weight1 = 1 backend_data_directory1 = '/var/lib/pgsql/data' backend_hostname2 = '192.168.0.103' backend_port2 = 5432 backend_weight2 = 1 backend_data_directory2 = '/var/lib/pgsql/data' ``` 启用负载均衡功能: ```ini load_balance_mode = on ``` 启动服务: ```bash pgpool -n ``` --- #### 创建同步账户 为了支持流复制,在主库中创建一个具有复制权限的角色,并更新 `pg_hba.conf` 文件允许该角色访问从库。 ```sql CREATE ROLE repuser WITH LOGIN REPLICATION CONNECTION LIMIT 5 PASSWORD 'a12345'; ``` 编辑 `/data/docker/pg/master/pg_hba.conf` 添加以下条目: ```plaintext host replication repuser 192.168.0.102/32 md5 host replication repuser 192.168.0.103/32 md5 ``` 重启主库使更改生效: ```bash docker restart postgres-master ``` --- #### 测试读写分离效果 验证读写分离是否正常工作。对于写操作,所有事务均路由到主库;而对于 SELECT 查询,则由从库承担压力。 测试脚本示例: ```python import psycopg2 conn_write = psycopg2.connect( dbname="testdb", user="postgres", password="123456", host="192.168.0.101", port="5432" ) cur_write = conn_write.cursor() cur_write.execute("INSERT INTO test_table (id, name) VALUES (1, 'Alice')") conn_write.commit() conn_read = psycopg2.connect( dbname="testdb", user="repuser", password="a12345", host="192.168.0.102", port="5432" ) cur_read = conn_read.cursor() cur_read.execute("SELECT * FROM test_table WHERE id = 1") print(cur_read.fetchall()) ``` --- #### 最佳实践建议 1. **监控延迟**:定期检查主从之间的时间差,确保数据一致性[^2]。 2. **优化权重分布**:根据实际业务需求调整各从库的负载比例。 3. **高可用方案**:结合 `pgpool-II` 提供的自动故障转移机制提升系统稳定性[^3]。 --- ### 总结 上述方法展示了如何利用 `pgpool-II` 构建 PostgreSQL 的读写分离环境。此过程涉及主从配置、同步账号建立以及客户端连接策略等多个环节。合理规划这些步骤能够有效增强数据库性能和服务质量。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xcagy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值