阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

LVS原理介绍

553次阅读
没有评论

共计 5871 个字符,预计需要花费 15 分钟才能阅读完成。

LVS 是什么?

LVS,全程 Linux Virtual Server,是国人章文嵩发起的一个开源项目。
在社区具有很大的热度,是一个基于四层、具有强大性能的反向代理服务器。
早期使用 lvs 需要修改内核才能使用,但是由于性能优异,现在已经被收入内核。

LVS 通过工作于内核的 ipvs 模块来实现功能,其主要工作于 netfilter 的 INPUT 链上。
而用户需要对 ipvs 进行操作配置则需要使用 ipvsadm 这个工具。
ipvsadm 主要用于设置 lvs 模型、调度方式以及指定后端主机。

LVS 中的角色

LVS 的一些相关术语

LVS 的模型中有两个角色:
调度器:Director,又称为 Dispatcher,Balancer
调度器主要用于接受用户请求。
真实主机:Real Server,简称为 RS。
用于真正处理用户的请求。

而为了更好地理解,我们将所在角色的 IP 地址分为以下三种:
Director Virtual IP:调度器用于与客户端通信的 IP 地址,简称为 VIP
Director IP: 调度器用于与 RealServer 通信的 IP 地址,简称为 DIP。
Real Server : 后端主机的用于与调度器通信的 IP 地址,简称为 RIP。

基本模型

LVS 的三种调度模式

LVS-NATNetwork Address Transform

示意图和调度步骤

LVS-NAT
原理:

基于 ip 伪装 MASQUERADES,原理是多目标 DNAT。
所以请求和响应都经由 Director 调度器。

LVS-NAT 的优点与缺点
优点:
  • 支持端口映射
  • RS 可以使用任意操作系统
  • 节省公有 IP 地址。
    RIP 和 DIP 都应该使用同一网段私有地址,而且 RS 的网关要指向 DIP。
    使用 nat 另外一个好处就是后端的主机相对比较安全。
缺点:
  • 请求和响应报文都要经过 Director 转发; 极高负载时,Director 可能成为系统瓶颈。
    就是效率低的意思。

LVS-TUNIP Tuneling

示意图和调度步骤

LVS-TUN
原理:

基于隧道封装技术。在 IP 报文的外面再包一层 IP 报文。
当 Director 接收到请求的时候,选举出调度的 RealServer
当接受到从 Director 而来的请求时,RealServer 则会使用 lo 接口上的 VIP 直接响应 CIP。
这样 CIP 请求 VIP 的资源,收到的也是 VIP 响应。

LVS-TUN 的优点与缺点
优点:
  • RIP,VIP,DIP 都应该使用公网地址,且 RS 网关不指向 DIP;
    只接受进站请求,解决了 LVS-NAT 时的问题,减少负载。
    请求报文经由 Director 调度,但是响应报文不需经由 Director。
缺点:
  • 不指向 Director 所以不支持端口映射。
  • RS 的 OS 必须支持隧道功能。
  • 隧道技术会额外花费性能,增大开销。

LVS-DRDirect Routing

示意图和调度步骤

LVS-DR
原理

当 Director 接收到请求之后,通过调度方法选举出 RealServer。
讲目标地址的 MAC 地址改为 RealServer 的 MAC 地址。
RealServer 接受到转发而来的请求,发现目标地址是 VIP。RealServer 配置在 lo 接口上。
处理请求之后则使用 lo 接口上的 VIP 响应 CIP。

LVS-DR 的优点与缺点
优点:
  • RIP 可以使用私有地址,也可以使用公网地址。
    只要求 DIP 和 RIP 的地址在同一个网段内。
  • 请求报文经由 Director 调度,但是响应报文不经由 Director。
  • RS 可以使用大多数 OS
缺点:
  • 不支持端口映射。
  • 不能跨局域网。
总结:

三种模型虽然各有利弊,但是由于追求性能和便捷,DR 是目前用得最多的 LVS 模型。

LVS 的八种调度方法

静态方法: 仅依据算法本身进行轮询调度
  • RR:Round Robin, 轮调
    一个接一个,自上而下
  • WRR:Weighted RR,加权论调
    加权,手动让能者多劳。
  • SH:SourceIP Hash
    来自同一个 IP 地址的请求都将调度到同一个 RealServer
  • DH:Destination Hash
    不管 IP,请求特定的东西,都定义到同一个 RS 上。
动态方法: 根据算法及 RS 的当前负载状态进行调度
  • LC:least connections(最小链接数)
    链接最少,也就是 Overhead 最小就调度给谁。
    假如都一样,就根据配置的 RS 自上而下调度。

  • WLC:Weighted Least Connection (加权最小连接数)
    这个是 LVS 的默认算法。

  • SED:Shortest Expection Delay(最小期望延迟)
    WLC 算法的改进。

  • NQ:Never Queue
    SED 算法的改进。

  • LBLC:Locality-Based Least-Connection, 基于局部的的 LC 算法
    正向代理缓存机制。访问缓存服务器,调高缓存的命中率。
    和传统 DH 算法比较,考虑缓存服务器负载。可以看做是 DH+LC

    如果有两个缓存服务器
    1. 只要调度到其中的一个缓存服务器,那缓存服务器内就会记录下来。下一次访问同一个资源的时候也就是这个服务器了。(DH)                
    2. 有一个用户从来没有访问过这两个缓存服务器,那就分配到负载较小的服务器。`LC`

