LVS(Linux virual server)

1. lvs

1.1 lvs简介

LVS: Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance )是基于LVS + keepalived实现

1.2 LVS 相关术语

  • VS: Virtual Server,负责调度

  • RS: RealServer,负责真正提供服务

1.3 LVS概念

  • VS:Virtual Server

  • RS: Real Server

  • CIP :Client IP

  • VIP: Virtual serve IP VS外网的IP

  • DIP: Director IP VS内网的IP

  • RIP: Real server IP

  • 访问流程: CIP <--> VIP == DIP <--> RIP

1.4 lvs集群

1.4.1系统性能扩展方式
  • Scale UP:向上扩展,增强 有极限

  • Scale Out:向外扩展,增加设备,调度分配问题, Cluster

1.4.2集群

Cluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统

Cluster常见的三种类型:

  • LB: LoadBalancing (负载均衡)由多个主机组成,每个主机只承担一部分访问 解决访问的压力问题

  • HA: High Availiablity(高可用)解决故障问题 SPOF(single Point Of failure)

    • MTBF : Mean Time Between Failure 平均无故障时间,正常时间

    • MTTR : Mean Time To Restoration( repair)平均恢复前时间,故障时间 故障恢复时间

    • A= MTBF /( MTBF+MTTR) (0,1) :99%, 99.5%, 99.9%, 99.99%, 99.999%值越小故障时间越长

  • SLA:Service level agreement (服务等级协议)是在一定开销下为保障服务的性能和可用性,服务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这种水平的时候,就会有一 些列的惩罚措施,而运维最主要的目标就是达成这种服务水平。

  • 停机时间又分为两种, 一种是计划内停机时间, 一种是计划外停机时间,而运维则主要关注计划外停机时间

  • HPC: High-performance computing (高性能计算,国家战略资源)

1.4.3分布式
  • a+b+c+d 主机A计算a+b 主机B计算c+d 主机C计算主机A+主机B

分布式存储:Ceph ,GlusterFs , FastDFS , MogileFs

分布式计算:hadoop ,Spark

分布式常见应用

  • 分布式应用-服务按照功能拆分,使用微服务

  • 分布式静态资源--静态资源放在不同的存储集群上

  • 分布式数据和存储--使用key-value缓存系统

  • 分布式计算--对特殊业务使用分布式计算,比如Hadoop集群

1.4.4集群和分布式
  • 集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的

  • 分布式: 一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起 来,才是完整的业务

  • 分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率

  • 对于大型网站,访问用户很多,实现一个集群,在前面部署一个负载均衡服务器,后面几台服务器完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点, 都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败

1.4.5 lvs集群类型

lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT

lvs-dr: 操纵封装新的MAC地址 直接路由

lvs-tun: 在原请求IP报文之外新加一个IP首部

lvs-fullnat: 修改请求报文的源和目标IP

1.4.5.1 nat模式
lvs-nat:
  • 本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和 PORT实现转发

  • RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP

  • 请求报文和响应报文都必须经由Director转发, Director易于成为系统瓶颈

  • 支持端口映射,可修改请求报文的目标PORT

  • LVS必须是Linux系统, RS可以是任意OS系统

传输过程:
  1. 客户端向lvs发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口 (9000port)

  2. lvs服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口

  3. RS1响应请求,发送响应数据包,包中的响应报文为数据来源(RIP1)响应目标(CIP)和响应端口 (9000port)

  4. lvs服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)

  5. lvs服务器把修改过报文的响应数据包回传给客户端

  6. lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞

客户请求到达vip后进入prerouting,在没有ipvs的时候该进入本机INPUT,当ipvs存在后访问请求在通 过prerouting后被ipvs结果并作nat转发

因为ipvs的作用点是在prerouting和INPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工作。所以在做lvs时要把iptables的火墙策略全清理掉

1.4.5.2 DR模式

DR: Direct Routing,直接路由, lvs默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

dr模式数逻辑:

在DR模式中, RS接收到访问请求后不需要回传给VS调度器,直接把回传数据发送给client,所以RS和vs 上都要有vip

传输过程:
  1. 客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC

  2. lvs调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端 的MAC+VIP+RS1的MAC

  3. RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的 MAC

