database - PostgreSQL + pgpool 复制与未命中平衡

标签 database postgresql load-balancing pgpool

我有一个带有 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 只平衡读查询(因为写查询被发送到
    大师永远)
  • 分配后端权重参数仅用于计算分布
    在平衡模式。值越大越有可能被选中
    对于 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/

    相关文章:

    php - 使用数据库中已有的值更新数据库的值

    sql - 两个表之间最近点的唯一分配

    xml - 如何存储 XML 数据?

    java - 将 tomcat(作为 Spring tcServer)重定向到不同的端口

    apache - 带有 Apache HTTPD 的负载均衡器

    sql - 在具有现有一对多关系的表之间创建一对一关系

    sql - 启用 oracle 约束的问题

    sql - 如何在 POSTGRES 中显示最后的查询?

    node.js - 通过动态 url 参数负载平衡 websocket 连接

    MySQL 查询 - 更优雅的选择?在 SELECT 中的多个表中引用相同的列名