天天看點

JBoss企業級應用服務平台群集指南(十)

    群集系統需要一直維護目前成員節點的清單,這樣負載平衡系統(load balancer)和用戶端攔截器(client interceptor)就知道怎樣去指引它們的請求。發現協定(discovery protocols)用來在群集系統裡探索活動節點。當群集系統啟動時将檢測到所有的初始節點。之後如果有新的節點加入,它隻有在組成員協定(group membership protocol)(GMS,參見章節 1.5.1, “組成員資格”)準許後才能被探索(discovered)到。

    既然發現協定(discovery protocols)處于傳輸協定之上,你可以根據你的傳輸協定選擇不同的發現協定。發現協定在 JGroups MBean Config 元素裡也被配置成子元素(sub-elements)。

    PING 發現協定(discovery protocol)通常在 UDP 傳輸協定之上。每個節點用一個單點傳播的 UDP 資料封包(datagram)來應答發送者。下面是 JGroups Config 元素下 PING 配置的例子。

<PING timeout="2000" num_initial_members="2"/>

下列是 PING 元素裡的可用屬性。

•  <b>timeout</b> 指定等待應答的最長時間(毫秒數)。

•  <b>num_initial_members </b>指定等待的最大的應答數量。

•  <b>gossip_host</b> 指定 GossipRouter 在哪個主機上運作。

•  <b>gossip_port</b> 指定 GossipRouter 所偵聽的端口。

•  <b>gossip_refresh</b> 指定 GossipRouter 的租約(lease)的時間間隔(毫秒數)。

•  <b>initial_hosts</b> 是一個用逗号隔開的位址清單(如:host1[12345],host2[23456]),群集系統會 ping 這個清單來進行探索(discovery)。

    如果gossip_host 和gossip_port都被定義了,群集系統會使用 GossipRouter 作初始探索(initial discovery)。如果指定了initial_hosts,群集系統會 ping 這個靜态位址清單來進行探索。否則,群集系統用 IP 多點傳送來進行探索。

注意 

   當已經過了 timeout 毫秒後或者已經接收到 num_initial_members 應答後,探索階段就會傳回。

    TCPGOSSIP 協定隻用于 GossipRouter。它和 PING 協定配置基本上一樣,有着有效的gossip_host 和gossip_port 屬性。它處于 UDP 和 TCP 協定的上面。下面是一個例子。

&lt;PING timeout="2000" 

initial_hosts="192.168.5.1[12000],192.168.0.2[12000]" 

num_initial_members="3"/&gt;

下列是TCPGOSSIP元素裡的可用屬性。

•  <b>timeout</b> specifies the maximum number of milliseconds to wait for any responses.

•  <b>num_initial_members </b>specifies the maximum number of responses to wait for.

• <b>initial_hosts</b>是一個 GossipRouters 用來注冊的用逗号隔開的位址清單(如:host1[12345],host2[23456])。

    TCPPING 協定使用一套知名成員并 ping 它們來進行探索。它基本上是一個靜态的配置。它工作于 TCP 協定的上面。這裡是一個 JGroups Config元素裡的TCPPING配置元素的例子。

&lt;TCPPING timeout="2000" 

initial_hosts="192.168.5.1[7800],192.168.0.2[7800]" 

port_range="2" num_initial_members="3"/&gt;

下列是 TCPPING 元素的可用屬性。

•  <b>num_initial_members</b> specifies the maximum number of responses to wait for.

• <b>initial_hosts</b>是一個用來 pinging 的用逗号隔開的位址清單(如:host1[12345],host2[23456])。

•  <b>port_range</b> specifies the range of ports to ping on each host in the initial_hosts list. That

is because multiple nodes can run on the same host. In the above example, the cluster would ping ports 7800, 7801, and 7802 on both hosts.

    MPING 協定是 TCP 上的多點傳送 ping 協定。它和 PING 在 UDP 上工作的方式一樣。它不要求外部的程序(GossipRouter)或靜态配置(初始主機清單)。這裡是一個 JGroups Config 元素的MPING 配置元素的例子。

&lt;MPING timeout="2000" 

bind_to_all_interfaces="true" mcast_addr="228.8.8.8" mcast_port="7500" ip_ttl="8" num_initial_members="3"/&gt;

