在生产环境中,一台机器的性能再好,也不可能抵挡住上万人的同时访问。这就需要我们搭建集群来减轻单一主机的压力,同时还可以提升服务的速度和质量。
NET模型需要一个director和至少两个realserver来提供集群服务,其大致工作原理如图所示:
Director有两块网卡,其中VIP指向外网,DIP指向内网。用户访问时访问的是director,也就是一个集群服务。但是用户并不知道自己访问的是一个集群服务,用户看到的只是director通过VIP提供的服务,所以用户在发送请求时其目标IP指向的是VIP。VIP在接收到用户请求之后通过指定的算法将请求通过DIP转发给realserver,realserver得到请求报文之后会在最短的时间内处理并将报文回传给DIP,DIP再将响应报文转交给VIP,VIP将响应报文送还给用户。
下面是用NET模型提供web服务的配置过程:
配置环境:使用VMware虚拟机,Director和两个realserver的系统均为RHEL5.8
主机配置:Director主机配置两块网卡,realserver配置一块网卡;Director一块网卡指向外网,选择Bridged;指向内网的网卡选择Hots-Only。两个realserver的网卡也选择Host-Only。
首先为Director提供两块网卡,其中一块用来当做VIP网卡使用,指向外网地址。
配置VIP地址为:172.16.125.1; DIP网卡地址指向内网,地址为:192.168.125.1。
realserver 1地址为192.168.125.3。realserver 2地址为192.168.125.4。将两个realserver的网关指向192.168.125.1。
做集群最重要的是realserver之间的时间间差不能超过1秒钟,可以使用ntpdate 192.168.125.1来让realserver的时间与Director同步。realserver上的ntpdate服务要实现停止才可以同步。
在Director中开启本地路由转发功能,可以使用命令# echo “1” > /proc/sys/net/ipv4/ip_foeward 来实现。
查看Director的ipvsadm包是否安装,没有安装的话可以使用yum安装。安装后为ipvsadm添加调度规则。
# ipvsadm -A -t 172.16.125.1:80 -s rr
# ipvsadm -a -t 172.16.125.1:80 -r 192.168.125.3 -m
# ipvsadm -a -t 172.16.125.1:80 -r 192.168.125.4 -m
为realserver提供web服务,可以利用yum直接安装使用,为realserver 1 提供网页在/var/www/http/下命名为index.html,内容为了测试为host2.earl.com。为realserver 2 提供网页在/var/www/http/下命名为index.html,内容为host3.earl.com。启动两个realserver的httpd服务,在本地的物理机上就可以测试了。
以下为网页访问效果:
realserver 1:
realserver 2:
DR模型总体上来说和NET模型没有什么区别,只是将所有的请求报文交给Director处理,Director不再处理响应请求,响应请求直接由realserver交给路由器转发回Client。这样可以减轻Director的压力,提高报文响应的速度。但是用户请求的是目标IP是VIP,如果RIP直接响应给用户的话,用户发现没有对此IP发送请求,是不会接收的。所以我们还必须用VIP的地址来响应给用户。可是VIP不处理响应报文,这里就用到了网卡的别名。可以给RIP的网卡定义一个别名,将其地址设为VIP的地址。由于是网卡的别名,是隐藏的地址,所以不会发生IP冲突。一般情况下别名的地址是不用来通信的,只用来响应用户的请求的集群服务。
配置环境:VMware Workstation 9.0
系统环境: RHEL 5.8
我们可以使用上边的NET模型中的三台虚拟机,只是要添加一台虚拟机当做路由器来进行转发功能。
配置路由IP地址:
内部路由接口:192.168.125.20
外部路由接口:172.16.125.10
realserver要使用VIP的地址直接响应给用户的,所以给realserver的网卡配置上别名,不过在这之前将其RIP的网关指向路由设备使其能够到外网中去(别忘了查看时间同步)。
修改网关之后要修改内核参数,然后定义别名,并给别名添加路由条目(一定要先修改内核参数,然后在定义别名):
Realserver1和Realserver2的步骤完全相同:
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# ifconfig eth0:0 172.16.125.1 netmask 255.255.255.255 broadcast 172.16.125.1
# route add -host 172.16.125.1 dev eth0:0
配置Director:
为Director的VIP提供一条跟RIP的别名相同的路由条目
# route add -host 172.16.125.1 dev eth0
清空NET是用的ipvsadm规则,并重新制定规则
# ipvsadm -A -t 172.16.125.1:80 -s wlc
# ipvsadm -a -t 172.16.125.1 -r 192.168.125.3 -w 1
# ipvsadm -a -t 172.16.125.1 -r 192.168.125.4 -w 1
最后重启realserver和Director的网络服务,就可以测试了。
以上便是两种LVS的负载均衡集群配置全过程。