1. 程式人生 > >高可用叢集corosync+pacemaker之crmsh使用(二)

高可用叢集corosync+pacemaker之crmsh使用(二)

  上一篇部落格我們聊到了crmsh的安裝以及配置一個資源到corosync+pacemaker高可用叢集上的相關命令的用法,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13592484.html;今天我們繼續來說crmsh的其他常用命令的用法;

  node常用命令

  show:檢視指定節點的定義資訊,如果未指定節點表示檢視叢集所有節點的定義資訊;

  standby:設定指定節點為standby狀態;預設不指定表示設定當前crmsh所在節點為standby狀態;standby狀態表示該節點為備用狀態,不執行任何資源;

  命令語法格式

  提示:lifetime指定standby狀態的生命週期,reboot表示直到設定對應節點為standby狀態,直到它重啟,意思是隻要對應節點重啟以後,standby狀態就會轉換為online狀態;forever表示設定指定節點永久都是standby,只要不手動設定為online狀態,它就會一直是standby狀態,即便重啟對應節點;預設不指定lifetime都表示永久將指定節點設定為備用狀態;

  示例:設定node01為standby狀態

  提示:正常情況只要把指定節點設定為standby狀態,在其上執行的所有資源都將會遷移至別的節點,如果叢集中的所有節點都為standby模式,對應資源將無法執行,所以我們可以看到我們在上託管的web服務處於停止狀態;

  ready:設定指定節點為非維護模式,也就是將指定節點設定為準備上線狀態;

  提示:把指定節點設定為ready狀態,它預設會在node定義資訊中新增一項maintenance=off的屬性,意思指定該節點為處於維護狀態;但是如果對應節點為standby狀態,即便我們設定了指定主機為ready狀態,它也不會上線,我們可以理解為standby的狀態優先順序要高於ready狀態;意思就是隻要對應節點為standby狀態,對其節點設定為ready不起作用;

  online:設定指定節點為線上狀態;

  提示:設定指定為online狀態以後,對應託管在叢集上的資源會自動執行起來;

  attribute:設定指定節點的指定定義屬性;

  提示:可以看到把node02上的standby屬性修改為off以後,對應節點就上線了;對應資源也從node01遷移到node02上了;正常沒有設定任何資源對節點的傾向性的情況下,資源預設不會遷移,之所以遷移是我在之前手動遷移資源時它給我們生成了一條資源對節點的傾向性;如下所示

   提示:紅框中的配置表示webservice這個組資源無限傾向性node02,意思只要node02線上,webservice這個組資源就會執行到node02上;

   server:檢視當前叢集節點的主機名列表;

  resource常用命令

  ban:從指定節點把指定資源移除,類似手動將指定節點的指定資源遷出;

  命令語法格式

  提示:rsc是指定資源的名稱;lifetime指定其ban的操作的生命週期,同standby命令的生命週期類似;force表示強制操作;

  示例:將webip從node01遷出

  提示:可以看到我們把webip從node01遷出以後,它會在配置檔案中建立一條資源對節點傾向性的規則,並且指明webip對我們ban指定的節點的傾向性為負無窮,這意味著只要有其他節點可以執行,對應資源絕不執行在node01上;由於webip同webserver、webstore都同屬webservice這個組,所以對應組內的資源也會跟著webip的遷移而遷移;

  cleanup:清除指定節點的狀態資訊;

  示例:資源遷移過程中的錯誤資訊;

  提示:預設情況我們指定資源沒有在組內,它預設只會清除我們指定資源相關的狀態資訊,從上面截圖可以看到,我們指定資源在組內,所以它將組內所有資源的狀態資訊一併清除了;

  clear:清除指定資源約束關係;

  提示:可以看到我們指定資源的位置約束關係被清除掉了;其實我們在執行手動遷移資源時,它預設會在配置資訊中給我們建立位置約束配置,clear相當於對遷移產生的約束配置做清除;

  constraints:顯示影響指定資源的約束;

  locate:顯示資源執行的位置;

  migrate/move:將指定資源手動遷移至指定節點;

  命令語法格式

  示例:將webip遷移至node02;

  提示:可以看到對應webip這個資源並沒有遷移;其實原因是webip同webserver、webstore在同一個組,而webserver對node02是負無窮,所以導致webservice遷移不到node02上去,所以組內的webip受組的約束,它也會籤不上去;

  提示:其實執行migrate/move操作它都會在配置檔案中生成一條位置約束的配置;並且會配置對遷往的節點的傾向性為正無窮;如果資源在同一個組中,組中資源對同一節點的傾向性規則是:負無窮大於正無窮,正無窮大於特定的分數;計算一個組對節點的傾向性,就是組中各資源對節點傾向性之和;所以上面沒有遷移成功的原因是webserver對node02的傾向性為負無窮;

  刪除webserver對node02的傾向性,看看webip是否會遷移至node02上?

  提示:可以看到刪除了webserver對node02的傾向性以後,webip從node01遷往了node02,對應組也跟著遷往node02上了;

  stop:停止指定資源;

  status:檢視指定資源的狀態資訊

  start:啟動指定資源;

  restart:重啟指定資源;

  configure相關指令

  delete:刪除指定資源定義;

  提示:刪除了組資源以後,對應資源會重新分散的執行到各個節點,如果有位置約束的,會根據位置約束去執行,沒有位置約束會負載均衡的方式分散在叢集各節點;如下所示

  location:設定指定資源對節點的傾向性;

  命令語法幫助

