LVS集群模式有三种,我们这里先演示的是LVS集群模式中的第一种NAT配置,再演示LVS集群的第二种模式DR,我们这里以举例子的方式将NAT && DR的配置过程演示出来的。
LVS的三种模式:
NAT: 地址转换
DR:直接路由
TUN:隧道
一、编辑NAT方式:
这里前面的Director,至少有两个网络接口,一个接口面对互联网,让互联网用户可以访问到;而另一个接口面向于real server。而用户请求到达的时候,将用户请求的目标地址转换为real server(图中为RIP)中的某一个地址的方式来实现的。
一、编辑NAT
这里我们做一个web服务器的负载均衡集群,它的VIP为172.16.58.1,DIP为192.168.10.7,RIP1为192.168.10.8,RIP2为192.168.10.9,我们以物理机为客户端发起请求。我们这里需要三个虚拟机,一个为Director,一个RIP1,一个RIP2.(例如:图2)
1、更改地址【提示:这里需要两个网卡一个为外网地址,一个为内网地址】
更改ip地址,我们这里将我们Director的两个ip地址的DIP改为192.168.10.7,VIP改为172.16.58.1。我们
这使用的是两个网卡,一个改为Bridged一个改为Host-only。我们的两台real server的RIP分别为192.168.10.8和192.168.10.9,连接都为Host-only。
⑴更改Director上的VIP和DIP地址
# setup
# servicenetwork restart
⑵配置Real server服务器上的RIP地址,网关为Dector上的DIP
2、安装yum库【提示:yum库中必须要配置Cluster,安装的ipvsadm文件都在Cluster里面】
我们这里用挂载光盘来安装yum库,进而安装开发环境,需要安装Development Libraries和Development Tools,但是DevelopmentTools默认都安装过了,所以我们这里安装一个就行了。安装完成后开发环境就安装成功了。【提示:Director和real server都需要安装,Director 需要安装Cluster并且安装开发环境。但是real server不用安装Cluster,只需要安装一个Server就可以了(开发环境也不用安装)。】
[root@localhost ~]# mkdir /mnt/cdrom ###创建cdrom目录 [root@localhost ~]# mount /dev/cdrom /mnt/cdrom ###挂载光盘(当场有效,开机无效) [root@localhost ~]# vim /etc/fstab ###在配置文件中挂载光盘(当场无效,开机有效) /dev/cdrom /mnt/cdrom ext3 defaults 00 [root@localhost ~]# cd /etc/yum.repos.d/ ###进入yum.repos.d目录下面 [root@localhost yum.repos.d]# vim server.repo ###编辑server.repo [base] name=Server baseurl=file:///mnt/cdrom/Server enabled=1 gpgcheck=0 [Cluster] name=Cluster baseurl=file:///mnt/cdrom/Cluster enabled=1 gpgcheck=0[root@localhost yum.repos.d]# yum groupinstall "Development Libraries"
3、⑴Director上安装ipvsadm【提示:ipvsadm用法在前一章】
# grep -i 'vs'/boot/config-2.6.18-308.el5 ###查看一下内核中是否有ipvs的功能 # yum install ipvsadm ####安装ipvsadm ⑵Real server上安装httpd 和 telnet-server【提示:】 # yum install httpd telnet-server ####用于验证
4、同步时间【重点提示:各节点之间的时间偏差不应该超出1秒钟】
我们这里不能用hwclock来进行调时间,因为这样的话会有大量的时间凭空消失了,那样服务器里面会出现一段空白,就像是穿越了,我们应该进行加速的方法调整时间,我们这里是根据服务器来调整时间的。
# date ###查看时间 # server ntpd stop ####关闭时间命令 #ntpdate 172.16.0.1 ####从服务器上同步时间
5、在real server服务器中添加页面
⑴在RIP1中添加RS1.shuaige.com
# echo “RS1.shuaige.com” > /var/www/html/index.html ####使用管道将内容传输到index.html中 # service httpd start # curl http://localhost ####测试一下 # curl -i http://localhost ####获取首部 # curl http://192.168.10.9 ####获取对方的
⑵在RIP2中添加RS2.shuaige.com
# echo “RS2.shuaige.com” > /var/www/html/index.html # service httpd start # curl http://localhost
⑶在Director上测试
6、添加集群服务(只在Director服务器上添加)
# ipvsadm –A –t 172.16.58.1:80–s rr # ipvsadm –a –t 172.16.58.1:80–r 192.168.10.8–m # ipvsadm –a –t 172.16.58.1:80–r 192.168.10.9–m
7、进行测试
# echo 1> /proc/sys/net/ipv4/ip_forward ####网卡间的信息转发要打开
刷新后
统计数据
二、编辑DR有三种方式
这里虽说编辑DR有三种方式,但是我们这里可不是三种方式都给大家进行编译一下,我们这里将每种方式的利弊说一下,找到最合适的方法,我们这里只编译第三种方法。
第一种方式:在路由器上明显说明vip对应的地址一定是Director上的MAC,只要绑定,以后再跟vip通信也不用再请求了,这个绑定是静态的,所以它也不会失效,也不会再次发起请求,但是有个前提,我们的路由设备必须有操作权限能够绑定MAC地址,万一这个路由器是运行商操作的,我们没法操作怎么办?第一种方式固然很简便,但未必可行。
第二种方式:在给别主机上(例如:红帽)它们引进的有一种程序arptables,它有点类似于iptables,它肯定是基于arp或基于MAC做访问控制的,很显然我们只需要在每一个real server上定义arptables规则,如果用户arp广播请求的目标地址是本机的vip则不予相应,或者说相应的报文不让出去,很显然网关(gateway)是接受不到的,也就是director相应的报文才能到达gateway,这个也行。第二种方式我们可以基于arptables。
第三种方式:在相对较新的版本中新增了两个内核参数(kernelparameter),第一个是arp_ignore定义接受到ARP请求时的相应级别;第二个是arp_announce定义将自己地址向外通告是的通告级别。【提示:很显然我们现在的系统一般在内核中都是支持这些参数的,我们用参数的方式进行调整更具有朴实性,它还不依赖于额外的条件,像arptables,也不依赖外在路由配置的设置,反而通常我们使用的是第三种配置】
arp_ignore:定义接受到ARP请求时的相应级别
0:只要本地配置的有相应地址,就给予响应。
1:仅在请求的目标地址配置请求到达的接口上的时候,才给予响应
2-只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
4-7 - 保留未使用
8 -不回应所有(本地地址)的arp查询
arp_ignore 设置为1,当别人的arp请求过来的时候,如果接收的设备上面没有这个ip,就不响应,默认是0,只要这台机器上面任何一个设备上面有这个ip,就响应arp请求,并发送MAC地址应答。
arp_announce:定义将自己地址向外通告是的通告级别;
0:将本地任何接口上的任何地址向外通告
1:试图仅想目标网络通告与其网络匹配的地址
2:仅向与本地借口上地址匹配的网络进行通告
三、规划图
四、编辑DR
这里我们是以编辑好的NAT为基础进行编译DR的,因为编辑DR上的Director只要要一个网卡就行了,并且每个RIP上都是一个网卡。所以这里我们根据规划图进行修改。
1、我们要关闭另一个网卡
# ifconfig eth1 down ####关闭eth1【提示:这样关闭重启后又会开启的】
#vim /etc/etc/sysconfig/network-scripts/ifcfg-eth1 ####编辑网络配置
ONBOOT=no
# ifconfig ####查看是否关掉
2、更改DIP
3、在Director上添加VIP(设置别名)
# ifconfig eth0:0 172.16.58.1/16
4、编辑(Realserver)网络配置
首先我们要跟Director一样,设置成桥接模式,它们在同一个交换机上。
# vim /etc/etc/sysconfig/network-scripts/ifcfg-eth1 ####编辑网络配置
IPADDR=172.16.58.7
GATEWAY=172.16.0.1
NETMASK=255.255.0.0
# service network restart
5、在Real server2上ping DIP和RIP1
6、定义相应级别和通告级别(在realserver中定义)
这里我们更改相应级别和通告级别都需要更改两个文件,分别是eth0和all。Arp_ignore中的1表示仅在请求的目标地址配置请求到达的接口上的时候,才给予响应。Arp_announce中的2表示仅向与本地借口上地址匹配的网络进行通告。(具体参数详解要看编辑DR的三种方式)
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
7、创建VIP
这里的广播地址是自己的地址,掩码是255.255.255.255表示此地址只跟自己在同一网段内不跟其他任何地址在同一网段内。
# ifconfig lo:0 172.16.58.1 netmask 255.255.255.255 broadcast172.16.100.1 up
8、添加路由
⑴在real server中添加路由
# route add –host 172.16.58.1 dev lo:0 ####如果目标地址是172.16.58.1,那我们就通过lo:0这个接口
⑵在Director中添加路由
# route add –host 172.16.58.1 dev eth0:0
9、访问RS1和RS2的web服务
10、设置规则(只在Director上添加)
# ipvsadm –C ####清除规则 # ipvsadm -A -t172.16.58.1:80 -s wlc # ipvsadm -a -t 172.16.58.1:80 -r 172.16.58.7 -g -w 2 ####后面的数字是设置权重 # ipvsadm -a -t 172.16.58.1:80 -r172.16.58.8 -g -w 1 ####后面的数字是设置权重
11、查看网页信息
刷新前
刷新后
五、编辑TUN(扩展)
TUN的工作机制跟DR一样,只不过在转发的时候,它需要重新包装IP报文。这里的real server(图中为RIP)离得都比较远。用户请求以后,到director上的VIP上,它跟DR模型一样,每个realserver上既有RIP又有VIP,Director就挑选一个real server进行响应,但是director和real server并不在同一个网络上,这时候就用到隧道了,director进行转发的时候,一定要记得CIP和VIP不能动。我们转发是这样的,让它的CIP和VIP不动,在它上面再加一个IP首部,再加的IP首部源地址是DIP,目标地址的RIP的IP地址。收到报文的RIP,拆掉报文以后发现了里面还有一个封装,它就知道了,这就是隧道。