下列是MPING 元素的可用屬性。

•  <b>bind_addr</b> 指定在哪個接口上發送和接收多點傳送資料包。

•  <b>bind_to_all_interfaces</b> 覆寫了bind_addr并使用多宿主節點上的所有接口。

•  <b>mcast_addr, mcast_port, ip_ttl</b> 屬性和 UDP 協定配置的相關屬性相同。

    故障檢測協定(failure detection protocols)用來檢測發生故障的節點。一旦檢測到了一個發生故障的節點,群集系統會更新它的視圖,使負載平衡系統(load balancer)和客戶攔截器(client interceptors)避開死節點。故障檢測協定被配置為 JGroups MBean Config 元素裡的子元素。

    FD 發現協定(FD discovery protocol)要求每個節點定期地發送 are-you-alive 資訊給它的鄰居節點。如果這個鄰居沒有應答,呼叫節點将給群集系統發送一個 SUSPECT 資訊。目前的 group coordinator 會複核這個可能有問題的節點是否真的已經崩潰了,并更新群集系統的視圖。這裡是一個 FD 配置的例子。

&lt;FD timeout="2000" max_tries="3" shun="true"/&gt;

下列是 FD 元素的可用屬性。

•  <b>timeout</b> 指定對 are-you-alive 資訊的應答的最長等待時間(毫秒數)。

•  <b>max_tries</b> 指定在一個節點被懷疑為崩潰前,所丢失的 are-you-alive 資訊的次數。

•  <b>shun</b> 指定崩潰的節點是否該被剔除(shunned)。一旦被剔除,這個節點将從群集裡開除,即使之後它又恢複了。被剔除的節點可以通過探索過程(discovery process)重新加入到群集系統裡來。

   從某個節點的有規律的網絡流量可以判定它是否正常工作。是以,are-you-alive 資訊隻是在節點有一段時間沒有有規律的網絡流量時才發送。

    當有很多節點時, FD 協定的 are-you-alive 資訊會增加網絡的負載。它也會産生誤判。例如,如果網絡太繁忙了而且逾時時間(timeout)設定的很短,節點就有可能被誤懷疑為崩潰了。此外,如果節點在調試器(debugger)或剖析工具(profiler)裡被挂起時,它有可能被懷疑或剔除(shunned)。為了解決上述問題,FD_SOCK 協定依據隻有有規律的與節點的 TCP 連接配接失敗後才懷疑節點崩潰。然而,這種消極檢測的問題是,挂起的節點隻有被通路時或者 TCP 連接配接逾時幾分鐘後才會被檢測到。FD_SOCK 在所有節點都被頻繁通路的高負載的網絡裡表現最好。最簡單的 FD_SOCK 配置不要設定任何屬性。你可以隻在 JGroups 的Config元素裡聲明一個空的FD_SOCK 就可以了。

&lt;FD_SOCK/&gt;

FD_SOCK 元素隻有一個可選屬性

•  <b>srv_sock_bind_addr</b> 指定伺服器套接字應該綁定的接口。如果它被忽略,伺服器啟動時指令行裡的-D bind.address 屬性将被使用。

    FD_SIMPLE 協定是一個基于 are-you-alive 資訊的更加寬容(更少誤判)的協定。每個節點定期地發送 are-you-alive 資訊給随機選取的節點然後等待應答。如果在某一逾時時間内還沒有收到應答,和這個節點相關的計數器将增加。如果計數器超過了某一個值,這個節點就會被懷疑。當接收到對 are-you-alive 資訊的應答時,這個計數器将清零。下面是 FD_SIMPLE 協定的一個配置例子。

&lt;FD_SIMPLE timeout="2000" max_missed_hbs="10"/&gt;

下列是FD_SIMPLE 元素的可用屬性。

•  <b>timeout</b> 指定對 are-you-alive 資訊應答的以毫秒為機關的逾時時間。如果在這個時間内沒有收到應答,目标節點的計數器将增加。

•  <b>max_missed_hbs</b> 指定節點被懷疑為崩潰前可以丢失的 are-you-alive 資訊(也就是計數器值)的最高次數。

本文轉自xudayu 51CTO部落格,原文連結:http://blog.51cto.com/xudayu/70402,如需轉載請自行聯系原作者