Ubuntu

起搏器無法在第二個節點上啟動 MySQL

  • January 10, 2018

我在 2 個物理上相同的 Ubuntu Server 16.04 LTS 上有一個起搏器/corosync/drbd 設置,我正在嘗試實現 MySQL 5.7 和 Apache 2.4 的高可用性。

兩台伺服器都以完全相同的方式設置並安裝了完全相同的軟體包。唯一的區別是pacemaker/corosync/drbd 中的主機名、IP 地址和主/從配置。

我的問題是起搏器能夠在節點 1 上啟動 MySQL 伺服器和所有其他服務,但是當我模擬節點 1 的崩潰時,起搏器無法在節點 2 上啟動 MySQL 服務。

這是 crm_mon 的輸出(兩個節點都線上):

Last updated: Wed Jan 10 18:57:02 2018          Last change: Wed Jan 10 18:00:19
2018 by root via crm_attribute on Server1
Stack: corosync
Current DC: Server1 (version 1.1.14-70404b0) - partition with quorum
2 nodes and 7 resources configured

Online: [ Server1 Server2 ]

Master/Slave Set: ms_r0 [r0]
Masters: [ Server1 ]
Slaves: [ Server2 ]
Resource Group: WebServer
ClusterIP  (ocf::heartbeat:IPaddr2):       Started Server1
WebFS      (ocf::heartbeat:Filesystem):    Started Server1
Links      (ocf::heartbeat:drbdlinks):     Started Server1
DBase      (ocf::heartbeat:mysql): Started Server1
WebSite    (ocf::heartbeat:apache):        Started Server1

但是當我模擬節點 1 的崩潰時,我得到:

Last updated: Wed Jan 10 19:05:25 2018          Last change: Wed Jan 10 19:05:17
2018 by root via crm_attribute on Server1
Stack: corosync
Current DC: Server1 (version 1.1.14-70404b0) - partition with quorum
2 nodes and 7 resources configured

Node Server1: standby
Online: [ Server2 ]

Master/Slave Set: ms_r0 [r0]
Masters: [ Server2 ]
Resource Group: WebServer
ClusterIP  (ocf::heartbeat:IPaddr2):       Started Server2
WebFS      (ocf::heartbeat:Filesystem):    Started Server2
Links      (ocf::heartbeat:drbdlinks):     Started Server2
DBase      (ocf::heartbeat:mysql): Stopped
WebSite    (ocf::heartbeat:apache):        Stopped

Failed Actions:
* DBase_start_0 on Server2 'unknown error' (1): call=45, status=complete
, exitreason='MySQL server failed to start (pid=3346) (rc=1), please check your
installation',
last-rc-change='Wed Jan 10 17:58:15 2018', queued=0ms, exec=2202ms

這是我最初的 Pacemaker 配置:https ://pastebin.com/kEYjjgKw

在我認識到在節點 2 上啟動 MySQL 存在問題後,我做了一些研究並讀到應該在起搏器配置中將一些附加參數傳遞給 MySQL。這就是為什麼我將 Pacemaker 配置更改為:https ://pastebin.com/J7Zk1kBA

不幸的是,這並沒有解決問題。

據我了解,Pacemaker 在兩台機器上使用相同的命令來啟動 MySQL 守護程序。這就是為什麼我覺得它無法在以完全相同的方式配置的節點 2 上啟動 MySQL 有點荒謬。

drbd0 正在被起搏器掛載,並且 drbdlinks 正在為 /var/www 和 /var/lib/mysql 創建符號連結

我測試了這個功能,它似乎工作。當節點 1 離線時,drbd0 會掛載到節點 2 上並創建符號連結。/var/lib/mysql 指向 drbd0 並且所有文件都在目錄中。

如果您對如何縮小導致此問題的原因有任何想法/建議,如果您能在此處發布它們,我將非常感激。

如果需要更多資訊,我很樂意提供。

提前致謝!

問候, 帕爾布雷希特

過去,當我不得不使用起搏器時,我在解決此類問題時會使用一些不同的程序。一般的想法是驗證起搏器配置的每個依賴“層”,其中依賴圖是:

mysql -> mounting of filesystem -> DRBD master

Clusters from Scratch也有一個非常相似的配置的很好的演練。

首先要確保 DRBD 已配置並同步。在任一節點上,執行:

cat /proc/drbd

如果 DRBD 已完全同步並準備好進行故障轉移,則輸出應顯示如下內容(參見 CfS 的第 45 頁):

[root@pcmk-1 ~]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by phil@Build64R7, 2015-04-10
05:13:52
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
   ns:1048508 nr:0 dw:0 dr:1049420 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

如果

cat /proc/drbd

輸出類似的東西(也在 CfS 的第 45 頁上)

[root@ovz-node1 ~]# cat /proc/drbd
version: 0.7.17 (api:77/proto:74)
SVN Revision: 2093 build by phil@mescal, 2006-03-06 15:04:12
0: cs:SyncSource st:Primary/Secondary ld:Consistent
   ns:627252 nr:0 dw:0 dr:629812 al:0 bm:38 lo:640 pe:0 ua:640 ap:0
       [=>..................] sync'ed:  6.6% (8805/9418)M
       finish: 0:04:51 speed: 30,888 (27,268) K/sec

則係統未處於可以成功進行故障轉移的狀態。等待它完成,然後重試故障轉移測試。

假設 DRBD 在節點 1 的模擬故障之前同步,當數據庫未在節點 2 上執行時故障轉移到節點 2 後要嘗試的下一件事是登錄到節點 2 並檢查以下內容:

  • 是否cat /proc/drbd將 node2 顯示為主節點?
  • 是否mount顯示 /dev/drbd0 安裝在其配置的安裝點(來自 pastebin,這應該是 ‘/sync’)?
  • 是否已設置所有預期的符號連結?
  • 您是否在節點 2 上的 /sync 中看到與故障轉移之前節點 1 上相同的文件?

最重要的是,如果所有這些問題的回答都是肯定的:

  • 在 node2 上手動啟動 MySQL 是否會成功啟動(可能使用/etc/init.d/mysql start或 systemctl 等效項)?
  • 如果 MySQL 啟動,mysql 客戶端是否顯示正在執行的伺服器實際上正在提供儲存在 /sync 下的數據庫數據?可以使用 node2 上的 mysql 客戶端訪問已知在 node1 上工作的數據庫和表嗎?

如果 MySQL 手動啟動,那麼它的起搏器配置可能有問題。

完全公開:我沒有親自使用過 ocf::heartbeat:mysql 資源;相反,我使用了“lsb”資源“lsb:mysql”。

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