lvs负载均衡

lvs负载均衡

简介

lvs工作方式

ipvsam是一个命令行管理工具,可以间接修改内核配置(由此可见,基于内核的负载抗并发量高于iptables、nginx、keepalived、haproxy等)

lvs负载均衡

三种工作模式

lvs负载均衡

NAT模式

lvs负载均衡

负载调度器位于真实服务器和客户端之间,lvs直接连接公网,配置两块网卡连接公网和内网

DR模式

lvs负载均衡

负载调度器和内网服务器处在同一个广播域之中。外网想要进入需要路由器进行跳转(公司常用)

TUN模式

lvs负载均衡

通过公网快速通道实现不同地域的服务器组合成为一个集群

LVS-DR实验

实验前的网络知识:

lvs负载均衡

客户机配置:增加一个IP地址充当客户端

lvs负载均衡

使用ipconfig查看网卡配置

lvs负载均衡

配置前思路疏解:假设客户端是192.168.0.9,VIP(虚拟服务器IP)为负载调度器外网网卡(192.168.0.10),负载调度器有两块网卡(外网:192.168.0.10  内网:192.168.1.10)连接外网和内网,内网真实服务器IP为192.168.1.11,192.168.1.12等。首先数据包经过负载调度器,负载调度器通过修改DMAC转发给内网真实服务器。但是服务器不会接受不是自己IP的数据包,所以需要开一个lo:0的子接口,lo:0的IP为VIP(虚拟服务器IP),此时会造成IP地址冲突,所以还需要修改ARP通讯行为和修改lo:0的子网掩码为四个255(自己玩去)(下面会详解),那如何做到让数据报文进入自己的lo:0网卡?内网服务器需要配置路由规则,但数据包转发到内网服务器,让他接收

ARP通讯行为配置思路

lvs负载均衡

响应界别:同一个pc机多块网卡会不会联通响应,数字越大,响应级别越低
通告行为:多块网卡的PC机每个单独的网卡只会通告自己的IP地址向整个网段,而不会将此PC机上的其他网卡的IP通告到自己网卡所在的广播域,数字越大,通告越少

其他优化方案:
关闭广播地址公栏,及网卡重定向功能
服务器子接口lo:0子网掩码设置四个255

lo接口
lo: local的简写,一般指本地环回接口。
假如包是由一个本地进程为另一个本地进程产生的, 它们将通过外出链的'lo'接口,然后返回进入链的'lo'接口.具体参考包过滤器的相关内容。

实验前准备

操作系统:centos7.5
外网配置:客户机:192.168.10.1
VIP网络地址:192.168.10.10
内网配置
192.168.1.10
192.168.1.11
……
网络类型我就使用VMNET8 NAT模式了
LVS服务器2块网卡
关闭防火墙和selinux
挂载光盘,配置yum源
下载gcc gcc-c++ lrzsz
yum -y install gcc gcc-c++ lrzsz
拍摄快照

lvs负载调度器配置

下载相关包
yum -y install gcc gcc-c++ lrzsz

关闭NetManager服务
systemctl stop NetworkManager && systemctl disable NetworkManager

开启一个子接口
cd /etc/sysconfig/network-scripts/
cp -a ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0

lvs负载均衡

开启网卡
ifup ens33:0

ifconfig

lvs负载均衡

关闭网卡重定向(广播)功能(优化,可不做)
vim /etc/sysctl.conf

lvs负载均衡

sysctl -p 刷新内核配置

安装ipvsadm命令工具,并配置规则

yum -y install ipvsadm.x86_64

规则选项

-A 添加虚拟服务器(集群)
-D 删除虚拟服务器
-t tcp协议
-a 添加子节点
-d 删除子节点(真实服务器)
-s 指定算法,默认使用wlc
-r 指定真实服务器
-m 指定NAT工作模式
-g 指定DR模式
-i 指定TUN(ip隧道)模式
-c 查看连接状态
-S | --save 保存lvs配置

添加ip_vs模块
modprobe ip_vs
lsmod | grep ip_vs

lvs负载均衡

配置(子节点配置完再去做)
创建文件
touch /etc/sysconfig/ipvsadm
开启ipvsadm服务
systemctl start ipvsadm
systemctl enable ipvsadm
创建集群
ipvsadm -A -t 192.168.10.10:80 -s rr
创建子节点
ipvsadm -a -t 192.168.10.10:80 -r 192.168.1.11:80 -g
ipvsadm -a -t 192.168.10.10:80 -r 192.168.1.12:80 -g

查看ipvsadm默认超时时间
 ipvsadm -L --timeout

lvs负载均衡

表示tcp空闲等待时间为900 秒
客户端关闭链接等待时间为120秒
udp空闲等待为300秒

只有设置连接时间才能频繁刷新
ipvsadm --set 1 2 1

查看子节点
ipvsadm -Ln

lvs负载均衡

保存规则并写入到配置文件中
ipvsadm --save >> /etc/sysconfig/ipvsadm

http服务器端(真实后端调度服务器)

