各データセンターに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つだけがアクティブなデータセンターとして構成されていることが保証されている必要があります。
私が思いついた解決策は、/ 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データセンター内のすべてのハートビート管理サーバーにシンボリックリンクを手動で設定する必要があります。また、一方のデータセンターが「ダーク」で、もう一方のデータセンターが「ライブ」であることを強制するものは何もありません。これは今のところ手動の解決策になるでしょう。
(ネイティブの)ハートビートだけではできないと思います。あなたはペースメーカーを使うことができます、彼は定足数で働くことができます、しかし...あなたは定足数を持っていません。データセンター間のリンクが失敗したと想像してみてください。東西のすべての人が考えます。彼はたった1人の生存者であり、すべての人がアプリケーションを開始し、mysqlをマスターモードに切り替えます。そして、本当にスプリットブレインの位置になります。
IMHO、本当にHAが必要な場合は、3番目のデータセンターが必要です。次に、Galeraクラスターを使用してMySQLをMariaDBに移行し、それらを起動して、Javaアプリ、アクティブな状態でもかまいません。 -アクティブ-アクティブモード。