現(xiàn)在常用keepalived來實(shí)現(xiàn)VIP,結(jié)構(gòu)圖如下




Keepalived問題腦裂問題在maste" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > 虛擬IP管理系統(tǒng)

虛擬IP管理系統(tǒng)

時(shí)間:2023-06-26 10:18:01 | 來源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-06-26 10:18:01 來源:網(wǎng)站運(yùn)營(yíng)

虛擬IP管理系統(tǒng):

前言

VIP是虛擬的IP地址,并不對(duì)應(yīng)于一個(gè)實(shí)際的物理網(wǎng)絡(luò)接口。通過為一臺(tái)機(jī)器提供備用故障轉(zhuǎn)移選項(xiàng),VIP可用于提供連接冗余。

現(xiàn)在常用keepalived來實(shí)現(xiàn)VIP,結(jié)構(gòu)圖如下




Keepalived問題

腦裂問題

在master和backup無法正常通行時(shí)(比如master和backup之間網(wǎng)絡(luò)出現(xiàn)問題),backup會(huì)認(rèn)為master已經(jīng)掛掉,從而選舉自己成為master,開始履行master的職責(zé),對(duì)外廣播GARP和VRRP報(bào)文。這時(shí)舊的master依然在正常工作,那么我們?cè)谧泳W(wǎng)內(nèi)將有兩個(gè)主機(jī)在同時(shí)告訴其他主機(jī):“我是192.168.1.2?!边@就是“腦裂問題”。

一般采用兩個(gè)辦法來防止腦裂問題。

  1. 仲裁。當(dāng)兩個(gè)節(jié)點(diǎn)出現(xiàn)分歧時(shí),由第三方的仲裁者決定聽誰的。
  2. fencing。當(dāng)不能確定某個(gè)節(jié)點(diǎn)的狀態(tài)時(shí),通過fencing把對(duì)方干掉,確認(rèn)共享資源被完全釋放。

成本問題

VRRP是一種典型的2N冗余,往往需要兩個(gè)或以上的實(shí)例來保證單個(gè)VIP的高可用。但是在實(shí)際工程中,多個(gè)VIP同時(shí)出問題可能性是比較低的,在這種情況下,如果能用N+M(M<N)冗余來達(dá)到效果無疑能達(dá)到節(jié)省成本的效果。

利用keepalived其實(shí)也可以得到部分N+M的效果,如下圖所示。這種方式需要注意配置文件的編寫,這無疑也意味著運(yùn)維成本的增加。







設(shè)計(jì)

本文會(huì)提出一種方法利用zookeeper來解決腦裂和成本問題,同時(shí)提供一些工具來幫助管理VIP。下面用ZVIP來指代這種方法。

整體設(shè)計(jì)比較簡(jiǎn)單,如下圖所示: [圖片上傳失敗...(image-b82ad5-1517221966654)]

演示

現(xiàn)在探討這些不同的角色以及每個(gè)角色需要執(zhí)行的確切步驟。

假設(shè)要?jiǎng)?chuàng)建地址為192.168.1.2和192.168.1.3的VIP,如下圖所示。其中192.168.1.4(node1),192.168.1.5(node2)和192.168.1.5(node3)為實(shí)際的IP地址,在node1,node2和node3上運(yùn)行agent。server運(yùn)行在主機(jī)http://example.com上。







現(xiàn)在有了一個(gè)group,這個(gè)group里有2個(gè)VIP和3個(gè)節(jié)點(diǎn)。這個(gè)group中有兩個(gè)角色 1. server。server負(fù)責(zé)管理group 2. agent。agent承擔(dān)真正VIP的功能。

下面通過zkCli工具來演示工作的流程。

系統(tǒng)初始化

創(chuàng)建/groups, /nodes, /servers, /tasks這些znode。

[zk: localhost:2181(CONNECTED) 0] create /groups ""Created /groups[zk: localhost:2181(CONNECTED) 1] create /nodes ""Created /nodes[zk: localhost:2181(CONNECTED) 3] create /servers ""Created /servers[zk: localhost:2181(CONNECTED) 4] create /tasks ""Created /tasks[zk: localhost:2181(CONNECTED) 5] ls /[groups, servers, nodes, zookeeper, tasks]當(dāng)一個(gè)agent服務(wù)起來時(shí),會(huì)在/nodes下注冊(cè)一個(gè)znode并且watch創(chuàng)建的znode。也會(huì)在/tasks下執(zhí)行同樣的操作。

# For node1[zk: localhost:2181(CONNECTED) 7] create /nodes/node-192-168-1-4 ""Created /nodes/node-192-168-1-3[zk: localhost:2181(CONNECTED) 9] ls /nodes/node-192-168-1-4 true[]# For node1[zk: localhost:2181(CONNECTED) 7] create /tasks/node-192-168-1-4 ""Created /nodes/node-192-168-1-4[zk: localhost:2181(CONNECTED) 9] ls /tasks/node-192-168-1-4 true[]

設(shè)置一個(gè)group

一個(gè)group總是被手動(dòng)創(chuàng)建。創(chuàng)建者一定知道VIP的地址并且會(huì)知道真實(shí)機(jī)器的信息。創(chuàng)建者通過server來設(shè)置一個(gè)group(通過ui界面或者調(diào)用接口)。