关闭NetManager服务
systemctl stop NetworkManager && systemctl disable NetworkManager

安装httpd
yum -y install httpd
echo "this is server 1" >>/var/www/html/index.html
systemctl start httpd;systemctl enable httpd
curl localhost

配置子接口(加权)
cd /etc/sysconfig/network-scripts/
cp -a ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0

lvs负载均衡

关闭对应ARP响应及公告功能(削减)

临时关闭ARP响应方式
echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce

永久ARP响应方式关闭:
vim /etc/sysctl.conf

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce= 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce= 2
net.ipv4.conf.lo.arp_ignore= 1
net.ipv4.conf.lo.arp_announce = 2
lvs负载均衡

刷新内核参数
sysctl -p

lvs负载均衡

开启网卡:
ifup lo:0

增加网关路由配置(加权)
route add -host 192.168.10.10 dev lo:0

lvs负载均衡

查看路由
route -n

lvs负载均衡

配置路由规则到开机自启动中
echo "route add -host 192.168.10.10 dev lo:0" >> /etc/rc.local
chmod +x /etc/rc.local

http服务器2

仿照http1做即可

测试:输入VIP,测试轮询

使用lvs服务器curl方式需要先关闭子接口

lvs负载均衡

如果想要使用浏览器测试需要配置网关

LVS-NAT模式实验

网络配置

lvs负载均衡

192.168.1.10作为lvs调度器内网IP,192.168.10.10作为lvs外网IP

vmnet8添加一个IP地址

lvs负载均衡

lvs负载调度器2块网卡

lvs负载均衡

lvs负载调度器

增加一块网卡连接外网
cd /etc/sysconfig/network-scripts/
cp -a ifcfg-ens33 ifcfg-ens34

lvs负载均衡

ifup ens34
ifconfig

lvs负载均衡

关闭NetworkManager
systemctl stop NetworkManager && systemctl disable NetworkManager

添加模块
modprobe ip_vs
lsmod | grep ip_vs

lvs负载均衡

安装ipvsadm
yum -y install ipvsadm

开启路由转发,刷新内核参数
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

lvs负载均衡

配置防火墙规则
关闭防火墙
systemctl stop firewalld
安装iptables服务
yum -y install iptables-services
安装完成后使能自启动
systemctl enable iptables
systemctl start iptables
启动防火墙
systemctl start firewalld
清空防火墙规则
iptables -F
建立防火墙规则
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens34 -j SNAT --to-source 192.168.10.10
意思为当有数据包来自192.168.1.0内网网段,交给网卡ens34(外网网卡)进行SNAT转换

检查
iptables -t nat -L

lvs负载均衡

保存
service iptables save
此时在/etc/sysconfig文件夹下就有了iptables.save文件

lvs负载均衡

建立ipvsadm规则
ipvsadm -A -t 192.168.10.10:80 -s rr
ipvsadm -a -t 192.168.10.10:80 -r 192.168.1.11:80 -m
ipvsadm -a -t 192.168.10.10:80 -r 192.168.1.12:8080 -m
-m:NAT模式支持端口映射
开启ipvsadm并设置开机自启动
systemctl restart ipvsadm.service;systemctl enable ipvsadm.service

检测

lvs负载均衡

额外补充
注:删除真实服务器命令:ipvsadm -d -t 192.168.10.10:80 -r 192.168.1.12:8080
删除所有规则 ipvsadm -C
查看所有链接状态
ipvsadm -L -c -n

lvs负载均衡

后端http服务器

配置网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33

修改网关

lvs负载均衡

重启网络服务:
service network restart

查看路由
route -n

lvs负载均衡

配置http服务
yum -y install httpd
子节点1:echo "http1" >>/var/www/html/index.html
子节点2:echo "http1" >>/var/www/html/index.html

(12服务器需要修改http默认鉴定端口配置文件,这里特意将端口发生变化,测试NAT模式所映射后端的8080,端口映射DR模式不支持)
vim /etc/httpd/conf/httpd.conf

lvs负载均衡

systemctl start httpd

测试:
网址输入 192.168.10.10

lvs负载均衡
lvs负载均衡

ipvsadm -Ln --stats

lvs负载均衡

由此可知,NAT模式入栈出栈网络数据包都会有,lvs相比DR模式所承受的网络压力也较大

补充实验:

加权轮询实验(123比重)

lvs负载均衡
lvs负载均衡

升级实验

LVS-NAT剔除后端脚本+NFS完善搭建

环境配置

LVS-NAT+NFS搭建
实验环境:VIP:192.168.2.10
负载调度器(BL):192.168.1.10
web1:192.168.1.11
web2:192.168.1.12
NFS:192.168.1.13

集群较大,建议先修改主机名
部署NFS服务器

下载包
yum -y install nfs-utils rpcbind
共享目录设定为/opt/www
mkdir /opt/www
修改配置文件
vim /etc/exports
/opt/www 192.168.1.0/24(ro,sync,no_root_squash)
开启服务
systemctl start rpcbind nfs && systemctl enable rpcbind nfs
查看挂载
exportfs
输入内容到挂载目录,直接指向http服务器的网页根目录下

