上次提到,LVS(linux虛擬服務)負載羣集有三種模式,NAT模式 IP隧道模式,DR模式。此次就分析一下LVS的NAT模式和DR模式,由於IP隧道模式不是很經常使用,也比較麻煩。html
環境:linux
NAT模式 負載調度器既是客戶端訪問服務的惟一入口,也是服務器池中各節點響應客戶端的出口因此要啓用ip轉發功能以及vs_ip模塊 流量的進出轉發不能有阻礙,防火牆要配置。服務器池中就構建web服務了 各個節點要訪問統一的網頁文件(NFS發佈共享)web
清理一下思路:算法
調度器收到客戶端的請求後,目標ip是VIP 根據DNAT和ipvsadm策略,把數據包重寫地址,發到服務器中的某一節點服務器。節點服務器回覆給調度器,調度器在更具策略更改數據包地址響應給客戶端。 因此 數據的進出都要通過調度器。vim
---負載調度器配置:安全
加載vs_ip模塊並添加到啓動模塊服務器
modprobe ip_vs網絡
---開啓ip轉發功能 vim /etc/sysctl.conf tcp
把「net.ipv4.ip_forward = 0 」的值給成1 啓用轉發ide
重啓系統或者執行 命令 sysctl -p 生效
配置防火牆 容許80的入站 和轉發
安裝LVS管理工具ipvsadm
rpm -ivh ipvsadm-1.25-9.el6.i686.rpm
ipvsadm 工具的使用
-A 表示添加虛擬服務器 (這裏我就把VIP配置成調度器的外部接口12.12.12.1了)
-t 指定vip(虛擬ip)的地址和端口
-s 指定算法 輪詢(rr),加權輪詢(wrr),最少連接(lc),加權最少連接(wlc)這是四種最經常使用的
-p 指定保持時間s
-a 表示添加真實服務器 (服務器池中的節點)
-r 指定RIP(真實ip)的地址和端口
-m 工做模式是NAT
-g 工做模式DR
-i 工做模式 RUN
-w 配置權重 默認值是1 爲0 時表示暫停
建立條目
ipvsadm -A -t 12.12.12.1:80 -s rr
ipvsadm -a -t 12.12.12.1:80 -r 192.168.1.1:80 -m
ipvsadm -a -t 12.12.12.1:80 -r 192.168.1.2:80 -m
保存 service ipvsadm save
查看 ipvsadm -L 或 ipvsadm -l
查看負載連接狀況 ipvsadm -lcn 或 -ln 如今爲空
負載調度器完成
---NFS共享服務器(RHEL6)
NFS服務依賴於RPC機制,已完成本地的映射過程 因此要安裝nfs-utils 用於發佈共享和訪問 rpcbind用於RPC的支持
rpm -ivh rpcbind-0.2.0-8.el6.i686.rpm
rpm -ivh nfs-utils-lib-1.1.5-1.el6.i686.rpm
rpm -ivh nfs-utils-1.2.2-7.el6.i686.rpm
配置共享空間
編輯NFS的配置文件 /etc/exports 默認爲空 須要手動添加
/wwwroot/ 192.168.1.0/24(rw,sync,no_root_squash)
其中客戶機部分能夠是主機名 ip地址 網段地址容許用* ? 通配符表示
括號裏的rw 表示讀寫 sync 表示同步寫入 root_squash 表示當客戶及以root身份訪問時賦予本地root權限 (默認是root_quash) 加上no_ 表示將做爲nfsnobody的身份對待 ro表示只讀權限(能夠爲不一樣的主機配置不一樣的權限)
啓動服務 注意:rhel5系統中RPC服務腳本是portmap而rhel6系統中RPC服務腳本是rpcbind
NFS服務端口較多,且不固定 因此建議關掉防火牆
---服務器節點配置
啓動web服務
防火牆配置 容許80
掛載共享存儲
寫到/etc/fstab 文件中實現自動掛載
echo "192.168.1.10:/wwwroot/ /var/www/html nfs defaults,_netdev 0 0" >> /etc/fstab
查看
兩臺作相同的配置
而後建立 網頁文件 作測試
客戶端訪問12.12.12.1作測試
負載調度器查看 ipvsadm -lvn
能夠看出 調度器把來自12.12.12.2的請求分別交給過192.168.1.1和192.168.1.2兩臺服務器處理
Forward 下面是 Masq 表示 NAT 工做模式 若是是Router 表示DR
DR模式中,Lvs不在是服務器池中各節點的出口,他們經過本身的路由迴應客戶端。LVS扮演的角色只是整個羣集的入口。從性能上說,是減小了LVS調度器的負擔,可是整個羣集的安全性相比NAT工做模式下略有不足,可是「安全」一詞只能是說沒有絕對,不管是哪一種方,還得衝其餘方面綜合考慮。
環境:
此次沒有搭建NFS網絡共享(根據需求而定)
負載調度器 :15.15.15.1
Webserver 1 :15.15.15.2
Webserver2 :15.15.15.3
羣集ip (vip):15.15.15.10
客戶端 : 15.15.15.100
DR模式說了,LVS的功能有所改變,他再也不作NAT轉換了,他怎麼監聽客戶端的請求?收到請求以後如何讓服務器池中的各個節點知道(畢竟他們才提供響應的服務)?整個羣集是有一個VIP(虛擬ip),就算節點服務器知道有請求,那麼請求包中的目標地址也是vip的,怎麼以VIP迴應客戶端?多臺節點都要回應客戶端,因此ARP是否衝突?
①負載調度器如何監聽客戶端的請求?
整個羣集仍是有一個VIP,他負責監聽客戶端的請求。單獨作LVS-DR 的時候,他要創建在物理接口上面,也就是咱們說的虛擬接口。
②怎麼通知服務器池中的節點?
經過ipvsadm 設置的規則 NAT模式中已經介紹了
③一般客戶端是不會接受本身沒有請求過的數據包(tcp三次握手),因此節點服務器不通過LVS調度服務器響應客戶端的話就得 以vip的源地址數據包迴應客戶端
④問題三中,響應客戶端的節點服務器不止一臺。ARP中 已知vip 15.15.15.10 他的MAC 地址是多少,會有N多的答案 形成數據傳輸混亂。因此要更改系統參數,不讓他響應ARP和宣告ARP。
有點亂? 我也有點亂,咱再從新過一遍
第一階段
調度器收到客戶端的請求,目標地址是VIP 15.15.15.10 的80端口。而本身沒有80服務,在根據ipvsadm建立的策略,要把客戶端的請求轉發給服務器池中的某個節點,具體是哪一個?根據ipvsadm策略。
第二階段
轉發的數據包中,無論源ip地址是誰?(物理ip地址也好,創建在物理網卡上的虛擬ip也好-VIP)他的二層封裝 都是一個MAC地址,這個包表達的意思就是客戶端要訪問羣集ip的80端口,你看着辦。(另外,還有資料說,這個包只是一個二層的包)
第三階段 (下面詳細說)
服務器池中的某個節點一看,目標是VIP 根據添加的路由條目,把包直接給本身的lo:0 接口 而Apache默認是監聽本身的全部網卡,正中下懷。由於收到的是一個客戶端訪問VIP:80的請求包因此構建響應包的時候就是VIP到客戶端的了,經過本身的網絡參數配置,響應客戶端了,並無通過調度器。
下面有一步步實現
負載調度器:
加載 ip_vs 模塊 安裝ipvsadm包
建立虛擬接口
修改參數爲
重啓網卡服務後
調整系統參數
對於DR羣集模式來講,因爲LVS負載調度器和各節點須要共用VIP地址,爲了不網絡內的ARP解析出現異常,應該關閉linux內核的ICMP重定向參數響應。
注:ICMP重定向報文是ICMP控制報文中的一種。在特定的狀況下,當路由器檢測到一臺機器使用非優化路由的時候,它會向該主機發送一個ICMP重定向報文,請求主機改變路由。此類報文有可能用以***,因此係統應該拒絕接受ICMP重定向。
編輯 /etc/sysctl.conf 添加
上圖中參數的含義是發送重定向,0表示關閉此項功能。此處修改是爲了安全考慮關閉重定向功能。若是具備 eth一、eth2 等多個接口,必須對全部接口執行該操做
命令 sysctl -p 修改生效
添加 ipvsadm 規則
其餘方面 注意防火牆的配置 參考NAT
節點服務器:
開啓httpd 防火牆策略
最主要的是添加網卡 lo:0
ifcf-lo:0的配置 注意子網掩碼是四個255 表示地址只有一個
重啓網卡服務後
添加路由
route add -host 15.15.15.10 dev lo:0
調整參數 禁止ARP響應和宣告
編輯/etc/sysctl.conf 文件
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
arp_ignore:定義了網卡在響應外部ARP請求時候的響應級別0:默認值,無論哪塊網卡接收到了ARP請求,只要發現本機有這個MAC都給與響應1:老是使用最合適的網卡來響應,一個主機有多塊網卡,其中一塊網卡接收到了ARP請求,發現所請求的MAC是本機另外一塊網卡的,這個時候接收到ARP請求的這塊網卡就必定不響應,只有發現請求的MAC是本身的纔給與響應。
net.ipv4.conf.default.arp_announce =2
net.ipv4.conf.all.arp_announce =2
net.ipv4.conf.lo.arp_announce = 2
定義了網卡在向外宣告本身的MAC-IP時候的限制級別有三個值:0:默認值,無論哪塊網卡接收到了ARP請求,只要發現本機有這個MAC都給與響應1:儘可能避免響應ARP請求中MAC不是本網卡的,一個主機有多塊網卡,其中一塊網卡接收到了ARP請求,發現所請求的MAC是本機另外一塊網卡的,這個時候接收到ARP請求的這塊網卡就儘可能避免響應2:老是使用最合適的網卡來響應,一個主機有多塊網卡,其中一塊網卡接收到了ARP請求,發現所請求的MAC是本機另外一塊網卡的,這個時候接收到ARP請求的這塊網卡就必定不響應,只有發現請求的MAC是本身的纔給與響應。
命令sysctl -p使修改生效
測試
刷新後
沒有配置NFS網絡存儲 因此建了兩個內容不同的文件
END
Ps: 有錯的地方還請諒解。就到這吧 關於高可用性和ip隧道 有時間再寫吧!