LVS详解
介绍
LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。
1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs (linux模块),是真正生效实现调度的代码。
2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)。
一、LVS
1.1、lvs相关术语
- DS:Director Server。指的是前端负载均衡器节点
- RS:Real Server。后端真实的工作服务器
- VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址
- DIP:Director Server IP,主要用于和内部主机通讯的IP地址
- RIP:Real Server IP,后端服务器的IP地址
- CIP:Client IP,访问客户端的IP地址
1.2、四种工作模式
- dr: 直接路由模式
- tun:隧道模式
- nat:路由转发模式
- fullnat模式
性能比较:DR>TUN>NAT>FULLNAT
1.3、工作模式原理
https://www.cnblogs.com/liwei0526vip/p/6370103.html
https://www.cnblogs.com/lipengxiang2009/p/7349271.html
1.4、负载均衡十种算法
(1). 轮循调度 rr 均等地对待每一台服务器,不管服务器上的实际连接数和系统负载 (2). 加权轮调 wrr 调度器可以自动问询真实服务器的负载情况,并动态调整权值 (3). 最少链接 lc 动态地将网络请求调度到已建立的连接数最少的服务器上 如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡 (4). 加权最少链接 wlc 调度器可以自动问询真实服务器的负载情况,并动态调整权值 带权重的谁不干活就给谁分配,机器配置好的权重高 (5). 基于局部性的最少连接调度算法 lblc 这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器 (6). 复杂的基于局部性最少的连接算法 lblcr 记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。 (7). 目标地址散列调度算法 dh 该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。 (8). 源地址散列调度算法 sh 与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。 (9). 最少期望延迟 sed 不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙 (10). 永不排队 nq 无需队列,如果有realserver的连接数为0就直接分配过去
二、Ipvsadm
ipvsadm是LVS管理工具。
2.1、安装
yum install ipvsadm -y # linux内核2.4以上
2.2、ipvsadm命令
https://www.cnblogs.com/lipengxiang2009/p/7353373.html
http://blog.chinaunix.net/uid-29792372-id-5792103.html
https://www.cnblogs.com/MacoLee/p/5856858.html
2.2.1、参数选项
-A --add-service | 添加一条新的虚拟服务 |
-E --edit-service | 编辑虚拟服务 |
-D --delete-service | 删除虚拟服务 |
-C --clear | 清除所有的虚拟服务规则 |
-R --restore | 恢复虚拟服务规则 |
-a --add-server | 在一个虚拟服务中添加一个新的真实服务器 |
-e --edit-server | 编辑某个真实服务器 |
-d --delete-server | 删除某个真实服务器 |
-L | -l --list | 显示内核中的虚拟服务规则 |
-n --numeric | 以数字形式显示IP端口 |
-c --connection | 显示ipvs中目前存在的连接,也可以用于分析调度情况 |
-Z --zero | 将转发消息的统计清零 |
-p --persistent | 配置持久化时间 |
--set tcp tcpfin udp | 配置三个超时时间(tcp/tcpfin/udp) |
-t | -u | TCP/UDP协议的虚拟服务 |
-g --gatewaying | LVS模式为:DR |
-m --masquerading | LVS模式为: NAT |
-i --ipip | LVS模式为:TUN |
-w | 配置真实服务器的权重 |
-s | 配置负载均衡算法,如:rr, wrr, lc等. 默认为wlc |
--timeout | 显示配置的tcp/tcpfin/udp超时时间 |
--stats | 显示历史转发消息统计(累加值) |
--rate | 显示转发速率信息(瞬时值) |
2.2.1、常用命令
1. 管理虚拟服务 添加一个虚拟服务192.168.1.100:80,使用轮询算法 ipvsadm -A -t 192.168.1.100:80 -s rr 修改虚拟服务的算法为加权轮询 ipvsadm -E -t 192.168.1.100:80 -s wrr 删除虚拟服务 ipvsadm -D -t 192.168.1.100:80
2. 管理真实服务 添加一个真实服务器192.168.1.123,使用DR模式,权重2 ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 2 修改真实服务器的权重 ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 5 删除真实服务器 ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.123
3. 查看统计 查看当前配置的虚拟服务和各个RS的权重 ipvsadm -Ln 查看当前ipvs模块中记录的连接(可用于观察转发情况) ipvsadm -lnc 查看ipvs模块的转发情况统计 ipvsadm -Ln --stats | --rate 另外,--stats和--rate统计在分析问题时经常用到,输出各项的含义: --stat选项是统计自该条转发规则生效以来的包 1. Conns (connections scheduled) 已经转发过的连接数 2. InPkts (incoming packets) 入包个数 3. OutPkts (outgoing packets) 出包个数 4. InBytes (incoming bytes) 入流量(字节) 5. OutBytes (outgoing bytes) 出流量(字节) ------------------------------------------------------------------- --rate选项是显示速率信息 1. CPS (current connection rate) 每秒连接数 2. InPPS (current in packet rate) 每秒的入包个数 3. OutPPS (current out packet rate) 每秒的出包个数 4. InBPS (current in byte rate) 每秒入流量(字节) 5. OutBPS (current out byte rate) 每秒入流量(字节) 4. 保存规则 保存规则 service ipvsadm save 备份规则 ipvsadm --save > /tmp/ipvs.bak 还原规则 ipvsadm --restore < /tmp/ipvs.bak
.