特点
  1. Director和各RS都配置有VIP

  2. 确保前端路由器将目标IP为VIP的请求报文发往Director

  3. 在前端网关做静态绑定VIP和Director的MAC地址

  4. RS的RIP可以使用私网地址,也可以是公网地址; RIP与DIP在同一IP网络;

  5. RIP的网关不能指向DIP,以确保响应报文不会经由Director

  6. RS和Director要在同一个物理网络

  7. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client

  8. 不支持端口映射(端口不能修改)

  9. RS可使用大多数OS系统

1.5 lvs调度算法

1.5.1调度算法类型

静态方法:仅根据算法本身进行调度,不考虑RS的负载情况

动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度

1.5.2 lvs静态调度算法
  1. RR: roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐

  2. WRR : Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少

  3. SH :Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往 第一次挑中的RS,从而实现会话绑定

  4. DH: Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请 求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

1.5.3 lvs动态调度算法

主要根据RS当前的负载状态及调度算法进行调度Overhead=value较小的RS会被调度

  1. LC: least connections(最少链接发)

    适用于长连接应用Overhead(负载值) =activeconns(活动链接数) x 256+inactiveconns(非活 动链接数)

  2. WLC:Weighted LC(权重最少链接)

    默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight

  3. SED :Shortest Expection Delay,/初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight

    但是,当node1的权重为1 , node2的权重为10,经过运算前几次的调度都会被node2承接

  4. NQ: Never Queue,第一轮均匀分配,后续SED

  5. LBLC: Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理

  6. LBLCR: LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制 到负载轻的RS

1.6 lvs部署命令介绍

1.6.1 lvs软件相关信息

程序包: ipvsadm

Unit File: ipvsadm.service

主程序:/usr/sbin/ipvsadm

规则保存工具: /usr/sbin/ipvsadm-save

规则重载工具: /usr/sbin/ipvsadm-restore

配置文件: /etc/sysconfig/ipvsadm-config

ipvs调度规则文件: /etc/sysconfig/ipvsadm

1.6.2 ipvsadm命令

核心功能:

  • 集群服务管理:增、删、改

  • 集群服务的RS管理:增、删、改 查看

参数

命令解释
-A|E增加|修改
-D删除
-R重载
-S保存
-ttcp服务
-uudp服务
-s指定调度算法
-p设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver
-ffirewall mask 火墙标记
-a|e添加|更改realserver
-t|utcp|udp协议
-g直连路由模式
-iipip隧道模式
-mnat模式
-w设定权重
-Z清空计数器
-C|-L清空|查看lvs策略
--rate输出速率信息

pvs规则:/proc/net/ip_vs

ipvs连接:/proc/net/ip_vs_conn

2.实战

2.1部署nat模式集群案例

  1. 克隆三台rhel9.4

  1. lvs:双网卡 nat连接外网,仅主机网卡与web服务器相连

  2. web服务器采用仅主机网卡与lvs相连

  3. web服务器网关为192.168.0.100