LBLCR:Locality-Based Least-Connection with Replication(带复制的 lblc 算法)
缓存服务器中的缓存可以互相复制。
因为即使没有,也能立即从另外一个服务器内复制一份,并且均衡负载

man ipvsadm 有讲这几种动态或者静态的 rs 调度方法

配置 LVS-DR

主机名 主机地址 角色
node1 DIP:192.168.2.201,VIP:192.168.2.211 Director
node3 RIP:192.168.2.203,VIP:192.168.2.211 RealServer
node4 RIP:192.168.2.204,VIP:192.168.2.211 RealServer

本文中的主机系统均为 CentOS7.1,Apache2.4,数据库:MariaDB-5.5.50

实验拓扑:

lvs-dr 实验拓扑

(1)在 Director 上配置 VIP 和 DIP

  [root@bc ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
    TYPE=Ethernet
    BOOTPROTO="static"
    DEFROUTE=yes
    PEERDNS=yes
    PEERROUTES=yes
    NAME=eno16777736
    DEVICE=eno16777736
    ONBOOT=yes
    IPADDR="192.168.2.201"
    NETMASK="255.255.255.0"
    DNS1="192.168.2.1"
    GATEWAY="192.168.2.1"

[root@bc ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736:0
    TYPE=Ethernet
    BOOTPROTO="static"
    NAME=eno16777736:0
    ONBOOT=yes
    IPADDR="192.168.2.211"
    NETMASK="255.255.255.0"
    DNS1="192.168.2.1"
    GATEWAY="192.168.2.1"
    ONPARENT=yes

重启网络之后查看配置

[root@bc ~]# service NetworkManager stop
  Redirecting to /bin/systemctl stop  NetworkManager.service
[root@bc ~]# service network restart
  Restarting network (via systemctl):                        [OK]
[root@bc ~]# ifconfig
  eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.201  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::250:56ff:fe3c:d757  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:3c:d7:57  txqueuelen 1000  (Ethernet)
        RX packets 88853  bytes 14843664 (14.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 79195  bytes 6551143 (6.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

  eno16777736:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.211  netmask 255.255.255.0  broadcast 192.168.2.255
        ether 00:50:56:3c:d7:57  txqueuelen 1000  (Ethernet)

  lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 12998  bytes 1140269 (1.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12998  bytes 1140269 (1.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

(2)Director 使用 ipvsadm 修改创建 ipvs 规则

[root@bc ~]# ipvsadm -A -t 192.168.2.211:80 -s rr
[root@bc ~]# ipvsadm -a -t 192.168.2.211:80 -r 192.168.2.203 -g
[root@bc ~]# ipvsadm -a -t 192.168.2.211:80 -r 192.168.2.204 -g
[root@bc ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.211:80 rr
  -> 192.168.2.203:80             Route   1      0          0         
  -> 192.168.2.204:80             Route   1      0          0

(3)RealServer 安装 httpd

[root@node3 ~]# yum install httpd -y
[root@node4 ~]# yum install httpd -y

可以在里面放一个 Wordpress, 也可以简单 echo 几个字到 index.html
(4)node3 和 node4 修改 RealServer 内核参数

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0 192.168.2.211/32 broadcast 192.168.2.211 up
route add -host 192.168.2.211 dev lo:0

修改内核参数,并且配置 VIP 地址到 RealServer 的 loopback 接口上。
那样的话,当 RealServer 接到从 Director 转发而来的数据报文时,RealServer 也不会丢弃报文。
同时,修改了 RealServer 的参数,局域网内的 arp 表就只有 Director 有 VIP。
RealServer 的的机器上有 VIP 这件事,只有 RealServer 自己知道。
这样可以保证,当请求到来的时候,第一个会送到 Director 那里去。

(5)测试结果

[root@node3 httpd]# vim  /var/log/httpd/access_log 
[root@node4 httpd]# vim  /var/log/httpd/access_log

效果差不多就是这样:
因为我们使用了 RR 静态调度方法, 所以这 node3 和 node4 的请求是一人一个。

Flash

一些关于 Keepalived 相关教程集合

CentOS 7 下 Keepalived + HAProxy 搭建配置详解  http://www.linuxidc.com/Linux/2017-03/141593.htm

Keepalived 高可用集群应用场景与配置 http://www.linuxidc.com/Linux/2017-03/141866.htm

Nginx+Keepalived 实现站点高可用  http://www.linuxidc.com/Linux/2016-12/137883.htm

Nginx+Keepalived 实现站点高可用(负载均衡)  http://www.linuxidc.com/Linux/2016-12/138221.htm

构建高可用集群 Keepalived+Haproxy 负载均衡 http://www.linuxidc.com/Linux/2016-12/138917.htm

Keepalived 高可用 LVS  http://www.linuxidc.com/Linux/2017-03/142235.htm

CentOS6.5 下 Keepalived 高可用服务单实例配置 http://www.linuxidc.com/Linux/2016-12/138110.htm

Keepalived 安装与配置 http://www.linuxidc.com/Linux/2017-02/140421.htm

Linux 下 Keepalived 服务安装文档  http://www.linuxidc.com/Linux/2017-03/141441.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147597.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5871字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7976482
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...