我有一个包含 2 个节点的 RHEL 7.3 集群,由 Pacemaker 管理。它用于 MySQL HA。我目前已将一项 MySQL 服务添加到集群(MySQL 5.2):
<primitive class="ocf" id="mysqldb1" provider="heartbeat" type="mysql">
<instance_attributes id="mysqldb1-instance_attributes">
<nvpair id="mysqldb1-instance_attributes-binary" name="binary" value="/usr/sbin/mysqld"/>
<nvpair id="mysqldb1-instance_attributes-config" name="config" value="/etc/my1.cnf"/>
<nvpair id="mysqldb1-instance_attributes-socket" name="socket" value="/opt/mysql1/mysql.sock"/>
....
</instance_attributes>
</primitive>
我需要向集群添加第二个 MySQL 实例(MySQL 5.7):
<primitive class="ocf" id="mysqldb2" provider="heartbeat" type="mysql">
<instance_attributes id="mysqldb2-instance_attributes">
<nvpair id="mysqldb2-instance_attributes-binary" name="binary" value="/opt/mysql2/sbin/mysqld"/>
<nvpair id="mysqldb2-instance_attributes-config" name="config" value="/etc/my2.cnf"/>
<nvpair id="mysqldb2-instance_attributes-socket" name="socket" value="/opt/mysql2/mysql.sock"/>
....
</instance_attributes>
</primitive>
问题是集群只会启动 cib.xml 中找到的第一个 MySQL 实例。因此,如果我在 cib.xml 中首先放置 mysqldb1,然后放置 mysqldb2,则只会启动 mysqldb1。到达第二个实例时会出现此错误:INFO:MySQL 已在运行。这是日志:
sql-02 mysql(mysqldb1)[61344]: INFO: MySQL is not running
sql-02 mysql(mysqldb1)[61344]: INFO: MySQL started
sql-02 crmd[60496]: notice: Result of start operation for mysqldb1 on sql-02: 0 (ok) | call=46 key=mysqldb1_start_0 confirmed=true cib-update=29
sql-02 mysql(mysqldb2)[61648]: INFO: MySQL already running
sql-02 crmd[60496]: notice: Result of start operation for mysqldb2 on sql-02: 0 (ok) | call=48 key=mysqldb2_start_0 confirmed=true cib-update=31
如果我手动启动这 2 个实例,它们会正常工作。是否可以同时运行这 2 个 MySQL 实例?
答案1
对于遇到同样问题的人,这是我找到的解决方案。如果您希望 2 个 MySQL 数据库在同一节点上同时运行,则必须确保插座,数据目录,日志和进程号参数不同。前 3 个参数我都设置好了,但我没有为这两个实例设置 pid 参数。在我添加了以下几行之后:
<nvpair id="mysqldb1-instance_attributes-pid" name="pid" value="/var/run/mysql1/mysqld.pid"/>
<nvpair id="mysqldb2-instance_attributes-pid" name="pid" value="/var/run/mysql2/mysqld.pid"/>
集群成功启动了 MySQL 的两个实例,并且它们同时运行,没有问题。