MySQL サーバー monitor_20000 ノード 1 で「非実行」 - HA クラスター - Pacemaker-Corosync-DRBD

MySQL サーバー monitor_20000 ノード 1 で「非実行」 - HA クラスター - Pacemaker-Corosync-DRBD

このエラーは、クラスタ構成の完了後に発生します。ノード2でフェイルオーバーを試みた後

mysql_service01_monitor_20000 on node1 'not running' (7): call=20, status=complete, exitreason='none'

クラスターを終了してmariadbを再起動します。

pcs cluster stop --all

service mariadb restart

service mariadb stop

pcs cluster start --all

すべてがオンラインです。

pcs cluster standby node1

ノード2にフェールオーバーします。しかし、このエラーがまた出てきます...

mysql_service01_monitor_20000 on node1 'not running' (7): call=77, status=complete, exitreason='none'

node1でフェイルオーバーを試みます。

pcs cluster unstandby node1
pcs cluster standby node2

エラー回復は発生せず、以下が表示されます。

Failed Actions:
* mysql_service01_monitor_20000 on node2 'not running' (7): call=141, status=complete, exitreason='none',
last-rc-change='Mon Jun 13 20:33:36 2016', queued=0ms, exec=43ms
* mysql_service01_monitor_20000 on node1 'not running' (7): call=77, status=complete, exitreason='none',
last-rc-change='Mon Jun 13 20:31:23 2016', queued=0ms, exec=42ms
* mysql_fs01_start_0 on node1 'unknown error' (1): call=113, status=complete, exitreason='Couldn't mount filesystem /dev/drbd0 on /var/lib/mysql',
last-rc-change='Mon Jun 13 20:33:47 2016', queued=0ms, exec=53ms

クラスタをシャットダウンしてMariaDBを再起動した後2つのノードで私はそれを再開しました。

mysql_service01    (ocf::heartbeat:mysql): FAILED node1

PCクラスタの停止--all(成功)を完了して再起動したら、PCクラスタの起動--allを実行します。すべてが正常です!

ややランダムですが、HAでフェイルオーバー設定に関する電子メール通知を受け取ったので、その日のバックアップを完了し、ノード1でサービスをシャットダウンして再起動できることを願っています。しかし、私は何が起こっているのか、そしてそれを防ぐ方法を知りたいのです。それから上司のプレゼンテーションは間違いなく良く見えます。

私の設定:

ファイアウォール/SELinuxを無効にする

sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config
systemctl disable firewalld.service
systemctl stop firewalld.service
iptables --flush
reboot

PaceMaker + Corosync(CentOS 7)のインストール

