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

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之间链路通不通

C语言程序设计一填空题(每空1分,共10分)1。C语言的数据类型中,构造类型包括数组和。2。在C程序中,指针变量能够赋值或值。3。C目标程序经后生成扩展名为exe的可执行程序文件。4。设有定义语华为和比亚迪双剑合璧?打造高端品牌汽车,售价最低50万起步强强联合总是能引起市场的关注,华为作为科技界的大拿,一举一动可谓是备受关注而比亚迪作为国产汽车的引导者之一,旗下的新能源汽车深受消费者的喜欢,目前成为销售量最多的国产新能源汽车。而SpringBoot整合Shiro实现用户认证添加依赖!shiro与spring整合依赖dependencygroupIdorg。apache。shirogroupIdshirospringartifactIdversion1耳机竟能测体温?荣耀推出一款可以检测体温的蓝牙耳机荣耀推出了一款可以检测体温的Earbuds3Pro真无线入耳式蓝牙耳机,在好奇心的驱动下赶紧入手了一副。耳机打磨得非常光滑,给人精致闪亮的感觉。钛银色的充电仓是磨砂材质,手感很舒服荣耀70系列入网!比亚迪代工,顶配天玑9000100W快充根据爆料,荣耀70系列暂定6月份发布,全系共计三款手机主打高颜值线下女性市场,目前已经通过工信部和3C入网认证,参数全部曝光。资料显示,荣耀70标准版和Pro版支持66W快充,分别简单汇童泽恒科技场景优势构建驱动产业金融的澎湃引擎文记者周小渔来源贸易金融杂志2022年4月刊访简单汇信息科技(广州)有限公司董事长童泽恒供应链票据创新对票据市场具有里程碑意义,不仅揭开了新一代票据业务系统的序幕,也将成为完善我国迎全国科技工作者日中国科协向海内外科技工作者征集主题视频中新网北京5月12日电(记者孙自法)在今年5月30日的第六个全国科技工作者日即将到来之际,中国科协会同科技部,面向海内外全体科技工作者公开征集创新争先自立自强主题视频,参与征集的优是啥让网友直呼罗永浩太水?这一切要从那条视频说起CNMO新闻相信关注科技圈的各位或多或少都听说过罗永浩,罗永浩先后创办过老罗英语培训学校牛博网锤子科技,但他的创业之路却屡屡受挫,并且欠下6亿元巨款。2020年3月26日,罗永浩正视频会议神器来了!AI技术让你素颜睡衣秒变正装出镜CNMO新闻被疫情影响整日居家办公的你,是否有想过使用一款App,让你穿着睡衣满头凌乱进行视频会议时,在别人眼中依旧是一身正装正经工作的样子呢?日本东京的人工智能(AI)开发企业EICP极光围绕中心计算理念构建面向未来演进的多维度技术核心从简单的出行工具到能够自主移动,智能感知,交互的第三生活空间,汽车作为下一代智能终端,承载了用户更高的应用需求和期望,其智能化水平是竞争优势的重要组成部分。有业内人士指出,未来高性针对上期,我再聊聊iPhone的几个功能1电影模式(cinematicmode)(仅限13系列)(假装是个电影拍摄师呲牙)这是电影效果的拍摄界面,真心不错2重力按压键盘空格键,来移动光标这个功能的好处是可以快速地编辑文本
新精铺跨境下的铺货模式和精品模式跨境电商铺货模式和精品模式区别在于精品运营的模式盈利更高,需要一定的运营技巧和经验,而无货源铺货没有过多的要求,不需要囤货,只要采集商品,编辑商品信息,修改产品图片,上传店铺中就可教育机构大裁员,也要多听听他们的困难呼声双减政策之下,各类教育机构的裁员仍在继续。字节教育旗下瓜瓜龙清北网校学浪硬件校园合作等多个业务都开启了裁员,11月将有近两千人被裁撤。字节上一次集中裁员在8月,儿童启蒙教学业务瓜瓜大力教育学浪是一个怎样的平台?学浪是大力教育旗下的综合学习平台,覆盖抖音今日头条西瓜视频等多平台海量优质用户,为知识传播者提供线上招生课程交付用户运营等一站式解决方案,字节教育致力于以全面生态助力知识传播者高效怎样找靠谱的兼职平台?1。蚂蚁微客是一个领先开放多样化的共享经济平台,基于用户的位置信用以及大数据分析的智能算法,将人和任务的进行一个智能匹配。简单说就是帮支付宝做线上或者线下的推广及调研工作的兼职平台全球首款开源的堡垒机JumpServer开源精选是我们分享GithubGitee等开源社区中优质项目的栏目,包括技术学习实用与各种有趣的内容。本期推荐的JumpServer是全球首款开源的堡垒机,使用GPLv3开源协议,财商快报薇娅偷逃税被罚13。41亿元李佳琦罗永浩回应称经营正常字节跳动跃升全球独角兽榜首2021全球独角兽榜字节跳动2。25万亿估值跃升榜首大家好今天是12月21日,星期二来看看有哪些大事儿值得闽商们关注财经1已有上千人主动自查补缴税款在规范网络直播行业税收秩序过程中面积达75平方米的超大超白玻璃下线金晶科技全员科技创新结硕果金融界12月21日消息世界面积最大的单片超大超白玻璃日前在金晶科技(600586。SH)生产下线,这片玻璃达八层楼高,面积高达75平米。据介绍,从生产工艺角度来讲,玻璃越大,缺陷概手机弄丢了别慌,做好这几步可以避免里面的钱被刷!值得收藏手机操作史那么多年,相信大家或是自己身边的人都经历过弄丢手机的时候。以前手机丢了,基本价值就在于丢了一部手机和一张电话卡,但在今天,你丢了一台手机,相当于丢了你从内到外的人。比如图中国人每天都在用的微信,为什么外国人却不用?微信是具有完全知识产权的中国技术,外国人要用是需要授权的,不是外国人想用就用的事。目前,微信在中国广泛普及,是国民最喜欢最便捷的聊天工具和支付手段,它的实用性和先进性,走在了世界前我想开一家美团外卖店,不做堂食,有什么好的建议吗?我是一名我们当地美团头部商家,做煲仔饭,一天240260单,营业额40005000,做的美团专场扣点20,做免配活动无补贴大概占平均菜品价格的20!光这两项等同于抽点40我店里面就华为培训又建成一个大型培训基地落户贵安12月20日,华为云计算技术有限公司贵安园区开园暨华为全球培训中心开业典礼在贵安新区举行。历时5年,位于华为云贵安园区内的华为云贵安数据中心已建成商用,定位为华为云最大的云数据中心