[pgpool-general: 422] Re: strange load balancing issue in Solaris
Tatsuo Ishii
ishii at postgresql.org
Tue May 8 09:50:32 JST 2012
I suspect there's some portablity issue with load balance code. The
actual source code is in select_load_balancing_nodechild.c).
Please modify source code and connect to pgpool by using psql.
Please send the log output.
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp
int select_load_balancing_node(void)
{
int selected_slot;
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;
pool_log("r: %f total_weight: %f", r, total_weight); <-- add this
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;
total_weight += BACKEND_INFO(i).backend_weight;
}
}
pool_debug("select_load_balancing_node: selected backend id is %d", selected_slot);
return selected_slot;
}
> Hi Tatsuo, Thanks for the reply.
>
> The normalized weights are 0.5 for both nodes and the selected node is always the same node. I hope then it's srandom().
>
>
> Any idea to solve this srandom issue
>
>
> Thanks and Regards,
> Aravinth
>
>
> ________________________________
> From: Tatsuo Ishii <ishii at postgresql.org>
> To: aravinth at mafiree.com
> Cc: pgpool-general at pgpool.net
> Sent: Tuesday, May 1, 2012 4:41 AM
> Subject: Re: [pgpool-general: 396] strange load balancing issue in Solaris
>
> First of all please check "normalized" weights are as you expected.
> Run "show pool_status;" and see "backend_weight0", "backend_weight1"
> section. You see a floating point numbers, which are the normalized
> weight between 0.0 and 1.0. If you see both are 0.5, primary and
> standby are given same weight.
>
> If they are ok, I suspect srandom() function behavior is different
> from other platforms. Pgpool-II chooses the load balance node by using
> srandom(). select_load_balancing_node() is the function which is
> responsible for selecting the load balance node. If you run pgpool-II
> with -d (debug) option, you will see following in the log:
>
> pool_debug("select_load_balancing_node: selected backend id is %d", selected_slot);
>
> If backend_weight in show pool_status are fine but the line above
> always shows same number, it is the sign that we have problem with
> srandom().
> --
> Tatsuo Ishii
> SRA OSS, Inc. Japan
> English: http://www.sraoss.co.jp/index_en.php
> Japanese: http://www.sraoss.co.jp
>
>> Hi All,
>>
>> I am facing a strange issue in load balancing with replication mode set to
>> true in Solaris. Load balancing algorithm always select the same node
>> whatever may be the backend weight
>>
>> Here is the scenario.
>>
>> I have a pgpool installed installed in 1 server
>> 2 postgres nodes in other 2 servers
>> replication mode set to true and load balancing set to true
>> backend weight of the 2 nodes is 1.
>>
>> When I fire the queries manuall using different connections or using
>> pgbench all the queries hit the same node. Load balancing algorithm always
>> select the same node.
>> No effect in changing the backend weight. Only when I set backend weight to
>> 0 hits go to the other server.
>>
>>
>> I face this issue only in solaris. The same setup in other servers ( centos
>> ,RHEL, ubunt etc) does the load balancing perfectly.
>>
>> Also tries various postgres versions and pgpool version with same result.
>> But every version runs fine in other servers.
>>
>> Has anyone faced this issue?
>>
>> Any information would highly helpful.
>>
>> Regards,
>> Aravinth
More information about the pgpool-general
mailing list