負載均衡 LVS
三種(應該是四種)負載均衡技術:不具備抗攻擊能力

VS/NAT (通過NAT實作虛拟伺服器) 壓力都在排程器上 排程器輸入内網的資料包會源路傳回到外網 對後端的realserver 沒有要求隻要提供服務就行了
VS/TUN(隧道模式 在原有的模式下繼續做封裝缺點:資料包過大)(通過IP隧道實作虛拟伺服器)成本高 可支援廣域網
VS/DR(後端可以挂一百個伺服器速度快)(通過直接路由實作虛拟伺服器) 必須在内網(在同一個實體網絡)
生産環境中主要用第四種:FullNAT(跨WELN)
redhat6:自帶10種核心連接配接排程算法
VS/DR: (核心 更改mac位址 不支援回包)
排程機器:
首先安裝一服務:确認一下
ipvsadm -l
ip addr add 172.25.42.130 (vip)
ipvsadm -A -t 172.25.42.130:80 -s rr (rr:論尋算法)
ipvsadm -a -t 172.25.42.130:80 -r 172.25.42.17:80 -g
ipvsadm -a -t 172.25.42.130:80-r 172.25.42.18:80 –g
/etc/init.d/ipvsadm save
realserver1(dd8.example.com) 用apache測試 //對外不響應
yum install httpd -y
/etc/init.d/httpd start
cd /var/www/html
vim index.html
<h1>dd8.example.com</h1>
ipaddr add 172.25.42.130/32 dev eth0
realserver2(dd9.example.com)
<h1>dd9.example.com</h1>
ip addr add 172.25.42.130/32 dev eth0
如果隻做上述操作,發現排程機不起作用
在實體機上:arp -an 172.25.42.130
arp -d 172.25.42.130
ping 172.25.42.130
arp -an 172.25.42.130
會發現,兩次IP的mac位址不一樣,因為排程機,兩台realyserver 上面都有172.25.42.130 這個IP 也就是說這三個相同的IP有三個不同的mac位址 此時ping 這個IP 隻會随機選擇一個
在 real server上:arptable(arp 防火牆)//此實驗中 主要是為了屏蔽real server 上面的vip的mac
yum install arptables_jf.x86_64 -y
arptables -A IN -d 172.25.42.130 -j DROP (對外不釋出172.25.42.130)
arptables -A OUT -s 172.25.42.130 -j mangle --mangle-ip-s 172.25.42.17 (誰用 172.25.42.130 通路我 我所回應的都是 172.25.42.17)//一個mac可以對應多個ip,在real server 裡面不讓vip用這個mac
arptables -A IN -d 172.25.42.130 -j DROP
arptables -A OUT -s 172.25.42.130 -j mangle --mangle-ip-s 172.25.42.17
對背景伺服器不具備健康檢查:
其中一台real server 的httpd服務關閉
在排程伺服器中,發現排程器依然會正常排程:
此時,在實體機上測試:curl:172.25.42.130
優化:(加上健康檢查)
排程機:ipvsadm –C
在heartbeat 的前提下(找一個已經安裝過的軟體包)
cd /etc/ha.d
rpm -qd ldirectord
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf .
vim ldirectord.cf
# Sample for an http virtual service
virtual=172.25.42.130:80
real=172.25.42.17:80 gate //real server ip
real=172.25.42.18:80 gate //real server ip
fallback=127.0.0.1:80 gate //realserver 全部挂掉 排程機器(本機)去頂替
service=http
scheduler=rr
#persistent=600 //與存儲或資料庫等長久需要保持連接配接的設定有關
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
# receive="TestPage"
# virtualhost=www.x.y.z
/etc/init.d/ldirectord start
測試:
關掉real server 的httpd
heartbeat+ldirectord+lvs:(兩台已經做好 heartbeat的虛拟機)
排程機器1:/etc/init.d/ldirectord stop
ipvsadm -C
/etc/init.d/httpd stop
ip addr del 172.25.42.130/24 dev eth0 //因為交給叢集來做 不需要手動開啟和人為幹預
vim haresources
dd6.example.com IPaddr::172.25.42.130/24/eth0 ldirectord httpd
scp ldirectord.cf haresources [email protected]:/etc/ha.d/
/etc/init.d/heartbeat start (兩台都做此操作)
real server (手動開啟httpd服務)
兩台排程機互相切換:
dd6.example.com:/etc/init.d/heartbeat stop
服務健康切換:
keepalived+lvs:(/etc/init.d/heartbeat stop)
1.安裝keepalived (keepalived 自帶健康檢查)
./configure --prefix=/usr/local/keepalived //源碼編譯
make && make install
2.(兩台排程機都做)
/etc/init.d/heartbeat stop
ln-s/usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln-s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig
ln-s /usr/local/keepalived/etc/keepalived /etc
cd /usr/local/keepalived
cd sbin
ln -s /usr/local/keepalived/sbin/keepalived /sbin
chmod+x /usr/local/keepalived/etc/rc.d/init.d/keepalived
cd /usr/local
scp -r * [email protected]:/usr/local
cd /etc/keepalived
vim keepalived
yum install mailx -y
/etc/init.d/keepalived start
增加服務 vsftpd
/etc/init.d/keepalived stop
real server :yum install vsftpd -y
vim /etc/keepalived/keepalived
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 142
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.42.150
172.25.42.160
virtual_server 172.25.42.150 80 {
delay_loop 6
lb_algo rr
lb_kind DR
# persistence_timeout 50
protocol TCP
real_server 172.25.42.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
real_server 172.25.42.13 80 {
connect_timeout 3
virtual_server 172.25.42.160 21 {
persistence_timeout 50
real_server 172.25.42.12 21 {
nb_get_retry 3
real_server 172.25.42.13 21 {
增加虛拟ip:
real server :
ip addr add 172.25.42.140
arptables -A IN -d 172.25.42.140 -j DROP
arptables -A OUT -s 172.25.42.140 -j mangle --mangle-ip-s 172.25.42.140
keepalived 與 heartbeat 相比takeover速度非常快 幾乎沒有時間的延遲
我們可以在兩台機器上面 ipvsadm -l 看到 不管這台機器是不是主排程器 上面都會有排程資訊