简介
lvs工作方式
ipvsam是一个命令行管理工具,可以间接修改内核配置(由此可见,基于内核的负载抗并发量高于iptables、nginx、keepalived、haproxy等)
三种工作模式
NAT模式
负载调度器位于真实服务器和客户端之间,lvs直接连接公网,配置两块网卡连接公网和内网
DR模式
负载调度器和内网服务器处在同一个广播域之中。外网想要进入需要路由器进行跳转(公司常用)
TUN模式
通过公网快速通道实现不同地域的服务器组合成为一个集群
LVS-DR实验
实验前的网络知识:
客户机配置:增加一个IP地址充当客户端
使用ipconfig查看网卡配置
配置前思路疏解:假设客户端是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通讯行为配置思路
响应界别:同一个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
开启网卡
ifup ens33:0
ifconfig
关闭网卡重定向(广播)功能(优化,可不做)
vim /etc/sysctl.conf
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
配置(子节点配置完再去做)
创建文件
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
表示tcp空闲等待时间为900 秒
客户端关闭链接等待时间为120秒
udp空闲等待为300秒
只有设置连接时间才能频繁刷新
ipvsadm --set 1 2 1
查看子节点
ipvsadm -Ln
保存规则并写入到配置文件中
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
关闭对应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
刷新内核参数
sysctl -p
开启网卡:
ifup lo:0
增加网关路由配置(加权)
route add -host 192.168.10.10 dev lo:0
查看路由
route -n
配置路由规则到开机自启动中
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-NAT模式实验
网络配置
192.168.1.10作为lvs调度器内网IP,192.168.10.10作为lvs外网IP
vmnet8添加一个IP地址
lvs负载调度器2块网卡
lvs负载调度器
增加一块网卡连接外网
cd /etc/sysconfig/network-scripts/
cp -a ifcfg-ens33 ifcfg-ens34
ifup ens34
ifconfig
关闭NetworkManager
systemctl stop NetworkManager && systemctl disable NetworkManager
添加模块
modprobe ip_vs
lsmod | grep ip_vs
安装ipvsadm
yum -y install ipvsadm
开启路由转发,刷新内核参数
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
配置防火墙规则
关闭防火墙
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
保存
service iptables save
此时在/etc/sysconfig文件夹下就有了iptables.save文件
建立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
检测
额外补充
注:删除真实服务器命令:ipvsadm -d -t 192.168.10.10:80 -r 192.168.1.12:8080
删除所有规则 ipvsadm -C
查看所有链接状态
ipvsadm -L -c -n
后端http服务器
配置网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改网关
重启网络服务:
service network restart
查看路由
route -n
配置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
systemctl start httpd
测试:
网址输入 192.168.10.10
ipvsadm -Ln --stats
由此可知,NAT模式入栈出栈网络数据包都会有,lvs相比DR模式所承受的网络压力也较大
补充实验:
加权轮询实验(123比重)
升级实验
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-ens33GATEWAY=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