server創(chuàng)建一個(gè)znode /groups/group1;然后在各個(gè)node下創(chuàng)建這個(gè)group。

# For server[zk: localhost:2181(CONNECTED) 10] create /groups/group1 ""Created /groups/group1[zk: localhost:2181(CONNECTED) 11] create /groups/group1/vips ""Created /groups/group1[zk: localhost:2181(CONNECTED) 12] create /groups/group1/nodes ""Created /groups/group1/nodes[zk: localhost:2181(CONNECTED) 13] create /groups/group1/vips/vip-192-168-1-2 some-configCreated /groups/group1/vips/vip-192-168-1-2[zk: localhost:2181(CONNECTED) 14] create /groups/group1/vips/vip-192-168-1-3 some-configCreated /groups/group1/vips/vip-192-168-1-3[zk: localhost:2181(CONNECTED) 15] create /nodes/node-192-168-1-4/group1 some-configCreated /nodes/node-192-168-1-4/group1[zk: localhost:2181(CONNECTED) 16] create /nodes/node-192-168-1-5/group1 some-configCreated /nodes/node-192-168-1-5/group1[zk: localhost:2181(CONNECTED) 17] create /nodes/node-192-168-1-6/group1 some-configCreated /nodes/node-192-168-1-6/group1node1因?yàn)橹氨O(jiān)聽了/nodes/node-192-168-1-4這個(gè)節(jié)點(diǎn),所以會(huì)接受到zookeeper的通知,node1去讀取/nodes/node-192-168-1-4下面的znode,更新自己的配置。然后在/groups/group1/nodes下去創(chuàng)建一個(gè)臨時(shí)znode。

# For node1WATCHER:: WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/nodes/node-192-168-1-4[zk: localhost:2181(CONNECTED) 18] create -e -s /groups/group1/nodes/node-192-168-1-4 ""Created /groups/group1/nodes/node-192-168-1-4[zk: localhost:2181(CONNECTED) 19] ls /groups/group1/vips[vip-192-168-1-2, vip-192-168-1-3][zk: localhost:2181(CONNECTED) 20] ls /groups/group1/vips/vip-192-168-1-2 true[][zk: localhost:2181(CONNECTED) 21] ls /groups/group1/vips/vip-192-168-1-3 true[]當(dāng)server為/groups/group1/vips下面的節(jié)點(diǎn)增加子節(jié)點(diǎn)時(shí),agent會(huì)得到zookeeper的通知,通過獲取節(jié)點(diǎn)的內(nèi)容,可以知道自己是不是被server選中,從而選擇是否去執(zhí)行VIP的職責(zé)。

agent執(zhí)行命令

現(xiàn)在server向node1發(fā)送命令,需要node1去執(zhí)行。流程如下。 server在/tasks/node-192-168-1-4下創(chuàng)建znode,并且監(jiān)聽其變化

# For server[zk: localhost:2181(CONNECTED) 5] create -s /tasks/node-192-168-1-4/task- "job definition"Created /tasks/node-192-168-1-4/task-0000000000[zk: localhost:2181(CONNECTED) 6] ls /tasks/node-192-168-1-4/task-0000000000 true[]node1之前已經(jīng)監(jiān)聽過了/tasks/node-192-168-1-4,所以會(huì)得到zookeeper的通知,這時(shí)node1會(huì)去讀取/tasks/node-192-168-1-4下面的節(jié)點(diǎn),拿到要執(zhí)行的任務(wù),在執(zhí)行完成后,在/tasks//tasks/node-192-168-1-4/task-0000000000中添加一個(gè)狀態(tài)znode

# For agent[zk: localhost:2181(CONNECTED) 5] create /tasks/node-192-168-1-4/task-0000000000/status "done"Created /tasks/node-192-168-1-4/task-0000000000/statusserver因?yàn)楸O(jiān)聽了/tasks/node-192-168-1-4/task-0000000000節(jié)點(diǎn),所以會(huì)接到zookeeper的通知,知道任務(wù)已經(jīng)完成。

VIP選舉

Server選擇VIP流程如下




VIP Failover

Server Failover

每個(gè)server啟動(dòng)時(shí),會(huì)在/servers/下創(chuàng)建一個(gè)臨時(shí)節(jié)點(diǎn)。當(dāng)節(jié)點(diǎn)創(chuàng)建成功,其他嘗試創(chuàng)建同名znode的server會(huì)報(bào)錯(cuò),就此得知server這個(gè)角色已經(jīng)被占有的。其他的server會(huì)監(jiān)聽這個(gè)znode。也會(huì)和主server一樣監(jiān)聽/groups和/tasks下面的節(jié)點(diǎn)。

# For server example.shopee.com[zk: localhost:2181(CONNECTED) 11] create /servers/server-shopee-com:1212 ""Created /servers/server-shopee-com:1212server每次執(zhí)行

Agent Failover

當(dāng)一個(gè)agent掛掉時(shí),比如node1掛掉時(shí),/groups/group1/nodes/node-192-168-1-4這個(gè)臨時(shí)節(jié)點(diǎn)會(huì)被刪除,server會(huì)得到zookeeper 的通知,從而開始選擇新的節(jié)點(diǎn)作為VIP。

關(guān)鍵詞:系統(tǒng),管理,虛擬

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