YY-LIN 发表于 2019-1-3 11:12:06

lvs集群基础及lvs

  集群基础知识点:

  集群类型:LB、HA、HP、DS

  LB:load balance,负载均衡集群,director:负载均衡器或者调度器,上游服务(upstream server),后端服务器称为real server;
  HA:high avalilability,高可用集群,评估高可用性能Availability = 平均无故障时间/(平均无故障时间+平均修复时间)
  HP:high performance 超级计算机类型
  LB集群的实现:硬件、软件(lvs: Linux Virtual Server、haproxy、nginx、ats (apache traffic server)、perlbal、
         基于工作的协议层次划分:
  传输层:(工作于内核)可以突破socket 可用端口的限制一共6W多个;lvs, haproxy (mode tcp)
  应用层:(用户空间):haproxy (mode http), nginx, ats, perlbal
  lvs的实现基于传输层:类型有四种nat、dr(direct routing)、tun、fullnat

  lvs-nat:多目标的DNAT:通过将请求报文的目标地址和目标端口修改为挑选出某RS的RIP和PORT来实现;
  (1) RIP和DIP应该使用私网地址,RS的网络应该指向DIP;
  (2) 请求和响应报文都要经由director转发;极高负载的场景中,Director可能会成为系统瓶颈;
  (3) 支持端口映射;
  (4) VS必须为Linux,RS可以是任意的OS;
  (5) RS的RIP与Director的DIP必须在同一IP网络;
  lvs-dr:direct routing通过修改请求报文的MAC地址进行转发;IP首部不会发生变化(源IP为CIP,目标IP始终为VIP);
  (1) 确保前端路由器将目标IP为VIP的请求报文一定会发送给Director;
  解决方案:
  静态绑定;在路由器上静态绑定VIP和director的Mac地址,禁止RS响应VIP的ARP请求;
      (a) arptables;
      (b) 修改各RS的内核参数,并把VIP配置在特定的接口上实现禁止其响应;
  (2) RS的RIP可以使用私有地址,也可以使用公网地址;
  (3) RS跟Director必须在同一物理网络中;
  (4) 请求报文必须由Director调度,但响应报文必须不能经由Director;
  (5) 不支持端口映射;
  (6) 各RS可以使用大多数的OS;
  lvs-tun:ip tunneling,ip隧道;转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原有的IP首部这外再次封装一个IP首部(源IP为DIP,目标IP为RIP);
  
  (1) RIP,DIP,VIP全得是公网地址;
  (2) RS的网关不能也不可能指向DIP;
  (3) 请求报文经由Director调度,但响应报文将直接发给CIP;
  (4) 不支持端口映射;
  (5) RS的OS必须支持IP隧道功能;
  lvs-fullnat:(非标准模型)通过同时修改请求报文的源IP地址(cip-->dip)和目标IP地址(vip --> rip)实现转发;
  (1) VIP是公网地址;RIP和DIP是私网地址,且可以不在同一IP网络中,但需要通过路由互相通信;
  (2) RS收到的请求报文的源IP为DIP,因此其响应报文将发送给DIP;
  (3) 请求报文和响应报文都必须经由director;
  (4) 支持端口映射;
  (5) RS可使用任意OS;
  集群服务管理命令:需要检查内核是否支持ipvs:grep -A 11 -i 'IPVS' /boot/config-3.10.0-327.el7.x86_64
  安装服务程序:yum install -y ipvsadm
  ipvsadm命令的用法: (大写用于服务,小写用于RS)
  管理集群服务命令:
  ipvsadm-A|E-t|u|fservice-address[-s scheduler][-p ]
  ipvsadm-D-t|u|f service-address
  -A:添加
  -E:修改
  -D:删除
  service-address:
  -t, tcp, vip:port
  -u, udp, vip:port
  -f, fwm, MARKFirewalls mask
  -s scheduler:默认为wlc;加权最少连接
  管理real server命令:
  ipvsadm -a|e-t|u|f service-address -r server-address [-g|i|m] [-w weight]
  ipvsadm -d -t|u|f service-address -r server-address
  -a:添加一个RS
  -e:修改一个RS修改属性,修改IP地址要先删除再添加
  -d:删除一个RS
  -r server-address:RS地址 rip[:port]
  -g:GATEWAY (默认) dr模型
  -i: IPIP             tun隧道模型
  -m: MASQUERADE       nat模型
  查看命令:
  ipvsadm -L|l
  -n:numeric,数字格式显示地址和端口,名称解析
  -c:connection,显示ipvs连接;
  --stats:统计数据;
  --rate:速率
  --exact:精确值
  清空规则:ipvsadm-C
  规则保存和重载:
  保存:ipvsadm -S> /PATH/TO/SOME_RULE_FILE
  ipvsadm-save> /PATH/TO/SOME_RULE_FILE
  若重启生效:保存至默认路径/etc/sysconfig/ipvsadm
  ipvsadm-save > /etc/sysconfig/ipvsadm
  开机生效:systemctl enable ipvsadm
  重载:ipvsadm-R < /PATH/FROM/SOME_RULE_FILE
           ipvsadm-restore < /PATH/FROM/SOME_RULE_FILE
  lvs-nat
  实验环境:centos7x86虚拟机
  nat模型
http://s1.运维网.com/images/20180624/1529823124475368.png
  搭建环境配置
  1、director核心转发功能设置,打开核心转发功能:两个网卡间,若永久有效编辑配置文件
  vim /etc/sysctl.d/*conf 添加net.iPv4.ip_forward=1
  确保RS网关指向director内网地址(内网基于host-only通信),测试是否能通信:
http://s1.运维网.com/images/20180624/1529821542830547.png
http://s1.运维网.com/images/20180624/1529819922387452.png
  2、配置RSweb服务启动
http://s1.运维网.com/images/20180624/1529820215757482.png
  3、director请求服务是否正常
http://s1.运维网.com/images/20180624/1529821312513603.png
  4、director添加集群服务规则
http://s1.运维网.com/images/20180624/1529821993168516.png
  5、lvs集群实现调度的效果
http://s1.运维网.com/images/20180624/1529822406947562.png
  总结要点:
  1.DIP与RIP要在同一网段,RIP网关指向dip
  2.支持端口映射
  3.是否用到共享存储取决于业务要求:
  lvs-dr
  在各主机director,RS均需要配置VIP,因此,要解决地址冲突问题,目标是让各个RS上的VIP不可见,

  仅用接收目标地址为VIP报文,同时又可以作为响应报文的源地址;
  方案:1.在前端的网关接口上静态绑定
            2.在RS上使用arptables
            3.在各RS上修改内核参数,来限制arp响应和通告;
  限制响应级别:arp_ignore
         0:使用本地任意接口上配置地址进行响应;
         1:仅在请求的目标IP配置在本地主机的接入报文的接口上时,才给予响应;
  限制通告级别:arp_announce
  0:默认,把本机所有接口向每一个接口通告;
  1:尽量避免向本网络通告
  2:总是避免;
  模型:
http://s1.运维网.com/images/20180625/1529897992836499.png
  调整网络director、rs在同一网络192.168.1,配置IP、vip
  配置director添加vip方法:
  1.IP addr add命令实现
http://s1.运维网.com/images/20180624/1529829062986179.png
  2.ifconfig interface:alias ip netmask方法:
http://s1.运维网.com/images/20180624/1529829365221529.png
  3.rs-vip配置并设置内核参数
http://s1.运维网.com/images/20180624/1529831895322538.png
http://s1.运维网.com/images/20180624/1529832612178240.png

  4.给director添加集群服务规则
http://s1.运维网.com/images/20180624/1529833079690011.png
  5.通过本地访问服务:
http://s1.运维网.com/images/20180625/1529897716537054.png
http://s1.运维网.com/images/20180625/1529897775666447.png
  设计要点:
  (1):各主机一个接口即可,但需要在同一网络
  (2):rip的网关不能指向dip;rip和dip通常应该在同一 网段,但二者未必会与VIP在同一网段;
  (3):各rs需先设置内核参数,在设置VIP和路由
  fwm:在netfilter上实现给报文打记;mangle 需要在PREROUTNG链上打标,mangle可用于所有的链上
  ipvsadm -A|E -t|u|f service-address [-s scheduler][-p ]
  -t, -u: service-address
  ip:port
  -f: service-address
  firewall mark $
  基于fwm定义集群服务的步骤:

  (1) 打标
  # iptables -t mangle -A PREROUTING -d $vip -p $protocol --dport $serviceport -j MARK --set-mark #
  mangle:
  target: MARK
  --set-mark value16进制整数
  可以实现多个端口标记:-m multiport
  (2) 定义集群服务
  # ipvsadm -A -f # [-s scheduler] [-p ] 默认300s
  (3) 定义real server
  lvs persistence:持久连接
  功能:无论ipvs使用何种scheduler,其都能够实现在指定时间范围内始终将来自同一个ip地址的请求发往同一个RS;此功能是通过lvs持久连接模板实现,其与调度方法无关;
  ipvs持久连接的模式:
  每端口持久(PPC):per port,一个server可以有多个集群服务指向的端口不一80,8080,只对单个服务集群持久
  每客户端持久(PCC):定义tcp或udp协议的0号端口为集群服务端口;对所有服务进行持久,无论访问任何访问,都是同一台服务主机
  每FWM持久(PFWMC):只对同一防火墙标记进行持久如http, https绑定
  eg:pfwmc   https ca
  iptables -t mangle -A PREROUTING -d 192.168.1.111 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 10
  ipvsadm -A -f 10 -s rr -p
  ipvsadm -a -f 10 -r 192.168.1.201 -g
  ipvsadm -a -f 10 -r 192.168.1.202 -g
  pcc: 没有添加iptables打标记
  ipvsadm -A -t 192.168.1.200:0 -s rr -p
  ipvsadm -a -t 192.168.1.200:0 -r 192.168.1.201 -g -w 1
  ipvsadm -a -t 192.168.1.200:0 -r 192.168.1.202 -g -w 2



页: [1]
查看完整版本: lvs集群基础及lvs