pacemaker規則詳解

2021-08-02 18:20:03 字數 4220 閱讀 3510

譯文原**為:

如果最外層的約束規則求值結果為false,集群則會視為該規則無效。當最外層的約束規則計算為true時,與規則相關聯的資源的分數將會被更新,並選擇資源在哪個節點執行。

如果上面的解釋你聽起來很熟悉,那是應為你已經使用了乙個相對比較簡單的規則語法來建立約束規則了。

例子:防止myapachersc執行在節點c001n03上

id="dont-run-apache-on-c001n03"

rsc="myapachersc"

score="-infinity"

node="c001n03"/>

這天約束規則可以寫的更加冗餘:

id="dont-run-apache-on-c001n03"

rsc="myapachersc">

id="dont-run-apache-rule"

score="-infinity">

id="dont-run-apache-expr"

attribute="#uname"

operation="eq"

value="c00n03"/>

rule>

rsc_location>

使用擴充套件形式的優點是可以在新增額外的配置專案到這個規則中。例如限制這個規則在一天的特定時間或者一周中的某天(這個在隨後的章節中討論)。同樣可以允許我們匹配節點的其他屬性而不單單只是匹配節點的名字。如果我們估計每個機器的cpu電源配置如加入的節點小節:

id="uuid1"

uname="c001n01"

type="normal">

id="uuid1-custom_attrs">

id="uuid1-cpu_mips"

name="cpu_mips"

value="1234"/>

instance_attributes>

node>

id="uuid2"

uname="c001n02"

type="normal">

id="uuid2-custom_attrs">

id="uuid2-cpu_mips"

name="cpu_mips"

value="5678"/>

instance_attributes>

node>

nodes>

然後我們可以建立一條規則防止資源在動力不足的機器去上執行:

id="need-more-power-rule"

score="-infinity">

id=" need-more-power-expr"

attribute="cpu_mips"

operation="lt"

value="3000"/>

rule

當使用score-attribute來替代score時,按照規則匹配每個節點的得分根據其命名節點屬性的值而進行不同的調整。根據上述例項,如果乙個規則使用了「score-attribute=」cpu_mips」,c001n01將優先順序執行資源的值增加到1234,而c001n02的優先順序增加到5678

通常一些集群節點會與該集群的其他節點會稍微不太一樣,這些差異(以二進位制命名的位置或網路介面的名稱)要求資源根據託管的機器進行不同的配置。通過為資源定義多個instance_attributes物件並向每個物件新增乙個規則,我們可以輕鬆處理這些特殊情況。在下列例項當中,myspecialrsc將會使用eth1和port9999,當這個資源執行在節點一時,執行在節點二時使用eth2和port8888,其餘的節點將會預設使用eth0和埠9999.

例子:基於不同的節點名稱來定義不同的資源選項。

id="myspecialrsc"

class="ocf"

type="special"

provider="me">

id="special-node1"

score="3">

id="node1-special-case"

score="infinity" >

id="node1-special-case-expr"

attribute="#uname"

operation="eq"

value="node1"/>

rule>

id="node1-inte***ce"

name="inte***ce"

value="eth1"/>

instance_attributes>

id="special-node2"

score="2" >

id="node2-special-case"

score="infinity">

id="node2-special-case-expr"

attribute="#uname"

operation="eq"

value="node2"/>

rule>

id="node2-inte***ce"

name="inte***ce"

value="eth2"/>

id="node2-port"

name="port"

value="8888"/>

instance_attributes>

id="defaults"

score="1" >

id="default-inte***ce"

name="inte***ce"

value="eth0"/>

id="default-port"

name="port"

value="9999"/>

instance_attributes>

primitive>

對instance_attributes物件進行評估的順序由其分數(從最高到最低)確定。 如果沒有提供,分數預設為零,並且按照列出的順序處理具有相等分數的物件。 如果instance_attributes物件沒有規則或有乙個計算結果為true的規則,那麼對於任何引數,資源還沒有值,資源將使用由instance_attributes物件定義的引數值。

控制集群選項的實現方式與在不同節點上指定不同資源選項的方式大致相同。有一些不一樣的是這些事集群的選項,乙個不能(或者說不能節點不工作)使用基於屬性的表達方式。以下示例說明如何在工作時間之內和之外設定不同的資源粘性值。 這樣就可以讓資源自動回到最喜歡的主機,但在理論上這樣做並不會干擾業務活動。

示例,設定 resource-stickiness=infinity 在周一到周五的早上九點到下午六點,然後設定resource-stickiness=0在其餘剩下的時間裡。

id="core-hours"

score="2">

id="core-hour-rule"

score="0">

id="nine-to-five-mon-to-fri"

operation="date_spec">

id="nine-to-five-mon-to-fri-spec"

hours="9-17"

weekdays="1-5"/>

date_expression>

rule>

id="core-stickiness"

name="resource-stickiness"

value="infinity"/>

meta_attributes>

id="after-hours"

score="1" >

id="after-stickiness"

name="resource-stickiness"

value="0"/>

meta_attributes>

rsc_defaults>

pacemaker是事件驅動系統。因此,除非發生某些事情(如資源故障貨配置更改),否則不會重新計算資源執行的最佳位置。這可能意味著不會強制執行只允許資源x在上午九點至下午五點之間執行的位置約束。

如果你要依賴基於時間的規則,則必須設定cluster-recheck-interval選項。這將告訴集群定期重新計算集群的理想狀態。例如,如果您將cluster-recheck-interval=5m,則在九點到九點零五分之間會注意集群需要啟動資源x,而在17點到17點05之間將魂意識到他需要被停止。請注意,實際的啟動和停止操作的時間取悅於首先需要執行的操作。

pacemaker高可用避免資料重複

pacemaker實現zabbix高可用後遇到的很尷尬的問題 監控頁面檢視主機物件的最新資料時發現相同時間會有兩份資料,如下圖 之所以出現這種情況完全是因為zabbix ha導致的,部署之初只考慮到了主節點宕機後備節點是否能接管vip代替工作,實際上該功能的確通過pacemaker實現了,但卻忽略了...

Kohana ORM 規則詳解

orm 約定 kohana orm 類遵循以下幾個條件。大多數的條件都是由 orm 的效能所決定的 表名是複數形式,例如 users 設定 table names plural 為 false 可以重寫 模型的名字是表名的單數形式 例如 user 並加上 model 字尾。例如 user model...

Linux iptables規則詳解

filter input drop 345 43237 forward accept 0 0 output accept 306 41346 ainput p tcp m tcp dport 10022 j accept ainput p tcp m tcp dport 80 j accept ai...