*********************html
*********LVS*********linux
*********************web
www.zh.linuxvirtualserver.org算法
ipvs(內核),ipvsadm(工做指令)數據庫
arptablesvim
arptables -A IN -d <virtual_ip> -j DROP服務器
arptables -A OUT -s <virtual_ip> -j managle-ip-s <real_ip>網絡
四種session
VS/NAT ;VS/TUN(隧道) ; VS/DR ; VS/fullNAT (只有這個模式能夠跨VLAN)併發
redhat6 中帶其10種內核鏈接調度算法
(1)NAT
NAT算法調度,指到server,但調度器輸入內網的數據包會源路返回到外網,這樣調度器的壓力會大,大約幾十臺的承受壓力即爲極限。
(2)TUN(隧道)
調度器經過隧道協議對數據包二次封裝,×××,到達Real Server 會解包,並拿到
clinet 的IP,並進行業務,支持廣域網。
(3)DR
只能在直連網絡,同一個交換機上進行操做。
*******測試DR********
Client ——> VS ——> RS ——> Client
核心是MAC 的指定
首先
在調度機上使用ipvsadm命令添加調度算法和調度地址:
ipvsadm -A -t 172.25.254.168 -s rr [採用rr輪詢]
ipvasdm -a -t 172.25.254.168:80 -r 172.25.254.163 -g [設置虛擬IP 168 的對應真實路由選擇IP 163]
ipvasdm -a -t 172.25.254.168:80 -r 172.25.254.164 -g [設置虛擬IP 168 的對應真實路由選擇IP 164]
ipvsadm -l [查看循環次數] 有時出錯時,它並不能正卻檢測,仍然會顯示次數。因此還須要用curl檢測。
在Real Server1 和 ~2 上 須要用 arptables 作策略更改,以防訪問到R Server 而不通過調度機,
方法一:更改內核文件
RealServer 設置
vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
(優)方法二:下載 arptables_jf.x86_64
arptables -A IN -d 172.25.254.168 -j DROP [丟掉進入到168的信息]
arptables -A OUT -s 172.25.254.168 -j mangle --mangle-ip-s 172.25.254.163 [做爲本機168輸出的信息,轉換爲163輸出]
/etc/init.d/arptables_jf save[切記保存,否則服務打不開]
*********NAT********
Client ——> VS ——> RS
. <—— . <——
即RS的網關必定爲VS。 NAT對VS(管理機)是不作任何操做的,只將它看成網關作地址轉發。
cip ——> vip
DNAT
vip ——> rip
rip ——> vip
vip ——> cip
*******TUN**********(隧道)
要求,設備支持IP隧道協議。可用於廣義網,配置較爲複雜
Clinet ——> VS ——> RS ——> Client
cip ——> vip
ip封裝
vip ——> rip
vip ——> cip
******fullNAT********
必須更新內核,抗***能力強。支持多VLAN
帶有檢測功能的輪詢,ldirectord 服務。
在此以前 lpvsadm -C 清除之前寫入lvs的信息。
rpm -qd ldirectord 查看模板配置文件 /usr/share/doc/ldirectord-3.9.5/ldirectord.cf,並將配置文件移動到/etc/ha.d/ldirectord.cf
配置文件內容以下:
24 # Sample for an http virtual service
25 virtual=172.25.254.168:80
26 real=172.25.254.163 gate [真實所用服務機的地址]
27 real=172.25.254.164 gate [真實所用服務機的地址]
28 fallback=127.0.0.1:80 gate [全部服務機中止所跳到的最後的處理機上]
29 service=http
30 scheduler=rr
31 #persistent=600 [與存儲或數據庫等長久須要保持鏈接的設置有關]
32 #netmask=255.255.255.255
33 protocol=tcp
34 checktype=negotiate [檢測類型爲:談判]
35 checkport=80
36 request="index.html"
37 # receive="Test Page" [必須確保兩個及其的服務頁面保持相同數據]
38 # virtualhost=www.x.y.z
使用已經配置好的heartbeat,給集羣服務中添加lvs
(1)修改heartbeat策略在集羣節點上,併發送給其它節點機。
vim /etc/ha.d/haresources
server1.example.com IPaddr::172.25.254.168/24/eth0 ldirectord httpd
(2)發送修改好的/etc/ha.d/ldirectord.cf 模板,給發送給其它節點機
(3)開啓Real Server機上的http 服務
(4)開啓heartbeat 在節點機上。
(5)測試,對hearbeat進行操做,ldirectord服務會因爲heartbeat服務,開啓在某節點機上,並運行lvs機制,從而保證Real Server的服務訪問正常運行。
***********************************
********使用 keepalived + lvs*******
**********************************
一. keepalive 工做原理
使用VRP協議
Layer 3,4 &7 工做在IP/TCP協議棧的IP層,TCP層,及應用層,原理以下
Layer 3: Keepalived 使用Layer3 的方式工做式時,Keepalived會按期向服務器羣中的服務器發送一個ICMP的數據包,若是發現某臺服務的IP地址沒有激活,Keepalived 便報告這臺服務器失效,並將它從服務器羣中剔除,這種狀況的典型例子是某臺服務器被非法關機。layer3的方式是 【以服務器的IP地址有效做爲服務器工做正常與否的標準】
Layer4主要以TCP端口的狀態來決定服務器工做正常與否。如web server的服務端口通常是80,若是Keepalived檢測到80端口沒有啓動,則Keepalived將把這臺服務器從服務器羣中剔除。
Layer7:Layer7就是工做在具體的應用層了,比Layer3,Layer4要複雜一點,在網絡上佔用的帶寬也要大一些。Keepalived將根據用戶的設定檢查服務器程序的運行是否正常,若是與用戶的設定不相符,則Keepalived將把服務器從服務器羣中剔除。
二.下載,並使用 keepalived-1.2.24.tar.gz 配置 (網址 www.keepalive.org)
(1)首先解開rpm 包,並進入 keepalived-1.2.24 目錄。
開始安裝文件,並指定安裝目錄.防止配置文件分散
安裝時根據所提示的信息一步步安裝(gcc,openssl*),直到建立出 make等類型文件,可使用 make && make install 命令
./configure --prefix=/usr/local/keepalived
make && make install 操做以後,在/ust/local/keepalived 下會出向 keepalived 服務全部的信息.
下載 mailx(類郵件軟件),方便服務自動發送信息
(2)開始製做文件鏈接,啓動服務
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/
chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
/etc/init.d/keepalived start
(3)vim /etc/keepalived/keepalived.conf
[行標]
3 global_defs {
4 notification_email {
5 root@localhost
6 }
7 notification_email_from keepalived@server1.example.com
8 smtp_server 172.0.0.1
9 smtp_connect_timeout 30
10 router_id LVS_DEVEL
11 vrrp_skip_check_adv_addr
12 vrrp_strict
13 vrrp_garp_interval 0
14 vrrp_gna_interval 0
15 }
16
17 vrrp_instance VI_1 {
18 state MASTER
19 interface eth0
20 virtual_router_id 166[主、備機的 virtual_router_id 必須相同,取值 0-255]
21 priority 100
22 advert_int 1
23 authentication {
24 auth_type PASS
25 auth_pass 1111
26 }
27 virtual_ipaddress {
28 172.25.254.168
29 }
30 }
31
32 virtual_server 172.25.254.166 80 {
33 delay_loop 6
34 lb_algo wrr[使用加權輪詢]
35 lb_kind DR
36 # persistence_timeout 50
37 protocol TCP
38
39 real_server 172.25.254.163 80 {
40 weight 2[權重]
41 TCP_CHECK {
42 connect_timeout 3
43 nb_get_retry 3
44 delay_before_retry 3
45 }
46 }
47 real_server 172.25.254.164 80 {
48 weight 1
49 TCP_CHECK {
50 connect_timeout 3
51 nb_get_retry 3
52 delay_before_retry 3
53 }
54 }
55 }
(4)配置完成server1.的信息後,
1.把 /usr/local/keepalived/ 目錄和目錄下的全部文件發送給 172.25.254.162 的 /usr/local中。
scp -r keepalived/ root@172.25.254.162:/usr/local
2.在server2中 進行(2)步驟,把相應的文件鏈接到相應的文件。
3.更改配置文件
vim /etc/keepalived/keepalived.conf
[行標]
18 state BACKUP[輔機該爲 BACKUP,此狀態由 priority決定,高爲MASTER ,低爲BACKUP]
21 priority 50[輔機這個優先級要低於主機]
(5)在Rules Server 機上添加 arptables 保證服務機上的數據 達到正常效果
(優)方法二:下載 arptables_jf.x86_64
arptables -A IN -d 172.25.254.168 -j DROP [丟掉進入到168的信息]
arptables -A OUT -s 172.25.254.168 -j mangle --mangle-ip-s 172.25.254.163 [做爲本機168輸出的信息,轉換爲163輸出]
(6)再次添加一個 vsftpd 服務
1.vim /etc/keepalived/keepalived.conf
[行標]
3 global_defs {
4 notification_email {
5 root@localhost
6 }
7 notification_email_from keepalived@server2.example.com[修改郵件接受主機,誰是主機 就寫誰]
8 smtp_server 172.0.0.1
9 smtp_connect_timeout 30
10 router_id LVS_DEVEL
11 vrrp_skip_check_adv_addr
12 vrrp_strict
13 vrrp_garp_interval 0
14 vrrp_gna_interval 0
15 }
16 vrrp_instance VI_1 {
17 state MASTER
18 interface eth0
19 virtual_router_id 166
20 priority 100
21 advert_int 1
22 authentication {
23 auth_type PASS
24 auth_pass 1111
25 }
26 virtual_ipaddress {
27 172.25.254.168
28 172.25.254.166[再次添加一個虛擬IP]
29 }
30 }
31
32 virtual_server 172.25.254.166 21 {[開啓21端口]
33 delay_loop 6
34 lb_algo rr
35 lb_kind DR
36 persistence_timeout 50[會話保持時間,單爲是秒,這個選項對於動態網頁是很是有用的,爲集羣系統中session共享提供了一個很好的解決方案。有了這個會話保持功能,用戶的請求會被一直分發到某個服務節點,直到超過這個會話保持時間。須要注意的是,這個會話保持時間,是最大無響應超時時間,即斷開鏈接後,超出50秒,則會被分發到另外節點]
37 protocol TCP
38
39 real_server 172.25.254.163 21 {
40 weight 1
41 TCP_CHECK {
42 connect_timeout 3
43 nb_get_retry 3
44 delay_before_retry 3
45 }
46 }
47 real_server 172.25.254.164 21 {
48 weight 1
49 TCP_CHECK {
50 connect_timeout 3
51 nb_get_retry 3
52 delay_before_retry 3
53 }
54 }
55 }
2.在 Rules Server 服務機上添加vsftpd 服務,而且添加 arptables 策略。(同上)