pacemaker 无法在第二个节点上启动 MySQL

pacemaker 无法在第二个节点上启动 MySQL

我在 2 个物理上相同的 Ubuntu Server 16.04 LTS 上安装了 pacemaker/corosync/drbd,并且正在尝试实现 MySQL 5.7 和 Apache 2.4 的高可用性。

两台服务器的设置方式完全相同,并且安装了完全相同的软件包。唯一的区别是主机名、IP 地址和 pacemaker/corosync/drbd 中的主/从配置。

我的问题是,pacemaker 能够启动节点 1 上的 MySQL 服务器和所有其他服务,但是当我模拟节点 1 崩溃时,pacemaker 无法启动节点 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 启动存在问题后,我做了一些研究,发现应该在 Pacemaker 配置中向 MySQL 传递一些额外的参数。这就是我将 Pacemaker 配置更改为以下内容的原因:https://pastebin.com/J7Zk1kBA

不幸的是,这并没有解决问题。

据我所知,Pacemaker 在两台机器上使用相同的命令来启动 MySQL 守护进程。这就是为什么我觉得它无法在以完全相同的方式配置的节点 2 上启动 MySQL 有点荒谬。

drbd0 正在由 pacemaker 安装,drbdlinks 正在为 /var/www 和 /var/lib/mysql 创建符号链接

我测试了此功能,它似乎可以工作。当节点 1 处于离线状态时,drbd0 会挂载到节点 2 上,并创建符号链接。/var/lib/mysql 指向 drbd0,所有文件都位于目录中。

如果您对如何缩小该问题的原因有任何想法/建议,我将非常感激您能将它们发布在这里。

如果需要更多信息,我很乐意提供。

提前致谢!

问候,PAlbrecht

答案1

过去,当我必须使用起搏器时,我会使用几种不同的程序来排除此类故障。一般的想法是验证起搏器配置的每个依赖“层”,其中依赖关系图如下:

mysql -> mounting of filesystem -> DRBD master

从头开始构建集群对非常相似的配置有一个很好的演练。

首先要确保 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

那么系统就无法成功进行故障转移。等待故障转移完成,然后重试故障转移测试。

假设在模拟 node1 故障之前 DRBD 已同步,当 DB 未在 node2 上运行时,故障转移到 node2 后要尝试的下一步是登录到 node2 并检查以下内容:

  • 是否cat /proc/drbd显示 node2 为主节点?
  • 是否mount显示 /dev/drbd0 安装在其配置的挂载点(从 pastebin 来看,这应该是 '/sync')?
  • 所有预期的符号链接都已设置吗?
  • 您是否看到节点 2 上的 /sync 中的文件与故障转移之前节点 1 上的文件相同?

最重要的是,如果所有这些问题的答案都是肯定的:

  • 在 node2 上手动启动 MySQL 时(可能使用/etc/init.d/mysql start或 systemctl 等效)是否可以成功启动?
  • 如果 MySQL 启动,mysql 客户端是否显示正在运行的服务器实际上正在提供存储在 /sync 下的 DB 数据?是否可以使用 node2 上的 mysql 客户端访问已知在 node1 上运行的数据库和表?

如果 MySQL 手动启动,那么它的起搏器配置可能有问题。

全面披露:我个人没有使用过 ocf::heartbeat:mysql 资源;而是使用了“lsb”资源“lsb:mysql”。

相关内容