3、pgpool-II 内置复制模式
1|0一、Pgpool-II 内置复制原理
- 对数据库的写操作直到所有 PostgreSQL 服务器完成写操作后才返回,对写模式性能有损耗
- 对数据库的读操作可以发送任意一台,并不是随机分发的;可以通过 show pool_nodes 查看,可以实现读的负载均衡
- 该复制级别是数据库集
- 该模式下 pgpool 相当于 连接池
2|0二、Pgpool-II 内置复制配置示例
Pgpool-II 内置复制示例环境
|角色|ip|端口|数据目录|
|:----😐:----|:----😐:----|:----😐:----|:----😐:----|
|pgpool|192.168.1.221|9999| |
|db1|192.168.1.221|6000|/data/postgres/data|
|db2|192.168.1.221|6001|/data/postgres/data1|
1、在 两个实例下 分别创建数据库pgpool01,数据库用户pgpool
postgres=# create user pgpool password '123456';
CREATE ROLE postgres=# create database pgpool01 owner pgpool; CREATE DATABASE
2、在数据库创建insert_lock表
[postgres@node3 ~]$ psql -p 6001 -f insert_lock.sql pgpool01 pgpool
psql:insert_lock.sql:3: ERROR: schema "pgpool_catalog" does not exist CREATE SCHEMA CREATE TABLE INSERT 0 1 GRANT GRANT GRANT GRANT
3、生成密码文件 pool_passwd
[pgpool@node3 etc]$ pg_md5 --md5auth -u pgpool -p
password:
4、配置 pgpool.conf 文件
listen_addresses = '*'
backend_hostname0 = '192.168.1.221' backend_port0 = 6000 backend_weight0 = 1 backend_data_directory0 = '/data/postgres/data' backend_flag0 = 'ALLOW_TO_FAILOVER' backend_application_name0 = 'server0' backend_hostname1 = '192.168.1.221' backend_port1 = 6001 backend_weight1 = 1 backend_data_directory1 = '/data/postgres/data1' backend_flag1 = 'ALLOW_TO_FAILOVER' backend_application_name1 = 'server1' enable_pool_hba = on #管理密码文件 pool_passwd = 'pool_passwd' #pid文件存放炉具 pid_file_name = '/opt/pgpool/pgpool.pid' # 管理日志存放路径 logdir = '/opt/pgpool/log/pgpool' #要启用数据库复制功能,需要设置 pgpool.conf 文件中的 replication_mode 为 on #当 replication_mode 被设置为 on,pgpool-II 将发送一份接收到的查询的拷贝到所有的数据库节点 replication_mode = on #当 load_balance_mode 被设置为 on,pgpool-II 将在数据库节点之间分发 SELECT 查询。 load_balance_mode = on # 内置复制模式不支持该参数 #failover_when_quorum_exists = on
5、启动 pgpool
启动 pgpool;并进入 pgpool01 数据库;创建表 lottu01
[pgpool@node3 pgpool]$ pgpool
[pgpool@node3 pgpool]$ psql -h 192.168.1.221 -p 9999 -d pgpool01 pgpool Password for user pgpool: psql (12.2) Type "help" for help. pgpool01=> create table lottu01(id int, info text, regtime timestamp); CREATE TABLE pgpool01=> insert into lottu01 values (1, 'pgpool native replication', now()); INSERT 0 1
6、查看后端数据库
进入后段数据库进行数据验证
[postgres@node3 ~]$ psql -p 6000 pgpool01 pgpool
psql (12.2) Type "help" for help. pgpool01=> \set PROMPT1 '%`echo db6000=`' db6000=select * from lottu01; id | info | regtime ----+---------------------------+---------------------------- 1 | pgpool native replication | 2020-11-13 16:05:30.190939 (1 row) db6000=\q [postgres@node3 ~]$ psql -p 6001 pgpool01 pgpool psql (12.2) Type "help" for help. pgpool01=> \set PROMPT1 '%`echo db6001=`' db6001=select * from lottu01; id | info | regtime ----+---------------------------+---------------------------- 1 | pgpool native replication | 2020-11-13 16:05:30.190939 (1 row) # 或者 for port in 6000 6001; do echo $port psql -c "SELECT count(1) FROM lottu01" -p $port pgpool01 done
参考文献
https://www.pgpool.net/docs/latest/en/html/example-basic.html#EXAMPLE-CONFIGS-REPLICATION
__EOF__

本文作者:lottu
本文链接:https://www.cnblogs.com/lottu/p/14069458.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/lottu/p/14069458.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架