hostnamectl set-hostname $(uname -n | sed s/\\..*//)
yum install -y pcs policycoreutils-python psmisc
echo "passwd" | passwd hacluster --stdin
systemctl start pcsd.service
systemctl enable pcsd.service

Node1の承認

pcs cluster auth node1 node2 -u hacluster -p passwd
pcs cluster setup --force --name mysql_cluster node1 node2
pcs cluster start --all
pcs status | grep UNCLEAN

DRBD/MariaDBをインストールします。

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum install -y kmod-drbd84 drbd84-utils mariadb-server mariadb
systemctl disable mariadb.service

cat << EOL > /etc/my.cnf
[mysqld]
symbolic-links=0
bind_address            = 0.0.0.0
datadir                 = /var/lib/mysql
pid_file                = /var/run/mariadb/mysqld.pid
socket                  = /var/run/mariadb/mysqld.sock

[mysqld_safe]
bind_address            = 0.0.0.0
datadir                 = /var/lib/mysql
pid_file                = /var/run/mariadb/mysqld.pid
socket                  = /var/run/mariadb/mysqld.sock

!includedir /etc/my.cnf.d
EOL

博士研究グループ:

cat << EOL >/etc/drbd.d/mysql01.res
resource mysql01 {
 protocol C;
 meta-disk internal;
 device /dev/drbd0;
 disk   /dev/sdb1;
 handlers {
  split-brain "/usr/lib/drbd/notify-split-brain.sh root";
 }
 net {
  allow-two-primaries no;
  after-sb-0pri discard-zero-changes;
  after-sb-1pri discard-secondary;
  after-sb-2pri disconnect;
  rr-conflict disconnect;
 }
 disk {
  on-io-error detach;
 }
 syncer {
  verify-alg sha1;
 }
 on node1 {
  address  192.168.1.216:7788;
 }
 on node2 {
  address  192.168.1.220:7788;
 }
}
EOL

fdisk /dev/sdb

drbdadm create-md mysql01
modprobe drbd
drbdadm up mysql01

drbdadm -- --overwrite-data-of-peer primary mysql01
drbdadm primary --force mysql01
watch cat /proc/drbd
mkfs.ext4 /dev/drbd0
mount /dev/drbd0 /mnt
df -h | grep drbd
umount /mnt
mount /dev/drbd0 /mnt # I Always get IO Errors so I just
drbdadm up mysql01 # Both nodes
watch cat /proc/drbd
mount /dev/drbd0 /mnt
df -h | grep drbd
systemctl start mariadb
mysql_install_db --datadir=/mnt --user=mysql
umount /mnt
systemctl stop mariadb

PaceMaker Corosyncの設定:

pcs -f clust_cfg resource create mysql_data01 ocf:linbit:drbd \
  drbd_resource=mysql01 \
  op monitor interval=30s
    pcs -f clust_cfg resource master MySQLClone01 mysql_data01 \
  master-max=1 master-node-max=1 \
  clone-max=2 clone-node-max=1 \
  notify=true
    pcs -f clust_cfg resource create mysql_fs01 Filesystem \
  device="/dev/drbd0" \
  directory="/var/lib/mysql" \
  fstype="ext4"
    pcs -f clust_cfg resource create mysql_service01 ocf:heartbeat:mysql \
  binary="/usr/bin/mysqld_safe" \
  config="/etc/my.cnf" \
  datadir="/var/lib/mysql" \
  pid="/var/lib/mysql/mysql.pid" \
  socket="/var/lib/mysql/mysql.sock" \
  additional_parameters="--bind-address=0.0.0.0" \
  op start timeout=60s \
  op stop timeout=60s \
  op monitor interval=20s timeout=30s
    pcs -f clust_cfg resource create mysql_VIP01 ocf:heartbeat:IPaddr2 \
 ip=192.168.1.215 cidr_netmask=32 nic=eth0 \
 op monitor interval=30s
    pcs -f clust_cfg constraint colocation add mysql_service01 with mysql_fs01 INFINITY
    pcs -f clust_cfg constraint colocation add mysql_VIP01 with mysql_service01 INFINITY
    pcs -f clust_cfg constraint colocation add mysql_fs01 with MySQLClone01 INFINITY with-rsc-role=Master
    pcs -f clust_cfg constraint order mysql_service01 then mysql_VIP01
    pcs -f clust_cfg constraint location mysql_fs01 prefers node1=50
    pcs -f clust_cfg property set stonith-enabled=false
    pcs -f clust_cfg property set no-quorum-policy=ignore
    pcs -f clust_cfg resource defaults resource-stickiness=200
    pcs -f clust_cfg resource group add SQL-Group  mysql_service01  mysql_fs01 mysql_VIP01
    pcs cluster cib-push clust_cfg
    pcs status

更新されたコメント:

十分です。 FS の前にレプリカが必要であり、サービスの前に FS が必要であるとします。そして、私がコピーしたApache構成では、Webサーバーより先にVIPを始めましたが、私が従ったSQLガイドではVIPを先に始めることになっていました。どんなアイデアがありますか?

pcs -f clust_cf constraint order promote MySQLClone01 then start mysql_fs01
pcs -f clust_cf constraint order mysql_fs01 then mysql_service01

テストしてみて問題が解決したらまた戻ってきます!ありがとう

これは問題が解決したようで、フェールオーバーは正常に発生しますが、まだエラーが発生しますが、前述のようにうまく機能します!エラーは表示したくありませんが、フェイルオーバー時間は約2秒です。

pcs constraint order promote MySQLClone01 then start mysql_fs01
pcs constraint order mysql_service01 then mysql_fs01

答え1

グループは秩序と位置を意味します。したがって、あなたのグループでは、「mysqlを起動してからファイルシステムをマウントしてVIPを起動してください」と言います。これは誤った順序であるだけでなく、注文制約とも競合します。

DRBDを除くすべてをグループに配置し、単一の順序と単一の共同配置制約を配置して、グループをDRBDが支配的な場所にリンクする必要があります。

制約がクラスタに追加される順序は、結果にまったく影響しません。

ここに何を入れるかによって次のようになります。

# pcs -f clust_cfg resource create mysql_data01 ocf:linbit:drbd \
  drbd_resource=mysql01 op monitor interval=30s
# pcs -f clust_cfg resource master MySQLClone01 mysql_data01 \
  master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 \
  notify=true
# pcs -f clust_cfg resource create mysql_fs01 Filesystem \
  device="/dev/drbd0" directory="/var/lib/mysql" fstype="ext4"
# pcs -f clust_cfg resource create mysql_service01 ocf:heartbeat:mysql \
  binary="/usr/bin/mysqld_safe" config="/etc/my.cnf" \
  datadir="/var/lib/mysql" pid="/var/lib/mysql/mysql.pid" \
  socket="/var/lib/mysql/mysql.sock" \
  additional_parameters="--bind-address=0.0.0.0" \
  op start timeout=60s op stop timeout=60s \
  op monitor interval=20s timeout=30s
# pcs -f clust_cfg resource create mysql_VIP01 ocf:heartbeat:IPaddr2 \
  ip=192.168.1.215 cidr_netmask=32 nic=eth0 op monitor interval=30s
# pcs -f clust_cfg resource group add SQL-Group mysql_fs01 \
  mysql_service01 mysql_VIP01
# pcs -f clust_cf constraint order promote MySQLClone01 \
  then start SQL-Group
# pcs -f clust_cfg constraint colocation add SQL-Group with MySQLClone01 INFINITY with-rsc-role=Master
# pcs cluster cib-push clust_cfg

答え2

pcs -f clust_cfg constraint colocation add mysql_fs01 with MySQLClone01 \
INFINITY with-rsc-role=Master
pcs -f clust_cfg constraint colocation add mysql_service01 with mysql_fs01 INFINITY
pcs -f clust_cfg constraint colocation add mysql_VIP01 with mysql_service0 INFINITY
pcs -f clust_cfg constraint order promote MySQLClone01 then start mysql_fs01
pcs -f clust_cfg constraint order mysql_fs01 then mysql_service01
pcs -f clust_cfg constraint order mysql_service01 then mysql_VIP01

私に正しい道を教えてくれたPatrickに感謝します! 、それを把握するのに時間がかかりました。制約を入力する順序が出力に影響を与えるようです。上記の制約を使用しましたが、別の順序で入力しました。

関連情報