database - PostgreSQL + pgpool 复制与丢失平衡
问题描述
我有一个带有 pgpool 的 PostgreSQL 复制 MS 作为主服务器上的负载平衡器。复制进展顺利,过程没有延迟。问题是即使我为每台服务器配置了不同于 50% 的余额,主服务器接收的请求也比从服务器多。
这是后端重量为 M(1)-S(2) 的 pgpool show_pool_nodes
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay
---------+-------------+------+--------+-----------+---------+------------+-------------------+-------------------
0 | master-ip | 9999 | up | 0.333333 | primary | 56348331 | false | 0
1 | slave-ip | 9999 | up | 0.666667 | standby | 3691734 | true | 0
如您所见,主服务器收到的请求比从服务器多 10 倍
这是后端重量为 M(1)-S(5) 的 pgpool show_pool_nodes
node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay
---------+-------------+------+--------+-----------+---------+------------+-------------------+-------------------
0 | master-ip | 9999 | up | 0.166667 | primary | 10542201 | false | 0
1 | slave-ip | 9999 | up | 0.833333 | standby | 849494 | true | 0
当我分配 M(1)-S(1) 时,行为非常相似
现在我想知道我是否错过了对 pgpool 功能的理解:
Pgpool 仅平衡读取查询(因为写入查询始终发送到主服务器)
后端权重参数仅用于在平衡模式下计算分布。值越大,就越有可能为 pgpool 选择,所以如果一个服务器的 lb_weight 越大,它被选择的次数就越多。
如果我是对的,为什么会发生这种情况?有没有一种方法可以实际分配 select_cnt 查询的适当平衡配置?我的意图是通过读取查询对从属设备过度收费,并让只掌握“少数”读取查询,因为它正在占用所有写入。
解决方案
您可以尝试在 pgpool.conf 文件中调整以下一项配置: 1. wal lag 延迟大小 delay_threshold = 10000000
它用于让 pgpool 知道从属 postgresql wal 是否太延迟而无法使用。更改较大的更多查询可以传递给从站。更改小更多查询将转到掌握。
此外,pgbench 测试参数也是关键。使用 -C 参数,它将让每个查询连接,否则每个会话连接。
pgpoll 负载均衡决策依赖于参数组合矩阵。不仅仅是一个参数
这里是参考。 https://www.pgpool.net/docs/latest/en/html/runtime-config-load-balancing.html#GUC-LOAD-BALANCE-MODE
推荐阅读
- sql - SQL - 用计算值替换 NULL 值
- rust - 是否可以自动将数据从多个特征转换为单一类型?
- amazon-web-services - 比较 AWS Code Pipeline 中的两个数据库架构
- java - 如何检查 ArrayList 的所有索引中是否没有文件?
- sas - 删除列表的 proc 报告中标题和报告之间的空格
- mongodb - Mongoose:使用 geoJSON 时出现错误 NoQueryExecutionPlans
- xml - 在 XML 中,“元素”、“标签”、“类型”和“名称”有什么区别
- java - Mockito:假的第一个电话,其余的什么都不做
- python-3.x - 将 python apt 包安装到 conda env
- jenkins - 在詹金斯中存储凭据的最佳方法是什么