Usage:

location <id> <rsc> [<attributes>] {<node_pref>|<rules>}

rsc :: /<rsc-pattern>/
        | { resource_sets }
        | <rsc>

attributes :: role=<role> | resource-discovery=always|never|exclusive

node_pref :: <score>: <node>

rules ::
  rule [id_spec] [$role=<role>] <score>: <expression>
  [rule [id_spec] [$role=<role>] <score>: <expression> ...]

id_spec :: $id=<id> | $id-ref=<id>
score :: <number> | <attribute> | [-]inf
expression :: <simple_exp> [<bool_op> <simple_exp> ...]
bool_op :: or | and
simple_exp :: <attribute> [type:]<binary_op> <value>
          | <unary_op> <attribute>
          | date <date_expr>
type :: string | version | number
binary_op :: lt | gt | lte | gte | eq | ne
unary_op :: defined | not_defined

date_expr :: lt <end>
         | gt <start>
         | in start=<start> end=<end>
         | in start=<start> <duration>
         | spec <date_spec>
duration|date_spec ::
         hours=<value>
         | monthdays=<value>
         | weekdays=<value>
         | yearsdays=<value>
         | months=<value>
         | weeks=<value>
         | years=<value>
         | weekyears=<value>
         | moon=<value>

Examples:

location conn_1 internal_www 100: node1

location conn_1 internal_www \
  rule 50: #uname eq node1 \
  rule pingd: defined pingd

location conn_2 dummy_float \
  rule -inf: not_defined pingd or pingd number:lte 0

# never probe for rsc1 on node1
location no-probe rsc1 resource-discovery=never -inf: node1

  示例:設定webstore對node01的傾向性為100分;

  示例:設定webserver對node01的傾向性為正無窮;

  提示:資源對節點的傾向性除了定義其傾向性,它還取決於對節點的粘性;如下所示

  提示:假如叢集有兩個節點,分別是node01和node02,其中webip對node01的傾向性為100,webserver對node01的傾向性為200;

  驗證:把node01設定為standby狀態,看看對應webip和webserver是否會遷往node02呢?

  提示:正常情況webip和webserver都執行在node02上了;

  如果node01再次上線,webip和webserver都會遷回node01?

  提示:預設情況它們都遷回了node01上;

  設定預設資源對節點的粘性為500,然後再次把node01設定為standby模式,在上線,看看對應資源是否還會從node02遷回node01呢?

crm(live)configure# property default-resource-stickiness=
default-resource-stickiness (integer, [(null)]): 
    Deprecated (use resource-stickiness in rsc_defaults instead)

crm(live)configure# property default-resource-stickiness=500
 crm(live)configure# verify
ERROR: Warnings found during check: config may not be valid
crm(live)configure# commit
ERROR: Warnings found during check: config may not be valid
Do you still want to commit (y/n)? y
crm(live)configure# cd
crm(live)# status
Stack: corosync
Current DC: node01.test.org (version 1.1.21-4.el7-f14e36fd43) - partition with quorum
Last updated: Thu Sep  3 22:56:52 2020
Last change: Thu Sep  3 22:56:39 2020 by root via cibadmin on node01.test.org

2 nodes configured
3 resources configured

Online: [ node01.test.org node02.test.org ]

Full list of resources:

 webstore       (ocf::heartbeat:Filesystem):    Started node02.test.org
 webserver      (systemd:httpd):        Started node01.test.org
 webip  (ocf::heartbeat:IPaddr):        Started node01.test.org

crm(live)# node standby node01.test.org
crm(live)# status
Stack: corosync
Current DC: node01.test.org (version 1.1.21-4.el7-f14e36fd43) - partition with quorum
Last updated: Thu Sep  3 22:57:16 2020
Last change: Thu Sep  3 22:57:10 2020 by root via crm_attribute on node01.test.org

