LVS负载均衡

Cluster概念

就是集群

在这里插入图片描述


LB

负载均衡集群

在这里插入图片描述


HA

高可用集群

高可用两个调度器,Down掉一个,另一个还可以用


HA集群实现方法

避免调度器单点失败

  • keepaliverd:vrrp协议
    • LVS天生一对,是非常优秀的解决LVS单点失败的解决方案
  • ais:应用接口规范----已淘汰
    • heartbeat
    • cman+rgmanager(RHCS)
    • coresync_pacemaker

HPC

高性能集群


Cluster–基于软件/硬件分类

在这里插入图片描述


Cluster—基于工作的协议层次划分

在这里插入图片描述


负载均衡中的会话保持

  • Session绑定
    • Source IP(源地址)-----不均衡
    • Cookie------同Cookie被调到同一服务器
  • session replication:每台服务器拥有全部session
    • session multicast cluster–会话多播集群-----服务器资源占用较多
  • session server:专门的session服务器(推荐)
    • Memcached,Redis—需要主从服务器,防止session服务器宕机

LVS简介

LVS:Linux Virtual Server,负载调度器,集成在Linux内核中。

发明人:阿里 章文嵩


LVS工作原理

VS(负载均衡器)根据请求报文的目标IP目标协议目的地端口将其调度转发至某RS(后端真实服务器),根据调度算法来挑选RS(后端真实服务器)


访问流程

CIP(客户端IP)<—>VIP(VS外网IP)==DIP(VS内网IP)<—>RIP(后端服务器内网IP)


LVS集群类型中的术语:

  • VS:Virtual Server / Director Server(DS)
    • Dispatcher(调度器),Load Balancer(负载均衡器)
  • RS:Real Server(真实服务器)/upstream server(ngnix里叫:上游服务器)
    • backend server(haproxy里叫:后端服务器)
  • CIP:Client IP(客户端IP)
  • VIP:Virtual Server IP VS外网的IP
  • DIP:Director IP VS(调度器)连接内网的IP
  • RIP:Real Server IP 真实服务器的内网IP
  • L4: 四层路由器或交换机

VIP

LVS调度器

我们通常访问的大型系统的IP地址,解析域名后得到的IP地址,不是真正工作的服务器IP,而是LVS(调度器)IP,叫做VIP
LVS(调度器)决定访问哪个工作的服务器IP(real server,检查RIP)


LVS负载均衡算法

算法名称简短解释
rr轮询算法(Round-Robin)按顺序轮流分配请求到服务器池中的每一台服务器。
wrr加权轮询算法在轮询的基础上根据服务器的权重进行分配,权重高的服务器会接收更多请求。
lc最少连接算法(Least Connection)根据每个服务器当前的连接数来决定请求分配,选择连接数最少的服务器。
wlc加权最少连接算法默认的调度算法,结合了服务器的权重和当前连接数进行分配。
lblc基于局部最少连接算法适用于后端服务器分布在不同地理位置的场景
lblcr基于局部最少连接(带复制)算法lblc
的基础上,增加了对后端服务器状态的复制。
dh目标地址哈希算法(Destination Hashing)根据请求的目的 IP 地址哈希值分发请求。
sh源地址哈希算法(Source Hashing)根据客户端的源 IP 地址哈希值分发请求。
sed最短期望延迟算法(Shortest Expected Delay)根据后端服务器的连接数和响应时间进行分发。
nq从不排队算法(Never Queue)直接将请求分发到后端服务器,不进行排队。

LVS的工作模式

ipvsadm/ipvs 是命令行工具,需要安装

  • LVS:ipvsadm/ipvs
    • ipvsadm: 用户空间的命令行工具,规则管理器
      • 用于管理集群服务RealServer(真实服务器)
    • ipvs:工作于内核空间netfilterINPUT钩子上的架构

LVS三种工作模式原理、以及优缺点比较:

模式名称原理优点缺点
NAT模式(VS-NAT)修改请求报文的目标IP,多目标IP的DNAT。 负载均衡器接收客户端请求,修改目标IP地址后转发给后端服务器,后端服务器的响应通过负载均衡器返回给客户端。+ 配置简单 + 隐藏真实服务器IP,增加安全性- 所有流量必须经过负载均衡器,可能成为性能瓶颈 - 适用于小规模集群
直接路由模式(VS-DR)修改ARP映射,操纵封装新的MAC地址。 负载均衡器修改请求报文的目标MAC地址为后端服务器的MAC地址,后端服务器直接响应客户端,绕过负载均衡器。- 高性能,减少负载均衡器的负担 - 适合大流量场景- 网络配置复杂 - 要求负载均衡器和后端服务器在同一物理网络
IP隧道模式(VS-TUN)以隧道协议重新封装包, 在原请求IP报文 之外新增一个IP首部。 利用IP隧道技术将请求封装转发给后端服务器,后端服务器解封装后处理请求,响应直接返回客户端。- 适用于跨网络负载均衡 - 后端服务器可以位于不同物理网络- 需要隧道支持,网络配置复杂 - 增加了网络管理的复杂性
FULLNAT模式修改请求报文的目标IP。 对请求进行四次NAT转换,后端服务器可以不在同一VLAN下。- 后端服务器可以使用私有地址 - 支持端口映射- 性能较低 - RS无法获取客户端真实IP - 适用于需要端口映射的场景
- linux内核默认不支持这种模式

