2つのISP接続があり、それらの間で自動負荷分散が必要です。また、失敗した接続を処理する必要があります(機能しない接続は使用しないでください)。
最初のリンクはPPTP接続(ppp0
)、2番目は通常のイーサネットです。システムはGentooLinuxです。
現在、ip route
で基本的なバランス調整を行っていますが、うまく機能していないようです。これが私が使ったものです:
ip rule $ADD from $IP1 table rt_link1
ip rule $ADD fwmark 1 lookup rt_link1
ip rule $ADD from $IP2 table rt_link2
ip rule $ADD fwmark 2 lookup rt_link2
$NET2 dev eth2 src $IP2 table rt_link2
default via GW2 table rt_link2
$NET2 dev eth2 src $IP2
$NET1 dev ppp0 src $IP1 table rt_link1
default via GW1 table rt_link1
$NET1 dev ppp0 src $IP1
default scope global nexthop via $GW1 weight 1 nexthop via $GW2 dev eth2 weight 1
LVSプロジェクトの元コアチームメンバーとして、複数のインターネット接続のバランスを取るためにこのテクノロジーを使用しないことを強くお勧めします。実際、期待どおりに機能しないことはほぼ保証できます。
現在、障害が発生したプロバイダーリンクの処理は、デッドゲートウェイ検出(DGD)と呼ばれることが多く、ネイバー到達不能検出(NUD)と呼ばれることもあります。 RFC816とRFC1122によると、DGDを実行する方法は複数ありますが、実際に見たのはそのうちの3つだけです( 私の古い投稿 からLVSメーリングリストまで):
2006年にアクティブなLinuxカーネルネットワーク開発を辞めたとき、NUDの状態変更を実装する方法について明確な決定はまだありませんでした。私の友人でLVSのコア開発者であるJulianAnastasovは、2002年にあなたの課題を解決する必要がありました。そこで、ある晩、彼は座って、FIBにNUD状態を追加することで静的ルーティング用のDGDの作業バージョンを作成しました(転送情報ベース)。彼のパッチ ここ とドキュメント ここ 、 ここ と ここ を見つけることができます。これにより、この重要なタスクに対処するためのさらなる探求に関する多くの情報が得られるはずです。パッチはまだ乱暴に使用されているため、最近のカーネルで最新の状態に保たれていることがわかります。次のようなスクリプトから始めることをお勧めします( Robert Kurjata によって書かれました):
#!/bin/bash
# This script is done by : Robert Kurjata Sep, 2003.
# feel free to use it in any useful way
# CONFIGURATION
IP=/sbin/ip
PING=/bin/ping
#--------------- LINK PART -----------------
# EXTIFn - interface name
# EXTIPn - outgoing IP
# EXTMn - netmask length (bits)
# EXTGWn - outgoing gateway
#-------------------------------------------
# LINK 1
EXTIF1=eth2
EXTIP1=
EXTM1=
EXTGW1=
# LINK 2
EXTIF2=eth1
EXTIP2=
EXTM2=
EXTGW2=
#ROUTING PART
# removing old rules and routes
echo "removing old rules"
${IP} rule del prio 50 table main
${IP} rule del prio 201 from ${EXTIP1}/${EXTM1} table 201
${IP} rule del prio 202 from ${EXTIP2}/${EXTM2} table 202
${IP} rule del prio 221 table 221
echo "flushing tables"
${IP} route flush table 201
${IP} route flush table 202
${IP} route flush table 221
echo "removing tables"
${IP} route del table 201
${IP} route del table 202
${IP} route del table 221
# setting new rules
echo "Setting new routing rules"
# main table w/o default gateway here
${IP} rule add prio 50 table main
${IP} route del default table main
# identified routes here
${IP} rule add prio 201 from ${EXTIP1}/${EXTM1} table 201
${IP} rule add prio 202 from ${EXTIP2}/${EXTM2} table 202
${IP} route add default via ${EXTGW1} dev ${EXTIF1} src ${EXTIP1} proto static table 201
${IP} route append prohibit default table 201 metric 1 proto static
${IP} route add default via ${EXTGW2} dev ${EXTIF2} src ${EXTIP2} proto static table 202
${IP} route append prohibit default table 202 metric 1 proto static
# mutipath
${IP} rule add prio 221 table 221
${IP} route add default table 221 proto static \
nexthop via ${EXTGW1} dev ${EXTIF1} weight 2\
nexthop via ${EXTGW2} dev ${EXTIF2} weight 3
${IP} route flush cache
while : ; do
${PING} -c 1 ${EXTGW1}
${PING} -c 1 ${EXTGW2}
sleep 60
done
さらに、動的ルーティングプロトコルを実行するオプションを確認することもできます。
Lvs-kissと組み合わせてLVSを使用します。または同様のもの。
LVSは基本的にìpvsadm
コマンド。そのロードバランサーの唯一の欠点は、監視しないことです。したがって、それを実行し、構成からデッドリンクを削除する(そしてそれを再び生きたまま追加する)プログラムが必要です。
ハートビートスタックからのldirectord
は、(lvs-kissの代わりに)別のlvs-additionである可能性があります。