范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

LVS负载均衡器从入门到精通

  LVS(Linux Virtual Server简写)介绍
  Linux虚拟服务器 是一个虚拟的服务器集群系统 可以在Unix/Linux平台实现负载均衡集群功能。该项目在1998年
  由章文嵩博士组织成立的 是中国国内最早出现的自由软件项目之一。
  LVS项目介绍 | http://www.linuxvirtualserver.org/zh/lvs1.html
  LVS集群的体系结构 | http://www.linuxvirtualserver.org/zh/lvs2.html
  LVS集群中的IP负载均衡技术|http://www.linuxvirtualserver.org/zh/lvs3.html
  LVS集群的负载调度|http://www.linuxvirtualserver.org/zh/lvs4.html
  调度器是服务器集群系统的唯一入口点(Single Entry Point),它可以采用IP负载均衡技术、基于内容请求分发技术或者两者相结合。
  在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求到达时,调度器只根据服务器负载情况和设定的调度算法从服务器池中选出一个服务器,
  将该请求转发到选出的服务器,并记录这个调度;当这个请求的其 他报文到达,也会被转发到前面选出的服务器。在基于内容请求分发技术中,服务器可以提供不同的服务,
  当客户请求到达时,调度器可根据请求的内容选择服务器 执行请求。因为所有的操作都是在Linux操作系统核心空间中将完成的,它的调度开销很小,所以它具有很高的吞吐率。
  服务器池的结点数目是可变的。当整个系统收到的负载超过目前所有结点的处理能力时,可以在服务器池中增加服务器来满足不断增长的请求负载。
  对大多数 网络服务来说,请求间不存在很强的相关性,请求可以在不同的结点上并行执行,所以整个系统的性能基本上可以随着服务器池的结点数目增加而线性增长。
  共享存储通常是数据库、网络文件系统或者分布式文件系统。服务器结点需要动态更新的数据一般存储在数据库系统中,同时数据库会保证并发 访问时数据的一致性。
  静态的数据可以存储在网络文件系统(如NFS/CIFS)中,但网络文件系统的伸缩能力有限,一般来说,NFS/CIFS服务器只能 支持3~6个繁忙的服务器结点。
  对于规模较大的集群系统,可以考虑用分布式文件系统,如AFS[1]、GFS[2.3]、Coda[4]和 Intermezzo[5]等。分布式文件系统可为各服务器提供共享的存储区,
  它们访问分布式文件系统就像访问本地文件系统一样,同时分布式文件系统可提 供良好的伸缩性和可用性。此外,当不同服务器上的应用程序同时读写访问分布式文件系统上同一资源时,
  应用程序的访问冲突需要消解才能使得资源处于一致状 态。这需要一个分布式锁管理器(Distributed Lock Manager),它可能是分布式文件系统内部提供的,也可能是外部的。
  开发者在写应用程序时,可以使用分布式锁管理器来保证应用程序在不同结点上并发访 问的一致性。
  IPVS(LVS)发展史
  早在2.2内核时 IPVS就已经以内核补丁的形式出现
  从2.4.23版本开始 IPvs软件就是合并到Linux内核的常用版本的内核补丁的集合
  从2.4.24以后IPvs已经成为Linux官方标准内核的一部分。
  我们使用该软件配置LVS时候 不能直接配置IPvs 需要使用IPvs管理工具ipvsadm
  LVS负载均衡调度技术是在Linux内核中实现的 因此 被称之为Linux虚拟服务器。我们使用该软件配置LVS时候
  不能直接配置内核的IPvs 而需要使用IPvs的管理工具IPvsadm进行管理 当然也可以同keepalive软件管理LVS
  LVS体系结构和工作原理
  LVS集群负载均衡器接受服务的所有入站客户端计算机的请求,并根据调度算法决定哪个集群节点应该处理回复请求。负载均衡器(简称LB)有时
  也被称为LVS Director(简称Director)---10种调度算法。
  一组服务器通过高速的局域网或者地理分布的广域网相互连接 在它们的前端有一个负载均衡器(Load Balancer).负载调度器能无缝地将网络
  请求调度到真实服务器上,从而使得服务器集群的结构对客户端是透明的 客户端访问集群系统提供的网络服务就像访问一台高性能 高可用的服务器一样
  客户端程序不受服务器集群的影响不需要做任何修改。系统的伸缩性通过在服务集群中透明地加入和删除一个节点来达到。通过检测节点或服务进程
  故障和正确地重置系统达到高可用性 由于我们的负载均衡调度技术是在Linux内核中实现的 我们称之为Linux虚拟服务器
  LVS术语:
  虚拟IP地址(Virtual ip Address)|VIP| VIP为Director用于向客户端计算机提供服务的IP地址(即用户请求的IP)
  如www.aa.com域名就要解析到VIP上提供服务(DNS上要做相应的解析)
  真实IP地址(RealServerIpAddress)|RIP|在集群下面节点上使用的IP地址
  Director的IP地址 |DIP|Director用于连接内外网络的IP地址,物理网卡上的IP地址(负载均衡器的IP地址);与Real Server相连的IP
  客户端主机IP地址 |CIP|客户端PC请求集群服务器的IP地址 该地址用作发送给机器的请求的源IP地址
  LVS集群内部的节点称为真实服务器(Real Server)也叫集群节点。请求集群服务的计算机称为客户端计算机-
  与计算机通常在网上交换数据包的方式相同,客户端计算机 Director和真实服务器使用IP地址彼此进行通信。
  LVS集群的3种工作模式和原理
  IP虚拟服务器软件IPvs
  在调度器的实现技术中 IP负载均衡技术是效率最高的 在已有的IP负载均衡技术中有通过网络地址转换,将一组服务器构成一个高性能
  高可用的虚拟服务器,我们成为VS/NAT技术(Virtual Server via Network Address Translation),大多数商业化的IP负载均衡调度器产品都
  是使用NAT的方法 如Cisco的localdirector F5的Big/ip和Alteon的aceDirector.
  在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出通过IP隧道实现虚拟服务器的方法VS/TUN(Virtual Server via IP Tunneling)
  和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提供系统的伸缩性。(还有淘宝的FULLNAT模式开源的)
  所有IPvs软件实现了这三种IP负载均衡技术 它们的大致原理如下:
  NAT模式:
  通过网络地址转换 调度器LB重写请求报文的目的地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文处理后
  返回时必须要通过调度器,经过调度器时报文的源地址被重写,再返回给客户端 完成整个负载调度过程。
  结论:
  1 NAT技术将请求的报文(DNAT)和响应的报文(SNAT)通过调度器地址重写然后在转发给内部的RS,报文返回时在改写成源地址。
  2 只需要在LB上配置WANIP即可,也要有LAN IP和内部通信,内部RS只需配置LAN IP。
  3 每台内部RS节点的网关 要配置成LB的LAN内物理网卡地址 这样才能确保数据返回任然经过LB。
  4 由于请求与回传数据都经过负载均衡器 因此 访问量大时LB有较大瓶颈
  5 支持对IP及端口进行转换 即用户请求10.0.0.1:80,可以转换到RS的10.0.0.2:8080上
  6 所有NAT内部RS节点只需要配置私有LAN IP即可。
  7 由于数据包来回都需要经过调度器 因此 要开启内核转发net.ipv4.ip_forward=1
  过程如下:
  客户端通过Virtual IP address 访问网络服务时 请求的报文到达调度器LB时,调度器根据连接调度算法从一组真实服务器中选出一台服务器,
  将报文的目的地址VIP改写成选定的服务器的地址RIP1,请求报文的目标端口改写成选定服务器的相应端口(RS提供的服务端口),最后将修改后的报文
  发送给选出的服务器RS1.同时,调度器LB在连接的HASH表中记录这个连接,当这个连接的下一个报文到达时,从连接的hash表中可以得到原选定服务器
  的地址和端口,进行同样的改写操作,并将报文传给原选定的服务器RS1.当来自真实服务器RS1的响应报文返回调度器时 ,调度器将返回报文的源地址和
  源端口改写成VIP和相应的端口,然后调度器再把报文发给请求的用户。
  TUN隧道模式:
  采用NAT技术时 由于请求和响应的报文都必须经过调度器地址重写 当客户端请求越来越多时 调度器的处理能力将成为瓶颈 为了解决这个问题
  调度器把请求报文通过IP隧道(IPIP/ipsec)转发到真实服务器 而真实服务器将响应直接返回给客户端 这样调度器只处理请求的入站报文 由于一般网络服务
  应答数据比请求报文大很多 采用VS/TUN技术后,集群系统的最大吞吐量可以提供10倍。
  VS/TUN的工作流程:它的连接调度和管理与VS/NAT中的一样 只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,
  将请求报文封装在另一个IP报文中 再将封装后的IP报文转发给选出的真实服务器 服务器收到报文后 先将报文解封获得原来目标地址为VIP的报文 服务器发现VIP
  地址被配置在本地的IP隧道设备上 所以就处理这个请求 然后根据路由表将响应报文直接返回给客户端。
  总结:
  1 负载均衡器通过把请求的报文通过IP隧道的方式,把请求的报文不经过原目的地址的改写,而是直接封装成另外的IP报文转发到真实服务器,
  而真实服务器将响应处理后的报文直接返回给客户端用户,因此,最后RS又一个外网IP,这样效率才会更高
  2 由于调度器LB只处理入站请求报文。因此集群系统的吞吐量可以提高很多,但是隧道模式也会带来一定的开销 Tun模式适合LAN/WAN
  3 LAN环境不如DR模式效率高 有的系统还要考虑IP隧道的支持问题 另外 还需绑定VIP 配置复杂。
  4 LAN 多采用DR WAN环境可以用TUN模式 但是在WAN环境更多的被DNS+haproxy/nginx等代理取代 因此 tun模式在国内公司实际应用很少。
  DR模式-直接路由模式
  Virtual Server via Direct Routing(VS/DR)
  VS/DR模式是通过改写请求报文的目标Mac地址 将请求发给真实服务器的 而真实服务器将响应后的处理结果直接返回给客户端用户。
  同VS/TUN技术一样 VS/DR技术可以极大地提高集群系统的伸缩性。而且,这种DR模式没有IP隧道的开销,对集群中的真实服务器也没有
  必须支持IP隧道协议的要求 但是要求调度器LB与真实服务器RS都有一块网卡连在同一物理网段上,即必须在同一局域网环境下。
  DR模式总结:
  1 通过在调度器LB上修改数据包的目的Mac地址实现转发 注意,源地址仍然是CIP目的地址仍然是VIP地址。
  2 请求的报文经过调度器而RS响应处理后的报文无需经过调度器LB 因此 访问量大时使用效果特别好(和NAT相比)
  3 因此DR模式是通过Mac地址的改写机制实现的转发 因此 所有RS节点和调度器LB只能在一个LAN中。
  4 需要注意RS节点的VIP的绑定(lo:vip,lo1:vip)和ARP抑制的问题
  5 强调下:RS节点的默认网关不需要是调度器LB的DIP,而直接是IDC机房分配的上级路由器的IP(RS带有外网地址的情况下)
  6 由于DR模式的调度器仅进行了目的Mac地址的改写 因此 调度器LB无法改变请求的报文的目的端口(和NAT要区别)
  7 当前 调度器LB支持几乎所有的Unix Linux系统 但目前不支持Windows系统。真实服务器RS节点可以是Windows系统
  8 总之DR模式效率很高 但是配置也较麻烦 因此 访问量不是特别大的公司可以用haproxy/nginx取代之 这符合运维的原则:简单 易用 高效
  日2000WPV以下都可以考虑用haproxy/nginx
  9 直接对外的访问业务 如web服务做RS节点 最后用公网IP地址 不直接对外的业务 如MySQL 存储系统RS节点 最好用内部IP地址
  LVS调度算法:
  LVS的调度算法决定了如何在集群节点之间分布工作负荷。
  当Director调度器收到来自客户端计算机访问它的VIP上的集群服务的入站请求时,Director调度器必须决定哪个集群节点应该处理请求。
  Director调度器可用于做出该决定的调度方法分成两个基本类别:
  固定调度方法:rr wrr dh sh
  动态调度算法:wlc lc lblc lblcr sed nq(后两种官方站点没有,但是make过程可以看到rr wrr lc wlc lblc lblcr dh sh sed nq)
  rr:轮循调度(Round-Robin),它将请求依次分配给不同的RS节点 也就是在RS中均摊请求。这种算法简单 但是只适合于RS处理性能相差不大的情况
  wrr:加权轮循调度(weighted Round-Robin)它将依据不同RS节点的权值分配任务 权值较高的RS将优先获得任务 并且分配到的连接数将比权值较低的
  RS节点更多。相同权值的RS节点得到相同数目的连接数
  wlc:加权最小连接数调度(weighted least-connection) 假设各台的权值依次为Wi(I=1..n),当前的TCP连接数依次为Ti(I=1..n),依次选取Ti/Wi为最小的RS
  作为下一个分配的RS。
  ....
  LVS的调度算法的生产环境选型
  1 一般的网络服务 如http mail mysql等 常用的LVS调度算法为
  a 基本轮叫调度rr算法
  b 加权最小连接调度wlc
  c 加权轮叫调度wrr算法
  2 基于局部性的最少链接LBLC和带复制的基于局部性最少链接LBLCR主要适用于Web Cache和DB Cache集群
  3 源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中 它们可以保证整个系统的唯一出入口。
  4 最短预期延时调度SED和不排队调度NQ主要是对处理时间相对比较成的网络服务
  实际使用中 这些算法的适合范围不限于这些 我们最好参考内核中的连接调度算法是实现原理 根据具体的业务需求合理的选项。
  安装LVS
  下载IPvsadm[root@Backup tools]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz [root@Backup tools]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
  查看ip_vs的内核模块
  [root@Backup tools]# lsmod|grep ip_vs
  查看系统相关信息[root@Backup tools]# uname -rm 2.6.18-406.el5 x86_64 [root@Backup tools]# cat /etc/redhat-release CentOS release 5.11 (Final) [root@Backup tools]#
  做内核软链接
  提示:如果没有/usr/src/kernels/2.6.18-406.e15-x86_64,是因为缺少kernel-devel-2.6.18.406.e15软件包
  可以通过yum install kernel-devel -y 安装
  软链接也可以不做 在编译时指定内核参数即可[root@Backup tools]# ln -s /usr/src/kernels/2.6.18-406.el5-x86_64 /usr/src/linux #此处的内核以uname -rm为主 [root@Backup tools]# ll /usr/src/ total 24 drwxr-xr-x 2 root root 4096 May 11 2011 debug drwxr-xr-x 4 root root 4096 Sep 7 08:08 kernels lrwxrwxrwx 1 root root 38 Feb 29 11:08 linux -> /usr/src/kernels/2.6.18-406.el5-x86_64 drwxr-xr-x 7 root root 4096 Dec 10 2014 redhat [root@Backup tools]#
  安装LVS命令tar zxf ipvsadm-1.24.tar.gz cd ipvsadm-1.24 make make install lsmod grep ip_vs [root@Backup tools]# ls ipvsadm-1.24.tar.gz ipvsadm-1.24.tar.gz [root@Backup tools]# tar vxf ipvsadm-1.24.tar.gz ipvsadm-1.24/config_stream.c ipvsadm-1.24/config_stream.h ... [root@Backup tools]# cd ipvsadm-1.24 [root@Backup ipvsadm-1.24]# ls config_stream.c debian ipvsadm.8 ipvsadm-restore.8 ipvsadm.sh libipvs SCHEDULERS config_stream.h dynamic_array.c ipvsadm.c ipvsadm-save ipvsadm.spec Makefile TAGS contrib dynamic_array.h ipvsadm-restore ipvsadm-save.8 ipvsadm.spec.in README VERSION [root@Backup ipvsadm-1.24]# [root@Backup ipvsadm-1.24]# make make -C libipvs make[1]: Entering directory `/home/tools/ipvsadm-1.24/libipvs" gcc -Wall -Wunused -Wstrict-prototypes -g -O2 -I/usr/src/linux/include -DHAVE_NET_IP_VS_H -c -o libipvs.o libipvs.c ar rv libipvs.a libipvs.o ar: creating libipvs.a a - libipvs.o make[1]: Leaving directory `/home/tools/ipvsadm-1.24/libipvs" gcc -Wall -Wunused -Wstrict-prototypes -g -O2 -I/usr/src/linux/include -I.. -I. -DVERSION="1.24" -DSCHEDULERS=""rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq"" -DHAVE_POPT -DHAVE_NET_IP_VS_H -c -o ipvsadm.o ipvsadm.c ipvsadm.c: In function ‘print_largenum’: ipvsadm.c:1564: warning: field width should have type ‘int’, but argument 2 has type ‘size_t’ gcc -Wall -Wunused -Wstrict-prototypes -g -O2 -I/usr/src/linux/include -I.. -I. -DVERSION="1.24" -DSCHEDULERS=""rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq"" -DHAVE_POPT -DHAVE_NET_IP_VS_H -c -o config_stream.o config_stream.c gcc -Wall -Wunused -Wstrict-prototypes -g -O2 -I/usr/src/linux/include -I.. -I. -DVERSION="1.24" -DSCHEDULERS=""rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq"" -DHAVE_POPT -DHAVE_NET_IP_VS_H -c -o dynamic_array.o dynamic_array.c gcc -Wall -Wunused -Wstrict-prototypes -g -O2 -o ipvsadm ipvsadm.o config_stream.o dynamic_array.o libipvs/libipvs.a -L/usr/lib -lpopt /usr/bin/ld: skipping incompatible /usr/lib/libpopt.so when searching for -lpopt /usr/bin/ld: skipping incompatible /usr/lib/libpopt.a when searching for -lpopt /usr/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc /usr/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc [root@Backup ipvsadm-1.24]# make install make -C libipvs make[1]: Entering directory `/home/tools/ipvsadm-1.24/libipvs" make[1]: Nothing to be done for `all". make[1]: Leaving directory `/home/tools/ipvsadm-1.24/libipvs" if [ ! -d /sbin ]; then mkdir -p /sbin; fi install -m 0755 -s ipvsadm /sbin install -m 0755 ipvsadm-save /sbin install -m 0755 ipvsadm-restore /sbin [ -d /usr/man/man8 ] || mkdir -p /usr/man/man8 install -m 0644 ipvsadm.8 /usr/man/man8 install -m 0644 ipvsadm-save.8 /usr/man/man8 install -m 0644 ipvsadm-restore.8 /usr/man/man8 if [ -d /etc/rc.d/init.d ]; then  install -m 0755 ipvsadm.sh /etc/rc.d/init.d/ipvsadm;  fi [root@Backup ipvsadm-1.24]# [root@Backup ipvsadm-1.24]# echo $? 0
  成功啦!
  [root@Backup ipvsadm-1.24]# lsmod|grep ip_vs #此时IPvs模块没有被加载 执行ipvsadm命令就会把ip_vs加载到系统内核或者执行命令modprobe ip_vs也行[root@Backup ipvsadm-1.24]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@Backup ipvsadm-1.24]# lsmod|grep ip_vs ip_vs 122241 0 [root@Backup ipvsadm-1.24]# [root@Backup ipvsadm-1.24]# which ipvsadm /sbin/ipvsadm
  #提示:ipvsadm-1.26.tar.gz使用于kernel 2.6.28及之后的内核版本 不适合5.8环境
  如何符合系统环境后 同样需要先安装依赖包yum install libnl* popt* -y
  手动配置LVS负载均衡服务器
  手工添加LVS转发
  1用户访问:www.nicegirl.com-->VIP 192.168.157.135这个步骤是在DNS配置nicegirl域的DNS记录设置的
  www IN A 192.168.157.135
  如果未自建DNS 需要在DNS管理界面增加类似上面的DNS记录一条(域名提供商)。这里的ip地址一定是外网地址
  才能正式使用
  A132--------->(VIP160)LB(DIP142)------------>RS1(135)
  配置LVS虚拟IP(vip)[root@LVS-1-1 ~]# ifconfig eth0:0 192.168.157.160 netmask 255.255.255.0 up [root@LVS-1-1 ~]# ifconfig eth0 Link encap:Ethernet HWaddr 00:0C:29:04:E8:7F inet addr:192.168.157.142 Bcast:192.168.157.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:859652 errors:0 dropped:0 overruns:0 frame:0 TX packets:159511 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:623949333 (595.0 MiB) TX bytes:19517130 (18.6 MiB) eth0:0 Link encap:Ethernet HWaddr 00:0C:29:04:E8:7F inet addr:192.168.157.160 Bcast:192.168.157.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:117 errors:0 dropped:0 overruns:0 frame:0 TX packets:117 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:6698 (6.5 KiB) TX bytes:6698 (6.5 KiB) [root@LVS-1-1 ~]#
  添加主机路由 也可以不添加[root@LVS-1-1 ~]# route add -host 192.168.157.160 dev eth0 [root@LVS-1-1 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.157.160 0.0.0.0 255.255.255.255 UH 0 0 0 eth0 192.168.157.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 192.168.157.2 0.0.0.0 UG 0 0 0 eth0 [root@LVS-1-1 ~]#
  清空表中的原有记录[root@LVS-1-1 ~]# ipvsadm -C #clear the whole table [root@LVS-1-1 ~]# [root@LVS-1-1 ~]# ipvsadm --set 30 5 60 #设置 --set tcp tcpfin udp超时参数 [root@LVS-1-1 ~]#
  添加虚拟服务[root@LVS-1-1 ~]# ipvsadm -A -t 192.168.157.160:80 -s wrr -p 20 [root@LVS-1-1 ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.157.160:80 wrr persistent 20
  添加real server[root@LVS-1-1 ~]# ipvsadm -a -t 192.168.157.160:80 -r 192.168.157.135:80 -g -w 1 [root@LVS-1-1 ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.157.160:80 wrr persistent 20 -> 192.168.157.135:80 Route 1 0 0 [root@LVS-1-1 ~]# [root@LVS-1-1 ~]# ipvsadm -a -t 192.168.157.160:80 -r 192.168.157.136:9000 -g -w 1 [root@LVS-1-1 ~]# ipvsadm -a -t 192.168.157.160:80 -r 192.168.157.141:80 -g -w 1 [root@LVS-1-1 ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.157.160:80 wrr persistent 20 -> 192.168.157.141:80 Route 1 0 0 -> 192.168.157.136:80 Route 1 0 0 -> 192.168.157.135:80 Route 1 0 0 [root@LVS-1-1 ~]#
  删除测试[root@LVS-1-1 ~]# ipvsadm -d -t 192.168.157.160:80 -r 192.168.157.136:80 [root@LVS-1-1 ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.157.160:80 wrr persistent 20 -> 192.168.157.141:80 Route 1 0 0 -> 192.168.157.135:80 Route 1 0 0 [root@LVS-1-1 ~]#
  RS 端绑定VIP 抑制ARP
  每个集群节点上的回环接口(lo)设备上绑定VIP地址(其广播地址是其本身,子网掩码是4个255
  采取可变长掩码方式把网段划分成只含一个主机地址的目的是避免ip地址冲突) 允许LVS-DR集群中的集群节点接受发向该VIP
  地址的数据包 这会有一个非常严重的问题发生 集群内部的真实服务器将尝试回复来自正在请求VIP客户端的ARP广播 这样所有的真实
  服务器都将声称自己拥有该VIP地址 这时客户端将直接发送请求数据包到真实服务器上 从而破坏了DR集群的方法 因此 必须抑制真实服务器的
  ARP广播。[root@RS1 ~]# ifconfig lo:135 192.168.157.160 netmask 255.255.255.255 up [root@RS1 ~]# route add -host 192.168.157.160 dev lo [root@RS1 ~]# ifconfig eth0 Link encap:Ethernet HWaddr 00:0C:29:18:8F:41 inet addr:192.168.157.135 Bcast:192.168.157.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:549058 errors:0 dropped:0 overruns:0 frame:0 TX packets:341684 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:217735147 (207.6 MiB) TX bytes:426122467 (406.3 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:133 errors:0 dropped:0 overruns:0 frame:0 TX packets:133 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:144841 (141.4 KiB) TX bytes:144841 (141.4 KiB) lo:135 Link encap:Local Loopback inet addr:192.168.157.160 Mask:255.255.255.255 UP LOOPBACK RUNNING MTU:16436 Metric:1 [root@RS1 ~]# [root@RS1 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.157.160 0.0.0.0 255.255.255.255 UH 0 0 0 lo 192.168.157.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 192.168.157.2 0.0.0.0 UG 0 0 0 eth0 [root@RS1 ~]#
  抑制ARP[root@RS1 conf]# pwd /proc/sys/net/ipv4/conf [root@RS1 conf]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore [root@RS1 conf]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce [root@RS1 conf]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore [root@RS1 conf]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce [root@RS1 conf]#
  分别在RS2 RS3上执行相同的操作-->绑定VIP 抑制ARP
  LVS安装小结:
  1 CentOS5.X安装lvs 使用ipvsadm-1.24.tar.gz版本 不用1.26
  2 CentOS6.4安装lvs 使用ipvsadm-1.24.tar.gz版本 并且需要先安装yum install libnl* popt* -y
  3 安装lvs后 要执行IPvsadm把ip_vs模块加载到内核
  4 本地网卡子接口添加VIP,ifconfig eth0:0 vip/24 up
  5 清空原有的VIP转发表 ipvsadm -C #clear the whole table
  6 ipvsadm --set 30 5 60 #设置 --set tcp tcpfin udp超时参数
  7 添加VIP服务 ipvsadm -A -t 192.168.157.160:80 -s wrr -p 20
  8 添加RS ipvsadm -a -t 192.168.157.160:80 -r 192.168.157.135:80 -g -w 1[root@LVS-1-1 ~]# watch --interval=1 ipvsadm -Ln Every 1.0s: ipvsadm -Ln Mon Feb 29 22:34:12 2016 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.157.160:80 wrr persistent 20 -> 192.168.157.140:80 Route 1 0 0 -> 192.168.157.141:80 Route 1 2 0 -> 192.168.157.135:80 Route 1 0 0
  测试LVS服务的转发:
  首先客户端浏览器访问RS成功了,然后访问DR的VIP http://192.168.157.160, 如果经过
  多次测试能分别出现RS135 ,RS140,RS141的不同内容说明配置成功了
  由于有浏览器缓存及LVS会话保持等影响 个人简单的测试切换RS的几率要很多次才行,并且要关闭浏览器
  换不同的客户端ip来测试,效果更明显一些。单机测试是有这种情况的(负载均衡的算法倾向于一个客户端ip定向到一个后端服务器,以保持会话连贯性)
  如果用两三台机器去测试也许就不一样
  ARP抑制参数说明
  arp_ignore-INTEGER
  定义对目标地址为本地IP的ARP询问不同的应答模式
  0 默认值,回应任何网络接口上对任何本地ip地址的ARP查询请求
  1 只回答目标ip地址是来访网络接口本地地址的ARP查询请求
  2 只回答目标ip地址是来访网络接口本地地址的ARP查询请求 且来访ip必须在该网络接口的子网段内
  3 不回应该网络界面的ARP请求 而只对设置的唯一和连接地址做出回应。
  4-7 保留未使用
  8 不回应所有(本地地址)的ARP查询
  arp_announce-INTEGER
  对网络接口上 本地ip地址的发出的,ARP回应,做出相应级别的限制
  确定不同程度的限制 宣布对来自本地源ip地址发出ARP请求的接口
  0 默认 在任意网络接口(eth0 eth1 lo)上的任何本地地址
  1 尽量避免不在该网络接口子网段的本地地址做出ARP回应 当发起ARP请求的源ip地址是被设置应该经由
  路由达到此网络接口的时候很有用 此时会检查来访ip是否为所有接口上的子网段内ip之一。如果该来访ip
  不属于各个网络接口上的子网段内 那么将采用级别2的方式来进行处理
  2 对查询目标使用最适当的本地地址 在此模式下降忽略这ip数据包的源地址并尝试选择与能和该地址通信的本地地址
  首要是选择所有的网络接口的子网中外出访问子网中包含该目标ip地址的本地地址 如果没有合适的地址被发现
  将选择当前的发送网络接口或其它的有可能接受到该ARP回应的网络接口来进行发送 限制了使用本地的VIP
  地址作为优先的网络接口。
  抓包[root@lamp scripts]# tcpdump -i eth1 tcp port 80 -s 1000 #tcpdump -i eth1 tcp port 80 -x -vv -X -s 1000 [root@lamp scripts]# tcpdump -i eth1 tcp port 80 -s 1000 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth1, link-type EN10MB (Ethernet), capture size 1000 bytes 14:27:34.582880 IP 192.168.157.132.63548 > blog.aa.com.http: Flags [S], seq 3948779029, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0 14:27:34.582995 IP blog.aa.com.http > 192.168.157.132.63548: Flags [S.], seq 2127625605, ack 3948779030, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 5], length 0 … VS/NAT ifconfig eth0:29 $vip/24 up route add -host $vip dev eth0 ipvsadm -C ipvsadm --set 30 5 60 ipvsadm -A -t $vip:80 -s wrr -p 20 #-p表示连接的会话保持
  #添加rs
  ipvsadm -a -t $vip:80 -r $rip:80 -m -w 1 #参数m是nat模式的意思
  RS端改网关-->指向DIP
  route add default gw DIP
  LB开启内核转发 net.ipv4.ip_forward = 1 #意思是让Linux系统能像路由器/交换机那样具有转发功能
  vim /etc/sysctl.conf
  net.ipv4.ip_forward = 1
  sysctl -p
  VS/TUN
  LB端添加VIP RS和以上相同 只要把参数m改成i即可
  主要是客户端RS
  RS端执行以下脚本
  -----ipvs_tun.sh----------------#!/bin/sh #description:start realserver VIP=192.168.157.166 . /etc/rc.d/init.d/functions case "$1" in start) /sbin/modprobe ipip #开启隧道支持 /sbin/ifconfig tun10 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev tun10 echo "1" >/proc/sys/net/ipv4/conf/tun10/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/tun10/arp_announce echo "0" >/proc/sys/net/ipv4/conf/tun10/rp_filter echo "1" >/proc/sys/net/ipv4/conf/tun10/forwarding 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) echo "0" >/proc/sys/net/ipv4/conf/tun10/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/tun10/arp_announce echo "1" >/proc/sys/net/ipv4/conf/tun10/rp_filter echo "0" >/proc/sys/net/ipv4/conf/tun10/forwarding echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce /sbin/route del $VIP /sbin/ifconfig tun0 down sysctl -p >/dev/null 2>&1 echo "RealServer Stop OK" ;; *) echo "Usage:$0 {start | stop}" ;; esac exit 0
  调度器上实现对后端集群节点的健康监控
  check_rs.sh
  主备LB的实现及防止裂脑的一些方案
  主备的LB配置相同(auto_install_lvs.sh/ipvs_dr_config.sh)通过在备LB端用check_lb.sh进行监控主LB
  当主出现故障时check_lb.sh执行,然后接管主LB任务,当主LB恢复时,check_lb.sh会调用stop函数清掉VIP,否则会出现裂脑问题
  主LB正常的情况下,备节点如下:
  Every 2.0s: ipvsadm -Ln Thu Mar 3 23:25:39 2016
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  #当主节点异常时:备节点接管任务
  Every 2.0s: ipvsadm -Ln Thu Mar 3 23:29:07 2016
  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  TCP 192.168.157.160:80 wrr persistent 20
  -> 192.168.157.142:80 Route 1 0 0
  -> 192.168.157.140:80 Route 1 0 0
  主节点恢复时,备节点还原
  导致裂脑发生的原因
  1 高可用服务器之间心跳线链路故障 导致无法相互检查心跳
  2 高可用服务器上开启了防火墙 阻挡了心跳检测
  3 高可用服务器上网卡地址等信息配置不正常 导致发送心跳失败
  4 其它服务配置不当等原因 如心跳方式不同 心跳广播冲突 软件BUG等
  防止裂脑的一些方案
  1 加冗余链路
  2 检测到裂脑时 强行关闭心跳检测(远程关闭主节点 控制电源的电路fence)
  3 做好裂脑的监控报警
  4 报警后 备节点在接管时设置比较长的时间去接管 给运维人员足够的时间去处理
  5 启动磁盘锁 正在服务的一方锁住磁盘 裂脑发生时 让对方完全抢不走"共享磁盘资源"
  高可用方案:
  1 heartbeat(负责VIP切换)+LVS+ldirector(ldirector负责RS节点的健康检查)
  复杂 不易控制
  2 piranha方案(利用红帽的Piranha方案实现web负载均衡)
  3 UltraMonkey
  4 heartbeat+mon+code/+ldirectord
  5 keeplived+LVS
  此法简单 易用 高效
  http://www.linuxvirtualserver.org/docs/ha/keepalived.html
  生产案例:LVS集群分发请求RS不均衡,生产环境实战解决
  生产环境中ipvsadm -Ln 发现两台RS的负载不均衡 一台有很多请求,一台没有。
  并且没有请求的那台RS经测试服务正常,lo:VIP也有 但是就是没有请求。
  TCP 172.168.1.50:3307 wrr persistent 10
  ->172.168.1.51:3307 Route 1 0 0
  ->172.168.1.52:3307 Route 1 0 12389
  问题原因:
  persistent 10的原因,persistent会话保持 当clientA访问网站的时候,LVS把请求
  分发给了52,那么以后clientA再点击的其它操作,其它请求,也会发送给52这台机器。
  解决办法:
  到keepalive中注释掉persistent 10 然后/etc/init.d/keepalived reload,然后可以看到
  以后负载均衡两边都请求 都均衡了。
  其它导致负载不均衡的原因可能有:
  1 LVS自身的会话保持参数设置(-p 300,persistent 300)优化:大公司尽量用cookie代替session
  2 LVS调度算法设置,例如rr wrr wlc算法
  3 后端RS节点的会话保持参数 例如 Apache的keepalive参数
  4 访问量较少的情况,不均衡的现象更加明显
  5 请求时间长短 请求资源的多少 大小等
  LVS故障排错理论及实战讲解
  排查的思路是要熟悉LVS的工作原理 然后根据原理过程来排查
  例如:
  1 调度器上LVS调度规则及IP的正确性
  2 RS节点上VIP绑定和抑制的检查
  对绑定的VIP做实时监控 出问题报警或者自动处理后报警
  把绑定的VIP做成配置文件 如/etc/sysconfig/network-scripts/lo:0
  ARP抑制的配置思路
  1 、如果的单个VIP 那么可以用stop传参设置0
  2、 如果rs端有多个VIP绑定,此时,即使是停止VIP绑定也一定不要置0
  3 、RS节点上自身提供服务的检查
  4 、辅助排查工具有tcpdump ping等
  5、三角形排查理论
  用户到LB之间链路通不通
  用户直接到RS端链路通不通
  LB与RS之间链路通不通

