ipvsadm
ipvsadm是一个Linux内核中的IP负载均衡工具,它对应的用户控制程序是ipvsadm。
linux 中的 addlvs
ipvsadm 是IPVS的管理器,需要yum或apt的安装。
LVS相关软件
程序包:ipvsadm Unit File: ipvsadm.service
-
主程序: /usr/sbin/ipvsadm
-
规则保存工具:/usr/sbin/ipvsadm-save
-
规则重载工具: /usr/sbin/ipvsadm-restore
-
配置文件:/etc/sysconfig/ipvsadm-config
-
ipvsadm配置文件路径: /etc/sysconfig/ipvsadm
ipvsadm 命令
- 集群管理服务器
# 添加虚拟服务或者服务器, 需要指定虚拟服务器的协议(TCP or UDP),IP地址和port,以及在那些服务器中进行转发。在真实的服务器上需要先开启IP_forwarding功能
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M net mask][--pe persistence_engine] [-b sched-flags]
# 删除
ipvsadm -D -t|u|f service-address
# 清空
ipvsadm -C
# 重载,相当于 ipvsadm-restore, 该命令用于修改虚拟服务或真实服务器的参数配置。
ipvsadm -R [-t|u] V_ip:port -s scheduler -p Real_ip:port -g real_server_group_name
# 保存 相当于 ipvsadm-save
ipvsadm -S [-n]
管理集群中的RS(负载均衡算法)
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
ipvsadm -d -t|u|f service-address -r server-address
# 列出所有虚拟服务和服务器。可以通过 -n选项来只显示ip而不解析域名 通过 -t 只显示 TCP 的虚拟服务和服务器。
ipvsadm -L [-n] [-t] [-u]
# 清空转发请求计数器
ipvsadm -Z [-t|u|f service-address]
参数
-
-t, --tcp-service service-address: 指定虚拟服务为tcp服务。service-address要是host[:port]的形式。端口是0表示任意端口。如果需要将端口设置为0,还需要加上-p选项(持久连接)。
-
-u , --udp-service service-address: UDP协议的服务器
-
-f, --fwmark-service integer: 用firewall mark取代虚拟地址来指定要被负载均衡的数据包,可以通过这个命令实现把不同址、端口的虚拟地址整合成一个虚拟服务,可以让虚拟服务器同时截获处理去往多个不同地址的数据包。fwmark可以通过iptables命令指定。如果用在ipv6需要加上-6。
-
-s, --scheduler scheduling-method: 指定调度算法。调度算法可以指定以下8种:rr(轮询),wrr(权重),lc(最后连接),wlc(权重),lblc(本地最后连接),lblcr(带复制的本地最后连接),dh(目的地址哈希),sh(源地址哈希),sed(最小期望延迟),nq(永不排队)
-
-p, --persistent [timeout]: 设置持久连接,这个模式可以使来自客户的多个请求被送到同一个真实服务器,通常用于ftp或者ssl中。
-
-M, --netmask netmask: 指定客户地址的子网掩码。用于将同属一个子网的客户的请求转发到相同服务器。
-
-r, --real-server server-address: 为虚拟服务指定数据可以转发到的真实服务器的地址。可以添加端口号。如果没有指定端口号,则等效于使用虚拟地址的端口号。
-
[packet-forwarding-method]: 此选项指定某个真实服务器所使用的数据转发模式。需要对每个真实服务器分别指定模式。
-
-g, --gatewaying: 使用网关(即直接路由),此模式是默认模式。
-
-i, --ipip: 使用ipip隧道模式。
-
-m, --masquerading: 使用NAT模式。
-
-w, --weight weight: 设置权重。权重是0~65535的整数。如果将某个真实服务器的权重设置为0,那么它不会收到新的连接,但是已有连接还会继续维持(这点和直接把某个真实服务器删除时不同的)。
-
-x, --u-threshold uthreshold: 设置一个服务器可以维持的连接上限。0~65535。设置为0表示没有上限。
-
-y, --l-threshold lthreshold: 设置一个服务器的连接下限。当服务器的连接数低于此值的时候服务器才可以重新接收连接。如果此值未设置,则当服务器的连接数连续三次低于uthreshold时服务器才可以接收到新的连接。(PS:笔者以为此设定可能是为了防止服务器在能否接收连接这两个状态上频繁变换)
-
–mcast-interface interface: 指定使用备服务器时候的广播接口。
-
–syncid syncid: 指定syncid,同样用于主备服务器的同步。
以下选项用于list命令:
-c, --connection: 列出当前的IPVS连接。
–timeout: 列出超时
–stats: 状态信息
–rate: 传输速率
–thresholds: 列出阈值
–persistent-conn 坚持连接
–sort: 把列表排序。
–nosort: 不排序
-n, --numeric: 不对ip地址进行dns查询
–exact: 单位
-6: 如果fwmark用的是ipv6地址需要指定此选项。
ipvsadm 策略(负载均衡算法)
1.1、 轮询 RR
- 算法描述:轮询算法采用轮询的方式依次将请求分发到不同的服务器上,它是一种简单易理解的算法,每个服务器均匀分配请求。
# 添加虚拟服务器
ipvsadm -A -t 192.168.100. 111:8888 -s rr
# 添加真实服务器
ipvsadm -a -t 192.168.100. 111:8888 -r 192.168.100. 112:8888 -m
ipvsadm -a -t 192.168.100. 111:8888 -r 192.168.100. 113:8888 -m
ipvsadm -a -t 192.168.100. 111:8888 -r 192.168.100. 114:8888 -m
1.2、wrr:加权轮询(weight round robin)
- 算法描述: 这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。
2.1、最小连接数 LC
- 算法描述:最小连接数算法将请求发送给当前活跃连接数最少的服务器,它的优点是可以进行动态平衡,但在短时间内出现的请求波动时,它可能会将请求分配给当前使用状况较好的服务器,而非负载较低的服务器。
# 添加虚拟服务器
ipvsadm -A -t 192.168.100. 111:8888 -s lc
# 添加真实服务器
ipvsadm -a -t 192.168.100. 111:8888 -r 192.168.100. 112:8888 -m
ipvsadm -a -t 192.168.100. 111:8888 -r 192.168.100. 113:8888 -m
ipvsadm -a -t 192.168.100. 111:8888 -r 192.168.100. 114:8888 -m
2.2 、wlc:加权最少连接数(weight least-connection)
- 算法描述:这个比最少连接数多了一个加权的概念,即在最少连接数的基础上加一个权重值,当连接数相近,权重值越大,越优先被分派请求。
2.3、lblc:基于局部性的最少连接调度算法(locality-based least-connection)
- 算法描述:将来自同一目的地址的请求分配给同一台RS如果这台服务器尚未满负荷,否则分配给连接数最小的RS,并以它为下一次分配的首先考虑。
3、源地址哈希 SH
- 算法描述:即将来自同一个ip的请求发给后端的同一个服务器,如果后端服务器工作正常没有超负荷的话。这可以解决session共享的问题,但是这里有个问题,很多企业、社区、学校都是共用的一个IP,这将导致请求分配的不均衡。
# 添加虚拟服务器
ipvsadm -A -t 192.168.100. 111:8888 -s sh
# 添加真实服务器
ipvsadm -a -t 192.168.100. 111:8888 -r 192.168.100. 112:8888 -m
ipvsadm -a -t 192.168.100. 111:8888 -r 192.168.100. 113:8888 -m
ipvsadm -a -t 192.168.100. 111:8888 -r 192.168.100. 114:8888 -m
4、dh:目标地址散列调度算法 (destination hash)
- 算法描述: 简单的说,即将同一类型的请求分配给同一个后端服务器,例如将以 .jgp、.png等结尾的请求转发到同一个节点。这种算法其实不是为了真正意义的负载均衡,而是为了资源的分类管理。这种调度算法主要应用在使用了缓存节点的系统中,提高缓存的命中率。