「実際の」IPと外部IPを持つ2つのサーバーAとBがあり、いわゆる 'failover ip' (WXYZ)を切り替えて、AまたはBの特定の外部IPを指すと仮定します。 「外」からと簡単に行われました。背景として:フェイルオーバーIPは/ etc/network/interfacesの新しいエントリとして設定されています:
auto eth0:0
iface eth0:0 inet static
address W.X.Y.Z
netmask 255.255.255.224
次に、WXYZがハードウェアAを使用するように動的に構成されていると仮定します。次に、Bから「curl domain.com」を呼び出し、正しいフェイルオーバーIP WXYZを使用しますが、使用する代わりに、何らかの方法で間違った外部IP B(またはlocalhost?)に解決します。構成されたものA:
Trying W.X.Y.Z ...
* connect to W.X.Y.Z port 443 failed: Connection refused
* Failed to connect to domain.com port 443: Connection refused
* Closing connection 0
curl: (7) Failed to connect to domain.com port 443: Connection refused
ローカルのnginxを起動すると、domain.comを正常にカールできます
どういうわけかローカルでDNSを構成する必要がありますか? DNSチェーンについて詳しく知るにはどうすればよいですか?
mtr を使用すると、サーバーBからこれを試行した場合、domain.comが出力されます。
これは この質問 に関連していますか?
The failover IP is W.X.Y.Z and is also the A record of domain.com
The /etc/hosts file for both nodes serverA and serverB looks like:
127.0.0.1 localhost
127.0.1.1 luminarhost
xxx serverA
xxx serverB
The /etc/network/interfaces of serverA
### Hetzner Online AG - installimage
# Loopback device:
auto lo
iface lo inet loopback
# device: eth0
auto eth0
iface eth0 inet static
address xxx
broadcast xxx
netmask xxx
gateway xxx
# default route to access subnet
up route add -net xxx netmask 255.255.255.224 gw xxx eth0
iface eth0 inet6 static
address xxx
netmask xxx
gateway xxx
# failover ip
auto eth0:0
iface eth0:0 inet static
address W.X.Y.Z
netmask 255.255.255.224
and of serverB it is:
### Hetzner Online AG - installimage
# Loopback device:
auto lo
iface lo inet loopback
# device: eth0
auto eth0
iface eth0 inet static
address xxx
broadcast xxx
netmask xxx
gateway xxx
# default route to access subnet
up route add -net xxx netmask 255.255.255.192 gw xxx eth0
iface eth0 inet6 static
address xxx
netmask xxx
gateway xxx
# failover ip
auto eth0:0
iface eth0:0 inet static
address W.X.Y.Z
netmask 255.255.255.224
約束通り、ここに私の答えがあります:
完全な開示:私はHetznerで働いていませんが、Hetznerでハードウェアを共同で使用していた過去と現在のさまざまな会社で働いていました。
プロファイル内の場所が正しく、サポートが必要な場合:私は同じ都市を拠点としており、1つまたは2つの手を提供することができます。
Hetznerを扱ったことのないすべての人にとって:彼らはネットワークアクセスなどをフィルタリングしています。これは、特に フェイルオーバーIP (ある種の高可用性を提供するために異なるマシンで使用できるIP)に関してです、特定のIPに向けられたトラフィックを特定のMACに送信していること。
トラフィックの送信先であるターゲット(マシン)を変更する場合は、POST
リクエストを [〜#〜] api [〜#〜] に送信する必要があります。 HTTPS
経由で提供されます。次に、APIは認証(ユーザー名と対応するパスワード)と要求を検証し、有効であれば、この新しい構成をネットワーク内のさまざまなルーターに伝達します。この手法は、フランスに拠点を置く大手プロバイダーであるOVHで使用されている手法に似ています。
auto eth0:0
を使用すると、ネットワークが起動するとすぐに、通常はブート時に、インターフェイスeth0:0
にフェイルオーバーIPが設定されます。同じ構成の2つのマシンがあるため、同じIPが2つの異なるマシンでアクティブであるという状況になります(これはノーゴーではありませんが、現在対処している状況につながります) )。ただ注意:同じインターフェイスに複数回エイリアスを設定している構文は 非推奨 です(ただし、引き続き機能します)。 「新しい方法」は、Debian wiki(このリンク)にも記載されており、oneインターフェースに複数のIPを割り当てるだけです。curl
は、指定されたドメイン名をIPに解決し、ポート443でこのIPへの接続を試みます。このIPはいずれの場合もローカルに割り当てられているため、到達可能です。パケットがネットワークに送信されることはありません。現時点でnginx
(テストケースのように)がローカルで実行されていない場合は、接続が拒否されているだけで、これは完全に問題なく有効です。「IPはローカルなので、そこにトラフィックを送信できます」 。 たぶんの情報を持つルータにパケットを送信することは決してありません:「このIPに向けられたトラフィックはこのマシンに行くべきです」。auto eth0:0
からディレクティブeth0:0
を削除します(ただし、/etc/network/interfaces
の残りの構成はそのままにします)。これを行うと、IPがマシンに割り当てられますされません。これを行うのは、ifup eth0:0
を実行するタスク(スクリプトのタスク)です(そしてmaybeは、APIに話しかけ、トラフィックが正しいマシンにルーティングされるようにします)。言及した@gf_とまったく同じセルフループの問題に直面しました。
次のライブラリは同じことを達成するために完璧に機能しました。
https://github.com/mrkamel/heartbeat
上記のライブラリのhooks/afterおよびhooks/before機能を使用して、リモートノードにフローティングIPを追加および削除できます。
スラック通知を送信し、フローティングIPをその切り替え先のマシンに追加するhooks/before/sendmailスクリプトの例。
#!/bin/sh
echo "???? Switching to failover ip $1 from $2 to $3" | slacktee.sh
ssh -o StrictHostKeyChecking=no $3 'ip addr add '"$1"'/32 dev `route | grep "^default" | grep -o "[^ ]*$"`'
スラック通知を送信し、移動先のフローティングIPを削除するhooks/after/sendmailスクリプトの例
#!/bin/sh
ssh -o StrictHostKeyChecking=no $2 'ip addr del '"$1"'/32 dev `route | grep "^default" | grep -o "[^ ]*$"`'
echo "???? Switch success for failover ip $1 from $2 to $3"| slacktee.sh
注意:
1。ハートビートを実行しているマシンとフローティングIPが割り当てられているマシンでは、最初にssh鍵交換を使用してログインをパスワードなしで行う必要があります(id_rsa共有を確認してください)。
2。 slacktee.shライブラリは、スラック通知を簡単に送信するために使用されます。