web-dev-qa-db-ja.com

フェイルオーバーデータセンターでハートビートリソースが起動しないようにするにはどうすればよいですか?

各データセンターにCentOSLinuxサーバーのペアがあります。これらは各データセンター内でフェイルオーバーを持ち、heartbeatおよび[〜#〜] drbd [〜#〜]によって管理されます(これらは古いツールであることは知っていますが、安定しているため、それらを変更する必要はありません)。

また、データセンター間スイッチの機能もあり、西がパッシブになる間、東のデータセンターをアクティブにします。しかし、これは手動のエンジニアリングプロセスであり、問​​題ありません。

現在、西のデータセンターはアクティブであり、東のデータセンターはパッシブです。

serverA.west <-> serverB.west  <-----------> serverA.east <-> serverB.east
     ACTIVE DATA CENTER                           PASSIVE DATA CENTER

サーバーはmysqldとJavaアプリケーションを実行できます。

このサーバー上のJavaアプリケーションは、アクティブなデータセンター(つまりserverA.west)のプライマリホストでのみ実行する必要があります。Javaアプリケーションの別のインスタンスが起動した場合セカンダリホスト(serverB.west)、またはパッシブデータセンターのいずれかのホストでは、スプリットブレインの問題が発生するリスクがあります。

今日、serverA.eastが再起動したため、ハートビートがserverB.eastに切り替わりました。次に、ハートビートはserverB.eastでJavaアプリを忠実に開始しましたが、これは発生させたくありません。

ハートビートはserverB.eastでmysqldも開始しました。これは正しいです。これは、MySQLレプリケーションが継続し、西のデータセンターからの変更を継続的に複製して、東DCが必要なときに引き継ぐ準備ができているためです。

/etc/ha.d/haresourcesは、mysqldの/etc/init.dスクリプトとJavaアプリケーションを開始するリソースとして指定します。

ハートビートがパッシブデータセンターのA/Bペアを管理できるようにする必要があります。フェイルオーバー時にmysqldを開始する必要がありますが、Javaアプリではありません。ただし、東のデータセンターがアクティブな場合、ハートビートはJava appハートビートで自動化されたフェイルオーバー。

これを実装するための良い方法は何ですか?

私が望んでいるのは、アクティブなデータセンターを西から東に切り替えるときに、構成するための1つのステップを踏むものです。理想的には、間違いがないようにする必要があります。つまり、データセンターの1つだけがアクティブなデータセンターとして構成されていることが保証されている必要があります。

5
Bill Karwin

私が思いついた解決策は、/ etc/ha.d/haresourcesの2つのバージョンを保持することです。

root:/etc/ha.d$ ls -l
lrwxrwxrwx 1 root root   16 Dec 22 10:31 haresources -> haresources-dark
-rw-r--r-- 1 root root  151 Dec 22 10:22 haresources-dark
-rw-r--r-- 1 root root  161 Dec 22 10:30 haresources-live

「haresources-dark」は、DRデータセンター(東)のすべてのサーバーで使用されます。 haresourcesがharesources-darkを指すように、シンボリックリンクを使用します。

2つのバージョンのharesourcesの唯一の違いは、Javaアプリケーションについての言及です。ダークバージョンでは、Javaアプリケーションは起動されません。

DRデータセンターに切り替える場合は、これらのシンボリックリンクを手動で更新する必要があります。しかし、それは許容できます。

これは間違いのないものではありません。 DRデータセンター内のすべてのハートビート管理サーバーにシンボリックリンクを手動で設定する必要があります。また、一方のデータセンターが「ダーク」で、もう一方のデータセンターが「ライブ」であることを強制するものは何もありません。これは今のところ手動の解決策になるでしょう。

0
Bill Karwin

(ネイティブの)ハートビートだけではできないと思います。あなたはペースメーカーを使うことができます、彼は定足数で働くことができます、しかし...あなたは定足数を持っていません。データセンター間のリンクが失敗したと想像してみてください。東西のすべての人が考えます。彼はたった1人の生存者であり、すべての人がアプリケーションを開始し、mysqlをマスターモードに切り替えます。そして、本当にスプリットブレインの位置になります。
IMHO、本当にHAが必要な場合は、3番目のデータセンターが必要です。次に、Galeraクラスターを使用してMySQLをMariaDBに移行し、それらを起動して、Javaアプリ、アクティブな状態でもかまいません。 -アクティブ-アクティブモード。

2
Bob Grandys