LVS (Linux Virtual Server)集群项目实践

LVS (LinuxVirtual Server)集群项目实践

 

实验目的:通过实验可以熟练规划和配置集群项目

实验环境:Red Hat Enterprise Linux Server release 6.4 

实验前提:请确保实验前看过 LVS 中文站点

实验说明:本实验只是以实现负载均衡为目标,并没有考虑如共享存储等,这方面问题在以后的实验中 会添加。 

实验步骤

     一、LVS 系统模型

     二、LVS 调度算法

     三、负载平衡方法

     四、常用术语介绍

     五、NAT 方式架设

     六、DR方式架设

 

一、LVS 系统模型

   Linux 虚拟服务器(Linux Virtual Server, LVS )建筑于实际的服务器集群之上,用户看不到提供服务的多台实际服务器,而只能看见一台作为负载平衡器的服务器。实际的服务器通过高速局域网或地理上分散的广域网连接。实际服务器的前端是一台负载平衡器,他将用户的请求调度到实际服务器上完成,这样看起来好像所有服务都是通过虚拟服务器来完成的。Linux 虚拟服务器能够提供良好的可升级性、可靠性和可用性。用户可以透明地增加或减少一个节点,可以对实际服务器进行监测,如果发现有节点失败就重新配置系统。

      

二、LVS 调度算法

    LVS提供了十种调度算法:

(一)轮询(RoundRobin Scheduling )   rr

    轮转调度不考虑服务器的连接数和响应时间,它将所有的服务器都看作是相同的。 当以轮转的形式将连接分发到不同的服务器上。  

(二)加权轮转 (WeightedRound Robin Scheduling)       wrr 

    根据每个机器的处理能力的不同给每个机器分配一个对应的权重,然后根据权重的

大小以轮转的方式将请求分发到各台机器。这种调度算法的耗费比其它的动态调度算法小,但是当负载变化很频繁时,它会导致负载失衡,而且那些长请求会发到同一个服务器上。  

(三)最少连接调度(LeastConnection  Scheduling)       lc

    最少连接调度将用户请求发送到连接数最少的机器上。最少连接调度是一种动态调度方法,如果集群中各台服务器的处理能力相近,则当负载的变化很大时也不会导致负载失衡,因为它不会把长请求发送到同一台机器上。但是当处理器的处理能力差异较大时,最少连接调度就不能很好的发挥效能了。  

(四)加权最小连接调度(WeightedLeast Connection Scheduling)      wlc 

    根据服务器的性能不同而给它们分配一个相应的权重,权重越大,获得一个连接的机会就越大。有如下的运算方法:(假设共有n 台机器,每一台服务器i 的权重为Wi(i=1 ,..,n),活跃连接数为Ci (i=1 ,..,n),所有的连接数为Ci (i=1 ,..,n)的总和,下一个连接会发送给服务器j ,服务器j 满足以下的要求):(Cj/ALL_CONNECTIONS)/Wj = min {(Ci/ALL_CONNECTIONS)/Wi } (i=1,..,n) 由于ALL_CONNECTIONS 是一个常数,因此上面的式子可以优化为: Cj/Wj = min { Ci/Wi } (i=1 ,..,n)  

(五)(Locality-Based Least - Connection)    lblc  

(六)(Locality-Based Least - Connection)    lblcr 

(七)目的地址哈希算法(DestinationHashing)    dh

(八)源地址哈希算法(SourceHashing)    sh

(九)(Shortest    Expected   Delay )   sed 

(十)不排队调度(Never     Queue )      nq  

 

三、负载平衡方法

 LVS 提供了三种IP级的负载平衡方法:

   Virtual Server via NAT 、Virtual Server via IP Tunneling、Virtual Server via Direct Routing。

   Virtual Server via NAT 方法使用了报文双向重写的方法,

   VirtualServer via IP Tunneling 采用的是报文单向重写的策略,

   Virtual Server via Direct Routing 采用的是报文转发策略,

 

四、常用术语介绍

   DGW    公网IP地址的默认网关

   VIP    客户端访问的公网IP地址,Director的虚拟IP地址

   DIP    Director的真实IP地址

   RIP    真实机的IP地址

 

五、NAT 方式架设  

一、实验前的准备工作

  网络拓扑规划:

    VIP :10.0.0.1

    DIP :192.168.4.254    (打开ip_forward)

    RIP :192.168.4.11     (默认网关为192.168.4.254 )

    RIP :192.168.4.22     (默认网关为192.168.4.254 )

  测试机 : 10.0.0.20

二、Director  的配置

(一)设置主机名

[root@localhost ~]# hostname Director 

[root@localhost ~]# vim /etc/sysconfig/network

  NETWORKING=yes

  NETWORKING_IPV6=no 

  HOSTNAME=Director    

  (为了更直观的配置,可以重新打开新的tty,或新的标签,发现主机名已经更改)

  

(二)打开ip_forward,开启调度器的路由功能

[root@Director ~]# vim /etc/sysctl.conf 

 net.ipv4.ip_forward= 1

[root@Director ~]# sysctl  - p    //让配置生效

  

(三)IP地址的配置

