サーバーを設定しない場合、年末年始に何を管理しますか!
この記事では、可能な限り一般的なアプローチについて説明します。
-iptablesでクラスターを作成する
-fwbuilder GUIを使用してクラスターを構成します
-conntrack-toolsを使用してフェイルオーバーするときにユーザー接続を保存します
このようなクラスターが機能する一般的な環境:
-バックエンドおよびフロントエンドサーバーからの内部ネットワーク
-外部IPアドレスをブロックする
-Linuxベースのクラスター用の2台のサーバー(私の場合はFedora 13 x64_86):マスター/バックアップモードのfw1およびfw2
クラスタータスク:
-ローカルネットワークのゲートウェイ
-IPアドレスの外部ブロックでのサービスの公開
一般に、次のように機能します。
-ucarpサービスは、クラスターの状態を監視し、フェールオーバーの場合に必要なスクリプトをプルします
-conntrackdサービスはサーバー間の接続情報を同期します
-fwbuilderはiptablesに必要なスクリプトをコンパイルします
カットファイルの組み立て説明書の下
サーバーの準備
最小限のパッケージセットでfw1およびfw2にLinuxをインストールします。iptablesはすでに存在します。
追加:
yum install ucarp-クラスターのハートビート
yum install conntrack-tools-接続トラッカー
yum install pssh(scpユーティリティ用)
/ etc / sysconfig / network-scripts /に移動して、インターフェイスを構成します。
インターフェイスごとに1つの個人IPアドレスのみを割り当てます。次に例を示します。
eth0-内部
eth3は、クラスターサーバー間の接続情報を同期するためのインターフェイスです。
セキュリティ上の理由から、このインターフェイスを介してクラスタサーバーをコードで直接接続することをお勧めします。 conntrackdプロトコルは安全ではありません。
外部インターフェイスはスクリプトから構成されます。
Ucarpのセットアップ
ucarpプロセスが実行されている場合、各サーバーはVRRPパケットをマルチキャストアドレス224.0.0.18に送信します
サーバーがパートナーからパケットを受信しない場合、彼は放置されていると信じて、/ etc / init.d / ucarpファイルに登録されているupscriptを起動します。
UPSCRIPT=/usr/libexec/ucarp/vip-up
サーバーがアクティブ状態にあり、パートナーからパケットを受信した場合、これはより重要です-ダウンスクリプトを開始し、バックアップ状態になります
DOWNSCRIPT=/usr/libexec/ucarp/vip-down
upscript / downscriptスクリプトは、少し後に更新されます。
次に、あるサーバーから別のサーバーにフェールオーバーするときに移動するvipアドレスを構成します。
取得するVIPアドレスは、内部ネットワークのゲートウェイアドレスと、VRRPパケットを交換するための内部ネットワークです。
設定ファイル:
/etc/ucarp/vip-common.conf
/etc/ucarp/vip-001.conf
(理論的には多数のvipアドレスが存在する可能性がありますが、1つで十分です)
このようにして、ucarpはフェイルオーバー時にゲートウェイIPアドレスの遷移を制御します。
残念ながら、ucarpはOpenBSDのcarpとまったく同じではなく、2つの問題を解決する必要があります。
-フェールオーバーの場合、ローカルネットワーク上のすべてのクライアントのゲートウェイIPアドレスのARPを変更するか、クラスター内のサーバーの共通MACを作成します
-スプリットブレインのリスクを最小限に抑える、すなわち 可能であれば、両方のサーバーがパートナーが死んでいると考えて、メインサーバーになろうとする状況を避けてください。
arpingユーティリティは、最初の問題の解決に役立ちます。
スプリットブレインの可能性を減らすための推奨事項として、最初にすべての作業インターフェイスをボンディングで結合し、次に内部ネットワークと外部ネットワークのVLANを切断することをお勧めします。
これは、インターフェイスのいずれかに物理現象が発生した場合に役立ちます。
fwbuilderでiptablesを構成する
fwbuilder Webサイトには、fwbuilder自体をルールを視覚化するための便利なツールとして使用するためのかなり詳細な
ドキュメントがあります。
しかし、fwbuilderは、iptablesの仕組みを知り、理解する必要性を排除するものではありません。
使用順序は次のとおりです。
-ルールを作る
-スクリプトのコンパイル
-スクリプトをscp経由でクラスターサーバーにコピーする
-sshを介したスクリプトの実行
fwbuilderはルールを正しくコンパイルします。個々のチェーンを選択し、ルールが互いに重複しないようにします。
クラスターを作成するには
、ドキュメントのセクションをご覧ください 。
「fw-cluster」などの名前のクラスターを作成します。このクラスターには、「iptables firewall」タイプの2つのオブジェクト、例えばfw1とfw2があります(名前がファイアウォールサーバーの「hostname -s」コマンドの結果と一致することが重要です) 。これは後のスクリプトで考慮されます)
State Sync Groupのプロパティで、タイプconntrackを指定して、fwbuilderがconntrackパッケージのアクセスルールを追加するようにします
すべてのインターフェイスをクラスター化します。
これにより、クラスターオブジェクトが作成されます。次に例を示します。
fw-cluster:eth0:members(イントラネットインターフェイス)
fw-cluster:eth1:メンバー
fw-cluster:eth3:メンバー
オブジェクトfw-cluster:eth0:membersに対して、VRRPのタイプを指定します(アクセスルールの場合も同様)。
他のオブジェクトの場合、タイプは指定されません。
ファイアウォールオブジェクトの設定の[スクリプト]タブで、[Load iptables modules]以外のすべてのアイテムをオフにする必要があります。
これは、コンパイルされたスクリプト自体がインターフェイスとvlan-sを構成できるという事実によるものですが、この機能を使用する過程でいくつかのバグが発生しました。
デフォルトでは、fwbuilder自体が関連および確立された接続のルールを追加します。
コンパイル後、fw1.fwおよびfw2.fwスクリプトが表示されます。
fwbuilderがリモートサーバーにスクリプトをインストールして実行するには、ファイアウォールオブジェクトのインターフェイスの1つがマネージャーとしてマークされている必要があります。
Conntrackのセットアップ
ドキュメントには、私たちの場合のためのセットアップ例があります。
primary-backup.shスクリプトをそのまま使用します
conntrackd.confの構成:
-「マルチキャスト」セクションで相互作用インターフェースを指定します
-「アドレス無視」セクションでは、クラスターサーバーの独自のIPアドレスへのすべての接続をフィルターで除外できます。フェールオーバーはどこにも行きません
fwbuilder自体がIPマルチキャストアドレスのアクセスルールを追加するため、conntrackd.confで変更する必要はありません。
IPアドレスの外部ブロックの構成
IPアドレスの外部ブロックの障害への移行は、ゲートウェイアドレスの場合と同じ方法で実行できます。
ただし、外部アドレスのブロックが十分に大きい場合、まず、各アドレスに対してアーピングを開始する必要があり、これには時間がかかる可能性があります。次に、外部ブロックのゲートウェイで機器を制御しないと、アーピングが機能しない場合があります。
解決策があります-ファイアウォールの外部インターフェイスに共通のMACアドレスを使用します。
残念なことに、iptables用のclusteripモジュールを除いて、実用的なソリューションをGoogleで検索することはできませんでした。誰かが別の方法を提案してくれたら嬉しいです。
不快な結果として、マルチキャストMACアドレスを処理する必要があります。
upstartおよびupdownスクリプトを変更する時です
スクリプトの横に、便宜上、マスクなしのIPアドレスが行ごとに書き込まれるテキストファイルを作成します(例:
eth1.addr.external
eth1-外部ネットワークインターフェイスの名前
clusteripモジュールが外部アドレスブロックの残りのルールよりも早く動作するように、マングルテーブルに書き込みます
上付き
#!/bin/sh
# - fwbuilder
ROOT="/etc/fw"
# conntrackd, primary
/etc/conntrackd/primary-backup.sh primary
# fwbuilder
$ROOT/$(hostname -s).fw start
# ip-
# $2 $1 ucarp
# , ,
/sbin/ip address add "$2"/24 dev "$1"
# ip-
# /var/log/messages clusterip
iptables -t mangle -I PREROUTING -m state --state INVALID -j DROP
# , *.addr.external
for ADDRFILE in $(ls $ROOT/*.addr.external)
do
DEV=$(basename "$ADDRFILE" | awk -F "." '{print $1}')
for ADDR in $(cat $ROOT/$DEV.addr.external | grep -v ^#)
do
# ip-
/sbin/ip addr add $ADDR/24 dev $DEV
# ip-
iptables -t mangle -A PREROUTING -d "$ADDR" -i "$DEV" -j CLUSTERIP --new --hashmode sourceip --clustermac 01:00:5E:00:01:01 --total-nodes 1 --local-node 1 --hash-init 0
done
done
# arp- 2 , MAC-
arping -A -c 2 -I "$1" "$2"
下書き
本質的に、すべてのクラスターIPアドレスを削除し、マングルテーブルを消去します
#!/bin/sh
ROOT="/etc/fw"
/etc/conntrackd/primary-backup.sh backup
/sbin/ip address del "$2"/24 dev "$1"
for ADDRFILE in $(ls $ROOT/*.addr.*)
do
DEV=$(basename "$ADDRFILE" | awk -F "." '{print $1}')
for ADDR in $(cat $ADDRFILE | grep -v ^#)
do
/sbin/ip addr del $ADDR/24 dev $DEV
done
done
iptables -t mangle -F
$ROOT/$(hostname -s).fw start
上記の手順の結果として、両方のサーバーでucarpサービスを開始します。
サーバーの1つがアクティブになり、upscriptが起動します。これにより、内部および外部ネットワーク上のすべてのクラスターIPアドレスが発生し、iptablesの一連のルールがロールアップされます。