內部邀請碼:C8E245J (不寫邀請碼,沒有現金送)
國內私募機構九鼎控股打造,九鼎投資是在全國股份轉讓系統掛牌的公眾公司,股票程式碼為430719,為“中國PE第一股”,市值超1000億元。
一: 一些名詞解釋 (利用下面的拓撲來理解名詞)
1; VIP: Virtual IP(虛擬ip, 主要是提供使用者進行訪問的);
2; RIP: REAL SERVER IP(真實伺服器ip, 主要是提供服務的, 主要的伺服器有http伺服器);
3; CIP: CLIENT IP(客戶端ip, 用來訪問虛報ip);
4; DIP: DEVICE IP(裝置的ip, 作為REAL SERVER的Gateway, 這個最好也是用虛擬ip, 這個ip是在nat模式下才使用, 配置nat模式最好使用兩張網路卡);
5; DIRECTOR: 排程器(是指安裝ipvsadm的那臺機器);
6; RS: REAL SERVER(真實的伺服器, 裡面有安裝伺服器, 比如web, mail等等;)
二: lvs的三種模式(按照出現的時間順序來排列);
1; nat模式 (回覆包要經過DIRECTOR, 這種模式最早出現, 最成熟, 但是排程器是瓶頸,所以這個模式現在比較少用; tunneling模式和直接路由模式是後來為了解決某些問題而出現的);
2; tunneling模式;(回覆包不需要經過DIRECTOR, 這種模式只要排程器和真實伺服器的路由可達即可, 所以應用起來比較廣, 回覆包的時候直接通過各自的路由器出去, 所以比較方便配置, 只要realserver支援tunneling即可)
3; 直接路由模式;(回覆包不需要經過DIRECTOR, 這種模式要求RS與DIRECTOR中間不能用路由器隔開, 回為這個模式只改變目標的mac地址)
三: lvs的十種演算法;
1; 四種靜態演算法(假設伺服器為a, b, c! 後面的數字代表伺服器的權重);
1: rr: abc, abc, abc
2: wrr: a3b2c1, aababc aababc
3: dh: 目標hash;(根據目標地址選擇伺服器)
4: sh: 源hash;(根據源地址選擇伺服器)
2; 六種動態演算法;
1: lc: ci最小, (ci指established狀態的數量)處理能力比較強的計算機就一直回覆;
2: wlc: ci/wi最小, (wi指weight的值)針對處理能力強的計算機weight調大一點;
3: lblc: 基於wlc, cache, 如果有一臺已經跟伺服器在連線, 那就一直使用這一臺;如果負載太重(ci>wi), 則wlc選擇一臺, 就一直這臺;
4: lblcr: 基於lblc, 只是cache叢集;如果每臺負載都過重, wlc選一臺; 如果一臺沒有用, remove掉;
5: sed: (ci+1)/wi最小;一開始就把weight用上;
6: nq: 基於sed選一臺, 如果沒過載, 一直就這臺, 有過載, 再使用sed再選一臺;(ci>wi)
四: 需要實現的目標;
1; 使用者訪問192.168.2.149, 192.168.2.149把服務請求一會兒轉發到192.168.2.31, 一會兒轉發到192.168.2.32;
DIRECTOR: 192.168.2.23(VIP 192.168.2.149)
REAL SERVERS: 192.168.2.31(lo:0 192.168.2.149)
à 把上面的需要用三種模式各實現一遍, 除錯演算法使用wrr;
2; 使用兩臺機器192.168.2.23(DIRECTOR MASTER)和192.168.2.31(DIRECTOR BACKUP)作為偵錯程式; 使用192.168.2.20, 192.168.2.21, 192.168.2.22, 192.168.2.31, 192.168.2.32作為真實伺服器;
DIRECTOR: 192.168.2.23, 192.168.2.31(VIP 192.168.2.149)
REAL SERVERS: 192.168.2.21, 192.168.2.20, 192.168.2.22, 192.168.2.31, 192.168.2.32(lo:0 192.168.2.149);
五: 第一個目標的實現;
1; DIRECTOR的配置;
1; 安裝lvs軟體ipvsadm; (確認有ip_vs模組, 使用lsmod | grep ip_vs)
apt-get install ipvsadm
2; 配置虛擬ip;
ifconfig eth1:1 192.168.2.149 netmask 255.255.255.255 up
route add –host 192.168.2.149 dev eth1:1
3; 配置負載均衡(使用dr模式, 排程演算法為wrr, weight統一配置成5);
ipvsadm –A –t 192.168.2.149:80 –s wrr
ipvsadm –a –t 192.168.2.149:80 –r 192.168.2.31:80 –g –w 5
ipvsadm –a –t 192.168.2.149:80 –r 192.168.2.32:80 –g –w 5
2; 真實伺服器的配置(要注意arp問題, 分別在192.168.2.31和192.168.2.32上配置);
1; 配置虛擬ip;
ifconfig lo:0 192.168.2.149 netmask 255.255.255.255 up
route add –host 192.168.2.149 dev lo:0
2; 抑制arp廣播;
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/lo/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
六: 第二個目標的實現;
1; DIRECTOR的配置(上面那個主要實現的是負載均衡, 這個主要實現的高可用性的配置, 這個是在192.168.2.23上的配置, 192.168.2.31只需要改變兩個地址即可, 下面有註釋);
1; 高可用性軟體的安裝keepalived;
apt-get install keepalived
2; keepalived主要的配置檔案如下(keepalived.conf)
! configuration file for keepalived
global_defs {
notification_email{
361589194@qq.com
}
notification_email_from 361589194@qq.com
smtp_server smtp.163.com
router_id lvs_director #郵件通知的標識, keepalived的日誌檔案在/var/log/syslog, 可以在這個檔案檢視狀態即可;
}
vrrp_instance V1{
state MASTER #在192.168.2.31配置為BACKUP
interface eth1
lvs_sync_daemon_interface eth1
virtual_router_id 51 #虛擬路由的標識, 必須與BACKUP一樣;
priority 150 #在192.168.2.31配置為100(一般來說要小t50);
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.149
}
}
virtual_server 192.168.2.149 80 {
delay_loop 10 #ping的超時時間;
lb_algo wrr
lb_kind DR
#persistence_timeout 10 #這個是配置永續性連線的, 如果配置這個, 那要預防單臺的突發性連線;
protocol TCP
real_server 192.168.2.20 80 {
weight 100
TCP_CHECK {
connect_timeout 10 #檢測80的埠的超時時間;
nb_get_retry 3 #重試次數
delay_before_retry 3 #重試的延時
connect_port 80
}
}
real_server 192.168.2.22 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.21 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.30 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.32 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.2.32 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
3; 啟動keepalived;
/etc/init.d/keepalived restart
2; 真實伺服器的配置與上面lvs的配置一樣, 每臺都要配置;
六: 配置lvs或者lvs+keepalived需要注意的問題;
1; 使用client機器ping一下虛擬ip(ping 192.168.2.149), 使用arp –n檢視192.168.2.149的mac地址, 必須與排程器的mac地址一樣, 如果不一樣, 那就是真實伺服器的欺騙了交換機, 排程器就失去了作用;
2; tunnel模式的配置需要在真實伺服器配置tunnel介面地址;
ifconfig tunl0 192.168.2.149 netmask 255.255.255.255 up(同時如果在同一個區域網裡面測試, 也要預防arp欺騙)
3; nat模式下, 真實伺服器基本不需要配置什麼, 只需要把閘道器指向DIP即可;
作者: whzhuang
日期: 2013/4/20
版本: first release
參考網站:
1; 51cto的lvs標籤推薦部落格; http://blog.51cto.com/tagindex.php
2; lvs的英文官方網站; http://www.linuxvirtualserver.org/
3; lvs的中文官方網站; http://zh.linuxvirtualserver.org/
4; arp問題的解決(教授親自出手指點); http://zh.linuxvirtualserver.org/node/225
4; lvs初學必看; http://os.51cto.com/art/201202/319979.htm