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读写分离,配置设置及调研相关推荐

  1. Mysql一主多从和读写分离配置简记

    Mysql一主多从和读写分离配置简记 标签: mysql数据库服务器class数据库servermanager 2012-05-30 16:44 14981人阅读 评论(1) 收藏 举报  分类: 数 ...

  2. SQL Server AlwaysOn读写分离配置

    SQL Server AlwaysOn读写分离配置 pursuer.chen 备注: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站点所有随笔都 ...

  3. sqlserver AlwaysOn实现读写分离配置及java/net代码实现

    1.用读写分离的原因: O.读写量很大,为了提升数据库读写性能,将读写进行分离: O.如果多机房下写少读多,同时基于数据一致性考虑,只有一个主库存入所有的数据写入,本地再做从库提供读取,减少多机房间直 ...

  4. MyCat:开源分布式数据库中间件之数据库分片和读写分离配置

    mycat权威文档指南下载 1.   MyCAT介绍 1.1. 什么是MyCAT? 简单的说,MyCAT就是: 一个彻底开源的,面向企业应用开发的"大数据库集群" 支持事务.ACI ...

  5. 读写分离时mycat不能链接mysql_Mycat读写分离配置实践

    Mycat读写分离配置实践 发布时间:2020-08-16 01:08:20 来源:ITPUB博客 阅读:81 作者:jeanron100 工作这些年来,也去了一些地方,有了一些见闻,隐隐感觉很多文化 ...

  6. mysql 配置文件在哪_MySQL+MyCat分库分表 读写分离配置

    一. MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件,运行在代码应用和MySQL数据库之间的应用. 前身: corb ...

  7. MySQL的主从配置+SpringBoot的MySQL读写分离配置

    MySQL的主从复制 点击前往查看MySQL的安装 1.主库操作 vim /etc/my.cnf 添加如下配置 log-bin=mysql-bin #[必须]启用二进制日志 server-id=128 ...

  8. win7 mysql读写分离_mysql 主从复制 读写分离配置

    口水:第一次写博客,欢迎大家来拍砖. 最近项目中用mysql主从复制主要是为了实现读写分离.数据库备份.故障转移的需要,采用的是一主一从,配置比较简单. 自已在本机做测试 测试环境如下: OS:win ...

  9. Sql server Always On 读写分离配置方法

    使用了Sqlserver 2012 Always on技术后,假如采用的配置是默认配置,会出现Primary server CPU很高的情况发生,比如默认配置如下: 需要自定义来解决这个问题. 我们先 ...

最新文章

  1. RecyclerView 的findFirstVisibleItemPosition()与findLastVisibleItemPosition()
  2. Python 基础教程:切片、迭代和列表生成式
  3. 函数的实参 函数的形参 闭包 js 1
  4. gorm存指针数据_C语言重点——指针篇(一篇让你完全搞懂指针)
  5. 联通3G用户破千万 建成全球规模最大WCDMA网络
  6. 3DMax VRay 渲染笔记
  7. 一键获取网盘提取码的神器“云盘万能钥匙”
  8. 使用管理员权限打开cmd(命令提示符)的方法 (Windows10)
  9. 若依BaseEntity
  10. Tri-Training: Exploiting Unlabeled Data Using Three Classifiers
  11. 射影几何----共线四点保交比的三种射影变换类型的几何表示
  12. 公众平台 php,微信公众平台PHP开发
  13. python 监控键盘输入_python 监控键盘输入
  14. 公历转农历C/C++代码
  15. 行存储(Row-Based)和列存储(Column-Based)
  16. 安装爱剪辑计算机丢失,windows10系统下安装“爱剪辑”软件的方法
  17. 倍福--通知方式实现ADS通信
  18. 实验 6 文件打包与解压缩
  19. H - Relief grain
  20. 【Linux 系统运维基础】经典案例

热门文章

  1. python 加权随机算法_python的random模块及加权随机算法的python实现方法
  2. Docker+VSCode 配置属于自己的深度学习炼丹炉
  3. python123第五周随机密码生成_利用Python生成随机密码
  4. 200-Smart学习笔记:比较传送移位指令的用法案例(3)
  5. 怎么开发一个完整的对外接口API
  6. 【算法】递归(recursion)+经典例题个人分析
  7. HTTP请求,出现Status Code: 405
  8. Apache+php安装整理
  9. web页面中如何唤起打开APP
  10. New 900 Sentences