lvs的学习

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lvs的学习相关的知识,希望对你有一定的参考价值。

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=Active
256+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:输出速率数据
[[email protected] /]# 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

以上是关于lvs的学习的主要内容,如果未能解决你的问题,请参考以下文章

python 机器学习有用的代码片段

lvs学习笔记

Linux学习系列之lvs+keepalived

学习 PyQt5。在我的代码片段中找不到错误 [关闭]

学习笔记:python3,代码片段(2017)

web相关学习