web-dev-qa-db-ja.com

CentOS(Red Hat)クラスターを劣化モードで実行するにはどうすればよいですか?

CentOS6.5のインストールにRedHatのクラスターソフトウェアをインストールし、それを使用して、あるネットワークから別のネットワークへの冗長ルーティングを提供しました。これは正常に機能し、サービスを提供する2つのボックスがあるため、一方が失敗した場合(たとえば、ネットワーク接続を削除してテストした場合)、もう一方がルーティングを引き継ぎます。

ただし、残りのボックスに対して何かを行う必要がある場合、rgmanagerの問題のため、再起動できません。

service rgmanager stop

ハングし、プロセスを停止する唯一の方法はkill -9 それ。これは明らかに、rebootpoweroffなど、サービスを停止しようとするすべてのアクションにも影響します。

サーバーを自分で起動することができた場合、クラスターは起動しますが、rgmanagerはclustatで実行されていると表示されず、起動はもちろん、冗長ルーティングサービスも表示されません。

これは、たとえば、ボックスが離れた場所に展開されており、故障したボックスを交換する前に電源を切る必要がある場合に問題を引き起こす可能性があります。

これが私のcluster.confです:

<?xml version="1.0"?>
<cluster config_version="2" name="router-ha">
        <fence_daemon/>
        <clusternodes>
                <clusternode name="router-01" nodeid="1"/>
                <clusternode name="router-02" nodeid="2"/>
        </clusternodes>
        <cman expected_votes="1" two_node="1"/>
        <fencedevices/>
        <rm>
                <failoverdomains/>
                <resources>
                        <ip address="10.0.0.1" monitor_link="1" sleeptime="0"/>
                        <ip address="10.0.0.2" monitor_link="1" sleeptime="0"/>
                        <ip address="10.2.0.1" monitor_link="1" sleeptime="0"/>
                        <ip address="10.4.0.1" monitor_link="1" sleeptime="0"/>
                </resources>
                <service autostart="1" name="routing-a" recovery="restart">
                        <ip ref="10.0.0.1"/>
                        <ip ref="10.2.0.1"/>
                </service>
                <service autostart="1" name="routing-b" recovery="restart">
                        <ip ref="10.0.0.2"/>
                        <ip ref="10.4.0.1"/>
                </service>
        </rm>
</cluster>

他のボックスが表示されないのに、1つのボックスでサービスを開始できないのはなぜですか?確かに、クラスターサービスを開始できるようにするために他のマシンに依存しないのは、冗長ペアであるために必要な部分ですか?

1
Iain Hallam

クラスター化されたサービスを実行するには、クォーラムが必要です。通常、たとえば3ノードのクラスターでは、すべてのメンバーがそれぞれ1票を獲得します。プラグを1つ引き抜くと、利用可能な票の半分未満であるため、投票数が少ないことがわかります(値は実際に構成可能です)。クォーラムのないクラスターは、クラスター化されたサービスを実行するのに適していません。

この原則は、Red Hatクラスターだけでなく、一般的な原則にも当てはまります。ただし、ソリューションと実装は異なる場合があります。また、2ノードクラスターの実装。両方のノードにそれぞれ1票を与えると、通常は1つも定足数になりません。

確かに、クラスターサービスを開始できるようにするために他のマシンに依存しないのは、冗長ペアであるために必要な部分ですか?

Red Hatの場合、2ノードクラスターでは、特別な条件が適用されます。

    <cman expected_votes="1" two_node="1"/>

プラグを抜くと、両方のノードが相互に接続できなくなります。

どちらがクォーラムを持っているかを判断するために、両方がお互いに [〜#〜] stonith [〜#〜] を試みます。

STONITHは、Shoot-The-Other-Node-In-The-Headの頭字語であり、不正なノードや同時アクセスによってデータが破損するのを防ぎます。ノードが応答しないからといって、データにアクセスしていないという意味ではありません。データが安全であることを100%確認する唯一の方法は、別のノードからデータにアクセスできるようにする前に、STONITHを使用してノードをフェンスし、ノードが本当にオフラインであることを確認することです。

したがって、あなたが行う仮定は正しく、クラスターは正しく構成されておらず、フェンシングエージェントが動作している必要があります。プラグを抜くと、サービスが利用できなくなるだけでなく、通常はrgmanagerがフェイルオーバーするためです。他のノード(またはそれを実行するように構成した方法)に対しては、クラスター化されたノード間のハートビートリンクも削除します。 rgmanagerは、設定したことを実行しようとする場合がありますが、cmanは、これらのノードのどれにクォーラムがあるかを判断できません。代わりに、常に他のノードをフェンスしようとしますが、fence-agentが構成されていないため、無期限にスタックします。

だからここにあなたへの2つの良いアドバイスがあります:

  1. 分離されたネット上のクラスターノードにインターフェイスを追加して、クラスタートラフィックをネットワークトラフィックから分離します。これにより、アプリケーションに面したインターフェイスのプラグを抜くと、クラスターがクリーンなフェイルオーバーを実行します。
  2. フェンシングを構成します。
0
Petter H