群集成員資格物件

目錄

簡介

Apache Tribes 頻道 中的成員資格元件負責動態偵測群集中其他成員 (節點)。目前有兩種不同的成員服務,org.apache.catalina.tribes.membership.McastServiceorg.apache.catalina.tribes.membership.StaticMembershipServiceMcastService 建立一個基於多播的成員服務,將 UDP 封包傳送至多播 IP 位址。StaticMembershipService 建立一個基於單播的成員服務,將 TCP 封包傳送至預先定義的成員位址。

預設實作

群集群組通知的預設實作建立在使用 UDP 封包傳送至多播 IP 位址的多播心跳上。群集成員使用相同的組播位址/埠組合進行分組。每個成員會以給定的間隔 (frequency) 傳送心跳,而此心跳用於動態偵測。類似地,如果在 dropTime 毫秒指定的時限內未收到心跳,則成員會被視為可疑,且頻道和任何成員資格監聽器都會收到通知。

屬性

共用屬性

屬性 說明
className

成員身分元件的實作。有兩種可用的實作,org.apache.catalina.tribes.membership.McastServiceorg.apache.catalina.tribes.membership.StaticMembershipService

多播屬性

屬性 說明
className

值為 org.apache.catalina.tribes.membership.McastService。此實作使用多播心跳來發現成員。

address

成員身分會廣播其存在並在上面偵聽其他心跳的多播位址。預設值為 228.0.0.4。請確定您的網路已啟用多播流量。
多播位址與 port 結合使用,會建立叢集群組。若要將您的農場分成幾個不同的群組,或將 QA 從生產中區分出來,請變更 portaddress
以前稱為 mcastAddr。

port

多播埠,預設值為 45564
多播埠與 address 結合使用,會建立叢集群組。若要將您的農場分成幾個不同的群組,或將 QA 從生產中區分出來,請變更 portaddress

frequency

傳送心跳的頻率(以毫秒為單位)。預設值為 500 毫秒。
在多數情況下,預設值已足夠。變更此值只會變更心跳之間的間隔。

dropTime

成員身分元件會對成員計時,並在成員未能在特定時間內傳送心跳時通知頻道。預設值為 3000 毫秒。這表示,如果在該時間範圍內未收到成員的心跳,成員身分元件會通知叢集此事。
在高延遲網路中,您可能希望增加此值,以防範誤判。
Apache Tribes 還提供一個 TcpFailureDetector,它會在發生心跳逾時時使用 TCP 連線驗證逾時。這可防範誤判。

bind

如果您希望將多播流量繫結到特定網路介面,請使用此屬性。預設情況下,或當此屬性未設定時,它會嘗試繫結到 0.0.0.0,有時在多宿主主機上這會成為問題。

ttl

多播心跳的時間生存期。此設定應為介於 0 到 255 之間的值。預設值取決於 VM 實作。

domain

Apache Tribes 可以透過使用此 domain 屬性,將成員邏輯地分組到網域中。org.apache.catalina.tribes.Member.getDomain() 方法會傳回在此處指定的數值。

soTimeout

傳送和接收心跳是在單一執行緒上完成的,因此,若要避免永遠封鎖此執行緒,您可以控制此 socket 上的 SO_TIMEOUT 值。
如果提供的數值小於或等於 0,程式碼會將此數值預設為頻率

recoveryEnabled

如果發生網路故障,Java 多重傳送 socket 就不會透明地備援,相反地,socket 會在每次接收請求時持續擲回 IOException。當 recoveryEnabled 設為 true 時,這會關閉多重傳送 socket,並開啟一個具有與上述定義相同的屬性的新 socket。
預設值為 true

recoveryCounter

recoveryEnabled==true 時,此數值表示在嘗試復原之前必須發生錯誤的次數。預設值為 10

recoverySleepTime

recoveryEnabled==true 時,此數值表示系統在復原嘗試之間會休眠多久時間(以毫秒為單位),直到復原成功。預設值為 5000(5 秒)。

localLoopbackDisabled

