web-dev-qa-db-ja.com

HetznerOnlineを使用して高可用性のためにフェイルオーバーIPを構成する方法

ラボのVMで実行されている3つのUbuntuノードのクラスターがあり、今すぐ本番環境に移行したいと考えています。 Hetzner Online hetzner.deはお得な専用サーバーをいくつか提供しているので、ギガビットスイッチに接続された3台のマシンをレンタルしました。

私の意図は、2台のHAProxyサーバーの前に2台のkeepalivedを備えたHA-Setupを作成することです。 Keepalivedは、セットアップ内でVIPで構成されています。残念ながら、これはHetznerでは機能しません。ただし、スクリプトを使用して他のサーバーに切り替えることができるフェイルオーバーIPと呼ばれるシステムを提供します。 http://wiki.hetzner.de/index.php/Failover_Skript

Keepalivedの設定は次のようになります。

vrrp_script chk_haproxy {
        script "killall -0 haproxy"     # cheaper than pidof
        interval 2                      # check every 2 seconds
        weight 2                        # add 2 points of prio if OK
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    virtual_ipaddress {
        192.168.56.101/24 # this is the shared IP I was using
      }
    track_script {
        chk_haproxy
    }
}

では、フェイルオーバースクリプトはこれにどのように適合しますか?

問題を抱えているのは私だけではないようです。解決策はそれほど明白ではありません。 https://www.howtoforge.com/community/threads/hetzner-to-stop-support-for-high-availability-setups.19988/

1
merlin

これは古い答えなので、あなたがまだ答えを探しているかどうかはわかりません。しかし、私はこれを行うための最良の方法を探してそれに遭遇しました。

HetznerがフェイルオーバーIPを専用サーバーに割り当てる方法は、サーバー上でフェイルオーバーIPを構成できるようにするのではなく、トラフィックを元のサーバーIPにルーティングすることです。したがって、サーバー上の何も変更せず、管理インターフェースで手動でIPを切り替えることができます。しかしながら;手動でフェイルオーバーするためにベッドから出たくないので、これはほとんどの人にとって適切な解決策ではありません。これは自動的に実行され、フェイルオーバーが完了したことを管理者に通知する必要があります。たぶん、システムが見た問題とそれがフェイルオーバーした理由を示す小さなレポートがあっても。

Keepalivedはこれを実行できます。必要なのは、フェイルオーバー中にスクリプトを実行するようにkeepalivedを構成することだけです。しかし、フェイルオーバーするIPがない場合、どうすればフェイルオーバーできますか?

シンプル;サーバー間に内部ネットワークを作成し、ルーティングされていない独自の内部IPをkeepalivedに割り当てます。この内部ネットワークは外部ネットワークと同じインターフェースを使用するため、実際には問題ではありません。このアプローチの利点は、この内部VIPを使用して、すべての内部トラフィックを100%内部に保つことができることです。

Keepalivedがフェイルオーバーしたら、Hetznerからスクリプトを実行して、次を使用して外部IPを切り替えるように指示します。notify

例:

vrrp_script chk_haproxy {
        script "killall -0 haproxy"     # cheaper than pidof
        interval 2                      # check every 2 seconds
        weight 2                        # add 2 points of prio if OK
}

vrrp_instance VI_1 {
    state MASTER
    interface enp0s31f6.4000
    virtual_router_id 51
    priority 101
    virtual_ipaddress {
        192.168.100.3/24 # this is the shared IP I was using
      }
    track_script {
        chk_haproxy
    }
    notify /usr/sbin/hetzner_failoverIP.sh database set $THIS_SERVER_IP
}

もちろん、Hetznerスクリプトは、サーバーIPを単独で選択するなど、よりスマートになるように調整できます。

注意すべき欠点は、外部IPに40〜60秒かかることです。私にとって、最小40秒、最大1分は長すぎます。

もう1つのオプションは、フェイルオーバーIPと上記のスクリプトを使用せずに、Hetznerクラウドインスタンスを使用してHAを有効にすることです。クラウドには別の解決策があります: クラウドフローティングIP

このオプションを使用すると、次の場合に月額約€8,50ユーロに戻ります。

  • 2つのクラウドインスタンス(1つの基本CPU、2GBのメモリ、それぞれ20TBのトラフィック)
  • 2つのクラウドフローティングIP

次に、keepalivedを使用してクラウドフローティングIP(virtual_ipaddressセクション)を管理し、HAProxyを使用してすべてのトラフィックを専用サーバーに送信します。その後、HAProxyがヘルスチェックを実行するため、次のことを心配する必要はありません。

  • HetznerAPIを使用したIPの切り替え
  • 40〜60秒の追加のダウンタイム

Hetznerクラウドサーバー サポートしていません 内部ネットワークについて言及する価値があります。ただし、このように使用する場合は必須ではなく、内部トラフィックは無料であるため、追加料金はかかりません。セキュリティのために、ロードバランサー(Keepalived + HAProxyクラウドインスタンス)をSELinux/AppArmorとFirewalldで保護します。 2つのクラスター(クラウド<->専用)間で暗号化されたトラフィックを使用して、パケットスニッフィングを優先します。プライベートVLANを使用している場合でも、専用サーバー間のトラフィックを暗号化します。トラフィックは同じNICを介して送信されます。覚えておくべきこと。

使用されたソース:

  1. https://wiki.hetzner.de/index.php/Failover/en
  2. https://wiki.hetzner.de/index.php/Failover_Skript/en
  3. https://wiki.hetzner.de/index.php/Vswitch/en
  4. https://wiki.hetzner.de/index.php/Cloud_floating_IP_persistent/en
  5. https://www.hetzner.com/cloud
  6. https://Twitter.com/hetzner_online/status/95578​​1300513857536
3
Robbert