设为首页 收藏本站
查看: 1726|回复: 0

[经验分享] Discuz!NT负载均衡解决方案(HA)之---LVS(Linux Virtual Server)

[复制链接]

尚未签到

发表于 2019-1-6 11:21:42 | 显示全部楼层 |阅读模式
  在Discuz!NT的最新版本(企业版)中,支持目前主流LINUX平台上的负载均衡解决方案,比如NGINX,HAPROXY,LVS等。本文与其说是解决方案,倒不如说是介绍如何搭建Discuz!NT负载均衡解决方案:)
  因为我们的产品运行的主流平台是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配置站点(要求在一个物理网段上)

DSC0000.gif 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配置),内部链接等。

  好了,今天的内容就先到这里了。word文档下载链接。
  参考文档:/Files/daizhj/lvs_cluster.pdf
  文章写于:2010.3.24


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-659924-1-1.html 上篇帖子: LVS设置须知:负载均衡算法 下篇帖子: 集群LVS-DR工作原理图文详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表