web-dev-qa-db-ja.com

MySQLDRBDハートビートフェイルオーバースクリプトによるデータ損失

DRBDバージョンの使用:8.2.6(api:88/proto:86-88)

/etc/ha.d/haresourcesの内容は次のとおりです

    db1 192.168.100.200/24/eth0 drbddisk :: mysql Filesystem ::/dev/drbd0 ::/drbd :: ext3 :: defaults mysql 

および/etc/ha.d/ha.cf

    logfile/var/log/ha-log
logfacilitylocal0 
 keepalive 1 
 deadtime 30 
 warntime 10 
 initdead 120 
 udpport 694 
 bcast eth0、eth4 
 auto_failback off 
ノードdb1 
ノードdb2 
 respawn hacluster /usr/lib64/heartbeat/ipfail
 apiauth ipfail gid = haclient uid = hacluster 
デッドピング5

マシン間のフェイルオーバーをテストするときに、db2で次のコマンドを実行しました。

    service heartbeat stop 
 service mysqld stop 
 drbdadm down mysql 
 service drbd stop

db1の/ proc/drbdが報告されました

     0:cs:Connected st:Primary/Unknown ds:UpToDate/DUnknown C r ---

次に何が起こったのか:

  • Db2でサービスをオンラインに戻す
  • Hb_primaryスクリプトを使用してプライマリをdb2に転送する
  • 上記のようにdb1を停止します
  • Db1でサービスをオンラインに戻す
  • Hb_primaryスクリプトを使用してプライマリをdb1に転送し直す

db1がDRBDディスクを再マウントし、正しいIPを想定して、MySQLを起動しました。 MySQLテーブルの大規模な破損がありました。それはすべて修正可能でした(InnoDBリカバリモード6、mysqlcheck、および時折のバックアップを使用)が、どのように発生しましたか?

私は推測します:

  1. クリーンなMySQLシャットダウンではデータが破損しないため、DRBDはMySQLで使用されている間にディスクをファイルシステムから切断しました。
  2. ハートビート制御DRBD、およびハートビートサービスの停止はDRBDの「プラグを抜いた」
  3. これは、実際のフェイルオーバーの場合に再び発生する可能性があります(ハートビートのpingタイムアウトが原因)

しばらくの間、このセットアップに再度アクセスできません。テストを繰り返したいと思います。

構成設定は正しいですか?

破損は手動テストの結果でしたか?

ハートビートサービスを停止してharesourcesコマンドを実行させるよりも、フェイルオーバーをテストするためのより良い方法はありますか?

4
Andy

これはおそらく大きな助けにはなりませんが、これは最近、 Pacemaker および Linux-HA メーリングリストで広く議論されています。

私はハートビートがあまり得意ではありませんが、ペースメーカーを使用すると、スイッチを切り替えてから解放する前に、クラスターリソースマネージャーがディスクへの書き込みロック(または一時的にmysqlをダウン)でディスクをフラッシュする制約を設定します切り替えが完了したらロックします。

2
Karl Katzke

私が読んだすべてのことと、ハートビートに関する私の限られた経験から、あるサーバーから別のサーバーに手動でフェイルオーバーするために必要なのは、

service heartbeat stop

コマンド。 haresourcesファイルにあるものはすべて、ハートビートによって制御されます。適切な例として、次のサービスを実行する必要があるクラスターをセットアップしています。

snmpd
mysql

これがharesourcesの設定です

localhost00 \
drbddisk::home \
Filesystem::/dev/drbd0::/opt/local::ext3::defaults \
drbddisk::perf \
Filesystem::/dev/drbd1::/opt/local/perf::ext3::noatime,data=writeback \
IPaddr::1.1.1.1/24 \
mysqld \
snmpd 

そして、これが私が得た結果です(それが混乱している場合、私の謝罪、私は正しい場所で改行を得ることができません):

[root@localhost00 ~]# service snmpd status
snmpd (pid 18558) is running...
[root@localhost00 ~]# service mysqld status
mysqld (pid 18509) is running...
[root@localhost00 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
m:res      cs         st                 ds                 p  mounted           fstype
0:home  Connected  Primary/Secondary  UpToDate/UpToDate  C  /opt/local       ext3
1:perf  Connected  Primary/Secondary  UpToDate/UpToDate  C  /opt/local/perf  ext3
[root@localhost00 ~]# service heartbeat stop
Stopping High-Availability services:
                                                           [  OK  ]
[root@localhost00 ~]# service snmpd status
snmpd is stopped
[root@localhost00 ~]# service mysqld status
mysqld is stopped
[root@localhost00 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
m:res      cs         st                   ds                 p  mounted  fstype
0:home  Connected  Secondary/Secondary  UpToDate/UpToDate  C
1:perf  Connected  Secondary/Secondary  UpToDate/UpToDate  C
[root@localhost00 ~]#
[root@zenoss00 ~]# service heartbeat start
Starting High-Availability services:
                                                           [  OK  ]
[root@zenoss00 ~]# service snmpd status
snmpd is stopped
[root@zenoss00 ~]# service mysqld status
mysqld is stopped
[root@zenoss00 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-bu
m:res      cs         st                   ds                 p  mounted  fstype
0:zenhome  Connected  Secondary/Secondary  UpToDate/UpToDate  C
1:zenperf  Connected  Secondary/Secondary  UpToDate/UpToDate  C
[root@zenoss00 ~]# service snmpd status
snmpd (pid 23055) is running...
[root@zenoss00 ~]# service mysqld status
mysqld (pid 23006) is running...
[root@zenoss00 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
m:res      cs         st                 ds                 p  mounted           fstype
0:zenhome  Connected  Primary/Secondary  UpToDate/UpToDate  C  /opt/zenoss       ext3
1:zenperf  Connected  Primary/Secondary  UpToDate/UpToDate  C  /opt/zenoss/perf  ext3
[root@zenoss00 ~]#

ハートビートを停止すると、ハートビートに割り当てられているすべてのサービス(mysqld、snmpd)が停止したことに注意してください。また、drbdがまだ実行中であり、ハートビートがそれを停止しなかったことにも注意してください。フェイルオーバーが機能するには、DRBDが常に実行されている必要があります。

フェイルオーバーを再試行しますが、drbdコマンドは実行しないでください。データの破損を回避できると思います。

2
Dewey