【问题标题】:PostgreSQL + pgpool replication with miss balancingPostgreSQL + pgpool 复制与丢失平衡
【发布时间】:2019-12-19 20:43:24
【问题描述】:

我有一个 PostgreSQL 复制 M-S,它仅在主服务器上使用 pgpool 作为负载平衡器。复制进展顺利,过程没有延迟。问题是,即使我为每台服务器配置了不同于 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 功能的理解:

  1. Pgpool 仅平衡读取查询(因为写入查询发送到 永远大师)

  2. 后端权重参数仅用于计算分布 在平衡模式。值越大,就越有可能被选中 对于 pgpool,所以如果服务器有更大的 lb_weight 它会是 比其他值较低的人选择的次数更多。

如果我是对的,为什么会发生这种情况? 有没有一种方法可以实际分配 select_cnt 查询的适当平衡配置?我的意图是通过读取查询对从属设备过度收费,并让其只掌握“少数”读取查询,因为它正在占用所有写入。

【问题讨论】:

    标签: database postgresql load-balancing pgpool


    【解决方案1】:

    您在 pgpool 负载平衡方面是对的。这似乎不起作用可能有一些原因。首先,请注意两个后端的端口号相同。尝试配置您的后端连接设置,如 sample 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)得到满足。

    【讨论】:

      【解决方案2】:

      您可以尝试在 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-13
        • 2020-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多