LVSとKeepalivedを組み合わせてLVS+Keepalived+Nginxを実現
5876 ワード
LVSの負荷等化アルゴリズム
スタティツクアルゴリズム
静的:LVS自体の自由な固定アルゴリズムに基づいてユーザ要求を配布する.ポーリング(Round Robin略記'rr’):ポーリングアルゴリズムは、すべてのサーバが要求を処理する能力が同じであると仮定し、スケジューラはすべての要求を実際のサーバごとに平均的に割り当てる.(Nginxとのポーリング) 重み付けポーリング(Weight Round Robin略記'wrr’):重み付け比率割当ユーザ要求をインストールします.重みが高いほど、処理に割り当てられるリクエストが多くなります.(Nginxとの重み) ソースアドレスハッシュ(Source Hash略記'sh’):同じユーザipの要求は、同じRSによって処理される.(同Nginxのip_hash) ターゲットアドレスハッシュ(Destination Hash略記'dh’):urlによって異なるRSが要求される.(同じNginxのurl_hash) ダイナミックアルゴリズム
≪動的|Dynamic|emdw≫:トラフィックやサーバの圧力に応じてユーザー・リクエストが割り当てられます.これは動的に計算されます.最小接続数(Least Connections略記'lc’):現在の接続数が最小のサーバに新しい接続要求を割り当てます. 重み付け最小接続数(Weight Least Connections略記'wlc’):サーバの処理性能は数値で表され、重み付けが大きいほど処理の要求が多くなる.Real Serverでは、パフォーマンスの違いがある可能性があります.wlcは、異なるサーバの負荷状況を動的に取得し、パフォーマンスがよく、比較的空いているサーバにリクエストを配布します. 最短期待遅延(Shortest Expected Delay略記'sed’):特殊なwlcアルゴリズム.たとえば,ABCの3台のサーバがあると仮定し,重みはそれぞれ1,2,3である.wlcアルゴリズムを使用すると、リクエストが入ってくると、ABCのいずれかに分けられる可能性があります.sedアルゴリズムを使用すると、次の演算が行われます. A:(1+1)/1=2 B:(1+2)/2=3/2 C:(1+3)/3=4/3最終結果は、演算結果が最も小さいサーバにこの要求が渡されます.
最小キュースケジューリング(Never Queue略記'nq’):キューは使用されません.Real Serverの接続数が0に等しい場合は、この要求をそのまま割り当てる、キューで演算を待つ必要はない(sed演算).
LVSは実際の使用過程において,負荷等化アルゴリズムで用いられるものが多く,それぞれwlcまたはwrrであり,簡単で使いやすい.
直接配置
最も重要なファイアウォール構成
Nginxマシン構成
仮想ネットワークサブインタフェースの構成(ループバックインタフェース)
ネットワークサービスの再起動
ARP応答レベルと通知動作の概念 arp-ignore:ARP応答レベル(処理要求) 0:自機がipを構成する限り、要求 に応答できる.1:要求されたターゲットアドレスが対応するネットワークインタフェースに到達してから、要求 に応答する.
arp-announce:ARP通知動作(応答を返す) 0:本機の任意のネットワークインタフェースは外部に通知され、すべてのネットワークカードは通知 を受け入れることができる.1:本NICが一致しないターゲットとの通知をできるだけ避ける .2:このNICでのみ通知
sysctlを開きます.conf:
プロファイルの更新:
データメッセージを受信するためのゲートウェイを追加し、ホストに要求がある場合はloに渡して処理します.
再起動の無効化を防止し、POSTを開始します.
スタティツクアルゴリズム
静的:LVS自体の自由な固定アルゴリズムに基づいてユーザ要求を配布する.
≪動的|Dynamic|emdw≫:トラフィックやサーバの圧力に応じてユーザー・リクエストが割り当てられます.これは動的に計算されます.
LVSは実際の使用過程において,負荷等化アルゴリズムで用いられるものが多く,それぞれwlcまたはwrrであり,簡単で使いやすい.
直接配置
global_defs {
# id: keepalived ,
#
router_id LVS_xxx
}
vrrp_instance VI_1 {
# MASTER BACKUP
# BACKUP
state MASTER
#
interface ens33
#
virtual_router_id 51
# ,master backup, , , ,
# 50
priority 100
# ,
advert_int 2
# ,
authentication {
auth_type PASS
auth_pass 1111
}
# ip, (vip)
virtual_ipaddress {
192.168.31.150
}
}
# IP+ , nginx , 80,
# ( IP)
virtual_server 192.168.31.150 80 {
# , :
delay_loop 6
# ,
lb_algo rr
# LVS NAT|TUN|DR
lb_kind DR
#
persistence_timeout 5
#
protocol TCP
# Nginx
real_server 192.168.31.235 80 {
#
weight 1
#
TCP_CHECK {
# 80
connect_port 80
# (2 )
connect_timeout 2
# 2
nb_get_retry 2
# 3
delay_before_retry 3
}
}
real_server 192.168.31.236 80 {
#
weight 1
#
TCP_CHECK{
# 80
connect_port 80
# (2 )
connect_timeout 2
# 2
nb_get_retry 2
# 3
delay_before_retry 3
}
}
}
最も重要なファイアウォール構成
# 224.0.0.18
# ens33
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload
Nginxマシン構成
仮想ネットワークサブインタフェースの構成(ループバックインタフェース)
# , lo( , ), :
cd /etc/sysconfig/network-scripts
ls
ifcfg-ens33 ifdown-ipv6 ifdown-Team ifup-eth ifup-post ifup-tunnel
ifcfg-lo ifdown-isdn ifdown-TeamPort ifup-ippp ifup-ppp ifup-wireless
ifdown ifdown-post ifdown-tunnel ifup-ipv6 ifup-routes init.ipv6-global
ifdown-bnep ifdown-ppp ifup ifup-isdn ifup-sit network-functions
ifdown-eth ifdown-routes ifup-aliases ifup-plip ifup-Team network-functions-ipv6
ifdown-ippp ifdown-sit ifup-bnep ifup-plusb ifup-TeamPort
cp ifcfg-lo ifcfg-lo:1
vim ifcfg-lo:1
#
DEVICE=lo:1
IPADDR=192.168.31.150
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback
ネットワークサービスの再起動
service network restart
ARP応答レベルと通知動作の概念
sysctlを開きます.conf:
vim /etc/sysctl.conf
# :
# configration for lvs
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
プロファイルの更新:
sysctl -p
データメッセージを受信するためのゲートウェイを追加し、ホストに要求がある場合はloに渡して処理します.
route add -host 192.168.31.150 dev lo:1
#
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.31.1 0.0.0.0 UG 100 0 0 ens33
192.168.31.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.31.150 0.0.0.0 255.255.255.255 UH 0 0 0 lo
再起動の無効化を防止し、POSTを開始します.
echo "route add -host 192.168.31.150 dev lo:1" >> /etc/rc.local