当前位置: 首页 > 科技观察

基于LVS负载均衡集群实现电子商务网站架构

时间:2023-03-17 00:50:19 科技观察

背景随着业务的发展,网站的访问量越来越大。网站访问量从原来的1000QPS变成了3000QPS。网站已经不堪重负,响应缓慢,面对这种场景,单纯依靠单一的LNMP架构已经无法承载更多的用户访问量。这时候就需要利用负载均衡技术来扩大网站的容量,解决承载能力的问题。向外扩展?放大?技术说明集群(cluster)技术是一种比较新的技术,通过集群技术可以以较低的成本获得性能、可靠性、灵活性等方面比较高的收益,其任务调度是集群系统中的核心技术。集群是一组通过高速网络互连的独立计算机,它们形成一个组并作为一个系统进行管理。当客户端与集群交互时,集群的行为就像一个独立的服务器。集群形成后,可以使用多台计算机和组合来处理海量请求(负载均衡),从而获得高处理效率,也可以使用多台计算机进行备份(高可用),做到任意一台机器坏掉并且整个系统仍然可以正常运行。集群是目前互联网公司必不可少的技术,它极大地提高了互联网服务的可用性和可扩展性。负载均衡集群技术负载均衡(LoadBalance)负载均衡集群为企业需求提供了有效解决容量问题的方法。负载平衡集群允许负载在计算机集群之间尽可能均匀地分布。负载通常包括应用程序处理负载和网络流量负载。这样的系统非常适合为使用同一组应用程序的大量用户提供服务。每个节点可以承担一定的处理负载,可以实现处理负载在节点之间的动态分配,实现负载均衡。对于网络流量负载,当网络服务程序接收到较高的网络流量,无法快速处理时,会将网络流量发送给运行在其他节点上的网络服务程序。还可以根据服务器的承载能力对服务请求进行分发,使用户请求得到更快的处理。负载均衡集群技术实现负载均衡(LoadBalance)负载均衡技术类型:基于四层负载均衡技术和七层负载均衡技术负载均衡实现方式:硬件负载均衡设备或软件负载均衡硬件负载均衡产品:F5BIG-IP、CitrixNetscaler、Sangfor、Array、Radware软件负载均衡产品:LVS(LinuxVirtualServer)、Haproxy、Nginx、Ats(apachetrafficserver)负载均衡技术演示图LVS是负载均衡技术的一种,在此介绍什么是lvsLVS?LVS是LinuxVirtualServer的缩写,即Linux虚拟服务器。它是由张文松博士发起的一个免费软件项目。其官方网站是www.linuxvirtualserver.org。现在LVS已经是Linux标准内核的一部分。在Linux2.4内核之前,使用LVS时必须重新编译内核以支持LVS功能模块。不过从Linux2.4内核开始,LVS的各个功能模块已经全部内置。给内核打上任何补丁,就可以直接使用LVS提供的各种功能。LVS自1998年起步以来,已经成为一个比较成熟的技术项目。LVS技术可用于实现高扩展性和高可用的网络服务,如WWW服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等,被众多知名网站所采用和组织LVS建立的集群系统,如:Linux门户网站(www.linux.com)、以提供RealPlayer音视频服务而闻名的Real公司(www.real.com)、全球最大的开放源网站(sourceforge.net)等等。LVS软件功能:通过LVS提供的负载均衡技术和Linux操作系统实现高性能、高可用的服务器集群,具有良好的可靠性、扩展性和可操作性。结果是以低成本获得高服务性能。LVS高并发特性:LVS工作在内核网络层面,具有超强的承载能力和并发处理能力。单个LVS负载均衡器可以支持数万个并发连接。稳定性强:工作在网络第4层,只做分发。这一特点也决定了它在负载均衡软件中的出色性能和稳定性,对内存和CPU资源的消耗极低。低成本:硬件负载均衡器从几十万到几十万到几百万不等。LVS只需要一台服务器,可以免费部署,性价比极高。配置简单:LVS配置非常简单,只需要几行命令就可以完成配置,也可以写成脚本进行管理。支持多种算法:支持多种参数算法,可根据业务场景灵活部署使用支持多种工作模式:可根据业务场景采用不同的工作模式解决生产环境请求处理问题。适用范围广:由于LVS工作在4层,几乎可以对所有应用进行负载均衡,包括http、数据库、DNS、ftp服务等。缺点:工作在4层,不支持7层规则修改,机制太大,不适合小规模应用。LVS工作流程图LVS工作内核模型1.当客户端的请求到达负载均衡器的内核空间时,首先会到达PREROUTING链。2.当内核发现请求包的目的地址是本机时,将包发送到INPUT链。3.LVS由用户空间的ipvsadm和内核空间的IPVS组成。ipvsadm用于定义规则。IPVS使用ipvsadm定义的规则来工作。IPVS工作在INPUT链上。当一个数据包到达INPUT链时,首先会被IPVS检查。如果数据包中的目的地址和端口不在规则中,则数据包将被释放到用户空间。4.如果数据包中的目的地址和端口在规则中,那么这个数据包的目的地址将被修改到预先定义的后端服务器并发送到POSTROUTING链。5.***通过POSTROUTING链发送到后端服务器。LVS负载均衡NAT工作流程(一)。当用户请求到达DirectorServer时,请求的数据包会首先进入内核空间的PREROUTING链。此时消息的源IP为CIP,目的IP为VIP(b)。PREROUTING检查数据包的目的IP是否为本地,将数据包发送到INPUT链(c)。IPVS比较数据包请求的服务是否为Cluster服务,如果是,则修改数据包的目标IP地址为后端服务器的IP,然后将数据包发送到POSTROUTING链。此时报文的源IP为CIP,目标IP为RIP(d)。POSTROUTING链选择路由并将数据包发送到RealServer(e)。RealServer对比发现目标是自己的IP,开始构建响应报文发送回DirectorServer。此时报文的源IP为RIP,目的IP为CIP(f)。DirectorServer在响应客户端之前,会将源IP地址修改为自己的VIP地址,然后再响应客户端。此时消息的源IP为VIP,目的IP为CIP。192.168.10.200两台后端服务器,一张网卡只托管192.168.10.188和192.168.10.189,实现了基于lnmp的电子商务网站服务器。1.配置1.yuminstallipvsadm-y2.grep-iinDRloadbalancer-C10"ipvs"/boot/config-VERSION-RELEASE.x86_64,#查看内核是否支持ipvs模块3.iptables-F;setenforce0清除防火墙策略,关闭selinux策略4.ipvsadm-A-t172.17.253.132:80-swrr#开启一个基于80端口的虚拟web服务,调度算法为wrr5.ipvsadm-a-t172.17.253.132:80-r192.168.10.188:80-m-w1#配置web服务后端服务器为Nat工作模式,权重为1ipvsadm-a-t172.17.253.132:80-r192.168.10.189:80-m-w16。修改内核配置,开启路由转发vim/etc/sysctl.confnet.ipv4.ip_forward=1sysctl-p使修改的内部和配置参数生效2、在真实服务器上配置iptables-F;setenforce0清除防火墙策略,关闭selinux策略并配置网关指向192.168.10.200,开启nginx、php-fpm、mariadb服务路由添加defultgw1??92.168.10.200三、验证访问172.17.253.132LVS负载均衡DRworkingmodeonthebrowserVirtualServerviaDirectRouting(VS-DR):使用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以使用这种方法。控制管理计算机收到请求包后,直接发送给参与集群的节点。直接路由模式比较特殊,不好说相似的是,前者模式基本工作在网络层(三层),而直接路由模式应该工作在数据链路层(二层)工作原理:DR和REALSERVER都使用同一个IP对外服务。但是只有DR响应ARP请求,所有REALSERVER都对自己对这个IP的ARP请求保持沉默。也就是说,网关会将对这个服务IP的所有请求都指向DR,DR收到数据包后会根据调度算法找出对应的REALSERVER,将目的MAC地址改为本机的MACREALSERVER并将其发送到此服务器REALSERVER。这时REALSERVER收到这个数据包,相当于直接从客户端接收这个数据包,处理后直接返回给客户端。由于DR需要改变二层包头,所以DR和REALSERVER必须在一个广播域内,也可以简单理解为在同一台交换机上。数据包到后端服务器时要经过负载均衡器,返回时直接发送到客户端,不经过负载均衡器,大大提高了效率。LVS负载均衡DR工作流程(a)当用户请求到达DirectorServer时,请求的数据包会首先进入内核空间的PREROUTING链。此时报文的源IP为CIP,目的IP为VIP(b)PREROUTING检查数据包的目的IP是否为本地,将数据包发送至INPUT链(c)IPVS比较是否数据包请求的服务是集群服务,如果是,修改请求报文中的源MAC地址为DIP的MAC地址,修改目标MAC地址为RIP的MAC地址,然后将数据包发送到POSTROUTING链。此时源IP和目的IP都没有被修改。只是源MAC地址修改为DIP的MAC地址,目的MAC地址修改为RIP的MAC地址。发送。POSTROUTING链检查目标MAC地址是否为RIP的MAC地址,此时将数据包发送给RealServer。(e)RS发现请求报文的MAC地址是自己的MAC地址,接收报文。处理完成后,将响应报文通过lo接口传给eth0网卡,然后发送出去。此时源IP地址为VIP,目标IP为CIP(f)。响应消息最终传递给客户端。特点:1.保证前端路由将所有目标地址的消息发送到DirectorServer,而不是RS2,RS可以使用私有地址;也可以是公网地址。如果使用公网地址,此时可以直接通过Internet访问RIP。3、RS和DirectorServer必须在同一个物理网络中。4.所有的请求报文都经过DirectorServer,但是响应报文一定不能进入DirectorServer5,不支持地址转换,不支持端口映射6,RS可以是最常见的操作系统7,RS的网关永远不允许指向DIP(因为我们不允许他在director之后)8、RS上的lo接口配置VIP的IP地址实验:负载均衡集群企业应用实战-LVS-DR模式:实验环境:一台DR负载均衡器,一个网卡172.17.253.132,网桥,两台后端服务器172.17.251.236和172.17.253.253,各带网卡,桥接一个,在DR负载均衡器上1.yuminstallipvsadm-y2.grep-i-C10"ipvs"/boot/config-VERSION-RELEASE.x86_64,#检查内核是否支持ipvs模块3.iptables-F;setenforce0清除防火墙策略,关闭selinux策略4.ifconfigens33:0172.17.253.100广播172.17.253.100网络掩码255.255.255.255up#ConfigureVIP到本地网卡别名ens33:0(vip地址可以任意),并且只广播自己,否则以后在后端服务器上会和loopback网卡上配置的vip冲突,所以后端服务器配置的vip只会广播自己5.routeadd-host172.17.253.100devens33:0#配置vip路由6.ipvsadm-A-t172.17.253.100:80-swrr#开启一个基于虚拟web服务80端口,调度方式为wrr7.ipvsadm-a-t172.17.253.100:80-r172.17.253.132:80-g-w1#配置web服务后siderealserver为DR,权重为1ipvsadm-a-t172.17.253.100:80-r172.17.253.253:80-g-w18、修改内核配置,开启路由转发vim/etc/sysctl.confnet。ipv4.ip_forward=1sysctl-p使修改的内核配置参数生效2.在RS后端服务器上iptables-F;setenforce0清除防火墙策略,关闭selinux策略1.ifconfiglo:0172.17.253.100broadcast172.17.253.100netmask255.255.255.255up#配置VIP到本地环回网卡lo,只广播自己2.routeadd-host172.17.253.100lo:0#配置本地环回网卡路由3.echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore#1只应答目标IP地址为访问网络接口本地地址的ARP查询请求echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce#2为查询目标使用最合适的本地地址。在这种模式下,该IP数据包的源地址将被忽略并尝试to选择一个可以与该地址通信的本地地址。echo"1">/proc/sys/net/ipv4/conf/all/arp_ignoreecho"2">/proc/sys/net/ipv4/conf/all/arp_announce#closearpresponse(1):只有在接收请求报文的本地主机的接口上配置了请求的目标IP时,才会响应(2):需要避免将接口信息通知到非本地网络4.打开web、php-fpm和mysql服务3.验证在浏览器上访问172.17.253.100(vip)