1.搭建前的規划工作
這里從lvs官方網站找了一個nat模型的圖,如下:
我這里使用虛擬機模擬出了4台rhel6機器。一台服務器作為lvs調度器(40網段使用的都是僅主機模式,168網段使用橋接模式),3台服務器作為具體的web服務器(使用僅主機模式),我本是的宿主機就是作為web測試機器。
具體配置如下
機器名稱 | ip配置 | ip配置附加 | 備注信息 |
lvs調度器 | 192.168.40.200 | 192.168.168.200 | 有2個網卡地址, |
RS1 | 192.168.40.201 | 和lvs的第一個ip地址,rs2,rs3屬於同一網段 | |
RS2 | 192.168.40.202 | 和lvs的第一個ip地址,rs2,rs3屬於同一網段 | |
RS3 | 192.168.40.203 | 和lvs的第一個ip地址,rs2,rs3屬於同一網段 | |
宿主機 | 192.168.168.10 | 和lvs的第二個ip地址屬於同一網段 |
配置好上面的環境,確保同一個網段的主機可以相互ping的通。 這里都先關閉防火牆和selinux設置。
2.檢查操作系統支持lvs情況
[root@localhost ~]# grep -i 'vs' /boot/config-2.6.32-279.el6.i686 #有輸出說明支持,我們使用的rhel6,默認的編譯就有lvs模塊。
3.安裝ipvsadm工具
[root@localhost ~]# yum -y install ipvsadm
4.ipvsadm工具的簡單使用
ipvsadm: 管理集群服務 添加:-A -t|u|f service-address [-s scheduler] -t: TCP協議的集群 -u: UDP協議的集群 service-address: IP:PORT -f: FWM: 防火牆標記 service-address: Mark Number 修改:-E 刪除:-D -t|u|f service-address # ipvsadm -A -t 172.16.100.1:80 -s rr 管理集群服務中的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]: 定義服務器權重 修改:-e 刪除:-d -t|u|f service-address -r server-address # ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m # ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m 查看 -L|l -n: 數字格式顯示主機地址和端口 --stats:統計數據 --rate: 速率 --timeout: 顯示tcp、tcpfin和udp的會話超時時長 -c: 顯示當前的ipvs連接狀況 刪除所有集群服務 -C:清空ipvs規則 保存規則 -S # ipvsadm -S > /path/to/somefile 載入此前的規則: -R # ipvsadm -R < /path/form/somefile
5.設置所有的RS服務器的網關為調度器的ip地址
[root@localhost ntpstats]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #修改網關為調度器的ip地址 GATEWAY=192.168.40.200
#三個rs服務器都需要設
確保在各個RS服務的路由信息的正確性
[root@localhost ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.40.0 * 255.255.255.0 U 0 0 0 eth0
link-local * 255.255.0.0 U 1002 0 0 eth0
default 192.168.40.200 0.0.0.0 UG 0 0 0 eth
6.給那個RS服務器安裝http服務並測試
[root@localhost ntpstats]# yum install httpd #每個rs服務器都安裝httpd服務 [root@localhost ntpstats]# service httpd restart #每個rs服務器都重新啟動 [root@localhost ntpstats]# echo rs1> /var/www/html/index.html #給rs1服務器創建一個主頁,只在rs1上執行
[root@localhost ntpstats]# echo rs2> /var/www/html/index.html #給rs2服務器創建一個主頁,只在rs2上執行
[root@localhost ntpstats]# echo rs2> /var/www/html/index.html #給rs3服務器創建一個主頁,只在rs3上執行
#接下來使用在調度器lvs服務器先測試下各個頁面是否可以正常訪問
[root@localhost ~]# elinks -source 192.168.40.201
rs1
[root@localhost ~]# elinks -source 192.168.40.202
rs2
[root@localhost ~]# elinks -source 192.168.40.203
rs3
7.創建LVS
[root@localhost ~]# ipvsadm -A -t 192.168.168.200:80 -s rr #創建一個集群服務,調度算法rr, [root@localhost ~]# ipvsadm -a -t 192.168.168.200:80 -r 192.168.40.201 -m #添加rs1 nat方式 [root@localhost ~]# ipvsadm -a -t 192.168.168.200:80 -r 192.168.40.202 -m #添加rs2 nat方式 [root@localhost ~]# ipvsadm -a -t 192.168.168.200:80 -r 192.168.40.203 -m #添加rs3 nat方式
8.打開ip轉發機制
調度器要能訪問168,40兩個網段的,需要打開ipforward功能。
[root@localhost ~]# echo 1 >/proc/sys/net/ipv4/ip_forward #打開ipv的ip轉發機制,當前生效 [root@localhost ~]# vim /etc/sysctl.conf #打開ipv的ip轉發機制,永久生效 net.ipv4.ip_forward = 1
9. 確保集群的時間不能太大
這里建議在調度器lvs上安裝ntp服務,其他RS服務器來同步時間
10.我們使用宿主機進行測試
瀏覽器輸入http://192.168.168.200,不斷刷新,就可以看到如下的三個圖片信息。測試成功后,就可以把三個RS服務器頁面做成一樣的啦。
宿主機測試量太小了。 我們直接在調度器上使用ab命令測試下
[root@localhost ~]# ab -n 10000 -c 200 http://192.168.168.200/index.html [root@localhost ~]# ipvsadm -L -n --rate IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS -> RemoteAddress:Port TCP 192.168.168.200:80 168 838 837 60477 90073 -> 192.168.40.201:80 56 279 279 20154 30036 -> 192.168.40.202:80 56 280 278 20162 29991 -> 192.168.40.203:80 56 279 279 20160 30045
上面可以看到,3個RS的任務是基本一樣多的。