Centos7安装LVS

ipvsadm项目地址:http://www.linuxvirtualserver.org/

安装用于k8s的docker–配置ipvs

官方doc-IPVS 代理模式

在这里插入图片描述

https://www.cnblogs.com/Yuanbangchen/p/16533293.html

# 安装ipvs功能
yum install -y ipset ipvsadm

LVS相关文件

文件解释
/usr/sbin/ipvsadmLVS主程序
/usr/sbin/ipvsadm-save规则保存工具
/usr/sbin/ipvsadm-restore规则重载工具
/etc/sysconfig/ipvsadm-config配置文件
/etc/sysconfig/ipvsadmipvs调度规则文件

内核问题

Linux kernel 4.19版本已经将nf_conntrack_ipv4 更新为nf_conntrack
而 kube-proxy 1.13 以下版本,强依赖 nf_conntrack_ipv4

解决方式:
1、降级内核到 4.18


加载IPVS模块

模块名称简短解释
overlay联合文件系统模块,用于将多个目录的内容合并到一个挂载点,常用于容器技术。
br_netfilter桥接网络的 netfilter 模块,允许 netfilter 在桥接层工作,用于虚拟化环境中的流量过滤。
nf_conntracknetfilter 的连接跟踪模块,用于跟踪网络连接的状态(新建、已建立、关闭等)。
ip_conntrackIPv4 的连接跟踪模块,专门用于跟踪 IPv4 网络连接。
nf_conntrack_ipv4IPv4 的 netfilter 连接跟踪模块,支持 IPv4 流量的连接跟踪。
ip_vsIP 虚拟服务器模块,用于负载均衡,支持多种调度算法。
ip_vs_rrIPVS 的轮询(Round Robin)调度算法模块。
ip_vs_wrrIPVS 的加权轮询(Weighted Round Robin)调度算法模块。
ip_vs_shIPVS 的基于源的哈希(Source Hashing)调度算法模块。
ip_vs_lcIPVS 的最少连接(Least Connections)调度算法模块。
ip_vs_lblcIPVS 的基于局部最少连接(Locality-Based Least Connections)调度算法模块。
ip_vs_lblcrIPVS 的基于局部最少连接(带复制)调度算法模块。
ip_vs_dhIPVS 的基于目的的哈希(Destination Hashing)调度算法模块。
ip_vs_foIPVS 的故障转移(Failover)调度算法模块。
ip_vs_nqIPVS 的无队列(No Queueing)调度算法模块。
ip_vs_sedIPVS 的最短期望延迟(Shortest Expected Delay)调度算法模块。
ip_vs_ftpIPVS 的 FTP 协议支持模块,用于对 FTP 数据连接的负载均衡。
ip_tablesIPv4 的 netfilter 表模块,用于配置 IPv4 的防火墙规则。
ip_setnetfilter 的集合模块,允许创建和管理 IP 地址、端口等的集合。
ipt_setiptables 的集合匹配模块,允许在 iptables 规则中使用 ip_set定义的集合。
ipt_rpfilter反向路径过滤模块,用于防止 IP 欺骗。
ipt_REJECTiptables 的拒绝目标模块,用于拒绝不符合规则的流量。
ipipIP-in-IP 隧道模块,用于在 IP 网络上传输 IP 数据包。
xt_set扩展的集合匹配模块,支持更复杂的集合匹配规则。
# 在os启动时加载内核模块
cat <<EOF | tee /etc/modules-load.d/lvs.conf
br_netfilter
ip_conntrack
## 在 Linux内核4.19及以上,nf_conntrack_ipv4模块已经被nf_conntrack替换
nf_conntrack_ipv4
nf_conntrack
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
ip_vs_lc
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_tables
ip_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
xt_set
EOF

重启查看内核模块是否生效.

# 查看对应模块是否加载
lsmod | grep -e ip_vs -e nf_conntrack

LVS常用参数

https://www.cnblogs.com/xiangsikai/p/8865890.html
https://www.linuxcool.com/ipvsadm

-L|-l list the table
-n 地址和端口以数字输出
-C 清除所有的虚拟服务规则
-A 添加一个虚拟服务
-E 修改虚拟服务器
-D 删除虚拟服务
-t 指定tcp协议
-u 指定udp协议
-s 指定调度算法,rr轮询算法
-a 在一个虚拟服务中添加一个新的RS(真实服务器)
-r RS(真实服务器)IP地址
-g 指定LVS 的工作模式为直接路由模式
-w RS(真实服务器)权重值
-e 编辑某个RS(真实服务器)


ipvsadm常用命令

ipvsadm核心功能:

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

管理虚拟服务 (Virtual Service)

管理参数字母都是大写

