LVS负载均衡
LVS
调度器
我们通常访问的大型系统的IP地址
,解析域名后得到的IP地址
,不是真正工作的服务器IP
,而是LVS(调度器)
的IP
,叫做VIP
。
由LVS(调度器)
决定访问哪个工作的服务器IP(real server,检查RIP)
。
Cluster概念
就是集群
LB
负载均衡集群
HA
高可用集群
高可用两个调度器,Down掉一个,另一个还可以用
HPC
高性能集群
Cluster–基于软件/硬件分类
Cluster—基于工作的协议层次划分
负载均衡中的会话保持
- Session绑定:
- Source IP(源地址)-----不均衡
- Cookie------同Cookie被调到同一服务器
- session replication:每台服务器拥有全部session
- session multicast cluster–会话多播集群-----服务器资源占用较多
- session server:专门的session服务器(推荐)
- Memcached,Redis—需要主从服务器,防止session服务器宕机
HA集群实现方法
避免调度器单点失败
keepaliverd
:vrrp协议- 和
LVS
天生一对,是非常优秀的解决LVS
单点失败的解决方案
- 和
ais
:应用接口规范----已淘汰
- heartbeat
- cman+rgmanager(RHCS)
- coresync_pacemaker
LVS简介
LVS:Linux Virtual Server,负载调度器,集成在Linux内核中。
发明人:阿里章文嵩
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外网的IPDIP
:Director IP VS(调度器)连接内网的IPRIP
:Real Server IP 真实服务器的内网IPL4
: 四层路由器或交换机
访问流程
CIP(客户端IP)
<—>VIP(VS外网IP)
==DIP(VS内网IP)
<—>RIP(后端服务器内网IP)
LVS工作原理
VS
根据请求报文的目标IP
和目标协议
及目的地端口
将其调度转发
至某RS
,根据调度算法
来挑选RS
LVS负载均衡算法
- rr : 轮询算法
- wrr : 加权轮询算法
- lc : 最少连接
- wlc : 默认的调度算法
- lblc :
- lblcr :
- dh : 目标地址哈希
- sh : 源地址哈希
- sed : 最低延迟
- nq : 从不排队
LVS集群的类型
ipvsadm/ipvs
是命令行工具,需要安装
LVS
:ipvsadm/ipvsipvsadm
: 用户空间的命令行工具,规则管理器- 用于管理
集群服务
及RealServer(真实服务器)
- 用于管理
ipvs
:工作于内核空间netfilter
的INPUT钩子
上的架构
LVS三种工作模式
原理、以及优缺点比较:
- NAT模式(VS-NAT):修改请求报文的
目标IP
,多目标IP的DNAT
- IP隧道模式(VS-TUN) :在
原请求IP报文
之外新增一个IP首部
- 直接路由模式(VS-DR):操纵封装
新的MAC地址
- FullNAT :修改请求报文的
源
和目标IP
Centos7安装LVS
ipvsadm
项目地址:http://www.linuxvirtualserver.org/
https://www.cnblogs.com/Yuanbangchen/p/16533293.html
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
# 配置ipvs功能
yum install -y ipset ipvsadm
内核问题
Linux kernel 4.19
版本已经将nf_conntrack_ipv4
更新为nf_conntrack
,
而 kube-proxy 1.13
以下版本,强依赖 nf_conntrack_ipv4
。
解决方式:
1、降级
内核到 4.18
加载IPVS模块
## 添加需要加载的IPVS模块
cat <<EOF >/etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
## 高版本内核nf_conntrack_ipv4被nf_conntrack替换了
# modprobe -- nf_conntrack_ipv4
modprobe -- nf_conntrack
EOF
执行脚本
## 为脚本添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
## 执行脚本
/bin/bash /etc/sysconfig/modules/ipvs.modules
## 查看对应模块是否加载
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(真实服务器)
查看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
- 目标地址转换;