LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式
LVS负载均衡群集—直接路由模式(LVS-DR)
lvs服务器:172.26.61.51 web服务器1:172.26.61.52 web服务器2:172.26.61.53 虚拟IP地址:172.26.61.60
首先关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0
关闭防火墙并停用开机启动
systemctl stop firewalld.service systemctl disable firewalld.service
更换阿里云yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
更新yum缓存
yum makecache
LVS现在已成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调用。以下操作可以手动加载ip_vs模块,并查看当前系统中ip_vs模块的版本信息
modprobe ip_vs #加载ip_vs模块 cat /proc/net/ip_vs IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
安装ipvsadm
yum install ipvsadm -y
新增调度脚本
#vi dispath.sh #!/bin/bash ifconfig eth0:0 172.26.61.60 broadcast 172.26.61.60 netmask 255.255.255.255 up #添加虚拟地址的虚接口 route add -host 172.26.61.60 dev eth0:0 #给eth0:0添加路由 ipvsadm -C #清除内核虚拟服务器表中的所有记录 ipvsadm -A -t 172.26.61.60:80 -s rr #创建虚拟服务器 ipvsadm -a -t 172.26.61.60:80 -r 172.26.61.52:80 -g #添加服务器节点 ipvsadm -a -t 172.26.61.60:80 -r 172.26.61.53:80 -g #添加服务器节点 ipvsadm -Ln #查看节点状态,加个“-n”将以数字形式显示地址、端口信息
保存退出,并给脚本执行权限
chmod +x dispath.sh
以上参数解读
"-A"表示添加虚拟服务器, "-a"表示添加真实服务器 "-t"用来指定VIP地址及TCP端口 "-r"用来指定RIP地址及TCP端口 "-s"用来指定负载调度算法——rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接) "-m"表示使用NAT群集模式("-g"是DR模式,"-i"是TUN模式)
执行调度脚本
sh dispath.sh
返回
IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.26.61.60:80 rr -> 172.26.61.52:80 Route 1 0 0 -> 172.26.61.53:80 Route 1 0 0
然后配置两台web服务器这里不做介绍,主要是介绍配置web服务器的DR模板
在两台web服务器创建相同脚本
#vi web.sh #!/bin/bash ifconfig lo:0 172.26.61.60 broadcast 172.26.61.60 netmask 255.255.255.255 up route add -host 172.26.61.60 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 sysctl -p &>/dev/null
保存退出,给脚本执行权限
chmod +x web.sh
分别在两台web服务器上执行脚本并查看虚拟接口
sh web.sh ifconfig #查看虚拟接口
最后我们可以找台服务器通过虚拟IP访问,多刷新几次,发现每次调度的不通的后端服务器