在向外提供服務時,一般會使用虛擬IP(VIP),增長服務的可靠性。在pgoneproxy中一樣提供了vip功能,使用pgoneproxy後就能夠省略其餘提供VIP的軟件(好比keepalive)。spa
在pgoneproxy中須要使用VIP,配置是很是簡單的。只須要增長--vip-address=xxx.xxx.xxx.xxx/eth0:0便可。其中xxx.xxx.xxx.xxx 是虛擬IP地址,eth0是網卡接口。eth0:0表示在已經存在的網卡接口eth0上面創建虛擬網卡eth0:0。線程
增長配置後,在同網段下的不一樣主機上面啓動pgoneproxy便可。能夠經過kill掉正在提供服務的pgoneproxy,VIP會漂移到另一臺pgoneproxy上面去,繼續向外提供服務。接口
1)在啓動pgoneproxy時先清理掉自身主機的虛擬網卡信息,能夠經過直接調用ifconfig eth0:0 down 或者是經過ioctl來直接~IFF_UP掉eth0:0便可。ip
2)讀取廣播消息,獲取正在使用的虛擬ip所在主機的mac地址。io
3)若是虛擬ip mac地址不是本機的mac地址,則禁止設置vip。原理
4)ping VIP,若是ping失敗,則設置本機爲vip主機,而且廣播本機mac地址。ioc
經過單獨的線程在間隔時間內不斷地執行2),3),4)步便可。軟件
經過在設置VIP後,把VIP主機的mac地址進行廣播。其餘主機在設置VIP以前先判斷VIP mac地址是否與本地mac一致來決定是否設置VIP仍是禁止VIP。這樣當多個pgoneproxy同時啓動時,會在短暫的震盪(可能有也可能沒有,關鍵看時機,出現這種狀況的機率很小)以後,最終會決定出一個主pgoneproxy的。配置