Linux 下群集基础与 LVS-NAT 网络地址转换示例
 
 

       服务器群集技术主要使用是实现网络的负载均衡, 通俗地讲就是把多台服务器通过快速通信链路连接起来,从外部看来,这些服务器就像一台服务器在工作,而对内来说,外面来的负载通过一定的机制动态地分配到这些节点机中去,从而达到超级服务器才有的高性能、高可用。

 

群集的优点:
高可伸缩性:群集可以随着负荷的增长,群集系统中添加更多的服务器,来分担网络流量
            高可用性:是指群集可以在一台服务器不工作的时候,另一台服务器接管这台服务器的工作,防止其服务器完全瘫痪
            高可管理性:系统管理员可以从远程管理一个、甚至一组集群。
LVSLinux Virtual Server),虚拟服务器是一个高度可扩展性和高可用性的服务器,建立在一个集群的服务器中。服务器集群的架构对用户是完全透明的,并且用户使用起来感觉它只有一个高性能虚拟服务器。
 LVS包括IPVSipvsadm, IPVS称为IP虚拟服务器是运行LVS下的提供负载平衡功能的一种技术,在linux2.6的内核中已经默认嵌入。它基本上就是一种4层的交换机
集群计算机按功能和结构可以分成以下几类:
 

高可用性集群 High-availability (HA) clusters

负载均衡集群 Load balancing clusters

高性能计算集群 High-performance (HPC) clusters

网格计算 Grid computing

 
LVS集群通常是由LVS Director用于中继入站请求到集群内部节点的转发方法类型描述的。
 
目前可用的三种方法是:
网络地址转换(LVS-NAT
直接路由(LVS-DR)
IP隧道(LVS-TUN
 
 
示例:linux下实现网络的负载均衡, 它是基于 nat 转换形式的
      硬件:
Redhat5.4     ip 192.168.2.20 (属于vmware 1   192.168.101.140(外网)
            Redhat 5.4.1    ip 192.168.2.10   vmware 1
            Redhat 5.4.2    ip 192.168.2.30    (vmware 1)
            Windows xp   ip 192.168.101.110  (外网)
   条件:我们现在把redhat5.4作为负载均衡的转发器(Director) 它上面有两块网卡,分别配置了一个内部的ip和一个外网的ip
         Redhat 5.4.1 redhat5.4.2分别是两个http服务器,分别分配有内部ip地址
         Windows xp 是一台外网的测试机
       现在我们开始实验

1》  redhat5.4.1配置成http服务器

   [root@localhost ~]# mount /dev/cdrom /mnt/cdrom

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@localhost ~]# cd /mnt/cdrom/Server/

[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm

开启httpd服务器

 [root@localhost Server]# service httpd start

Starting httpd:                                            [  OK  ]

为这个服务器做一个主页,填入要显示的内容

[root@localhost Server]# echo "aaaa" > /var/www/html/index.html

2》  redhat5.4.2也配置成服务器

配置方法同上
在主页中写入内容

 [root@localhost Server]# echo "bbbbb" > /var/www/html/index.html

开启服务

 
2》在redhat5.4上进行代码配置
因为这台主机实现的是转发器(Director)的功能,所以我们需要开启它的地址转发功能
 [root@localhost ~]# vim /etc/sysctl.conf
修改net.ipv4.ip_forward =0net.ipv4.ip_forward =1 开启转发功能
             由于我们是在用户空间中实现的,所以我们使用ipvsadm来实现负载均衡的配置,ipvsadmiptables比较类似,从2.6的版本开始,ipvsadm内核代码已经被加入到了Linux的内核之中,我们只是使用ipvsadm使用其配置。
             安装ipvsadm软件
               [root@localhost ~]# mount /dev/cdrom /mnt/cdrom
               [root@localhost Cluster]# rpm -ivh ipvsadm-1.24-10.i386.rpm
warning: ipvsadm-1.24-10.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:ipvsadm                ########################################### [100%]
  软件安装成功,我们可以尝试着启动
 [root@localhost Cluster]# service ipvsadm start
Clearing the current IPVS table:                           [  OK  ]
Applying IPVS configuration: /etc/init.d/ipvsadm: line 62: /etc/sysconfig/ipvsadm: No such file or directory
 

                                                           [FAILED]      

 

 会发现启动时会发生错误,根据提示我们可以看到没有/etc/sysconfig/ipvsadm这个文件,这是因为我们没有为它配置规则的原因。现在我们开始规则的配置,使用群集的方式要把内部的两个服务器的ip地址都映射到外部的一个ip来实现负载均衡,使用轮询的方式对两个网页进行轮询查看。参数配置说明见文档,我们也可以直接man ipvsadm来查看配置文档。
   [root@localhost ~]# ipvsadm -A -t 192.168.101.140:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.101.140:80 -r 192.168.2.10 -m
[root@localhost ~]# ipvsadm -a -t 192.168.101.140:80 -r 192.168.2.30 -m
   保存一下配置
[root@localhost ~]# service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm:               [  OK  ]
 可以看到生成了文件:/etc/sysconfig/ipvsadm
现在我们启动ipvsadm服务
[root@localhost ~]# service ipvsadm start
Clearing the current IPVS table:                           [  OK  ]
Applying IPVS configuration:                               [  OK  ]
启动成功
查看一下配置

可以看到使用轮询方式,调度一次

3》  把服务器上的http服务都开启,开始在测试机上进行测试

   

服务器 5.4.2 上的主页内容,我们再刷新一下

可以看到出现了redhat 5.4.1 上主页的内容,这是因为我们使用的是轮询的方式,每刷新一次便会在两个服务器上的主机是进行轮换出现。

4》  但是有时候,我们的多台服务器的性能不一样,如果每次都进行轮询查看的话,那么有可能性能比较好的服务器空闲的时间比较多,而性能较差的可能会承受那么大的网络负担,这里我们可以使用加强轮询的高度对不同性能的机器划分不同的查询次数

我们可以在上面的示例的基础上修改几条代码就可以了
[root@localhost ~]# ipvsadm -E -t 192.168.101.140:80 -s wrr
[root@localhost ~]# ipvsadm -e -t 192.168.101.140:80 -r 192.168.2.10 -m -w 5
 
 现在我们再查看一下配置
   

修改成功之后,我们如果再次查看,可以看到每刷新5次才能出现一次 5.4.2 的主机的页面。相应的,它的主机的流量也会减少,实现负载均衡。
 

另符下载的一个文档做参考