zoukankan      html  css  js  c++  java
  • lvs: linux virtual server

    lvs: linux virtual server linux虚拟服务的缩写,通过一台调度服务器来调度收到的请求并分发给后端的real server,实现负载均衡集

    群的作用

    常见的调度算法
     静态:
      RR:round robin 轮询,逐个调度

      WRR: weighted round robin 加权轮询,按照事先设置好的比例前提下的轮询

      DH: destination hashing 目标地址哈希,对目标地址做hash,将对同一个资源的访问都指向同一台服务器

      SH: source hashing 源地址哈希,对源地址做hash,将同一个来源ip的请求都发送到同一台服务器上,实现session绑定
     动态:
      LC: least connected 最小连接 inactive+active*256

      WLC: weighted least connected 加权最少连接 (inactive+active*256)/weight

      SED: shortest expected delay 最短期望延迟 (active+1)*256/weight

      NQ: never queue 永不排队,第一次按照SED的算法来计算,之后的按照(inactive+active*256+1)*weight来计算

    三种模型:
     NAT:通过将请求报文的目标地址和目标端口修改为挑选出某RS的RIP和PORT来实现

      (1) RIP和DIP应该使用私网地址,RS(real server)的网关应该指向DIP

      (2) 请求和响应报文都要经过DIRECTOR转发,极高负载的场景中,DIRECTOR可能会成为性能瓶颈

      (3) 支持端口映射

      (4) DIRECTOR必须为linux,RS可以是任意的OS

      (5) RS的RIP与DIRECTOR的DIP必须在同一IP网络,DIRECTOR必须有两块网卡,地址分别为VIP和DIP

    NAT的示意图

     

     

    lvs-dr: derect routing
    通过修改请求报文的MAC地址进行转发,IP首部不会发生变化(因此不支持端口映射),在整个过程中源IP始终是CIP(client ip),目标地

    址始终为VIP(virtual ip),VIP就是接受用户请求的公网地址

      (1) 确保前端路由器将目标IP为VIP的请求报文一定会发送给Director

        解决方法:修改各RS的内核参数,并把VIP配置在特定的接口上实现禁止其响应

      (2) 在这种模型当中RS直接响应客户,而不需要经过Director,因此RS返回给客户端的源地址必须是客户端请求的VIP地址

      (3) RS的RIP可以使用私有地址,也可以使用公网地址

      (4) RS和Director必须是在同一物理网段中,因为调度是通过MAC地址进行转发的,director只需要一块网卡

      (5) RS可以使用大多数的OS(因为前面提到了要修改内核参数)

    DR的示意图:

      

     

     一般用的是DR模型,还有两种模型此处不做介绍了

     

    ipvs的集群服务:

      四层交换(四层路由)

      支持tcp,udp,sctp,ah,esp,ah_esp

      (1) 一个ipvs主机可以同时定义多个cluster service

      (2) 一个ipvs服务至少应该有一个RS

      ipvsadm/ipvs ipvs在内核中,ipvsadm可以在命令行中使用

    可以使用grep -i -C 3 "ip_?vs" /boot/config-2.6.32-573.el6.x86_64命令查看内核是否支持ipvscentos567默认都支持

    使用yum -y install ipvsadm命令安装ipvsadm

    ipvsadm -L -n 显示集群服务

    ipvsadm命令的用法,可以使用man ipvsadm查看

    管理集群服务:ipvsadm -A|E -t|u|f service-address [-s scheduler]

       ipvsadm -D -t|u|f service-address

      -A:添加

      -E:修改

      -D:删除

      service-address:

      -t, tcp, ip:port

      -u, udp, ip:port

      -f, fwm, MARK

      -s scheduler: 默认为wlc

    管理集群上的RS:

      ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]

      ipvsadm -d -t|u|f service-address -r server-address

      -a: 添加一个RS

      -e: 修改一个RS

      -d: 删除一个RS

      server-address: ip[:port] 端口可省略

      -g: GATEWAY(默认)

      -i: IPIP

      -m: MASQUERADE

    查看:ipvsadm -L

      -n: 数字格式显示地址和端口

      -c: connection 显示ipvs连接

      --stats: 显示统计数据

      --rate: 速率

      --exact: 精确值

    保存和重载:

      保存:ipvsadm -S > /PATH/TO/SOMEFILE或者 ipvsadm-save > /PATH/TO/SOMEFILE

      重载:ipvsadm -R < /PATH/TO/SOMEFILE 或者 ipvsadm-restore < /PATH/TO/SOMEFILE

      清空规则:ipvsadm -C

    计数器清零:ipavsadm -Z [-t|u|f service-address]

     

    配置lvsDR模型,首先将vip配置到Director的网卡别名

    ifconfig eth0:0 192.168.204.100 netmask 255.255.255.255 broadcast 192.168.204.100 up

    上面的掩码必须是那种形式,并且只能广播给自己

    接下来在RS上设置内核参数:

    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

    echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

    只回答目标IP地址是来访网络接口本地地址的ARP查询请求(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那么即使 eth0收到来

    自10.1.1.2这样地址发起的对192.168.0.1

    的查询会回答,而对10.1.1.1 的arp查询不会回应)

    echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

    接下来在RS的lo网卡的的别名上配置192.168.204.100

    ifconfig lo:0 192.168.204.100 netmask 255.255.255.255 broadcast 192.168.204.100 up

    route add -host 192.168.204.100 dev lo:0

    上面的内核参数和lo:0的配置以及添加路由需要在每台RS上执行

     

  • 相关阅读:
    非洲出现新蓝海,他们抓住机遇将产品加工反向送入国内市场
    npm ERR! code ERR_STREAM_WRITE_AFTER_END
    程序默认不自动重连oracle
    一份超详细的MySQL高性能优化实战总结
    佩奇送福利:Eygle系列书籍免费下载
    解决waiting for target deviceto come online的做法
    Android真机运行闪退问题
    他是如何将小店铺打造成餐饮品牌的?
    用两张图告诉你,为什么你的App会卡顿?
    用两张图告诉你,为什么你的App会卡顿?
  • 原文地址:https://www.cnblogs.com/linuxboke/p/5661708.html
Copyright © 2011-2022 走看看