2 nodes configured
3 resources configured

Node node01.test.org: standby
Online: [ node02.test.org ]

Full list of resources:

 webstore       (ocf::heartbeat:Filesystem):    Started node02.test.org
 webserver      (systemd:httpd):        Started node02.test.org
 webip  (ocf::heartbeat:IPaddr):        Started node02.test.org

crm(live)# node online node01.test.org
crm(live)# status
Stack: corosync
Current DC: node01.test.org (version 1.1.21-4.el7-f14e36fd43) - partition with quorum
Last updated: Thu Sep  3 22:57:34 2020
Last change: Thu Sep  3 22:57:26 2020 by root via crm_attribute on node01.test.org

2 nodes configured
3 resources configured

Online: [ node01.test.org node02.test.org ]

Full list of resources:

 webstore       (ocf::heartbeat:Filesystem):    Started node02.test.org
 webserver      (systemd:httpd):        Started node02.test.org
 webip  (ocf::heartbeat:IPaddr):        Started node02.test.org

crm(live)# 

  提示:設定default-resource-stickiness時檢查時提示錯誤,那個錯誤是說發現有警告資訊,配置可能不生效,其實我們可以不用管它,直接提交就行;修改了資源預設對節點的粘性以後,再次把node01設定為standby狀態,資源都遷往了node02上;node01再次上線資源卻沒有遷回node01上;這也就是我們剛才設定的資源預設對節點的粘性的原因,只有資源對node01的傾向性與node02的傾向性相差大於500,資源才會在node01恢復正常以後,從node02遷回node01;

  colocation:定義資源與資源在一起的傾向性;

  命令語法格式幫助

Usage:

colocation <id> <score>: <rsc>[:<role>] <with-rsc>[:<role>]
  [node-attribute=<node_attr>]

colocation <id> <score>: <resource_sets>
  [node-attribute=<node_attr>]

resource_sets :: <resource_set> [<resource_set> ...]

resource_set :: ["("|"["] <rsc>[:<role>] [<rsc>[:<role>] ...] \
                [<attributes>]  [")"|"]"]

attributes :: [require-all=(true|false)] [sequential=(true|false)]


Example:

colocation never_put_apache_with_dummy -inf: apache dummy
colocation c1 inf: A ( B C )

  示例:定義webip、webserver、webstore三者在一起的傾向性為正無窮

  提示:定義資源與資源在一起傾向性為正無窮意味著這些資源必須要在一起,不能分開;如果是負無窮則表示相反的意思;

  驗證:檢視叢集狀態資訊,看看webip、webserver、webstore是否執行在同一節點?

  驗證:將webip手動遷移至node01看看webserver和webstore是否會跟著遷移到node01上?

  提示:可以看到手動遷移webip,webserver和webstore也會跟著遷移,這有點類似組的關係;

  order:定義資源順序約束;

  命令語法幫助

Usage:

order <id> [{kind|<score>}:] first then [symmetrical=<bool>]

order <id> [{kind|<score>}:] resource_sets [symmetrical=<bool>]

kind :: Mandatory | Optional | Serialize

first :: <rsc>[:<action>]

then ::  <rsc>[:<action>]

resource_sets :: resource_set [resource_set ...]

resource_set :: ["["|"("] <rsc>[:<action>] [<rsc>[:<action>] ...] \
                [attributes] ["]"|")"]

attributes :: [require-all=(true|false)] [sequential=(true|false)]


Example:

order o-1 Mandatory: apache:start ip_1
order o-2 Serialize: A ( B C )
order o-3 inf: [ A B ] C
order o-4 first-resource then-resource

  提示:symmetrical表示是否啟動對稱停止順序,預設是true;所謂對稱停止順序就是根據我們定義的啟動順序,先啟動的後停止,後啟動的先停止;Mandatory表示強制約束;optional表示可選;Serialize表示順序啟動,順序停止;常用mandatory來約束啟動順序;

  示例:強制約束webstore在webserver啟動之前啟動,webserver在webip之前啟動

  提示:以上配置表示webstore最先啟動,其次是webserver,最後是webip;停止順序則為相反的順序,先停止webip,其次webserver,最後webstore;如果不想定義為對稱停止,可以將symmetrical設定為false即可;

  驗證:將node02設定為standby狀態,檢視叢集狀態,看看這三個資源的啟動和停止方式是否是我們定義的順序?

  提示:可以看到把node02設定為standby狀態以後,資源都遷往node01上去了;最開始停止的是webip,其次是webserver,最後是webstore;啟動時,最先啟動webstore,然後webserver,最後webip;和我們定義的啟動順序是一樣