pgpool读写分离,配置设置及调研
pgpool基于官方版本4.2.
pgpool读写分离适用的集群管理模式
先了解一下pgpool支持的几种模式。
Clustering modehttps://www.pgpool.net/docs/42/en/html/runtime-config-running-mode.html使用参数backend_clustering_mode控制,枚举类,具体解释如下:
枚举值 |
解释 |
限制 |
backend_clustering_mode = 'streaming_replication' |
Pg使用流式复制,复制给每个服务器数据。 相关参数(均可通过reload来加载): https://www.pgpool.net/docs/42/en/html/runtime-streaming-replication-check.html 相关参数主要是针对于流式复制延迟的检查和限制。 |
1.最多可以拥有 127 个流复制备用服务器 2.pg上配置了Hot Standby,我看咱们参数是配置的,PostgreSQL不同规格参数配置 |
backend_clustering_mode = 'logical_replication' |
Pg使用逻辑复制,复制给每个服务器数据。 |
最多127 个逻辑复制备用服务器 |
backend_clustering_mode = 'slony' |
Slony-I 负责进行实际的数据复制。 |
最多127 个副本服务器 |
backend_clustering_mode = 'native_replication' |
Pgpool-II 负责进行数据复制。 (内容比较多,因为一般用pg自己的复制,所以没仔细看) |
最多127 个副本服务器 |
backend_clustering_mode = 'snapshot_isolation' |
实验性质,目前不用于生产 |
|
backend_clustering_mode = 'raw' |
Pgpool-II不关心数据库同步。无法进行负载均衡。 |
阿里使用的配置项是默认的streaming_replication。
pgpool读写分离动态装载需要变动的参数
需要变动后端连接设置和后端数据相关设置。
Backend Settingshttps://www.pgpool.net/docs/42/en/html/runtime-config-backend-settings.html阿里的配置实例:
1.backend_hostname
字符串类型参数。
支持主机名或ip地址。
可以通过在参数名称的末尾添加一个数字来指定多个后端(例如backend_hostname0)。
这个数字被称为“DB节点ID”。
它从0开始。被赋予0的DB节点ID的后端将被称为“主节点”。但是在流复制模式下运行没有特殊含义。
New nodes can be added by adding parameter rows and reloading a configuration file. However, the existing values cannot be updated, so you must restart Pgpool-II in that case.
即可以添加新参数,之后reload生效;但是修改和删除原有的配置是不行的,更新现有参数只能重启。
2.backend_port
整数类型参数。
指定后端的端口号。
可以通过在参数名称末尾添加一个数字来指定多个后端(例如 backend_port0)。
和backend_hostname一样,可以添加新参数,之后reload生效;但是修改和删除原有的配置是不行的,更新现有参数只能重启。
3.backend_weight
浮点类型参数
指定后端的负载均衡比例。
可以通过在参数名称末尾添加一个数字来指定多个后端(例如 backend_weight0)。
New backend_weight can be added in this parameter by reloading a configuration file. However, this will take effect only for new established client sessions.
修改值后可以通过reload生效,但是只能对新连接生效。
4.backend_data_directory
字符串类型参数。
指定后端的数据库数据目录。
可以通过在参数名称末尾添加一个数字来指定多个后端(例如 backend_data_directory0)
和backend_hostname一样,可以添加新参数,之后reload生效;但是修改和删除原有的配置是不行的,更新现有参数只能重启。
5.backend_flag
字符串类型参数。
控制各种后端行为。
可以通过在参数名称末尾添加一个数字来指定多个后端(例如 backend_flag0)
可以使用“ | ”同时指定多个参数(Multiple flags can be specified by using "|".)
修改值后可以通过reload生效。
枚举值 |
描述 |
ALLOW_TO_FAILOVER |
默认设置。 允许故障转移或分离后端。 |
DISALLOW_TO_FAILOVER |
不允许故障转移或分离后端。 |
ALWAYS_PRIMARY |
仅在流复制模式下有用,始终将设置标志的节点视为主节点。 Pgpool-II将不会通过检查后端来找到主节点。 |
这里阿里的策略是,将主节点设置为ALWAYS_PRIMARY。
将其他只读节点设置为DISALLOW_TO_FAILOVER
6.backend_application_name
字符串类型参数。
walsender 的 application_name,用于“show pool_nodes”命令
可以通过在参数名称末尾添加一个数字来指定多个后端(例如 backend_application_name0)
pgpool对读写分离有影响的负载均衡设置
可以使用SHOW POOL NODES 检查哪个 DB 节点被分配为负载均衡节点。
可以在SELECT语句之前添加任意注释,通常用/*NO LOAD BALANCE*/ 禁用特定查询的负载平衡,Pgpool-II 会将其发送到主节点。
1.load_balance_mode
bool类型参数。
设置为 on 时,Pgpool-II启用传入SELECT查询的负载平衡。
只能在服务器启动时设置。
更改需要重启。
2.ignore_leading_white_space
bool类型参数。
设置为 on 时,Pgpool-II在负载平衡中忽略 SQL 查询开头的空格。
3.write_function_list
字符串类型参数。
参数之间使用逗号分割。
如果select中包含这些名称的函数,将不会负载均衡,会发到主节点。
可以使用正则表达式匹配函数名称。
【阿里使用的版本是4.1的,里面没有这个参数】
4.read_only_function_list
字符串类型参数。
参数之间使用逗号分割。
如果select中包含这些名称的函数。
5.primary_routing_query_pattern_list
字符串类型参数
指定发送到主节点的 SQL 模板。
可以使用正则表达式来匹配 SQL 模式。
6.disable_load_balance_on_write
off |
会将写入查询也进行负载均衡。 因为备份会有复制延迟,因此会导致弱一致性。 |
transaction |
如果是显示事务并且出现写入查询,后续的读查询将不会进行负载均衡。直到事务结束。 不在显式事务中的读取查询不受参数影响 |
trans_transaction |
如果是显示事务并且出现写入查询,后续的读查询将不会进行负载均衡。直到会话结束。 |
always |
出现写入查询,在会话结束之前不会进行负载平衡 |
pgpool的实际尝试
1.尝试热加载改变端口为0
根据官方文档是没有办法通过修改来卸载掉只读实例的。
但是通过代码看,感觉可以通过修改port为0来卸载掉只读实例(当然这里pg之间还在流式复制)。
所以搭一下环境看看。
试了一下,不可以的。
2.尝试热加载删除只读实例
修改之前的状态。
修改参数,注释掉第二个只读节点:
使用bench工具:
测试完之后的结果:
结论:注释掉节点并没有生效。
3.尝试将权重调整为0
将上一步的注释去掉,重启一下集群。
当前配置:
此时进行一下bench,sql是可以发到三个节点的
改一下权重,将第二个权重调整为0:
show pool nodes后,跑bench:
结论:热加载成功,但是此时有个问题,底层pg的复制是没有停的。只是没有办法访问只读节点了。
pgpool读写分离,配置设置及调研相关推荐
- Mysql一主多从和读写分离配置简记
Mysql一主多从和读写分离配置简记 标签: mysql数据库服务器class数据库servermanager 2012-05-30 16:44 14981人阅读 评论(1) 收藏 举报 分类: 数 ...
- SQL Server AlwaysOn读写分离配置
SQL Server AlwaysOn读写分离配置 pursuer.chen 备注: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站点所有随笔都 ...
- sqlserver AlwaysOn实现读写分离配置及java/net代码实现
1.用读写分离的原因: O.读写量很大,为了提升数据库读写性能,将读写进行分离: O.如果多机房下写少读多,同时基于数据一致性考虑,只有一个主库存入所有的数据写入,本地再做从库提供读取,减少多机房间直 ...
- MyCat:开源分布式数据库中间件之数据库分片和读写分离配置
mycat权威文档指南下载 1. MyCAT介绍 1.1. 什么是MyCAT? 简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的"大数据库集群" 支持事务.ACI ...
- 读写分离时mycat不能链接mysql_Mycat读写分离配置实践
Mycat读写分离配置实践 发布时间:2020-08-16 01:08:20 来源:ITPUB博客 阅读:81 作者:jeanron100 工作这些年来,也去了一些地方,有了一些见闻,隐隐感觉很多文化 ...
- mysql 配置文件在哪_MySQL+MyCat分库分表 读写分离配置
一. MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件,运行在代码应用和MySQL数据库之间的应用. 前身: corb ...
- MySQL的主从配置+SpringBoot的MySQL读写分离配置
MySQL的主从复制 点击前往查看MySQL的安装 1.主库操作 vim /etc/my.cnf 添加如下配置 log-bin=mysql-bin #[必须]启用二进制日志 server-id=128 ...
- win7 mysql读写分离_mysql 主从复制 读写分离配置
口水:第一次写博客,欢迎大家来拍砖. 最近项目中用mysql主从复制主要是为了实现读写分离.数据库备份.故障转移的需要,采用的是一主一从,配置比较简单. 自已在本机做测试 测试环境如下: OS:win ...
- Sql server Always On 读写分离配置方法
使用了Sqlserver 2012 Always on技术后,假如采用的配置是默认配置,会出现Primary server CPU很高的情况发生,比如默认配置如下: 需要自定义来解决这个问题. 我们先 ...
最新文章
- RecyclerView 的findFirstVisibleItemPosition()与findLastVisibleItemPosition()
- Python 基础教程:切片、迭代和列表生成式
- 函数的实参 函数的形参 闭包 js 1
- gorm存指针数据_C语言重点——指针篇(一篇让你完全搞懂指针)
- 联通3G用户破千万 建成全球规模最大WCDMA网络
- 3DMax VRay 渲染笔记
- 一键获取网盘提取码的神器“云盘万能钥匙”
- 使用管理员权限打开cmd(命令提示符)的方法 (Windows10)
- 若依BaseEntity
- Tri-Training: Exploiting Unlabeled Data Using Three Classifiers
- 射影几何----共线四点保交比的三种射影变换类型的几何表示
- 公众平台 php,微信公众平台PHP开发
- python 监控键盘输入_python 监控键盘输入
- 公历转农历C/C++代码
- 行存储(Row-Based)和列存储(Column-Based)
- 安装爱剪辑计算机丢失,windows10系统下安装“爱剪辑”软件的方法
- 倍福--通知方式实现ADS通信
- 实验 6 文件打包与解压缩
- H - Relief grain
- 【Linux 系统运维基础】经典案例
热门文章
- python 加权随机算法_python的random模块及加权随机算法的python实现方法
- Docker+VSCode 配置属于自己的深度学习炼丹炉
- python123第五周随机密码生成_利用Python生成随机密码
- 200-Smart学习笔记:比较传送移位指令的用法案例(3)
- 怎么开发一个完整的对外接口API
- 【算法】递归(recursion)+经典例题个人分析
- HTTP请求,出现Status Code: 405
- Apache+php安装整理
- web页面中如何唤起打开APP
- New 900 Sentences