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

[经验分享] 访问量超过100万的电子商务网站技术架构=LVS

[复制链接]

尚未签到

发表于 2019-1-6 11:42:13 | 显示全部楼层 |阅读模式

  本连载首篇介绍到电子商务网站高性能、高可用解决方案。从架构图上的方案,应用的是LVS+keepalived负载均衡。实现高性能、高可用解决方案(服务器组成集群,达到负载均衡,高性能、高可用、高可伸缩性的服务器集群)互联网->LVS负载均衡(前端四层负载均衡器)。
  访问量超过100万的电子商务网站技术架构.PNG图,电子商务网站要承受高访问量,硬件设备的支撑是整个系统的基础。系统软件的支撑也是必不可少的重要组成部分。
  本文详细介绍传统WEB前段负载均衡层,并比较常见有多种负载均衡解决方案。
  一、本文要点:
  1.LVS+keepalived linux服务器通过源码编译安装。
  2.软件负载均衡,四层负载均衡器。
  3.CentOS5.6环境下布署(32位) linux服务器版。
  4.电子商务网站高性能、高可用解决方案,LVS负载均衡(前端四层负载均衡器)。
  5.构建过程的要点解说,重点步骤说明。
  6.本方案多次用于实际生产应用中,并可以灵活变通应用。
  二、软件负载均衡常见几种方案:
  1.LVS+keepalived负载均衡,LVS+KEEPALIVED是LINUX下的四层负载均衡软件
  2.Haproxy做负载均衡
  3.heartbeat + heartbeat-ldirectord + lvs
  三、硬件的负载均衡解决方案有:
  1.F5 负载均衡(F5 负载均衡 LTM V9 HA )
  2.思科 负载均衡产品 ( CISCO(思科) ACE-4710-0.5F-K9 )
  3.思杰 负载均衡产品(CITRIX NetScaler 标准版(9000) 负载均衡)
  Cisco、Juniper、F5、Radware、Huawei等品牌网络设备。
  四、名词解释:
  LVS(Linux Virtual Server) LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡。
  HA(High Availability),则是高可用的意思。
  五、电子商务网站负载均衡架构:
  电子商务网站负载均衡架构,选择本架构的原因是。因为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模式。
  集群:
  所谓集群是指由多个独立的计算机节点构成的在网络中表现为单一的为客户工作站提供高可靠性服务的系统。在大型项目中,往往有大量的请求并发,这样就给服务器带来了很大的负载,而建立集群系统的目的就是为了解决负载均衡和高可用性的问题。
  负载均衡:
  负载均衡是指大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间。既然服务是在多台节点设备上的运行,那么要屏蔽负载均衡服务器的失效,就要在主备机上都运行High Availability 监控程序,来监控对方的运行状况。通过这种方式,可以实现系统的高可用性,即当备份机不能在一定的时间内收到主服务器的活动信息时,它就接管主服务器的服务IP并继续提供服务。当备份机又从主服务器收到活动信息,它就释放服务IP地址,由主服务器提供服务。
  通过以上的介绍,相信大家对集群技术及其应用领域已经有了宏观上的了解。下面,我们通过一个实际的案例来讲解如何在实战中建立一个具有高可用性的集群系统。读者可以依据本文介绍的方法进行集群实验,只需要准备两台普通的PC机模拟服务器即可。这里我们在两台PC机上都安装了SuSE Linux操作系统,并以IBM产品(WAS NDIBM HTTP Server,EDGE Component等)作为构建集群的软件支持,实现一个可拓展、高性能,具有高可用性的集群系统。
  六、架构图:

  七、系统环境:CentOS 5.6 32位(系统最小模式安装)
  64位系统安装问题提示:
  试过在64位时编译会出错,提示找不到一些内核库文件,文件名称含了64字样的缘故,编译有问题,逐一修改修改原安装包很麻烦。还不知道会有其他未知BUG。
  关键点:keepalived 是运行在LVS基础上的,LVS 安装ipvsadmin #yum install ipvsadmin (省去编译版本配对问题)
  很多朋友使用编译安装不成功,是由于ipvsadmin的版本跟你使用的linux内核不一致。
  首先请查看自己 Linux 操作系统内核的版本   命令: uname -a    命令: cat /proc/version 命令:lsb_release -a
  八、编译安装ipvsadm
  下面看我怎么编译安装的,linux系统应用中编译安装是我力荐的安装方式。
  首先下载软件ipvsadm
  安装ipvsadm。Ipvsadm的官方下载地址为 http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz,解压后先做一个链接文件,把目录/usr/src/kernels/2.6.18-8.el5-i686/ 链接为/usr/src/linux,不这样做的话,执行./configure脚本将报错。运行命令 ln –s /usr/src/kernels/2.6.18-8.el5-i686 /usr/src/linux 做好链接,再运行不带参数的脚本 ./configure,然后执行”make;make install”完成安装
  下载后,安装ipvsadmin
  编译时候报 make[1]: *** [libipvs.o] Error 1 错误
  但是下了ipvsadm后编译出了问题:
  解决办法可能不只一种;我是用的下面的办法搞定的:
  ln -s /usr/src/kernels/2.6.x-xx.EL-i686/ /usr/src/linux
  cd ipvsadm-1.24
  make && make install
  ipvsadmin -v 应该能看到如下信息:
  [root@localhost ipvsadm-1.24]# ipvsadm -v
  ipvsadm v1.24 2005/12/10 (compiled with popt and IPVS v1.2.0)
  说明编译安装成功!
  九、keepalived采用VRRP机制
  另外注意 keepalived 在Linux下的(VRRP)虚拟路由冗余协议 ,keepalived采用VRRP机制,那么就会涉及负载均衡服务器连接的路由器(交换机)
  VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。
  实际使用中,如果你连接的使用的路由器是傻瓜型的话,可以忽略这个问题。
  如果你用是智能路由器,设置了规则的话,那就要注意了,一些规则会将VRRP发出的状态检测包,当做病毒屏蔽掉,最后导致的结果是keepalived    负载均衡器之间的失败切换failover,是通过VRRPv2(Virtual Router Redundancy Protocol) stack实现的。
  还可能导致不能检测后端真实服务器的存活状态(检测web服务器的状态)。
  十、相关知识点
  1.keepalived 通过对服务器池对象的健康检查,实现对失效机器/服务的故障隔离 (官方专用名词“Checkers”负责真实服务器的健康检查healthchecking)
  2.负载均衡器之间的失败切换failover,是通过VRRPv2(Virtual Router Redundancy Protocol) stack实现的。
  不就是(LVS-DR,LVS-NAT,LVS-TUN)3种模式!
  十一、网络环境 :
  lvs-master:192.168.9.201 (主)
  lvs-backup:192.168.9.202 (备)
  vip:192.168.9.200        (虚拟ip)
  web1:192.168.9.203       (后端真实WEB服务器1)
  web2:192.168.9.204       (后端真实WEB服务器2)
  netmask:255.255.255.0    (掩码)
  gateway:192.168.9.1      (网关)
  网络拓扑 如上图:详细见“LVS集群的体系结构,构建强壮的体系结构里负载均衡层、真实服务器层、后端共享存储层都是相辅相成”文章。
  十二、LVS+keepalived linux服务器通过源码编译安装shell脚本
  echo "============================ 更新系统时间 ======================"
  yum install -y ntp
  ntpdate time.nist.gov
  echo "00 01 * * * /usr/sbin/ntpdate time.nist.gov" /etc/crontab
  echo “========================= 安装ipvsadm、keepalived ==================”
  #Funciont: Backup website and mysql database
  #Author: Jimmy Li
  #Website: http://jimmyli.blog.运维网.com/
  #IMPORTANT!!!Please Setting the following Values!
  [root@master ~]# cd /usr/local/src
  [root@master ~]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
  [root@master ~]# wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gz
  [root@master ~]# ln -sv /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux
  [root@master ~]# tar -zxvf ipvsadm-1.24.tar.gz
  [root@master ~]# cd ipvsadm-1.24
  [root@master ~]# make;make install
  [root@master ~]# cd ..
  [root@master ~]# tar -zxvf keepalived-1.1.17.tar.gz
  [root@master ~]# cd keepalived-1.1.17
  [root@master ~]# ./configure
  configure: error:
  !!! OpenSSL is not properly installed on your system. !!!
  !!! Can not include OpenSSL headers files.
  解决办法:
  [root@master ~]# yum -y install openssl-devel
  [root@master ~]# ./configure
  [root@master ~]# make;make install
  编译的时候出现这个提示,说明keepalived和内核结合了,如果不是这样的,需要加上这个参数
  ./configure --with-kernel-dir=/kernel/path
  Keepalived configuration
  ------------------------
  Keepalived version             : 1.1.17
  Compiler                                 : gcc
  Compiler flags                     : -g -O2
  Extra Lib                                : -lpopt -lssl -lcrypto
  Use IPVS Framework             : Yes
  IPVS sync daemon support : Yes
  Use VRRP Framework             : Yes
  Use LinkWatch                        : No
  Use Debug flags                    : No
  echo “======================= 配置keepalived ===========================”
  #Funciont: Backup website and mysql database
  #Author: Jimmy Li
  #Website: http://jimmyli.blog.运维网.com/
  #IMPORTANT!!!Please Setting the following Values!
  [root@master ~]#    cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
  [root@master ~]#    cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
  [root@master ~]#    mkdir /etc/keepalived
  [root@master ~]#    cp /usr/local/sbin/keepalived /usr/sbin/
  [root@master ~]# vi /etc/keepalived/keepalived.conf
  ! Configuration File for keepalived
  global_defs {
  notification_email {
  jimmyli@jimmyli.blog.运维网.com
  }
  notification_email_from jimmyli@jimmyli.blog.运维网.com    #http://jimmyli.blog.运维网.com/
  smtp_server jimmyli.blog.运维网.com
  # smtp_connect_timeout 30
  router_id LVS_DEVEL
  }
  # VIP1
  vrrp_instance VI_1 {
  state MASTER                         #备份服务器上将MASTER改为BACKUP
  interface eth0
  lvs_sync_daemon_inteface eth0
  virtual_router_id 51
  priority 100        # 备份服务上将100改为90
  advert_int 5
  authentication {
  auth_type PASS
  auth_pass 1111
  }
  virtual_ipaddress {
  192.168.9.200
  #(如果有多个VIP,继续换行填写.)
  }
  }
  virtual_server 192.168.9.200 80 {
  delay_loop 6                                    #(每隔6秒查询realserver状态)
  lb_algo wlc                                    #(lvs 算法)
  lb_kind DR                                    #(Direct Route)
  persistence_timeout 60                #(同一IP的连接60秒内被分配到同一台realserver)
  protocol TCP                                #(用TCP协议检查realserver状态)
  real_server 192.168.9.203 80 {
  weight 100                             #(权重)
  TCP_CHECK {
  connect_timeout 10             #(10秒无响应超时)
  nb_get_retry 3
  delay_before_retry 3
  connect_port 80
  }
  }
  real_server 192.168.9.204 80 {
  weight 100
  TCP_CHECK {
  connect_timeout 10
  nb_get_retry 3
  delay_before_retry 3
  connect_port 80
  }
  }
  }
  [root@master ~]#    service keepalived start|stop
  [root@master ~]# chkconfig –level 2345 keepalived on
  echo “====================== 配置realserver =========================”
  #Funciont: Backup website and mysql database
  #Author: Jimmy Li
  #Website: http://jimmyli.blog.运维网.com/
  #IMPORTANT!!!Please Setting the following Values!
  [root@web_1 ~]# vi /root/lvs_real.sh
  #!/bin/bash
  #http://jimmyli.blog.运维网.com/
  #Config realserver
  SNS_VIP=192.168.9.200
  /etc/rc.d/init.d/functions
  case "$1" in
  start)
  /sbin/ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
  /sbin/route add -host $SNS_VIP dev lo:0
  echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
  echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  sysctl -p >/dev/null 2>&1
  echo "RealServer Start OK"
  ;;
  stop)
  /sbin/ifconfig lo:0 down
  /sbin/route del $SNS_VIP >/dev/null 2>&1
  echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
  echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
  echo "RealServer Stoped"
  ;;
  *)
  echo "Usage: $0 {start|stop}"
  exit 1
  esac
  exit 0
  [root@web_1 ~]# chmod +x /roo/lvs_real.sh
  [root@web_1 ~]# /root/lvs_real.sh start
  [root@web_1 ~]# ifconfig
  [root@web_1 ~]# echo “/root/lvs_real.sh start” >> /etc/rc.local
  echo “===================== 测试LVS+keepalived ========================”
  #LVS_master、LVS_backup上开启keepalived,LVS_master先绑定VIP
  #http://jimmyli.blog.运维网.com/
  LVS_master:
  LVS_backup:
  #解析域名,测试访问
  #测试关闭LVS_master,短暂的掉包后,LVS_backup马上接替工作
  LVS_backup接替LVS_master绑定VIP
  LVS_backup负责转发
  LVS_master重启完成后,就会自动接回控制权,继续负责转发
  #测试关闭其中一台realserver
  通过上面测试可以知道,当realserver故障或者无法提供服务时,负载均衡器通过健康检查自动把失效的机器从转发队列删除掉,实现故障隔离,保证用户的访问不受影响
  #重启被关闭的realserver
  当realserver故障恢复后,负载均衡器通过健康检查自动把恢复后的机器添加到转发队列中
  总结:
  实际生产环境中,keepalived是非常稳定的,并且能够承受巨量并发数。
  文章中没有涉及到后端真实服务器的架构配置,我认为一个完整的高性能WEB架构应该,后端也是重中之重的,完整的一部分,必备可少。


运维网声明 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-659934-1-1.html 上篇帖子: 运维工程师必备之负载 均衡集群及LVS详解 下篇帖子: 使用LVS(Linux Virtual Server)在Linux上搭建负载均衡的集群服务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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