多態 MySQL 主/從起搏器資源無法在集群節點上啟動
設置
我正在使用 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) 的工作原理。由於我使用的是
mysql
RA 提供Heartbeat
的 RA,因此可以在ClusterLabs 的 resource-agents GitHub repo上找到 RA 源腳本。不要忘記閱讀包含文件的來源!
確保您的軟體是最新的
在我的特定情況下沒有明確確定為問題,但正如@gf_和@remote mind所建議的那樣,擁有一個適用於您的軟體版本的 RA 版本總是一件好事。
填寫該死的參數
HA 中的第一條規則:不要依賴預設值。
這不是真的,有時你可以,但老實說,如果我向 RA 提供了我可以提供的所有可選參數,我會更快地解決我的問題。
這實際上是Read the source部分很重要的地方,因為它可以讓您真正理解為什麼需要參數。但是,由於它們通常只是簡要描述,因此您可能需要進一步了解
meta-data
並找到使用的參數。就我而言,這件事沒有奏效有幾個原因:
- 我沒有提供套接字路徑,並且腳本的預設路徑與我的系統(Debian 8)的預設路徑不匹配。
- 我沒有提供
test_user
,test_passwd
:這些都出現在了,meta-data
但我認為我不需要這個。在我決定看看它是用來做什麼的之後,我才發現這些參數是用來對select count(*)
數據庫執行簡單的。而且由於預設設置為使用root
沒有密碼的使用者,因此在我的情況下它不起作用(因為在我的數據庫上,root
需要密碼才能連接數據庫)。這個特定步驟阻止 RA 執行檢查目前節點是否為從節點。- 其他一些參數也失去了,我知道只有在我發現該死的預設設置被隱藏後才需要它們。
最後一句話
再次感謝@gf_花時間與我一起調查並提供線索以調試我的設置。
良好的 HA 設置並不是那麼容易實現(尤其是從頭開始時),但如果配置得當,它會非常強大並讓您高枕無憂。
注意:不能保證安心;)