2.1.1实验环境
主机名ipvip角色
lvs192.168.0.100172.25.254.100调度器(vs)
webserver1192.168.0.10null真实服务器(RS)
webserver2192.168.0.20null真实服务器(RS)
2.1.2配置命令
  1. 在lvs中启用内核路由功能

  2. 安装ipvsadm

    [root@lvs ~]# yum install ipvsadm -y #安装
    [root@lvs ~]# systemctl enable --now ipvsadm  #启用ipvsadm服务
    Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.
  3. 在web服务器上安装并启用httpd服务

    web1:
    [root@webserver1 ~]# dnf install httpd -y 
    [root@webserver1 ~]#systemctl enable --now httpd
    web2:
    [root@webserver2 ~]# dnf install httpd -y
    [root@webserver2 ~]#systemctl enable --now httpd
  4. 在/var/www/html/目录下创建index.html文件,并将字符串“webserver1 - 192.168.0.10”写入

    web1:
    echo webserver1 - 192.168.0.10 > /var/www/html/index.html
    web2:
    echo webserver2 - 192.168.0.20 > /var/www/html/index.html
  5. 在lvs中添加调度策略

    [root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr   #添加虚拟服务172.25.254.100:80 使用轮询
    [root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m #添加真实服务器
    [root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
  6. 测试

    [root@lvs ~]# for i in {1..10}
    > do
    > curl 172.25.254.100
    > done
    webserver2 - 192.168.0.20
    webserver1 - 192.168.0.10
    webserver2 - 192.168.0.20
    webserver1 - 192.168.0.10
    webserver2 - 192.168.0.20
    webserver1 - 192.168.0.10
    webserver2 - 192.168.0.20
    webserver1 - 192.168.0.10
    webserver2 - 192.168.0.20
    webserver1 - 192.168.0.10

2.2部署DR模式集群案例

  1. 克隆两台rhel9.4,命名为client和router

  2. 在client主机中为nat模式网卡

  3. route主机为双网卡,eth0为nat网卡,eth1为仅主机模式网卡

2.2.1实验环境
主机名ipvip角色
lvs仅主机:192.168.0.50192.168.0.200/32调度器
webserver1仅主机:192.168.0.10192.168.0.200/32web服务器1
webserver2仅主机:192.168.0.20192.168.0.200/32web服务器2
clientnat:172.25.254.200null测试主机
routernat:172.25.254.100 仅主机:192.168.0.100null路由器
环境配置

client中为nat模式网卡

[root@client ~]#vmset.sh eth0 172.25.254.200 client.timinglee.org

在router主机中设定双网卡,eth0为nat网卡,eth1为仅主机网卡

对于eth0的设定
[root@router ~]# vmset.sh eth0 172.25.254.100 router.timinglee.org
对于eth1的设定
[root@router ~]# vmset.sh eth1 192.168.0.100 router.timinglee.org

lvs调度器环境配置:

webserver1:  webserver2:

2.2.2解决vip响应问题

DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:

(1)在前端网关做静态绑定

(2)在各RS使用arptables

(3)在各RS修改内核参数,来限制arp响应和通告的级别

限制响应级别:arp_ignore

  • 0:默认值,表示可使用本地任意接口上配置的任意地址进行响应

  • 1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

限制通告级别:arp_announce

  • 0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告

  • 1:尽量避免将接口信息向非直接连接网络进行通告

  • 2:必须避免将接口信息向非本网络进行通告

2.2.3配置详情

要点

  1. 每个Web服务器配置VIP

  2. 每个web服务器可以出外网

配置内容:

在lvs和webserver1,webserver2中设定vip

[root@lvs ~]# ip a a dev lo 192.168.0.200/32
[root@webserver1 ~]# ip a a dev lo 192.168.0.200/32
[root@webserver2 ~]# ip a a dev lo 192.168.0.200/32

 在webserver1和webserver2中解决相应问题

在webserver1中:
[root@webserver1 ~]# ip a a dev lo 192.168.0.200/32
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
在webserver2中:
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

在lvs中配置策略

2.2.4测试

在client中测试:

 

2.3问题解决

2.3.1轮询规则中可能会遇到的错误

以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出 现了一个轮询错乱的问题

当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上

在webserver1 和webserver2 中安装mod_ssl并重启apache
[root@webserver1 ~]# yum install mod_ssl -y
[root@webserver1 ~]# systemctl restart httpd
[root@webserver2 ~]# yum install mod_ssl -y
[root@webserver2 ~]# systemctl restart httpd
在lvs中设置调度,因为要调度80和443两个端口,所以需要两组策略
[root@lvs ~]# ipvsadm -C   #清空策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s rr
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:80 -g
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 rr
  -> 192.168.0.10:80              Route   1      0          0
  -> 192.168.0.20:80              Route   1      0          0
TCP  192.168.0.200:443 rr
  -> 192.168.0.10:443             Route   1      0          0
  -> 192.168.0.20:443             Route   1      0          0
测试问题:
[root@client ~]# curl http://192.168.0.200;curl -k https://192.168.0.200
webserver1 - 192.168.0.10
webserver1 - 192.168.0.10

2.3.2.防火墙标记解决轮询调度问题
在lvs设置端口标签,把80和443当成一个整体
[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6666
设置调度规则
[root@lvs ~]# ipvsadm -A -f 6666 -s rr
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.10 -g
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.20 -g
测试结果:
[root@client ~]# curl -k https://192.168.0.200
webserver2 - 192.168.0.20
[root@client ~]# curl http://192.168.0.200;curl 192.168.0.200
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
[root@client ~]#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值