1.[root@Director~]# vim /etc/sysconfig/network - scripts/ifcfg - eth0

  DEVICE=eth0 

  BOOTPROTO=static

  IPADDR=192.168.0.200

  NETMASK=255.255.255.0

  ONBOOT=yes

  [root@Director ~]# service networkrestart    (重新启动网络服务)

  

2.  绑定一个实验用的模拟外网地址eth1: 10.0.0.1  ,IP地址配置

 [root@Director~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1

 DEVICE=eth1

 TYPE=Ethernet

 ONBOOT=yes

 NM_CONTROLLED=yes

 BOOTPROTO=none

 IPADDR=10.0.0.1

 NETMASK=255.255.255.0

3.  测试IP地址是否正常

[root@Director ~]# ping  - c 1 192.168.4.254

[root@Director ~]# ping  - c 1 10.0.0.1

(如果可以正常的Ping通,可以继续下面的实验)

  

三、Real Server 的配置

Real Server 1  

(一)在Real Server1 上设置主机名

1.[root@localhost ~]# vim/etc/sysconfig/network 

NETWORKING=yes

NETWORKING_IPV6=no 

HOSTNAME=Server1

2.[root@localhost ~]#hostname Server1 

  

(二)设置IP地址和默认网关

[root@Server1 ~]# vim /etc/sysconfig/network -scripts/ifcfg - eth0

DEVICE=eth0 

BOOTPROTO=none

IPADDR=192.168.4.11 

NETMASK=255.255.255.0

GATEWAY=192.168.4.254     (注意:必须设置默认网关)

ONBOOT=yes

  

(三)打开apache  并测试是否可以正常访问

1.为了便与直观的看到效果,新建一个index.html

[root@Server1 ~]# vim /var/www/html/index.html

<html>

       <head>

               <title>192.168.4.11</title> 

       </head> 

       <body>

               <center>Server1</center> 

       </body> 

</html> 

2. 重新启动Apache服务

  [root@Server1~]# service httpd restart   

3. 测试网页

 [root@Server1~]# elinks --dump http://192.168.4.11

                            Server1               

  

Real Server 2 

(一)在RealServer 2 上设置主机名

1.[root@localhost ~]# vim/etc/sysconfig/network 

NETWORKING=yes

NETWORKING_IPV6=no 

HOSTNAME=Server2

2.[root@localhost ~]# hostname Server2

  

(二)设置IP地址和默认网关

[root@Server1 ~]# vim /etc/sysconfig/network -scripts/ifcfg - eth0

DEVICE=eth0 

BOOTPROTO=none

IPADDR=192.168.4.22 

NETMASK=255.255.255.0

GATEWAY=192.168.4.254     (注意:必须设置默认网关)

ONBOOT=yes

 

(三)打开apache  并测试是否可以正常访问

2.为了便与直观的看到效果,新建一个 index.html

[root@Server1 ~]# vim /var/www/html/index.html

<html>

       <head>

               <title>192.168.4.22</title> 

       </head> 

       <body>

               <center>Server2</center> 

        </body> 

</html> 

2. 重新启动Apache服务

 [root@Server1 ~]# service httpd restart   

3. 测试网页

 [root@Server1 ~]# elinks --dumphttp://192.168.4.22

                            Server2       

  

四、Director  上的部署和测试

(一)安装软件包

   默认光盘yum install ipvsadm 无法安装,所以先设置yum源,以光盘为例

[root@Director ~]# vim /etc/yum.repos.d/yum.repo

[rhel-yum]

name=Red Hat Enterprise Linuxyum

baseurl=file:///media/Server

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

 

[loadbalancer]

name=server

baseurl=file:///media/LoadBalancer

enabled=1

gpgcheck=0

 

挂在光盘,装载软件:

[root@Director ~]# mount /dev/cdrom  /media/

[root@Director ~]# yum -y install ipvsadm 

[root@Director ~]# service ipvsadm start;chkconfigipvsadm on

(二)负载均衡调度

[root@Director ~]# ipvsadm  - A - t 10.0.0.1:80  -s rr

[root@Director ~]# ipvsadm  - a - t 10.0.0.1:80  -r 192.168.4.11 -m -w 1

[root@Director ~]# ipvsadm  - a - t 10.0.0.1:80  -r 192.168.4.22  -m -w 2

[root@Director ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  ->RemoteAddress:Port           ForwardWeight ActiveConn InActConn

TCP 10.0.0.1:80 rr

  ->192.168.4.11:80              Masq    1     0          0        

  ->192.168.4.22:80              Masq   1      0          0

[root@Director ~]# service ipvsadm save 

[root@Director ~]# modprobe iptable_nat 

  

(三)测试是否达到负载均衡的效果(必须在另一台计算机上,拥有10.0.0.0网段的IP地址)

[root@localhost ~]# elinks --dump http://10.0.0.1

                          Server1

[root@localhost ~]# elinks --dump http://10.0.0.1

                          Server2

         

(四)用ab测试其性能

[root@localhost ~]# ab - n 1000 - c 200 http://10.0.0.1/index.html

[root@localhost ~]# ab - n 1000 - c 200http://10.0.0.1/ index.html

(五)测试说明

   这里我简单的用静态的html来检测,普通单机和集群的速度比,在实际的应用中,静态页面需要Squid 来加速,而静态页面才用集群,实现动静分离,这部分在以后的实验中会体现。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。