LVS 负载均衡解决方案

因为我们的产品运行的主流平台是WINDOWS+IIS+SQLSERVER(2000以上版本),而LVS+KEEPALIVED是LINUX下的四层负载均衡软件。其有如下特点:

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率(在DR模式下),将请求均衡地转移到不同的服务器上执行,且调度器自动 屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程 序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。一般来说,LVS集群采用三层结构,其主要组成部分为:

  A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。

  B、服务器池(server pool),是一组真正执行客户请求的服务器,即realserver,执行的服务有WEB、MAIL、FTP和DNS等。

  C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

LVS的IP负载均衡技术实现:
  目前IP负载均衡技术是在负载调度器的实现技术中效率最高的。LVS集群中实现的三种IP负载均衡技术,分别是:
     Virtual Server via Network Address Translation (VS/NAT): 也有说端口映射的,其目标是将一组服务器构成一个高性能的、高可用的虚拟服务器。因为这种技术容易形成单点故障,从而造成网路无法访问,并且存在带宽瓶 颈。所以LVS又提供了下面两种实现。

Virtual Server via IP Tunneling (VS/TUN ): 通过IP隧道实现虚拟服务。
     Virtual Server via Direct Routing (VS/DR) :直接路由实现虚拟服务器的方法(负载能力最强),本文搭建的就是DR模式。

我们的产品目前如果要作用负载均衡技术,则需要在管理后台开启远程附件(FTP)和分布式缓存服务(MEMCACHED),有关这两个功能可以参见我之前写的这两篇文章。    
     http://www.cnblogs.com/daizhj/archive/2010/02/08/discuznt_memcache_syncdata.html 
     http://www.cnblogs.com/daizhj/archive/2008/07/28/1254648.html

这样我们的产品配置就完成了,下面介绍一下相应的服务器环境搭建。首先是IIS配置站点(要求在一个物理网段上)

RealServer 1:10.0.8.13:80
 RealServer 2:10.0.8.12:80

VIP(虚拟IP):10.0.8.9

两台虚拟机安装Centos5.4(采用DHCP安装模式),地址:
 Centos1: 10.0.8.25 (keepalived:MASTER)
 Centos2: 10.0.8.55 (keepalived:BACKUP)

首先要说明的是,因为这里使用的是LVS的VS/DR模式(上面提到),也就是要求REALSERVER会直接将结果返回到客户端,即下面图中(右侧)描述:

所以我们还需要在windows 服务器上配置VIP,可以使用下面的方法 :
      1.在控制面板里添加一个硬件设备, Microsoft Loopback Adapter ,如下图:

2.设置ip为vip,掩码随意:
      

3.进注册表编辑器,搜索这个vip,把掩码改成255.255.255.255,然后禁用启用网卡即可(在window server 2003系统中有三处)。
      

这样在‘网上邻居’上看相应Microsoft Loopback Adapter 的IP MASK就变成了255.255.255.255。然后在IIS的相应站点下配置IP地址,可使用VIP地址或使用‘全部未分配选项’。如下图:
      

这样配置就完成了,之后用:
      c:\>telnet 10.0.8.13 80和c:\>telnet 10.0.8.12 80  看一下配置是否已正常启用。

这样就完成了windows服务器的配置工作。在介绍如何如何安装配置LVS和KEEPALIVED之前,先要说明一下在虚拟机安装CENTOS时要注意的几个问题,如下:

1.因为Keepalived需要gcc工具来编译所以要在安装时定制一下安装组件,如下:

然后安装程序会检验相应组件依赖性

2.之后安装防火墙时选择禁用:

3.selinux也是禁用:

下面开始介绍一下linux下如何安装配置LVS和KEEPALIVED.

1.首先安装lvs的管理工具ipvsadm(直接使用yum安装即可),启用Centos1虚拟机(10.0.8.25),进入终端模式,键入

# yum –y install ipvsadm

2.然后安装keepalived,因为Keepalived需要gcc工具来编译,所以请安装它(前文已做介绍),在编译时,keepalived倚赖openssl和内核源代码

# yum –y install openssl-devel  kernel-devel

