一、集群概述
1、负载均衡技术类型
四层负载均衡器 也称为 4 层交换机,主要通过分析 IP 层及 TCP/UDP 层的流量实现基于 IP 加端口的负载均衡,如常见的 LVS、F5 等;
七层负载均衡器 也称为 7 层交换机,位于 OSI 的最高层,即应用层,此负载均衡器支持多种协议,如HTTP、FTP、SMTP 等。7 层负载均衡器可根据报文内容,配合一定的负载均衡算法来选择后端服务器,即“内容交换器”。如常见的 HAProxy、Nginx。
2、负载均衡实现方式
硬件负载均衡产品:F5 、深信服 、Radware
软件负载均衡产品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache trafficserver)
二、LVS结构
1、三层结构
负载调度器
服务器池
共享存储
2、架构对象
VS:Virtual Server,也称为 Director,负载均衡服务器
RS:Real Server,真正的服务器,集群中各节点
VIP:Director 向外部提供服务的 IP
DIP:Director 向内部与 RS 通信的 IP
RIP:真实服务器的 IP
CIP:客户端的 IP
三、LVS工作模式
LVS-NAT(NAT模式)
LVS-DR(直接路由模式)(应用最广泛)
LVS-TUN(IP隧道(Tunnel)模式,不常用)
FULL-NAT模式(双向转换模式,不常用)
四、LVS负载均衡算法
1、静态负载均衡
rr(round robin,轮询 )
wrr(weight round robin,加权轮询)
sh(source hashing,源地址散列算法(HASH))
dh(destination hashing,目标地址 HASH)
2、动态负载均衡
lc(leash-connection,最少连接 )
简单算法:active * 256 + inactive (谁的小选谁)
wlc(加权最少连接)
简单算法:(active * 256 + inactive) / weight(谁的小选谁)
sed(最少期望延迟)
简单算法:(active + 1) * 256 / weight (谁的小选谁)
nq(never queue,永不排队)
LBLC(基于局部性的最少连接 )
LBLCR(基于局部性的带复制功能的最少连接)
五、ipvsadm命令详解
-A 添加虚拟服务节点
-D 删除虚拟服务节点
-L 查看虚拟服务节点列表
-a 添加真实服务节点
-d 删除真实服务节点
-l 查看真实服务节点列表
-t 指定虚拟服务器IP地址
-s 指定调度算法
-r 指定真实服务器节点IP地址
-w 指定权重值
-g 直接路由模式(默认)
-i 隧道模式(不常用)
-m NAT模式
案例
六、LVS配置案列
我配置的是三台虚拟机,拿主机访问的虚拟机配置
1、基础配置
修改主机名
关闭防火墙
关闭Selinux
关闭Networkmanager
配置IP地址
master 192.168.28.4
server1 192.168.28.5
server2 192.168.28.6
2、实现NAT模型搭建
2、1负载调度器配置
配置IP地址
master增加一块网卡
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens37
cd /etc/sysconfig/network-scripts/ cp ifcfg-ens33 ifcfg-ens37 vim ifcfg-ens33 vim ifcfg-ens37
ens37 这里就要看主机的ip了主机ip是192.168.200.1所以我们的37就是
vim ifcfg-ens37
删除UUID
NAME=ens37
DEVICE=ens37
重启一下网卡
systemctl restart network ip a
配置本地yum源
安装ipvsadm
yum install -y ipvsadm
开启路由转发功能
cd /etc/sysctl.d/ vim route.conf sysctl -p /etc/sysctl.d/route.conf
主机master的更改就OK了,开始更改slave1,slave2基础配置和master一样
ip192.168.28.5
在这里网关一定要给成master的网关
改成网络源
下载nginx
yum -y install epel-release yum -y install epel-release yum -y install nginx
启动nginx
systemctl start nginx netstat -anptu |grep nginx
创建一个nginx1的网站
cd /usr/share/nginx/html/ echo nginx1 > index.html route -n
slave2的配置和slave1 的一样
yum -y install epel-release yum -y install epel-release yum -y install nginx systemctl start nginx
cd /usr/share/nginx/html/ echo nginx2 > index.html vim /etc/sysconfig/network-scripts/ifcfg-ens33 systemctl restart network route -n
网卡配置一下
回master加载ip_vs模块
modprobe ip_vs lsmod |grep ip_vs
启动ipvsadm服务
systemctl start ipvsadm systemctl status ipvsadm touch /etc/sysconfig/ipvsadm ls /etc/sysconfig/
配置负载分配策略
ipvsadm -A -t 192.168.200.100:80 -s rr
ipvsadm -a -t 192.168.200.100:80 -r 192.168.28.5:80 -m
ipvsadm -a -t 192.168.200.100:80 -r 192.168.28.6:80 -m
ipvsadm -A -t 192.168.200.100:80 -s rr ipvsadm -a -t 192.168.200.100:80 -r 192.168.28.5:80 -m ipvsadm -a -t 192.168.200.100:80 -r 192.168.28.6:80 -m
保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
查看一下
ipvsadm -Ln
ipvsadm-save > /etc/sysconfig/ipvsadm cat /etc/sysconfig/ipvsadm
2、2web节点配置
直接拿我们的主机当做httpd访问
测试
做到这就OK了回我们的主机浏览器查看一下192.168.200.100使用Ctrl+F5深度刷新完成
3、 实现DR模型搭建
3、1负载调度器配置
调整ARP参数
从上个基础上把master的37网卡摘除
把slave1和slave2的网关注释掉
回到master上删除一个数据
rm -rf /etc/sysctl.d/route.conf
vim /etc/sysctl.conf
vim /etc/sysctl.conf sysctl -p
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
配置虚拟IP地址
cd /etc/sysconfig/network-scripts/
cd /etc/sysconfig/network-scripts/ mv ifcfg-ens37 ifcfg-ens33:0 vim ifcfg-ens33:0
重启一下网络查看一下IP
systemctl restart network ip a
安装ipvsadm
yum install -y ipvsadm modprobe ip_vs lsmod |grep ip_vs systemctl start ipvsadm
yum install -y ipvsadm
加载ip_vs模块
modprobe ip_vs
lsmod |grep ip_vs
启动ipvsadm服务
systemctl start ipvsadm
这三步骤已经安装好了
配置负载分配策略
ipvsadm -A -t 192.168.200.100:80 -s rr
ipvsadm -a -t 192.168.115.200:80 -r 192.168.28.5:80 -g
ipvsadm -a -t 192.168.115.200:80 -r 192.168.28.6:80 -g
ipvsadm -A -t 192.168.28.100:80 -s rr ipvsadm -a -t 192.168.28.100:80 -r 192.168.28.5:80 -g ipvsadm -a -t 192.168.28.100:80 -r 192.168.28.6:80 -g ipvsadm -Ln
保存策略
ipvsadm-save > /etc/sysconfig/ipvsad
3、2web节点配置
调整ARP参数两台slave都需要配置
vim /etc/sysctl.conf
sysctl -p
vim /etc/sysctl.conf sysctl -p
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
两台slave都需要配置
配置虚拟IP地址两台slave都需要更改
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
cd /etc/sysconfig/network-scripts/ cp ifcfg-lo ifcfg-lo:0 vim ifcfg-lo:0 systemctl restart network ip a
添加回环路由两台都要加
route add -host 192.168.28.100/32 dev lo:0
主机刷新
抓包工具一抓就OK