ユーザーがアクセスできるのはマスターだけである2つの同一のストレージホストがあります。マスターに障害が発生した場合は、DHCPアドレスを手動で変更したいので、master
が10.10.10.10
を指す代わりに、10.10.10.11
を指す必要があります。
IPアドレスに依存するレプリケーションスクリプトがあるため、マスターがIPアドレスを変更した場合、スクリプト内のIPを変更する必要があります。これにより、データは引き続きマスターからスレーブにレプリケートされます。
質問
IPアドレスを切り替えてスクリプトを編集することは、エラーが発生しやすい作業です。この種の手動フェイルオーバーがどのように行われるかについての一般的な方法はありますか?例えば。ある種の抽象化レイヤーを追加することによって?
一般的な方法は、サービスに個別の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アドレスにマップします。
フェイルオーバーのより自動化されたソリューションが必要な場合は、VRRPプロトコルを使用したkeepalivedのようなものを検討してください。
詳細については、こちらをご覧ください こちら
仮想IP10.10.10.10(これは仮想IPアドレスであり、両方のホストで構成されます)
マスターIP10.10.10.11
スレーブIP10.10.10.12
このようにして、スレーブで2番目のインターフェイスを起動する必要がなくなり、ダウンタイムがほとんど(おそらく1秒程度)あります。