我有一个带有 pgpool 的 PostgreSQL 复制 M-S 作为仅主服务器上的负载平衡器。复制过程正常,过程没有延迟。问题是,即使我为每台服务器配置了不同于 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,因此如果服务器具有更大的 lb_weight,它将是
比其他值较低的人选择的次数更多。
如果我是对的,为什么会发生这种情况?
有没有一种方法可以实际分配 select_cnt 查询的适当平衡配置?我的目的是通过读取查询对从属设备进行过度充电,并让其掌握“少数”读取查询,因为它正在执行所有写入操作。
最佳答案
你是对的 pgpool 负载平衡。可能有一些原因导致这似乎不起作用。首先,请注意两个后端的端口号相同。尝试配置您的后端连接设置,如示例 pgpool.conf
中所示:https://github.com/pgpool/pgpool2/blob/master/src/sample/pgpool.conf.sample (第 66-87 行),(您还可以根据需要设置权重)并为每个后端分配不同的端口号。
还要检查(假设您的运行模式是主/从):
load_balance_mode = on
master_slave_mode = on
-- 更改需要重启
有一个相关的FAQ条目“看来我的pgpool-II没有做负载均衡。为什么?”这里:https://www.pgpool.net/mediawiki/index.php/FAQ (如果 pgpool 4.1 版也考虑
statement_level_load_balance
)。到目前为止,我已经假设负载平衡的一般条件 ( https://www.pgpool.net/docs/latest/en/html/runtime-config-load-balancing.html ) 得到满足。
关于database - PostgreSQL + pgpool 复制与未命中平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59416671/