High-Availability

多態 MySQL 主/從起搏器資源無法在集群節點上啟動

  • February 5, 2016

設置

我正在使用 Corosync/Pacemaker 託管集群中的兩台物理伺服器為 Web 應用程序設置 HA 集群。

發現我走錯了路後,我決定使用 heartbeat 捆綁的 MySQL 資源代理來管理我在集群中的 MySQL 實例。

目前,從node1(current master ) 到node2(current slave ) 有一個有效的 master/slave 配置。現在我希望 Pacemaker 管理我的 MySQL 實例,以便它可以提升/降級主伺服器或從伺服器。

根據這個(舊)wiki頁面,我應該能夠通過這樣做來實現設置:

primitive p_mysql ocf:heartbeat:mysql \
 params binary="/usr/sbin/mysqld" \
 op start timeout="120" \
 op stop timeout="120" \
 op promote timeout="120" \
 op demote timeout="120" \
 op monitor role="Master" timeout="30" interval="10" \
 op monitor role="Slave" timeout="30" interval="20"

ms ms_mysql p_mysql \
 meta clone-max=3

如您所見,我確實稍微更改了第二個op monitor參數的時間間隔,因為我知道 Pacemaker 通過資源名稱(此處為p_mysql)、操作名稱和時間間隔來辨識操作。間隔是區分從節點上的監控操作與主節點上的監控操作的唯一方法。

問題

在送出更改CID並打開一個 interactivecrm_mon後,我可以看到 Pacemaker 無法在每個節點上啟動資源。請參閱隨附的螢幕截圖:

抱歉不能上傳超過 2 個連結,因為我還沒有足夠的聲譽……評論中的截圖

它一遍又一遍地循環,試圖將目前的主伺服器設置為從伺服器,將目前的從伺服器設置為從伺服器,然後設置為主伺服器……它顯然在循環並且無法正確實例化 MySQL 實例。

作為參考,我的crm configure show

node 1: primary
node 2: secondary
primitive Failover ocf:onlinenet:failover \
   params api_token=108efe5ee771368557869c7a837361a7c786f210 failover_ip=212.129.48.135
primitive WebServer apache \
   params configfile="/etc/apache2/apache2.conf" statusurl="http://127.0.0.1/server-status" \
   op monitor interval=40s \
   op start timeout=40s interval=0 \
   op stop timeout=60s interval=0
primitive p_mysql mysql \
   params binary="/usr/sbin/mysqld" \
   op start timeout=120 interval=0 \
   op stop timeout=120 interval=0 \
   op promote timeout=120 interval=0 \
   op demote timeout=120 interval=0 \
   op monitor role=Master timeout=30 interval=10 \
   op monitor role=Slave timeout=30 interval=20
ms ms_mysql p_mysql \
   meta clone-max=3
clone WebServer-clone WebServer
colocation Failover-WebServer inf: Failover WebServer-clone
property cib-bootstrap-options: \
   dc-version=1.1.12-561c4cf \
   cluster-infrastructure=corosync \
   cluster-name=ascluster \
   stonith-enabled=false \
   no-quorum-policy=ignore

解決方案

感謝與我一起調查的人們,我能夠找到解決我的問題的方法,並且我現在有了一個工作設置。如果您足夠勇敢,可以閱讀原始問題的評論,但這裡是幫助我解決問題的步驟的摘要。

閱讀原始碼

設置 HA 資源時要做的第一件事,聽起來很典型,但RTFM。不認真,了解您計劃使用的軟體是如何工作的。在那種特殊情況下,我的第一個錯誤是沒有足夠仔細地閱讀和理解資源代理 (RA) 的工作原理。由於我使用的是mysqlRA 提供Heartbeat的 RA,因此可以在ClusterLabs 的 resource-agents GitHub repo上找到 RA 源腳本。

不要忘記閱讀包含文件的來源!

確保您的軟體是最新的

在我的特定情況下沒有明確確定為問題,但正如@gf_@remote mind所建議的那樣,擁有一個適用於您的軟體版本的 RA 版本總是一件好事。

填寫該死的參數

HA 中的第一條規則:不要依賴預設值。

這不是真的,有時你可以,但老實說,如果我向 RA 提供了我可以提供的所有可選參數,我會更快地解決我的問題。

這實際上是Read the source部分很重要的地方,因為它可以讓您真正理解為什麼需要參數。但是,由於它們通常只是簡要描述,因此您可能需要進一步了解meta-data並找到使用的參數。就我而言,這件事沒有奏效有幾個原因:

  • 我沒有提供套接字路徑,並且腳本的預設路徑與我的系統(Debian 8)的預設路徑不匹配。
  • 我沒有提供test_usertest_passwd:這些都出現在了,meta-data但我認為我不需要這個。在我決定看看它是用來做什麼的之後,我才發現這些參數是用來對select count(*)數據庫執行簡單的。而且由於預設設置為使用root沒有密碼的使用者,因此在我的情況下它不起作用(因為在我的數據庫上,root需要密碼才能連接數據庫)。這個特定步驟阻止 RA 執行檢查目前節點是否為從節點。
  • 其他一些參數也失去了,我知道只有在我發現該死的預設設置被隱藏後才需要它們。

最後一句話

再次感謝@gf_花時間與我一起調查並提供線索以調試我的設置。

良好的 HA 設置並不是那麼容易實現(尤其是從頭開始時),但如果配置得當,它會非常強大並讓您高枕無憂。

注意:不能保證安心;)

引用自:https://serverfault.com/questions/753551