3.去官方下载最新的keepalived,解压缩,然后编译:

#wget http://www.keepalived.org/software/keepalived-1.1.18.tar.gz
#tar zxvf keepalived-1.1.18.tar.gz
#cd keepalived-1.1.18
#./configure --with-kernel-dir=/usr/src/kernels/2.6.18-164.15.1.el5-i686 
--prefix=/usr/local/keepalived #将其布署在LVS的目录下
#上面的with-kernel-dir是和lvs集成必须的编译参数

注:with-kernel-dir是和lvs集成必须的编译参数,因为keepalived要被放到/usr/local/keepalived下进行编译,另外kernels内核源码会因linux版本不同而有所变化。

显示结果:
    ------------------------
 ....
 Compiler                 : gcc
 Compiler flags           : -g -O2
 Extra Lib                : -lpopt -lssl -lcrypto
 Use IPVS Framework       : Yes   (这里必须为yes)
 IPVS sync daemon support : Yes   (这里必须为yes)
 Use VRRP Framework       : Yes   (这里必须为yes)
 Use LinkWatch            : No

# make && make install  #编译

4.做成启动服务

#ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 
 #ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
 #mkdir /etc/keepalived
 #ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
 #ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
 #service keepalived start #关闭:stop

5.绑定虚拟IP(该步骤在某些安装环境下可以忽略,因为keepalived会自动维护vip,并根据设置,自动在系统里添加vip,所以该步骤可能用途不大)

#/sbin/ifconfig eth0:0 10.0.8.9 broadcast 10.0.8.9 netmask 255.255.255.255 up  #这样的设置可防止IP冲突
    #/sbin/route add -host 10.0.8.9 dev eth0:0

6.配置network(/etc/sysconfig/network )文件,内容如下(注:该步骤在网上某些文章中提到,这里也就随手多做了一步):

NETWORKING=yes
    HOSTNAME=localhost.localdomain
    GATEWAY=10.0.8.1

7.LVS 在3 种方式下均需要打开ip forward 功能,这可以配置/etc/sysctl.conf. 文件,保证其中有如下一行(注:该步骤在网上某些文章中提到,这里也就随手多做了一步):    
         #net.ipv4.ip forward = 1
         #sysctl -p  #然后执行下面命令使配置生效:

备注:因为KEEPALIVED要使用80端口(稍后配置文件中会做设置),所以如果要马上启用80端口,可以启动Apache,用下面命令(这一步并不在安装步骤中):

#service httpd start (或restart)

完成了环境配置之后,下面就是打开并修改Keepalived.conf文件了,我们可以从下面地址打开并编辑它:
         /usr/local/keepalived/etc/keepalived.conf
         或:
         /etc/keepalived/keepalived.conf (之前的ln指令指向)

这里将10.0.8.25这台虚拟机设置为MASTER,配置文件如下(相应配置信息详见这篇文章):

! Configuration File for keepalived

global_defs {
   notification_email {
     daizhj617595@12.com

}
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0   #HA监测网络接口
    virtual_router_id 51 #主、备机的virtual_router_id必须相同
    priority 100   #主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高
    advert_int 1   #VRRP Multicast广播周期秒数
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       10.0.8.9
    }
}

virtual_server 10.0.8.9 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 10 !同一ip50秒内的请求都发送到同一realserver
    protocol TCP

real_server 10.0.8.12 80 {
        weight 2
            TCP_CHECK {
             connect_timeout 3
             nb_get_retry 3
             delay_before_retry 3
             connect_port 80
            }
   }

real_server 10.0.8.13 80 {
        weight 2
            TCP_CHECK {
             connect_timeout 3
             nb_get_retry 3
             delay_before_retry 3
             connect_port 80
            }
    }
}

然后我们使用如下命令启用keepalived:

#keepalived #位于/usr/local/keepalived/sbin/

#service keepalived start

我们可以通过下面指令来查看相应进程:

#ps aux|grep keepalived

------------------------------

