1. 程式人生 > >使用pgpool管理數據庫集群故障的問題

使用pgpool管理數據庫集群故障的問題

文件中 -1 結構 數據庫 數據 mod 遍歷 words esc

pgpool如何選舉master角色

在pgpool啟動的過程中通過對 pgpoo.conf配置文件中的數據庫節點條目信息,對集群中的數據庫節點從0開始一個個的遍歷,並發送SQL語句“select pg_is_in_recovery();”;根據返回的結構來判斷哪個數據庫節點是master。

在master節點故障後,其它節點由於沒有發生故障切換而沒有master節點,通過pgpool提供的端口9999仍然可以連接並提供讀 操作,但是不能對為提供寫操作。

在故障切換時選擇master節點時,也是從配節文件中的順序便利數據庫節點 從中找出可用的數據庫節點 作為主節點。

static int get_next_master_node(void)
{
int i;

for (i=0;i<pool_config->backend_desc->num_backends;i++)
{
/*
* Do not use VALID_BACKEND macro in raw mode.
* VALID_BACKEND return true only if the argument is master
* node id. In other words, standby nodes are false. So need
* to check backend status with VALID_BACKEND_RAW.
*/
if (RAW_MODE)
{
if (VALID_BACKEND_RAW(i))
break;
}
else
{
if (VALID_BACKEND(i))
break;
}
}

if (i == pool_config->backend_desc->num_backends)
i = -1;

return i;
}

/*

使用pgpool管理數據庫集群故障的問題