echo "<h1>it works</h1>" >/opt/www/index.html

web1服务器配置
下载包
修改配置文件,优化启动加速
开启开机自启动
systemctl start httpd && systemctl enable httpd
查看端口
netstat -anpt |grep :80
客户端也需要nfs-utils
yum -y install nfs-utils
将网页根目录挂载到nfs服务器下
mount 192.168.1.13:/opt/www/ /var/www/html/
查看挂载
df -hT
设置开机自动挂载
cp -p /etc/fstab /etc/fstab.bak
vim /etc/fstab
加入:
192.168.1.13:/opt/www/ /var/www/html/ nfs defaults,_netdev 1 2
umount /var/www/html/
mount -a
df -hT查看nfs挂载即可

网卡网关指向lvs服务器
vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.1.10

web2配置(模仿web1)

yum -y install httpd
sed -i '/#S/ s/#//' /etc/httpd/conf/httpd.conf
systemctl start httpd 
yum -y install nfs-utils
cp -p   /etc/fstab /etc/fstab.bak
echo   "192.168.1.13:/opt/www/         /var/www/html/                      nfs               defaults,_netdev              1  2"  >>/etc/fstab
mount -a
df -hT
vim /etc/sysconfig/network-scripts/ifcfg-ens33 
GATEWAY=192.168.1.10

测试
访问主机测试输入192.168.11和192.168.12显示”it works“表示NFS与web成功连接

LVS-NAT负载调度器搭建

增加模块
modprobe ip_vs
cat /proc/net/ip_vs

下载命令包
yum -y install ipvsadm

开启并设置开机自启动
systemctl start ipvsadm.service && systemctl enable ipvsadm.service

配置规则
ipvsadm -A -t 192.168.10.10:80 -s rr
ipvsadm -a -t 192.168.10.10:80 -r 192.168.1.11:80 -m -w 1
ipvsadm -a -t 192.168.10.10:80 -r 192.168.1.12:80 -m -w 1

查看规则
ipvsadm -ln

开启路由转发并刷新规则
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

实现自动剔除,自动添加脚本

#!/bin/bash
while :;do
	VIP=192.168.10.10
	array=(192.168.1.11 192.168.1.12 192.168.1.13)
	num=$((${#array[*]}-1))
	for i in `seq 0 $num`;do
		curl ${array[$i]} &>/dev/null
		if [ $? -ne 0 ];then
			ipvsadm -d -t $VIP:80 -r ${array[$i]}:80 &>/dev/null
		else
			ipvsadm -ln | awk 'NR>4{print $2}'| grep ${array[$i]} &>/dev/null
		 	if [ $? -ne 0 ];then
				ipvsadm -a -t $VIP:80 -r ${array[$i]}:80 -m &>/dev/null
			fi
		fi
	done
	sleep 2
done 

LVS-DR模式+NFS完善搭建

实验配置
实验环境
VIP:192.168.1.20(与内网同网段)
web1:192.168.1.11
web2:192.168.1.12
lvs调度器:192.168.1.10

实验流程
配置web1和web2,httpd服务,修改网页根文件,同上

配置lvs负载调度器
写脚本,为ens33网卡增加VIP,并配置路由,当访问VIP时,使用ens33网卡接收
vim /opt/vip.sh

#!/bin/bash 
#VIP
VIP="192.168.1.20"
/sbin/ifconfig ens33:vip $VIP broadcast $VIP netmask 255.255.255.255
/sbin/route add -host $VIP dev ens33:vip

增加权限,执行脚本,查看网卡,写入开机自启动

chmod +x /opt/vip.sh 
/opt/vip.sh
ip a show ens33
echo "/opt/vip.sh" >>/etc/rc.local

下载命令配置,编写规则

yum -y install ipvsadm
touch /etc/sysconfig/ipvsadm
systemctl start ipvsadm &&  systemctl enable ipvsadm
ipvsadm -A -t 192.168.1.20:80 -s rr
ipvsadm -a  -t 192.168.1.20:80 -r 192.168.1.11:80 -g
ipvsadm -a  -t 192.168.1.20:80 -r 192.168.1.12:80 -g
ipvsadm --save >/etc/sysconfig/ipvsadm
ipvsadm -ln

web1服务器配置

当访问VIP交给lo:0,设置广播相应功能
vim /opt/lvs-dr

#!/bin/bash
# lvs-dr 
VIP="192.168.1.20"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255
/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

执行脚本,开机自启动

chmod +x /opt/lvs-dr 
/opt/lvs-dr 
echo "/opt/lvs-dr" >>/etc/rc.local
ip a

Web2服务器配置(同web1)
ls /opt/
/opt/lvs-dr 执行脚本
ip a
route -n
....

客户机测试
输入curl 192.168.1.20

发布者:LJH,转发请注明出处:https://www.ljh.cool/6005.html

(0)
上一篇 2022年8月28日 上午2:34
下一篇 2022年9月1日 上午12:44

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注