結合這幾天作LVS-NAT結構模型的實驗。特總結以下html
1、準備三臺RHEL6.6虛擬機linux
1臺Director算法
2臺RealServervim
一、克隆兩臺RealServer安全
在裝好RHEL6.6後,最好是將裝好了的RHEL6.6做爲Director。其他兩臺RS一、RS2經過克隆的方式實現,只能在Director關機的狀況下進行克隆。這裏我選擇的是完整克隆。也能夠經過「現有快照」克隆服務器
右擊Director——>管理——>克隆網絡
RS2克隆方法同RS1克隆方法同樣
二、更新網卡設備名與IP規劃負載均衡
(1)、更新RS一、RS2網卡設備名dom
由於克隆後的虛擬機與原虛擬機比較改變了網絡設備的名,例如,克隆後的網卡爲eth1,而原虛擬機則爲eth0。curl
[root@gnnt rules.d]# ifconfig
eth1 Link encap:Ethernet HWaddr 00:0C:29:6E:CF:B2
inet addr:172.16.0.9 Bcast:172.16.255.255 Mask:255.255.0.0
............................................................
[root@gnnt ~]# cd /etc/udev/rules.d/
[root@gnnt rules.d]# vim 70-persistent-net.rules
# PCI device 0x8086:0x100f (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:7f:d5:6a", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x8086:0x100f (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:6e:cf:b2", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
可看見有兩個網卡的配置信息,須要刪除掉關於eth0 的信息。而後修改eth1的網卡名稱爲eth0。
(2)、IP規劃
Director:eth0(橋接模式,可瀏覽外網) IP地址:172.16.0.9 子網掩碼:255.255.0.0
默認網關:172.16.1.1 DNS:202.106.0.20
eth1(僅主機模式,不可瀏覽外網) IP地址:192.168.1.3 子網掩碼:255.255.255.0
RS1:eth0(僅主機模式) IP地址:192.168.1.1 子網掩碼:255.255.255.0
默認網關:192.168.1.3
RS2:eth0(僅主機模式) IP地址:192.168.1.2 子網掩碼:255.255.255.0
默認網關:192.168.1.3
具體實現方法可參照:
http://1343138116.blog.51cto.com/6124664/1680268 Vmware虛擬機三種網絡模式用途的第3節ifcfg-ethX的配置
配置完成後執行以下操做
[root@gnnt /]#service network restart #重啓網絡服務,使配置生效。能夠省略,直接進行下一步
[root@gnnt /]#reboot #重啓系統,讓系統從新讀取網卡的設備名稱
[root@gnnt /]#ifconfig #查看網卡的設備名是否更新
IP地址規劃好後測試連通效果。Director:eth0網卡可否PING通互聯網,以ping www.baidu.com爲例; Director:eth1可否PING通RS1:eth0、RS2:eth0; RS1:eth0、RS2:eth0可否互相PING通。
三、經過yum方式安裝ipvsadm
具體實現方法可參照:
http://1343138116.blog.51cto.com/6124664/1681861 RedHat 6.6自建yum倉庫
當yum倉庫創建完成後經過yum install ipvsadm命令方式安裝
2、LVS-NAT實現方法
拓撲圖
注:
一、這裏的Client我使用的是物理機
二、添加Router只是爲了可以看出LVS-NAT的整個流程,在這裏沒有實際意義
三、RS一、RS2的網關地址是DIP:192.168.1.3
四、RS可使用Linux或Windows,若是要調內核參數則只能用Linux
一、RS1設置
[root@gnnt ~]# rpm -qa|grep httpd #查看是否安裝了httpd服務,若沒有安裝則須要安裝如下文件
httpd-2.2.15-39.el6.x86_64
httpd-tools-2.2.15-39.el6.x86_64
[root@gnnt ~]#service httpd status #查看httpd服務是否啓動,能夠看出httpd服務是中止的
httpd is stopped
[root@gnnt ~]# service httpd start #啓動httpd服務
Starting httpd: httpd: apr_sockaddr_info_get() failed for gnnt
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
#這裏的意思是須要一個DNS服務器,能夠不用理會,本次實驗不會用到bind服務
[root@gnnt ~]#echo "welcome to RS1.gnnt.com" > /var/www/html/index.html #編輯index.html文件
[root@gnnt ~]#setenforce 0 #Permissive=0,表明僅記錄安全警告但不阻止可疑行爲
setenforce是SElinux的知識,請參閱
http://os.51cto.com/art/201105/265956.htm SELinux入門:瞭解和配置SELinux
[root@gnnt ~]#service iptables stop #必定要將防火牆關閉,不然不能「curl RS2」的內容
[root@gnnt ~]#curl http://localhost #訪問本機的index.html文件
welcome to RS1.gnnt.com
[root@gnnt ~]#curl http://192.168.1.2 #訪問RS2的index.html文件
welcome to RS2.gnnt.com
二、RS2設置
[root@gnnt ~]# rpm -qa|grep httpd #查看是否安裝了httpd服務,若沒有安裝則須要安裝如下文件
httpd-2.2.15-39.el6.x86_64
httpd-tools-2.2.15-39.el6.x86_64
[root@gnnt ~]#service httpd status #查看httpd服務是否啓動,能夠看出httpd服務是中止的
httpd is stopped
[root@gnnt ~]# service httpd start #啓動httpd服務
Starting httpd: httpd: apr_sockaddr_info_get() failed for gnnt
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
#這裏的意思是須要一個DNS服務器,能夠不用理會,本次實驗不會用到bind服務
[root@gnnt ~]#echo "welcome to RS2.gnnt.com" > /var/www/html/index.html #編輯index.html文件
[root@gnnt ~]#setenforce 0 #Permissive=0,表明僅記錄安全警告但不阻止可疑行爲
[root@gnnt ~]#service iptables stop #必定要將防火牆關閉,不然不能「curl RS1」的內容
[root@gnnt ~]#curl http://localhost #訪問本機的index.html文件
welcome to RS2.gnnt.com
[root@gnnt ~]#curl http://192.168.1.1 #訪問RS1的index.html文件
welcome to RS1.gnnt.com
注:也要將Director的防火牆關閉
三、Director設置
注:文檔最後有對ipvsadm命令詳解的補充,想仔細研究的同窗也能夠根據命令詳解設置不一樣的調度方式
(1)、使用rr調度算法進行負載均衡
[root@gnnt ~]#ipvsadm -A -t 172.16.0.9:80 -s rr
[root@gnnt ~]#ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m
[root@gnnt ~]#ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m
#添加一個IP爲地址172.16.0.9,端口爲80的集羣服務器
#添加一個IP爲地址192.168.1.1,端口爲80的集羣RS服務
#添加一個IP爲地址192.168.1.2,端口爲80的集羣RS服務
注:測試前必定要在Director中開啓IP轉發,重啓服務或系統後IP轉發會失效。測試步驟在第三節
[root@gnnt ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@gnnt ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@gnnt ~]# cat /proc/sys/net/ipv4/ip_forward
1
[root@gnnt ~]#
(2)、查看客戶端鏈接數
[root@gnnt ~]# ipvsadm -L -c
IPVS connection entries
pro expire state source virtual destination
TCP 01:58 TIME_WAIT 172.16.0.255:53948 172.16.0.9:http 192.168.1.1:http
TCP 01:57 TIME_WAIT 172.16.0.255:53944 172.16.0.9:http 192.168.1.1:http
TCP 01:54 TIME_WAIT 172.16.0.255:53937 172.16.0.9:http 192.168.1.1:http
TCP 01:55 TIME_WAIT 172.16.0.255:53943 172.16.0.9:http 192.168.1.1:http
.............................................................................
(3)、查看統計信息
[root@gnnt ~]# ipvsadm -L --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 172.16.0.9:http 4507 22120 21685 2037284 2504098
-> 192.168.1.1:http 2596 13021 12926 1185170 1491242
-> 192.168.1.2:http 1911 9099 8759 852114 1012856
(4)、查看速率信息
[root@gnnt ~]# ipvsadm -L --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 172.16.0.9:http 4 19 18 2208 1953
-> 192.168.1.1:http 3 14 14 1629 1379
-> 192.168.1.2:http 1 5 5 579 573
(5)、查看超時信息
[root@gnnt ~]# ipvsadm -L --timeout
Timeout (tcp tcpfin udp): 900 120 300
(6)、清除ipvsadm規則
[root@gnnt ~]# ipvsadm -C
(7)、保存ipvsadm,以便重啓之後規則也能生效
推薦使用
[root@gnnt ~]# service ipvsadm save #直接保存ipvsadm規則
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
或
[root@gnnt ~]#ipvsadm -S > /etc/sysconfig/ipvsadm.com #將ipvsadm規則保存指定的文件中
[root@gnnt ~]#ipvsadm -R < /etc/sysconfig/ipvsadm.com #從指定的文件中載入ipvsadm規則
3、經過物理機進行測試
經過按F5按鈕刷新,查看測試效果
圖1
圖2
補充:ipvsadm命令詳解
默認調度方法:wlc
ipvsadm:
管理集羣服務
添加:-A -t|u|f service-address [-s scheduler]
-t: TCP協議的集羣
-u: UDP協議的集羣
service-address: IP:PORT
-f: FWM: 防火牆標記
service-address: Mark Number
# ipvsadm -A -t 172.16.0.9:80 -s rr
修改:-E
刪除:-D -t|u|f service-address
管理集羣服務中的RS
添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-t|u|f service-address:事先定義好的某集羣服務
-r server-address: 某RS的地址,在NAT模型中,可以使用IP:PORT實現端口映射;
[-g|i|m]: LVS類型
-g: DR
-i: TUN
-m: NAT
[-w weight]: 定義服務器權重
# ipvsadm -a -t 172.16.0.9:80 -r 192.168.10.1 -m
# ipvsadm -a -t 172.16.0.9:80 -r 192.168.10.2 -m
修改:-e
刪除:-d -t|u|f service-address -r server-address
查看
-L|l
-n: 數字格式顯示主機地址和端口
--stats:統計數據
--rate: 速率
--timeout: 顯示tcp、tcpfin和udp的會話超時時長
-c: 顯示當前的ipvs鏈接情況
刪除全部集羣服務
-C:清空ipvs規則
保存規則
-S
# ipvsadm -S > /path/to/somefile
載入此前的規則:
-R
# ipvsadm -R < /path/from/somefile
至此,本文檔已經結束,文檔中不免有不盡人意之處,但願各位可以給出寶貴的建議,謝謝!
紫禁之巔
2015年8月6日 15:44