Cluster 系统扩展的方式 scale up:向上扩展 scale out:向外扩展

集群类型 LB:负载均衡 HA HP

总结: 分层 分割 分布式 分布式应用 分布式静态资源 分布式数据和存储 分布式计算

LB集群的实现 硬件: F5 BIG-IP Citrix NetScaler A10 A10 Array Redware 软件: lvs haproxy nginx ats (apache traffic server) perlbal 基于工作的协议层次划分 传输层: lvs,haproxy(mode tcp)==>模拟成tcp,因为tcp在内核工作 应用层: haproxy,nginx,ats,perlbal

lvs: 章文嵩 lvs:linux virtual server l4:四层交换,四层路由 根据请求报文的目标ip和port将其转发至后端主机集群中的某一台主机(根据挑选算法)

    netfilter:
      PREROUTING ==> INPUT
      PREROUTING ==> FORWARD ==> POSTROUTING
      OUTPUT ==>POSTROUTING

lvs:
  ipvsadm/ipvs
    ipvsadm:用户空间的命令行工具,用于管理集群服务
    ipvs:工作于内核中的netfilter INPUT钩子上
  查看是否开启ipvs:
    grep -i -A 10 "IPVS" /boot/config-3.10.0-693.el7.x86_64
      出现
          # IPVS transport protocol load balancing support
			CONFIG_IP_VS_PROTO_TCP=y
			CONFIG_IP_VS_PROTO_UDP=y
			CONFIG_IP_VS_PROTO_AH_ESP=y
			CONFIG_IP_VS_PROTO_ESP=y
			CONFIG_IP_VS_PROTO_AH=y
			CONFIG_IP_VS_PROTO_SCTP=y
    支持TCP,UDP,AH,EST,AH_EST,SCTP等诸多协议
        Lvs-Type:
	     lvs-nat:MASQUERADE
	     lvs-dr:GATEWAY
	     lvs-tun:IPIP
	     lvs-fullnat

lvs arch: 调度器:director,dispatcher,balancer RS:Real Server

lvs-type(即架构类型)
  lvs-nat
  lvs-d(direct routing)
  lvs-tun(ip tunneling)
  lvs-fullnat


    lvs-nat:
        多目标的DNAT(iptables):它通过修改请求报文的目标ip地址(同时可能修改目标端口)至挑选出的某
        RS的RIP地址来实现转发
          (1)RS和DIP应该使用私有地址,且RS的网关要指向DIP.
          (2)请求和响应报文都要经由director转发,极高负载场景中,director可能会成为系统瓶颈
          (3)支持端口映射
          (4)RS可以使用任意OS
          (5)RS的RIP和Director的DIP必须在同一个ip网络中

    lvs-dr:direct routing
        它通过修改请求报文的目标MAC地址进行转发
         (1)保证前端路由器将目标ip为vip的请求报文发送给director
             解决方案:
                1.静态绑定
                2.arptables
                3.修改RS主机内核的参数
         (2)RS的RIP可以使用私有地址,但也可以使用公网地址
         (3)RS跟director必须在同一物理网络中
         (4)请求报文经由director调度,但响应报文一定不能经由director
         (5)不支持端口映射
         (6)RS可以是大多数的OS
         (7)RS的网关不能指向director的DIP

    lvs-tun:
        不修改请求报文的ip首部,而是通过在原有的ip首部(cip<--->vip)之外,在封装一个ip首部
         (1)RIP,DIP,VIP全得是公网地址
         (2)RS的网关不能指向DIP
         (3)请求报文必须经由director调度,但响应报文必须不能经由director
         (4)不支持端口映射
         (5)RS的OS必须支持隧道功能

    lvs-fullnat:
        director通过同时修改请求报文的目标地址和源地址进行转发
         (1)VIP是公网地址,RIP和DIP是私网地址,二者无须在同一个网络中
         (2)RS接收到的请求报文的源地址为DIP,因此响应给DIP
         (3)请求报文和响应报文都经由director
         (4)支持端口映射机制
         (5)RS的OS可以使用任意OS


    linux内核有个基本法则,响应报文从哪个网卡出去,源地址就是哪个地址

http:stateless session保持 session绑定 source ip hash cookie session集群 session服务器

lvs scheduler 涉及到起点公平和结果公平 静态方法:仅根据算法本身进行调度 RR:round robin,轮询 WRR:weighted rr,加权轮询 SH:source bash,实现session保持,将来自同一个ip的请求始终调度至同一RS DH:destination hash,将对同一个目标的请求始终发往同一个RS 动态方法:根据算法及各RS的当前负载状态进行调度 Overhead= LC:least connection, Overhead=active256+inactive WLC:weighted LC Overhead=Active256+Inactive/weight SED:Shortest Expection Delay Overhead=(Active+1)*256/weight NQ:Never Queue SED算法的改进,永不排队 LBLC:Locality-Based LC,即为动态的DH算法 正向代理情形下的cache server调度 LBLCR:Locality-Based Least Connections with Replication 带复制功能的LBLC算法

ipvs的及其服务: tcp,udp,ah,esp,ah_esp,sctp (1)一个ipvs主机可以同时定义多个cluster service tcp,udp (2)一个cluster service上至少应该一个real server 定义时要指明lvs-type,以及lvs scheduler

ipvsadm的用法 管理集群服务 ipvsadm -A|E -t|u|f service-address [-s scheduler] ipvsadm -D -t|u|f service-address service-address: tcp:-t ip:port udp:-u ip:port fwm: -f mark(标记):是一个数字 -s scheduler: 默认是wrc

管理集群服务中的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 ipvsadm -C server-address: ip[:port] lvs-type:(默认是dr模型) -g:gateway,dr -i:ipip,tun -m:masquerade,nat

清空和查看 ipvsadm -C ipvsadm -L|l [options] -n:numbers,基于数字格式显示地址和端口 -c:显示ipvs连接 --stats:输出统计数据 --rate:输出速率数据 [root@www /]# ipvsadm -L -n --rate IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS -> RemoteAddress:Port TCP 192.168.137.143:80 0 1 1 90 79 -> 192.168.20.10:8080 0 0 0 6 10 -> 192.168.20.20:8080 0 0 0 83 69 PPS:每秒的包个数 BPS:每秒字节数 --excat:精确值

保存和重载 ipvsadm -R ipvsadm -S [-n]

置零计数器 ipvsadm -Z [-t|u|f service-address]

配置lvs-nat 拓扑:三台主机 两台做web服务器,即real server,一台做负载调度器 1.在调度器上做ipvs规则 ipvsadm -A -t 192.168.137.143:80 -s rr 2.在real server的配置 ipvsadm -a -t 192.168.137.143:80 -r 192.168.20.10 -m ipvsadm -a -t 192.168.137.143:80 -r 192.168.20.20 -m

改变调度器:
  ipvsadm -E -t 192.168.137.143:80  -s sh
删除一个集群服务器:
  ipvsadm -d -t 192.168.137.143:80 -r 192.168.20.10:8080
删除集群服务:
  ipvsadm -D -t 192.168.137.143:80