sr/local/keepalived/etc/keepalived/keepalived.conf
 root     17670  0.0  0.2   4932   564 ?        Ss   19:03   0:00 keepalived -D
 root     17671  0.0  0.6   4976  1416 ?        S    19:03   0:02 keepalived -D
 root     17672  0.0  0.4   4976   928 ?        S    19:03   0:00 keepalived -D
 ....

这里注意keepalived要启动一个主并fork两个子进程,所以这里显示了三个进程。

这里我们可以下面指令检查一下配置是否生效:

#ping 10.0.8.9 -c 4
 #telnet 10.0.8.9 80

如果正常的话,就说明keepalived已启用了我们的配置。

注:之前本人配置过程中发现telnet经常无法正常访问,可以使用下面指令查看80端口是否启用:

#netstat -npl | grep :80  #windows下相应指令为:netstat -an|findstr LISTEN

也可以使用下面指令检查LVS进程:

#lsmod | grep ip_vs

到这里就完成了10.0.8.25这台虚拟机上的keepalived配置。然后重复1-7这些步骤,在10.0.8.55上也安装并配置 keepalived,这里要注意的是在keepalived.conf文件中要将state MASTER改成state BACKUP

接着,我们在IE上输入下面地址: http://10.0.8.9/index.aspx

如果能正常访问,就说明负载均衡环境搭建完毕了

注:还可以配置HOST文件(/etc/hosts)和DNS域名解析的配置文件(/etc/resolv.conf)

我们可以使用下面指令查看请求的转发情况:

[root@localhost ~]# ipvsadm -lcn|grep 10.0.8.9

-------------------------------------------
                                          clientip                  vip                   realserver
TCP 14:44  ESTABLISHED 10.0.4.102:5244    10.0.8.9:80        10.0.8.12:80
TCP 14:44  ESTABLISHED 10.0.4.102:5232    10.0.8.9:80        10.0.8.12:80
TCP 07:35  ESTABLISHED 10.0.4.102:4875    10.0.8.9:80        10.0.8.13:80
TCP 14:44  ESTABLISHED 10.0.4.102:5249    10.0.8.9:80        10.0.8.12:80
TCP 14:46  ESTABLISHED 10.0.4.102:5246    10.0.8.9:80        10.0.8.12:80
TCP 08:40  ESTABLISHED 10.0.4.102:4913    10.0.8.9:80        10.0.8.12:80
TCP 08:40  ESTABLISHED 10.0.4.102:4927    10.0.8.9:80        10.0.8.12:80
TCP 14:44  ESTABLISHED 10.0.4.102:5247    10.0.8.9:80        10.0.8.12:80
TCP 08:40  ESTABLISHED 10.0.4.102:4929    10.0.8.9:80        10.0.8.12:80
TCP 07:35  ESTABLISHED 10.0.4.102:4872    10.0.8.9:80        10.0.8.13:80
TCP 14:47  ESTABLISHED 10.0.4.102:5243    10.0.8.9:80        10.0.8.12:80
TCP 08:40  ESTABLISHED 10.0.4.102:5011    10.0.8.9:80        10.0.8.12:80
TCP 14:56  ESTABLISHED 10.0.4.102:5245    10.0.8.9:80        10.0.8.12:80
TCP 00:44  NONE        10.0.4.102:0       10.0.8.9:80        10.0.8.12:80
TCP 00:34  NONE        10.0.4.102:0       10.0.8.9:65535     10.0.8.13:65535
TCP 07:35  ESTABLISHED 10.0.4.102:4848    10.0.8.9:80        10.0.8.13:80

接着我们可以把10.0.8.12:80或10.0.8.13:80 站点停掉,看看访问是否正常。
        然后我们将10.0.8.25或10.0.8.55 虚拟机上关掉keepalived (使用killall keepalived或serivce keepalived stop),再用IE访问相应网址看看。
        另外那台机器上的keepalived能否正常切换接管。如果正常,就说明这个环境是HA(高可用的)。

最后再罗列一些常的指令,以便大家查看keepalived运行情况和网络状况:

