質問: Linux(UBUNTU)で、2台構成のクラスタ運用を検討していますが、(DBはMysql) ホットスタンバイで、フェールオーバーに対応したいと思っていますが、 以下の実現は可能でしょうか? 1.アプリケーションが、自ノードがマスターなのか、スレーブなのか取得したい。 2.自動フェールオーバーの実現。(アプリケーションはマスター切り替えを認識したい。) 3.ミドルウェア(ClusterPro等)の導入が必須? 以上、よろしくお願い致します。
回答: 質問に対しては、以下のように考えます。 #「ホットスタンバイ」は「両ノードでアプリケーションが起動している状態で、一方だけ処理する」冗長方式という前提です。 #アプリケーションがいわゆる「サーバソケット」で接続を待ちうける前提です。 1. アプリケーションが、自ノードがマスターなのか、スレーブなのか取得したい。 → 各ノードのアプリケーション間で「ハートビート通信」を行うよう実装することで、互いの状態を交換することが可能と思います。 2. 自動フェールオーバーの実現。 → 同上です。「ハートビート通信」が失敗したことを契機に、スレーブがマスターに昇格するようにすることで、実現可能と思います。 3. ミドルウェア(ClusterPro等)の導入が必須? → 上記の動作を実現しているのが、クラスタソフト(ミドルウェア)です。ですので、アプリケーションで実装するメリットがあるかないかで判断することになると思います。 なお、実現したいことを鑑みると、クラスタソフトを導入して、「ウォームスタンバイ」(マスターノードのみでアプリケーションが起動し、フェールオーバーでスタンバイノードでアプリケーションを起動させる)で冗長化するようにしたほうが、実現は楽かと思います。 * アプリケーションはノード間で1つしか起動していないので、マスター/スレーブを意識する必要がない。 * 故障時に問題となりやすい「スプリットブレイン」等は、クラスタソフトが解決してくれる。 * DBサーバはウォームスタンバイの方が、ノード間でデータ不整合が起きない。(両ACTの場合、レプリケーションする方法になるが、不整合が発生する可能性がある)