pgpool分析

本文详细介绍了PGPool-II中负载均衡函数的工作原理及其存在的问题。通过深入分析源代码,特别是child.c文件中的loadbalance函数,揭示了如何随机选择后端节点进行负载分配,并提出了可能的改进方向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应用

http://mengqingyu.javaeye.com/blog/463666

http://zauc.wordpress.com/2010/01/23/%E4%BD%BF%E7%94%A8pgpool-ii%E8%BF%9B%E8%A1%8Cpostgresql%E7%9A%84replication/

http://blog.youkuaiyun.com/xtlog/archive/2009/05/27/4219353.aspx

http://blog.chinaunix.net/u2/66215/showart_2109484.html

http://bbs.linuxtone.org/archiver/tid-2701.html

全是根据英文翻译的,有一些不全,英文的在下面

http://pgpool.projects.postgresql.org/pgpool-II/doc/tutorial-en.html

http://pgpool.projects.postgresql.org/pgpool-II/doc/pgpool-en.html

load balance函数(在child.c中),可以看出是随机选择的,先把所有backend的weight加起来,然后随机一个数在加起来和的中间,就取这个backend,这个函数源码还有些问题,应改一改

int select_load_balancing_node(void)
{
double total_weight,r;
int i;

/* choose a backend in random manner with weight */
selected_slot = MASTER_NODE_ID;
total_weight = 0.0;

for (i=0;i<NUM_BACKENDS;i++)
{
   if (VALID_BACKEND(i))
   {
    total_weight += BACKEND_INFO(i).backend_weight;
   }
}
r = (((double)random())/RAND_MAX) * total_weight;
total_weight = 0.0;
for (i=0;i<NUM_BACKENDS;i++)
{
   if (VALID_BACKEND(i) && BACKEND_INFO(i).backend_weight > 0.0)
   {
    if(r >= total_weight)
     selected_slot = i;
    else
     break; //这还有一些问题,应在if下面吧
    total_weight += BACKEND_INFO(i).backend_weight;
   }
}

pool_debug("select_load_balancing_node: selected backend id is %d", selected_slot);
return selected_slot;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值