成員資格使用多重傳送,它會呼叫 java.net.MulticastSocket.setLoopbackMode(localLoopbackDisabled)。當 localLoopbackDisabled==true 時,多重傳送訊息不會傳送至同一台本機上的其他節點。預設值為 false

靜態成員資格屬性

使用靜態成員資格服務時,您必須確保 Cluster 元素的 channelStartOptions 屬性設為預設值 15

屬性 說明
className

此值為 org.apache.catalina.tribes.membership.StaticMembershipService

connectTimeout

嘗試與預先定義的靜態成員的位址建立 TCP 連線的逾時時間。預設值為 500 毫秒。

expirationTime

如果成員未在給定時間內更新其存活時間,此成員資格會將 memberDisappeared 事件通知叢集。預設值為 5000 毫秒。

rpcTimeout

用於成員通知至/來自其他節點的訊息的逾時時間。預設值為 3000 毫秒。

useThread

如果設為 true,此成員資格服務會啟動一個本機執行緒來傳送 ping 訊息。如果設為 false,頻道心跳會傳送 ping 訊息。預設值為 false

pingInterval

如果 useThread == true,定義傳送 ping 訊息的間隔。預設為 1000 毫秒。

巢狀元件

靜態成員服務允許嵌套 <LocalMember><Member> 元素。

靜態成員屬性

LocalMember
靜態成員,是靜態叢集組的本地成員。

注意:不一定要使用 <LocalMember> 元素明確設定本地成員。所有叢集成員,包含本地成員,都可以使用 <Member> 元素定義,而 Tomcat 會找出哪一個是本地成員。

屬性 說明
className 僅提供一種實作:org.apache.catalina.tribes.membership.StaticMember
port 不需要設定。此屬性的值會繼承自叢集接收器設定。
securePort 不需要設定。此屬性的值會繼承自叢集接收器設定。
host 不需要設定。此屬性的值會繼承自叢集接收器設定。
domain 此靜態成員用於偵聽叢集訊息的邏輯叢集網域。有兩種不同的值類型
1. 一般字串值,例如「staging-domain」或「tomcat-cluster」,會使用 ISO-8859-1 編碼轉換成位元組。2. 字串形式的位元組陣列,例如 {216,123,12,3}
uniqueId 此靜態成員的通用唯一識別碼。值必須為 16 個位元組,格式如下
1. 字串形式的位元組陣列,例如 {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

Member
靜態成員,新增到靜態叢集組。

屬性 說明
className 僅提供一種實作:org.apache.catalina.tribes.membership.StaticMember
port 此靜態成員用於偵聽叢集訊息的埠
securePort 此靜態成員用於偵聽加密叢集訊息的安全埠,預設值為 -1,此值表示成員未在安全埠上偵聽
host 此靜態成員用於偵聽叢集訊息的主機(或網路介面)。有 3 種不同的值類型
1. IP 位址,格式為「216.123.1.23」
2. 主機名稱,例如「tomcat01.mydomain.com」或「tomcat01」,只要解析正確即可
3. 字串形式的位元組陣列,例如 {216,123,12,3}
domain 此靜態成員用於偵聽叢集訊息的邏輯叢集網域。有兩種不同的值類型
1. 一般字串值,例如「staging-domain」或「tomcat-cluster」,會使用 ISO-8859-1 編碼轉換成位元組。
2. 字串形式的位元組陣列,例如 {216,123,12,3}
uniqueId 此靜態成員的通用唯一識別碼。值必須為 16 個位元組,格式如下
1. 字串形式的位元組陣列,例如 {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

設定

     <Membership className="org.apache.catalina.tribes.membership.StaticMembershipService">
       <Member className="org.apache.catalina.tribes.membership.StaticMember"
                  port="4004"
                  host="tomcat01.mydomain.com"
                  uniqueId="{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}"/>
       <Member className="org.apache.catalina.tribes.membership.StaticMember"
                  port="4004"
                  host="tomcat02.mydomain.com"
                  uniqueId="{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1}"/>
     </Membership>