LVS负载均衡
(Linux Virtual Server)
命令描述和用法
描述:Linux虚拟服务器管理工具用法:ipvsadm 选项 服务器地址 -s 算法 ipvsadm 选项 服务器地址 -r 真实服务器地址[工作模式][权重]选项: -A 添加一个虚拟服务,使用IP地址、端口号、协议来唯一定义一个虚拟服务 -E 编辑一个虚拟服务 -D 删除一个虚拟服务 -C 清空虚拟服务表 -R 从标准输入中还原虚拟服务规则 -S 保存虚拟服务规则至标准输出,输出的规则可以使用 -R 导入还原 -a 在虚拟服务中添加一台真实服务器 -e 在虚拟服务中编译一台真实服务器 -d 在虚拟服务中减去一台真实服务器 -L 显示虚拟服务列表 -t 使用 TCP 协议服务,该参数后需要加主机和端口信息 -s 指定 LVS 所采用的调度算法 -r 设置真实服务器IP地址和端口信息 -g 设置 LVS 工作模式为 DR 直连路由模式 -i 设置 LVS 工作模式为 TUN 隧道模式 -m 设置 LVS 工作模式为 NAT 地址转换模式 -w 设置指定服务器的权重 -c 查看连接状态,配合 -L 使用 -n 数字的输出格式
工作模式
NAT模式
网络地址转换模式,通过修改数据报头,使内网服务器映射到调度器公网IP,从而达到负载均衡的目的,调度器负载较大,客户端访问地址和回应源地址都是VIP地址。
TUN模式
隧道模式,将请求与响应数据分离,调度器只处理请求,转发给真实服务器,待数据处理完毕返回给客户端,所以客户端访问地址是VIP地址,回应源地址是后端真实服务器。
DR模式
直接路由模式,和TUN模式比较类似,但要求调度器和后端服务器必须要在同一局域网内VIP地址需要在调度器与后端所有服务器间共享,客户端访问地址和回应源地址都是VIP地址。
调度算法
简写 | 算法释义 |
---|---|
RR | 轮询算法 |
WRR | 加权轮询算法 |
LC | 最小连接调度算法 |
lblc | 基于局部性的最少连接调度算法 |
lblcr | 带复制的基于局部性的最少连接算法 |
DH | 目标地址散列调度算法 |
SH | 源地址散列调度算法 |
配置说明
==#建议做LVS负载均衡先绘出拓扑图,制作服务器IP表格再进行服务配置,模拟实验VIP和内网不要同一网段,建议关闭 NetWorkManager 服务==
安装ipvsadm工具
yum -y install ipvsadm
添加一个虚拟服务,使用TCP协议服务,端口为80,调度算法为轮询算法
ipvsadm -A -t 调度器公网IP:80 -s rr
添加一个真实的服务器IP并设置工作模式
ipvsadm -a -t 调度器公网IP:80 -r 真实服务器IP:80 -m#这里把需要负载均衡的几个真实服务器都加入进来
查看调度器状态
ipvsadm -Lnc
保存调度器规则
ipvsadm -Sn > 保存路径
还原调度器规则
ipvsadm -R < 备份的文件
开启路由转发功能
sed -i '/ip_forward/s/0/1/' /etc/sysctl.conf
重新加载sysctl文件
sysctl -p
启用服务并加入开启自启
systemctl start ipvsadmsystemctl enable ipvsadm
==#若服务启动不了,缺少/etc/sysconfig/ipvsadm文件,创建一个空白文件即可==
#合理利用实际环境使用不同的工作模式和调度算法
网卡添加VIP地址并修改网卡参数重启网络服务(网卡配置略)
cp /etc/sysconfig/network-scripts/ifcfg-eno16777736 /etc/sysconfig/network-scripts/ifcfg-eno16777736:0
编写并在WEB服务器上执行ARP抑制脚本 vim realserver.sh
#!/bin/bash VIP=192.168.111.100 source /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $VIP dev lo:0 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
==#若调度器对真实服务器都设置了VIP地址,可以通过arp_ignore参数和arp_announce参数来禁止对VIP地址的ARP响应,防止地址冲突==
重载sysctl配置
sysctl -p