溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

OCF便利的函數(shù)有哪些

發(fā)布時間:2022-01-05 09:26:07 來源:億速云 閱讀:101 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“OCF便利的函數(shù)有哪些”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“OCF便利的函數(shù)有哪些”吧!

7 便利的函數(shù)

7.1 日志: ocf_log

資源代理應(yīng)該使用ocf_log函數(shù)來進行日志。調(diào)用方法如下:

支持如下幾種日志級別:

  • debug ---- debugging 消息。多數(shù)的日志配置缺省不使用這個級別。

  • info ---- 是關(guān)于資源代理行為和狀態(tài)的信息

  • warn ---- 警告。一些不期望的行為,但是不是不可恢復的錯誤

  • err ---- 錯誤。這些日志在出現(xiàn)資源代理以一定錯誤碼exit之前

  • crit ---- 臨界錯誤。以為有err級別。crit級別就非常少用,出發(fā)資源代理也以一定的錯誤碼退出

7.2 檢查二進制:have_binary和 check_binary

資源代理可能需要測試特定可執(zhí)行文件的可用性。可以使用have_binary函數(shù):

1

2

3

if ! have_binary  frobnicate; then

  ocf_log  warn "Missing frobnicate binary, frobnication disabled!"

fi

如果二進制文件缺失是一個致命的錯誤,就應(yīng)該提前調(diào)用check_binary函數(shù):

1

check_binary frobnicate

使用check_binary是檢查文件存在(并且可執(zhí)行)的一個很便捷的方法,如果沒找到或不可執(zhí)行的話,以$OCF_ERR_INSTALLED退出。

注意:have_binary和check_binary會在$PATH 定義的目錄下去找指定的二進制文件。建議最好是做全路徑檢查,分布式環(huán)境里面,用戶策略的變化都會使得文件路徑發(fā)生變化。

7.3 執(zhí)行命令并收集輸出:ocf_run

任何時候需要執(zhí)行一個命令并獲得其輸出都可以使用ocf_run函數(shù),像下面的例子這樣:

1

ocf_run "frobnicate  --spam=eggs" || exit $OCF_ERR_GENERIC

通過上面的命令,資源代理會調(diào)用frobnicate --spam=eggs 并捕捉其輸出和退出碼。如果退出碼非零(代表一種錯誤),ocf_run 以 err級別將輸出記錄到日志,資源代理隨后退出。如果退出碼是0(表示成功),則輸出將以info級別記錄到日志。

如果資源代理希望忽略成功執(zhí)行的輸出,可以使用 -q 參數(shù)。在下面的例子中,ocf_run 只會將退出碼非零的執(zhí)行輸出結(jié)果導入日志。

1

ocf_run -q "frobnicate  --spam=eggs" || exit $OCF_ERR_GENERIC

最后,如果資源代理想以不同的日志級別(非 err )記錄那些返回碼非零的執(zhí)行結(jié)果,可以通過使用 -info 或者 -warn參數(shù):

1

ocf_run -warn "frobnicate  --spam=eggs"

7.4 鎖:ocf_take_lock和 ocf_release_lock_on_exit

偶然也會出現(xiàn)這種情況,按集群配置,相同類型的不同資源不能同時并行運行。資源代理需要保證在相同機器上不會并行:

1

2

3

4

5

6

7

8

LOCKFILE=${HA_RSCTMP}/foobar

ocf_release_lock_on_exit $LOCKFILE


foobar_start() {

   ...

   ocf_take_lock  $LOCKFILE

   ...

}

ocf_take_lock 試圖獲得指定的$LOCKFILE。不可得時,它sleep 0到1秒間一個隨機的時間,再重試。ocf_release_lock_on_exit 會在資源代理退出的時候釋放鎖文件。

7.5 數(shù)值檢測

對于參數(shù)檢測,這個函數(shù)可以用來檢測一個值是否是一個數(shù)。例子如下:

1

2

3

4

5

6

7

8

9

10

LOCKFILE=${HA_RSCTMP}/foobar

ocf_release_lock_on_exit $LOCKFILE


foobar_validate_all() {

   if !  ocf_is_decimal $OCF_RESKEY_eggs; then

       ocf_log  err "eggs is not numeric!"

       exit $OCF_ERR_CONFIGURED

   fi

   ...

}

7.6 boolean值檢測

當資源代理定義一個boolean類型的參數(shù),用戶會將這個參數(shù)指定為0/1, true/false, 或者 on/off。在資源代理里面,去檢測這些值是很麻煩的,所以應(yīng)該用ocf_is_true函數(shù)比較方便:

1

2

3

if ocf_is_true  $OCF_RESKEY_superfrobnicate; then

   ocf_run "frobnicate  --super"

fi

注意:ocf_is_true 不可以對空的或者不存在的變量使用。它總是返回退出碼 1,相當于 false。

7.7 偽資源:ha_pseudo_resource

偽資源是那種不像實際可運行進程一樣可以真實啟動和停止的資源代理,它們僅僅執(zhí)行單個的行為,并以某種方式跟蹤這個行為執(zhí)行了還是沒有。portblock資源代理是這樣的一個例子。

偽資源的資源代理可以使用ha_pseudo_resource,  它石永紅tracking file(跟蹤文件)開保存資源狀態(tài)的標簽。如果foobar是為資源的資源代理,其start的行為應(yīng)該像下面這個樣子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

foobar_start() {

   # exit  immediately if configuration is not valid

   foobar_validate_all  || exit $?


   # if resource is  already running, bail out early

   if foobar_monitor; then

       ocf_log  info "Resource is already running"

       return $OCF_SUCCESS

   fi


   # start the  pseudo resource

   ha_pseudo_resource  ${OCF_RESOURCE_INSTANCE} start


   # After the  resource has been started, check whether it started up

   # correctly. If  the resource starts asynchronously, the agent may

   # spin on the  monitor function here -- if the resource does not

   # start up within  the defined timeout, the cluster manager will

   # consider the  start action failed

   while !  foobar_monitor; do

       ocf_log  debug "Resource has not started yet, waiting"

       sleep 1

   done


   # only return  $OCF_SUCCESS if _everything_ succeeded as expected

   return $OCF_SUCCESS

}

感謝各位的閱讀,以上就是“OCF便利的函數(shù)有哪些”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對OCF便利的函數(shù)有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

ocf
AI