キープアライブ:CentOS/RHELでのIPフェイルオーバーによる高可用性の構成
この記事では、企業LANからインターネットにアクセスするための2台のsquid(Linux)プロキシサーバーの高可用性フェイルオーバー構成について検討します。フェイルオーバー構成を構築するために、キープアライブを使用してHAクラスターを作成します。 。
HAクラスターは、グループ内のサーバーのハードウェアまたはソフトウェアの問題が発生した場合にアプリのダウンタイムを最小限に抑えるための冗長性が組み込まれたサーバーのグループです。この定義によれば、HAクラスターを正しく動作させるには、以下を実装する必要があります。
- サーバーの状態チェック;
- サーバーに障害が発生した場合のリソースの自動切り替え。
Keepalivedは、これらの両方を有効にします。 キープアライブ は、サービスのフェイルオーバーと負荷分散を可能にするLinuxシステムのシステムデーモンです。フェイルオーバーは、メインサーバーに障害が発生した場合に別のサーバーに切り替えられるフローティングIPアドレスによって提供されます。サーバー間でIPアドレスを自動的に切り替えるために、keepalivedは VRRPを使用しています (仮想ルーター冗長プロトコル– https://www.ietf.org/rfc/rfc2338.txt)
まず、いくつかの理論と主なVRRPの定義について考えてみましょう。
- VIP —仮想IP。障害が発生した場合にサーバーを自動的に切り替えることができる仮想IPアドレス。
- マスター—VIPが現在アクティブになっているサーバー;
- バックアップ—マスターに障害が発生した場合にVIPが切り替えるサーバー。
- VRID —仮想ルーターID。仮想IP(VIP)を共有するサーバーは、いわゆる仮想ルーターを形成し、その一意の識別子の値は1〜255です。サーバーは一度に複数のVRIDに属する場合があります。ただし、すべてのVRIDには一意の仮想IPアドレスが必要です。
基本的な操作アルゴリズム:
- 一定の間隔で、マスターサーバーはVRRPパケットを送信します(ハートビート s)特定のマルチキャストアドレス224.0.0.18に送信し、すべてのスレーブサーバーがこのアドレスをリッスンします。マルチキャストとは、1人の送信者と複数の受信者がいることを意味します。ヒント 。サーバーをマルチキャストモードで動作させるには、ネットワーク機器がマルチキャストトラフィックをサポートしている必要があります。
- スレーブサーバーがハートビートパケットを受信しない場合、マスター選択手順を開始します。サーバーが優先的にマスターになると、VIPがアクティブになり、 Gratuitous ARPが送信されます。 。 Gratuitous ARPは、ネットワークスイッチ上のMACテーブルを更新して、トラフィックをリダイレクトする仮想IPアドレスの所有者とMACアドレスの変更を通知する特殊なタイプのARP応答です。
CentOSにキープアライブをインストールして構成する
SquidがインストールされたCentOS7を実行している2つのLinuxサーバー(proxy-serv01とproxy-serv02)にkeepalivedをインストールして構成します。このスキームでは、負荷分散の最も簡単な方法である Round Robin DNSを使用します。 。この方法は、単一のDNS名に複数の登録済みIPアドレスがあり、クライアントがこれらのアドレスを1つずつ取得することを示しています。したがって、1つのDNS名(proxy-serv)に対して2つの仮想IPアドレスを登録する必要があります。ネットワーク図は次のとおりです。
各Linuxサーバーには2つの物理ネットワークインターフェースがあります: eth1 パブリック(白)IPアドレスと eth0 ローカルネットワークで。
次のサーバーIPアドレスが実際のIPアドレスとして使用されます:
192.168.2.251 —プロキシサーバーの場合01192.168.2.252 —プロキシサーバー02の場合
次のIPアドレスは、障害が発生した場合にサーバー間で自動的に切り替えられる仮想アドレスとして使用されます。
192.168.2.101192.168.2.102重要 。 VRRPを構成するときは、実サーバーのIPアドレスを仮想アドレスとして使用しないでください。サーバーに障害が発生した場合、そのアドレスは次のサーバーに移動し、フェイルバック後に最初のサーバーがネットワークから分離される可能性があります。問題は、IPアドレスを取り戻すために、サーバーはVRRPパケットをネットワークに送信する必要がありますが、それを行うためのIPアドレスがありません。
yumパッケージマネージャー(またはdnf
)を使用して、両方のサーバーにキープアライブをインストールできます。 CentOS 8の場合):
# yum install keepalived
両方のサーバーでのインストールが完了したら、両方のサーバーでキープアライブ構成ファイルを変更します。
# nano /etc/keepalived/keepalived.conf
異なるパラメータを持つ行が強調表示されます:
proxy-serv01 | proxy-serv02 |
1 | 2 |
オプションについて詳しく説明しましょう:
- vrrp_instance
—VRRPインスタンスを定義するセクションです。 - state
—起動時のノードの初期状態です。 - interface
—VRRPが実行されているインターフェースです; - virtual_router_id<0から255までの番号>—一意のVRRPインスタンス識別子です。すべてのサーバーで同じである必要があります。
- priority <0〜255の数値> —サーバーの優先度を設定します。優先度の高いサーバーがマスターになります。
- virtual_ipaddress —MASTER状態のサーバーでアクティブな仮想IPアドレスのブロックです。これらは、VRRPインスタンス内のすべてのサーバーで同じである必要があります
現在のネットワーク構成でマルチキャストの使用が許可されていない場合、keepalivedはユニキャストオプションを提供します。 e。 VRRPハートビートパケットは、リストに従って直接サーバーに送信されます。ユニキャストを使用するには、次のオプションが必要です。
- unicast_src_ip —VRRPパッケージの送信元アドレスです
- unicast_peer —VRRPパケットが送信されるサーバーIPアドレスのブロックです。
したがって、この構成では、proxy_ip1とproxy_ip2の2つのVRRPインスタンスを定義します。通常の操作では、proxy-serv01は仮想IP 192.168.2.101のMASTERになり、192.168.2.102のBACKUPになります。逆に、proxy-serv02は仮想IP 192.168.2.102のMASTERになり、BACKUPは192.168.2.101。
サーバーでファイアウォールがアクティブになっている場合は、iptablesを使用してマルチキャストトラフィックとVRRPの許可ルールを追加する必要があります。
# iptables -A INPUT -i eth0 -d 224.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p vrrp -i eth0 -j ACCEPT
システム起動時に自動起動のキープアライブサービスを有効にして、両方のサーバーで実行します
# systemctl enable keepalived
# systemctl start keepalived
キープアライブが開始されると、仮想IPアドレスが構成ファイルからインターフェースに割り当てられます。サーバーの現在のeth0IPアドレスを見てみましょう:
# ip a show eth0
proxy-serv01の場合:
proxy-serv02の場合:
VRRPプロトコルは、サーバーの状態を監視します。たとえば、これは、物理サーバーに障害が発生した場合や、スイッチ/サーバーのNICポートが発生した場合に役立ちます。ただし、他の問題も発生する可能性があります:
- プロキシサーバー(または他のアプリ)エラー —サーバーの仮想アドレスにアクセスするクライアントは、プロキシサーバーが利用できないというエラーメッセージをブラウザに表示します。
- 2番目のインターフェースのインターネットアクセスの失敗 —サーバーの仮想アドレスにアクセスするクライアントは、接続を確立できなかったというエラーメッセージをブラウザに表示します。
上記の状況を処理するには、次のオプションを使用します。
- track_interface —インターフェイスの状態を監視し、リストされているインターフェイスの1つがDOWNの場合、VRRPインスタンスのFAULT状態を設定します。
- track_script — 0 を返すスクリプトを使用して、HAアプリのヘルスチェックを実行します チェックが成功した場合は1、チェックが失敗した場合は1。
eth1インターフェイスモニタリングを追加して構成を更新します(デフォルトでは、VRRPインスタンスはバインドされているインターフェイスをチェックします。現在の構成ではeth0です)。
track_interface {eth1}
track_scriptディレクティブは、vrrp_scriptブロックによって決定されたパラメーターを使用して次の形式でスクリプトを実行します。
vrrp_script{script<"実行可能ファイルへのパス">interval -スクリプトの実行の周期、デフォルトでは1秒fall -スクリプトが戻った回数FAULT状態に切り替えるためのゼロ以外の値rise -スクリプトがFAULT状態から抜け出すためにゼロ値を返した回数(フェイルバック)timeout -スクリプトまで待機する時間結果を返します(時間が経過すると、スクリプトはゼロ以外の値を返します_ weight -FAULT状態になった場合にサーバーの優先度が下がる値。デフォルト値は0です。これは、フォールパラメータで設定された回数スクリプトが失敗した後、サーバーはFAULT状態になります}
Squidプロキシヘルスチェックを構成しましょう。このコマンドを使用して、イカのプロセスがアクティブであるかどうかを確認できます。
# squid -k check
3秒ごとに実行されるvrrp_scriptを作成します。このブロックは、vrrp_instanceブロックの外部で定義されています。
vrrp_script chk_squid_service {script "/ usr / sbin / squid -k check" interval 3}
このスクリプトを両方のvrrp_instanceブロックのモニタリングに追加します:
track_script {chk_squid_service}
Squidに障害が発生した場合、仮想IPアドレスは別のサーバーに切り替えられます。
追加のアクションを指定できます サーバーの状態が変化した場合に実行する必要があります。
Squidが任意のインターフェースからの接続を受け入れるように構成されている場合、i。 e。 http_port 0.0.0.0:3128
、仮想IPアドレスを切り替えても問題は発生せず、Squidは新しいアドレスへの接続を受け入れます。ただし、特定のIPアドレスが構成されている場合は、次のようになります。例:
http_port 192.168.2.101:3128http_port 192.168.2.102:3128
Squidは、クライアントの要求をリッスンするための新しいアドレスがシステムに表示されたことを知りません。仮想IPアドレスが切り替えられたときに追加のアクションが必要な状況を処理するために、keepalivedを使用すると、サーバーの状態がMASTERからBACKUPに、またはその逆に変化した場合にスクリプトを実行できます。このオプションを使用して実装されます:
「実行可能ファイルへのパス」を通知する
仮想IPを構成した後、障害が正しく処理されていることを確認してください。最初のチェックはサーバー障害シミュレーションです。 proxy-serv01のeth0を無効にすると、VRRPハートビートパケットの送信が停止します。 proxy-serv02は、仮想IPアドレス192.168.2.101をアクティブ化する必要があります。次のコマンドで確認してください:
# ip a show eth0
proxy-serv01の場合:
proxy-serv02の場合:
予想どおり、proxy-serv02は仮想IPアドレス192.168.2.101をアクティブにしました。次のコマンドを使用して、ログに何が書き込まれたかを確認しましょう。
cat /var/log/messages | grep -i keepalived
on proxy-serv01 | プロキシ-serv02上 |
Keepalived_vrrp [xxxxx]:カーネルが報告しています:interface eth0 DOWNKeepalived_vrrp [xxxxx]:VRRP_Instance(proxy_ip1)FAULT STATEKeepalived_vrrp [xxxxx]:VRRP_Instance(proxy_ip1)に入るプロトコルVIPを削除しています。 (proxy_ip1)現在FAULT状態です | Keepalived_vrrp [xxxxx]:VRRP_Instance(proxy_ip1)マスター状態への移行 |
Keepalivedは、eth0がDOWN状態にあるというシグナルを受信し、proxy_ip1 VRRPインスタンスのFAULT状態を設定して、仮想IPアドレスを解放します。 | Keepalivedは、proxy_ip1 VRRPインスタンスのMASTER状態を設定し、eth0でIPアドレス192.168.2.101をアクティブにして、GratuitousARPを送信します。 |
また、proxy-serv01でeth0を再度有効にすると、仮想IPアドレス192.168.2.101が元に戻されることを確認してください。
on proxy-serv01 | プロキシ-serv02上 |
Keepalived_vrrp [xxxxx]:VRRP_Instance(proxy_ip1)新しいMASTER選挙を強制するKeepalived_vrrp [xxxxx]:VRRP_Instance(proxy_ip1)MASTERSTATEへの移行Keepalived_vrrp[xxxxx]:VRRP_Instance(proxy_ip1)MASTER STATEKeep VRRP_Instance(proxy_ip1)設定プロトコルVIP.Keepalived_vrrp [xxxxx]:192.168.2.101のeth0で無償のARPを送信する | Keepalived_vrrp [xxxxx]:VRRP_Instance(proxy_ip1)優先度255の高い広告を受信しました。100Keepalived_vrrp[xxxxx]:VRRP_Instance(proxy_ip1)バックアップ状態に入りますKeepalived_vrrp [xxxxx]:VRRP_Instance(proxy_ip1)プロトコルVIPを削除します。>> |
Keepalivedは、eth0が戻ってきたというシグナルを受信し、proxy_ip1VRRPインスタンスのマスターの選択を開始します。 MASTER状態になった後、サーバーはeth0でIPアドレス192.168.2.101をアクティブにし、GratuitousARPを送信します。 | Keepalivedは、proxy_ip1 VRRPインスタンスの優先度が高いパケットを取得し、proxy_ip1をBACKUP状態に切り替えて、IPアドレスを解放します。 |
2番目のチェックは、外部ネットワークインターフェイスの障害のシミュレーションです。これを行うには、proxy-serv01で外部ネットワークインターフェイスeth1を無効にします。結果をログに表示します。
on proxy-serv01 | プロキシ-serv02上 |
Keepalived_vrrp [xxxxx]:カーネルが報告しています:interface eth1 DOWNKeepalived_vrrp [xxxxx]:VRRP_Instance(proxy_ip1)FAULT STATEKeepalived_vrrp [xxxxx]:VRRP_Instance(proxy_ip1)に入るプロトコルVIPを削除しています。 (proxy_ip1)現在FAULT状態です | Keepalived_vrrp [xxxxx]:VRRP_Instance(proxy_ip1)MASTERSTATEへの移行Keepalived_vrrp[xxxxx]:VRRP_Instance(proxy_ip1)MASTERSTATEに入るKeepalived_vrrp[xxxxx]:VRRP_Instance(proxy_ip1)設定プロトコルVIP.Keepalived_vr 192.168.2.101のeth0で |
Keepalivedは、eth1がDOWNであるというシグナルを取得し、proxy_ip1 VRRPインスタンスのFAULT状態を設定して、仮想IPアドレスを解放します。 | Keepalivedは、proxy_ip1 VRRPインスタンスのMASTER状態を設定し、eth0のIPアドレス192.168.2.101をアクティブにして、GratuitousARPを送信します。 |
3番目のチェックは、Squidの障害のシミュレーションです。これを行うには、次のコマンドを使用してサービスを手動で停止します。
# systemctl stop squid
ログで結果を表示します:
on proxy-serv01 | プロキシ-serv02上 |
Keepalived_vrrp [xxxxx]:VRRP_Script(chk_squid_service)failedKeepalived_vrrp [xxxxx]:VRRP_Instance(proxy_ip1)FAULTSTATEに入るKeepalived_vrrp[xxxxx]:VRRP_Instance(proxy_ip1)プロトコルVIPを削除しています。 )現在、FAULT状態になっています | Keepalived_vrrp [xxxxx]:VRRP_Instance(proxy_ip1)MASTERSTATEへの移行Keepalived_vrrp[xxxxx]:VRRP_Instance(proxy_ip1)MASTERSTATEに入るKeepalived_vrrp[xxxxx]:VRRP_Instance(proxy_ip1)設定プロトコルVIP.Keepalived_vr 192.168.2.101のeth0で |
Squidプロキシサービスのアクティビティをチェックするスクリプトがエラーを返します。 Keepalivedは、proxy_ip1 VRRPインスタンスのFAULT状態を設定し、仮想IPアドレスを解放します。 | Keepalivedは、proxy_ip1 VRRPインスタンスのMASTER状態を設定し、eth0のIPアドレス192.168.2.101をアクティブにして、GratuitousARPを送信します。 |
3つのチェックはすべて正常に合格し、keepalivedは正しく構成されています。後で、Pacemakerを使用してHAクラスターを構成し、その機能について説明します。
最終的な構成ファイル/etc/keepalived/keepalived.conf proxy-serv01の場合 :
vrrp_script chk_squid_service {script "/ usr / sbin / squid -k check" interval 3} vrrp_instance proxy_ip1 {state MASTER interface eth0 virtual_router_id 1 priority 255 virtual_ipaddress {192.168.2.101/24 dev eth0 label eth0:1} track _ track_script {chk_squid_service}} vrrp_instance proxy_ip2 {state BACKUP interface eth0 virtual_router_id 2 priority 100 virtual_ipaddress {192.168.2.102/24 dev eth0 label eth0:2} track_interface {eth1} etc> final> track_script {chk_ /keepalived.conf proxy-serv02の場合 :
vrrp_script chk_squid_service {script "/ usr / sbin / squid -k check" interval 3} vrrp_instance proxy_ip1 {state BACKUP interface eth0 virtual_router_id 1 priority 100 virtual_ipaddress {192.168.2.101/24 dev eth0 label eth0:1} track _ track_script {chk_squid_service}} vrrp_instance proxy_ip2 {state MASTER interface eth0 virtual_router_id 2 priority 255 virtual_ipaddress {192.168.2.102/24 dev eth0 label eth0:2} track_interface {eth1} track_script {_chk_s
-
LinuxTimeをNTPサーバーと同期する方法
コンピューターの時計は完璧ではありません。数日、数週間、または数か月を考えると、それらはドリフトし、リアルタイムの表示を停止します。簡単に言えば、ドリフトした後、実際には「10:33」であるのに「10:30」と表示される場合があります。古いコンピューターでは、コンピューターの時計を手動で定期的に再調整するのが一般的でした。しかし、インターネット接続が普及した後、最新のオペレーティングシステムはNTPサーバーの助けを借りて時計を自動的に調整し始めました。 NTPとは何ですか? NTPは、NetworkTimeProtocolの頭字語です。これは、ネットワーク接続を介してコンピュータークロック
-
NginxでDDoS攻撃を防ぐ方法
分散型サービス拒否攻撃または「DDoS」攻撃は、不正なデジタル通信戦術を通じてサーバーのリソースを隔離します。これらのタイプの攻撃は、コンピューターの世界で組織化された襲撃です。数多くの厄介なアンチライクアクションが組み合わさって、ベテランのサーバーをそのトラックで停止させるのに十分な恐ろしい脅威を生み出します。何よりも悪いことに、疑いを持たないサーバーに対してそのようなゲリラWeb戦争を行う複数の手段があります。幸いなことに、サーバーは反撃するように構成できます。 Unixマシンで非常に人気のあるサーバーシステムであるNginxには、DDoS攻撃の効果を大幅に制限するのに十分な機能が組み込