苹果是真牛逼文章首发于微信公众号非著名程序员,欢迎大家关注。大家好,我是校长。今天跟大家聊一个有意思的话题。前几天我看到阮一峰老师发布的网络日志,是关于软件订阅制的话题。说句题外话,我个人非常202188APPSTORE苹果IOS限时免费APP关注我每日稳定更新。所有限免APP下载均为免费,若显示收费,不要下载说明限时免费已过。再请注意的是下载的时候认准APP图标logo,不要下错了。11Timer语音定时器(原价128iOS15正式版临近苹果扩大Beta测试范围iOS15正式版离我们越来越近,不出意外的话,它将同步iPhone13系列,在9月中下旬的秋季发布会上登场。日前,苹果向订阅苹果Beta计划但尚未安装iOS15更新的用户发送邮件,ChromeEdge浏览器虚拟键盘将迎来重大更新IT之家8月10日消息外媒WindowsLatest报道,微软和谷歌正在为基于Chromium的浏览器(如Chrome浏览器和Edge浏览器)开发一个名为虚拟键盘(VirtualK腾讯看中的加密艺术收藏品,是风口还是泡沫?NFT的热潮能持续多久?巨头腾讯又悄悄杀入了一条新赛道。近日,腾讯旗下幻核APP正式上线,号称国内首个NFT交易平台,首期限量发售300枚有声十三邀数字艺术收藏品NFT。不久前,腾emui刷成miui有可能吗,华为太难用了?那高配置的手机,刷低端机的系统,也只有小米粉干的出来应该不可能,华为系统比其他系统更稳定,没那么多花里胡哨的功能,以稳定商务著称。华为难用?那世界上就没有好用的智能机了。楼主换老人iPhoneXR分辨率真的很差吗?为什么?不用怀疑,而是真的很低。XR作为X的替代版,在OLED屏可能会烧屏刺眼耗电的缺点下,苹果公司特意为用户贴心准备了一块6。1英寸,分辨率为1792X828像素的LCD屏。6。1寸分辨怎么看待红米note10对比note9的倒退行为?红米Note9有2款产品,一款是Note94G,还有一款是Note95G,其中Note94G采用骁龙662处理器,6。53英寸1080P分辨率LCD水滴屏幕,屏幕不支持高刷新率,前为什么有人宁愿花高价买荣耀V40,却不愿意买配置更高的红米?红米,电子垃圾带这种节奏有用吗?看看国内外销量再来说这个话题?小米销量世界前三了,荣耀销量世界排名充其量可能称为其他不要拿这种低级的话题带节奏了,能提出这种问题的人,必定脑残荣耀和比亚迪新能源车突破百万辆背后中国品牌借东风突破来源中国经济网郭跃5月19日,比亚迪成为继丰田和特斯拉之后,全球第三家新能源汽车销量突破百万辆规模的企业。比亚迪能够取得这一成绩,离不开其对新能源的前瞻布局,以及对技术研发孜孜不倦微软终于开始真正的大规模推送Win10V1809版更新发布于去年秋季的Windows10Version1809版因存在删除用户文件的严重问题而被微软撤回并重新开发修正。接着微软花费数月时间完成初个修复版本又邀请部分用户进行测试,然后才
日本研究揭示促进雄鼠育儿行为的脑部机制新华社北京4月21日电日本理化学研究所一个研究小组近日在美国神经元杂志网络版发表论文说,他们找到了雄鼠开始育儿行为时脑神经回路发生的关键变化,这一发现有望帮助人们理解人类男性的育儿亚马逊发力印度,收购GlowRoad,推动社交电商亚马逊亚马逊可能正试图在西方国家挑战Shopify,但在印度,它正准备探索社交电商。一位直接熟悉此事的消息人士告诉TechCrunch,亚马逊印度已经收购了社交电商初创公司Glow干货Linux的ulimit的用法,解决java报错ToomanyopenfilesToomanyopenfiles是Java常见的异常,通常是由于系统配置或程序打开过多文件导致。这个问题常常又与ulimit的使用相关。关于ulimit的用法有不少坑,本文将遇到的保护扎克伯格花费2680万美元?韩媒曝光硅谷CEO警卫费韩国朝鲜日报网站近日报道称,在美国硅谷的大型科技企业中,首席执行官们(CEO)的作用是绝对的。他们既要为企业的成长负责,还要出席美国议会的听证会等活动,以及应对政府的限制规定。为此静电放电发生器的基本规则静电放电发生器的基本规则人体模型(HBM)人体静电是引起火炸药和电火工品发生意外爆炸的最主要和最经常的因素,因此国内外对电火工品的防静电危害规则都是以防人体静电为主,并建立了人体模攸信在全国统一大市场中能起到什么作用?1。uMOM制造运营系统全面赋能,驱动智造体系升级uMOM系统是厦门攸信技术自主研发的一套面向制造业执行层的生产信息化运营管理系统。为企业提供包括制造数据管理仓库管理质量管理生产追烧光100亿,没量产出一台车,已被吊销营业执照一辆车都还没有卖出去,这款新能源车就倒下了5月17日,绿驰汽车科技集团有限公司被上海市青浦区市场监督管理局吊销营业执照,原因是公司成立后无正当理由超过六个月未开业或者开业后自行停业不愧是国产一哥!曾让苹果三星甘居其后,如今再次跃居榜单前十进入2022年之后,全球手机市场可谓是竞争激烈,外有苹果三星不断预热新机,其中iPhone14的各种消息从未间断,内有国产手机厂商们纷纷推出自研芯片提高竞争力,只为争得更多的手机市注意!亚马逊或将禁售此类商品近日,亚马逊英国站宣布,根据英政府颁布的新进攻性武器法,购买刀具(包括厨房刀具)需进行年龄验证。规定将于5月19日起,亚马逊英国站将不再允许自配送卖家销售年龄限制的刀具。如果卖家想从延期入职到解约赔偿等待小鹏汽车的60天摘要个体的命运,是行业现状的映射文郭宇编辑赵成小鹏汽车(NYSEXPEV9868。HK)被曝解约20余名应届生,手机弹窗出现这条消息时,毛亮还住在离小鹏汽车广州总部附近的城中村出租华为p50pro值得入手吗,不用再纠结了,大V说的有道理大家好,近日有网友询问5G时代已来临,4G华为p50pro值得入手吗?对于这个问题,小官思考再三,决定写一篇关于华为p50pro评测与大家分享。华为P50pro(一)酷酷的外观让你