# 添加一个新的虚拟服务 (Virtual Service)
ipvsadm -A

# 删除一个指定的虚拟服务 (及其下所有真实服务器)
ipvsadm -D

# 清空整个 IPVS 规则表 (删除所有服务和服务器)
ipvsadm -C

# 重载
## 从标准输入 (stdin) 恢复 IPVS 规则
ipvsadm -R

# 将当前 IPVS 规则保存到标准输出 (stdout), 可选 -n 以数字格式输出
ipvsadm -S -[-n]

管理虚拟服务 (Virtual Service)的RS规则

管理RS的参数都是小写

# 添加一条虚拟服务(VS)或真实服务器(RS)规则
ipvsadm -a

# 删除一条虚拟服务(VS)或真实服务器(RS)规则
ipvsadm -d

# 列出当前的 IPVS 规则表
ipvsadm -L

# 清零所有规则的包、字节和连接计数器
ipvsadm -Z

查看lvs配置规则

# 查看配置 
## -L|-l  list the table
## -n  地址和端口以数字输出
ipvsadm -ln

清空所有配置

# 清空所有配置
## -C 清除所有的虚拟服务规则
ipvsadm -C

管理虚拟服务(listener)

常用负载均衡算法
在这里插入图片描述


添加一个虚拟服务(listener),使用轮询算法(rr):

# 添加一个虚拟服务(listener),使用轮询算法
## -A 添加一个虚拟服务
## -t 指定tcp协议 
## -u 指定udp协议
## -s 指定调度算法,rr是轮询算法
ipvsadm -A -t 192.168.11.60:80 -s rr

## IPV6要用方括号扩起来
## sed 最小延迟
ipvsadm -A -t [2001:250:4000:2000::50]:888 -s sed

修改虚拟服务(listener)的算法为加权轮询(wrr):

## -E 修改
## -t 指定tcp协议
## -s 指定调度算法,wrr是加权轮询算法
ipvsadm -E -t 192.168.11.60:80 -s wrr

查看虚拟服务列表

# 先查看有哪些虚拟服务列表
## -L|-l  list the table
## -n  地址和端口以数字输出
ipvsadm -nL

在这里插入图片描述


删除一个虚拟服务(listener)

# 删除一个虚拟服务(listener)
## -D 删除虚拟服务
## -t 指定tcp协议
ipvsadm -D -t 192.168.11.60:80

RS(后端服务器)管理


添加RS(真实服务器)-NAT模式

在一个虚拟服务中添加一个新的RS(真实服务器)

## -a 在一个虚拟服务中添加一个新的RS(真实服务器)
## -t 指定tcp协议
## -u 指定UDP协议
## -r 后端服务器IP
## -m masquerading (NAT模式)
## -w 权重值
ipvsadm -a -u 10.187.71.3:8000 -r 10.187.71.5:8000 -m -w 100

在这里插入图片描述


添加RS(真实服务器)-DR模式

DR模式内核配置:https://www.cnblogs.com/klb561/p/9215704.html

## -a 在一个虚拟服务中添加一个新的RS(真实服务器)
## -t 指定tcp协议 
## -u 指定udp协议
## -r 指定真实的服务器地址
## -g 指定LVS 的工作模式为直接路由模式
## -w 真实服务器的权值
ipvsadm -a -u 10.187.71.3:8000 -r 10.187.71.5:8000 -g -w 100

在这里插入图片描述


修改RS(真实服务器)

## -e 编辑某个真实服务器
## -t 指定tcp协议 
## -r 真实的服务器地址
## -g 指定LVS 的工作模式为直接路由模式
## -w 真实服务器的权值
ipvsadm -e -t 10.187.71.3:8000 -r 10.187.71.5:8000 -g -w 10

删除RS(真实服务器)

## -d 删除某个真实服务器
## -t 指定tcp协议
## -u 指定udp协议
## -r 真实的服务器地址
ipvsadm -d -u 10.187.71.3:8000 -r 10.187.71.5:8000

在这里插入图片描述


保存规则

lvs默认路径在/etc/sysconfig/ipvsadm文件中

# 1.保存规则到/etc/sysconfig/ipvsadm文件中
ipvsadm -S > /etc/sysconfig/ipvsadm
ipvsadm-save > /etc/sysconfig/ipvsadm

# 启动ipvsadm服务会自动保存规则
## 规则默认保存到/etc/sysconfig/ipvsadm文件中
systemctl enable --now ipvsadm

在这里插入图片描述

# 将规则导入到ipvsadm中-从/etc/sysconfig/ipvsadm文件中
ipvsadm -R < /etc/sysconfig/ipvsadm
ipvsadm-restore < /etc/sysconfig/ipvsadm

在这里插入图片描述


iptables/netfilter:

  • iptables
    • 用户空间的管理工具
  • netfilter
    • 内核空间上的架构
  • 流入
    • PREROUTING–>INPUT
  • 流出
    • OUTPUT–>POSTROUTING
  • 转发
    • PREROUTING–>FORWARD–>POSTROUTING
  • DNAT
    • 目标地址转换;PERROUTING
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值