在Discuz!NT的最新版本(企业版)中,支持目前主流LINUX平台上的负载均衡解决方案,好比NGINX,HAPROXY,LVS等。本文与其说是解决方案,倒不如说是介绍如何搭建Discuz!NT负载均衡解决方案:)html
由于咱们的产品运行的主流平台是WINDOWS+IIS+SQLSERVER(2000以上版本),而LVS+KEEPALIVED是LINUX下的四层负载均衡软件。其有以下特色:前端
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具备很好的吞吐率(在DR模式下),将请求均衡地转移到不一样的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,并且无需修改客户端和服务器端的程序。为此,在设计时须要考虑系统的透明性、可伸缩性、高可用性和易管理性。通常来讲,LVS集群采用三层结构,其主要组成部分为:linux
A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(咱们可称之为虚拟IP地址)上的。windows
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.htmldom
这样咱们的产品配置就完成了,下面介绍一下相应的服务器环境搭建。首先是IIS配置站点(要求在一个物理网段上)
curl
首先要说明的是,由于这里使用的是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),进入终端模式,键入
2.而后安装keepalived,由于Keepalived须要gcc工具来编译,因此请安装它(前文已作介绍),在编译时,keepalived倚赖openssl和内核源代码
3.去官方下载最新的keepalived,解压缩,而后编译:
显示结果:
------------------------
....
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
4.作成启动服务
5.绑定虚拟IP(该步骤在某些安装环境下能够忽略,由于keepalived会自动维护vip,并根据设置,自动在系统里添加vip,因此该步骤可能用途不大)
6.配置network(/etc/sysconfig/network )文件,内容以下(注:该步骤在网上某些文章中提到,这里也就随手多作了一步):
7.LVS 在3 种方式下均须要打开ip forward 功能,这能够配置/etc/sysctl.conf. 文件,保证其中有以下一行(注:该步骤在网上某些文章中提到,这里也就随手多作了一步):
#net.ipv4.ip forward = 1
#sysctl -p #而后执行下面命令使配置生效:
备注:由于KEEPALIVED要使用80端口(稍后配置文件中会作设置),因此若是要立刻启用80端口,能够启动Apache,用下面命令(这一步并不在安装步骤中):
完成了环境配置以后,下面就是打开并修改Keepalived.conf文件了,咱们能够从下面地址打开并编辑它:
/usr/local/keepalived/etc/keepalived.conf
或:
/etc/keepalived/keepalived.conf (以前的ln指令指向)
这里将10.0.8.25这台虚拟机设置为MASTER,配置文件以下(相应配置信息详见这篇文章):
而后咱们使用以下命令启用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两个子进程,因此这里显示了三个进程。
这里咱们能够下面指令检查一下配置是否生效:
若是正常的话,就说明keepalived已启用了咱们的配置。
注:以前本人配置过程当中发现telnet常常没法正常访问,可使用下面指令查看80端口是否启用:
也可使用下面指令检查LVS进程:
到这里就完成了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)
咱们可使用下面指令查看请求的转发状况:
-------------------------------------------
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运行状况和网络情况:
好了,今天的内容就先到这里了。word文档下载连接。
参考文档:/Files/daizhj/lvs_cluster.pdf
文章写于:2010.3.24