#tail -f /var/log/messages   #查看系统日志
   #tcpdump src host 10.0.8.9 and port 80  #抓包
   #curl -I http://10.0.8.9/  #利用URL语法在命令行方式下的文件传输工具
   #ip addr  #IP地址信息或ip add show eth0 查看虚拟IP绑定情况
   #service iptables stop #关闭iptables防火墙
   #iptables –nvL  #列出防火墙进入数据信息
   #ipvsadm -ln #查看lvs服务是否正常,包括活动链接,weight(keepalived配置),内部链接等。

LVS 负载均衡解决方案 (windows IIS)的更多相关文章

  1. 企业高并发的成熟解决方案(一)----搭建LVS负载均衡

    企业整个架构分析 1. App服务器上边部署应用,如果是java的话,一般是tomcat: 2. 负载均衡服务器负责转发请求,这种既有主机又有备机的负载均衡成为高可用(HA): 3. 一般web服务器 ...

  2. 【转】LVS负载均衡之session解决方案 持久连接

    原文地址:http://minux.blog.51cto.com/8994862/1744761 1. 持久连接是什么? 1.1 在LVS中,持久连接是为了用来保证当来自同一个用户的请求时能够定位到同 ...

  3. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  4. 十 LVS 负载均衡

    回顾nginx 反向代理负载均衡 负载均衡的妙用 负载均衡(Load Balance)集群提供了一种廉价.有效.透明的方法, 来扩展网络设备和服务器的负载.带宽.增加吞吐量.加强网络数据处理能力. 提 ...

  5. LVS负载均衡集群

    回顾-Nginx反向代理型负载 负载均衡(load balance)集群,提供了一种廉价.有效.透明的方法,来扩展网络设备和服务器的负载.带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用 ...

  6. LVS负载均衡-基础知识梳理

    一. 集群的概念 服务器集群简称集群是一种服务器系统,它通过一组松散集成的服务器软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台服务器.集群系统中的单个服务器通常称 ...

  7. 20.LVS负载均衡群集—NAT模式实例

    LVS负载均衡群集-NAT模式实例 目录 LVS负载均衡群集-NAT模式实例 群集引用概述 群集的含义 问题 解决方法 企业群集分类 群集的三种类型 负载均衡群集(Load Balance Clust ...

  8. lvs负载均衡的搭建

       lvs负载均衡的搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.         在部署环境前,我们需要了解一下一些协议 一.什么是arp 地址解析协议,即ARP(Addr ...

  9. (转)详解LVS负载均衡之三种工作模型原理和10种调度算法

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://linuxnx.blog.51cto.com/6676498/1195379 LV ...

随机推荐

  1. Counting Islands II

    Counting Islands II 描述 Country H is going to carry out a huge artificial islands project. The projec ...

  2. inotify-java linux系统监听文件发生变化,实时通知java程序

    1 Overview     最近公司的一个任务需要实时监控文件系统中某个文件的内容变化.由于程序本身由Java编写,因此使用了inotify- java(http://code.google.com ...

  3. Struts2--中文问题

    有中文的情况下, form method都要用post: 如果jsp输入中文返回到后台action输出时会显示乱码, struts.xml已经设置 <constant name="st ...

  4. 利用fiddler给android模拟器抓包

    启动模拟器 setting---wireless&networks----mobile networks----access pointnames -------------------- 然 ...

  5. head和tail命令-----得到头尾N行或者这去掉尾头N/N-1行

    [algo@localhost tmp]$ cat test  1 2 3 4 5 head得到头部2行,删掉尾部2行 [algo@localhost tmp]$ head -n +2 test  1 ...

  6. mysqldump导入导出mysql数据库

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  7. [转]ASP.NET Core 1 Deploy to IIS

    本文转自: http://webmodelling.com/webbits/aspnet/aspnet-deploy-iis.aspx 15 Sep 2016. This tutorial will ...

  8. (中等) POJ 1703 Find them, Catch them,带权并查集。

    Description The police office in Tadu City decides to say ends to the chaos, as launch actions to ro ...

  9. (简单) POJ 3321 Apple Tree,树链剖分+树状数组。

    Description There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow ...

  10. Android面试题随笔1

    1.如何让一个应用在手机上产生两个或多个图标? 在清单文件中的activity节点下配置如下:[5,7行代码] <activity android:name=".MainActivit ...