web-dev-qa-db-ja.com

手動フェイルオーバーでIPを処理する方法は?

ユーザーがアクセスできるのはマスターだけである2つの同一のストレージホストがあります。マスターに障害が発生した場合は、DHCPアドレスを手動で変更したいので、master10.10.10.10を指す代わりに、10.10.10.11を指す必要があります。

IPアドレスに依存するレプリケーションスクリプトがあるため、マスターがIPアドレスを変更した場合、スクリプト内のIPを変更する必要があります。これにより、データは引き続きマスターからスレーブにレプリケートされます。

質問

IPアドレスを切り替えてスクリプトを編集することは、エラーが発生しやすい作業です。この種の手動フェイルオーバーがどのように行われるかについての一般的な方法はありますか?例えば。ある種の抽象化レイヤーを追加することによって?

4
Sandra

一般的な方法は、サービスに個別のIPアドレスと名前を設定することです。これは、実際のサーバーのIPアドレスと名前とは別のものです。

この場合、あなたは

master 10.10.10.10
slave  10.10.10.11

3番目の名前は

storage 10.10.10.12

クライアントは、サービスに接続するときに「マスター」ではなく「ストレージ」を使用する必要があります。

masterがオンラインである限り、10.10.10.12はmasterの仮想インターフェイスである必要があります。 masterがダウンしている場合は、slaveの仮想インターフェイスとして10.10.10.12を起動します。

スクリプトでIPアドレスを使用することはできるだけ避けてください。特定のケースでDNSルックアップがオプションでない場合は、構成ファイルまたは/ etc/hostsファイルを使用して、ホスト名をIPアドレスにマップします。

13
Jenny D

フェイルオーバーのより自動化されたソリューションが必要な場合は、VRRPプロトコルを使用したkeepalivedのようなものを検討してください。

詳細については、こちらをご覧ください こちら

仮想IP10.10.10.10(これは仮想IPアドレスであり、両方のホストで構成されます)

マスターIP10.10.10.11

スレーブIP10.10.10.12

このようにして、スレーブで2番目のインターフェイスを起動する必要がなくなり、ダウンタイムがほとんど(おそらく1秒程度)あります。

0
Leoric80