结合这几天作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