目录
lvs工作模式
1、NAT模式(VS-NAT)
2、直接路由模式(VS-DR)
3、IP隧道模式(VS-TUN)
LVS调度算法
LVS群集类型
1)负载均衡群集 LB
2)高可用群集 HA
3)高性能运输群集 HPC
LVS-NAT模式搭建
1、NFS部署
2、web服务器部署(节点服务器)
3、负载调度器配置
4、使用客户端测试
LVS-DR模式搭建
1、NFS部署
2、节点服务器部署
3、调度服务器部署
4、使用客户端测试
LVS-DR+keepaliced群集高可用
1、NFS部署
2、节点服务器部署
3、调度服务器+keepalived部署
4、使用客户机测试
lvs工作模式
LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式)、VS/DR(路由模式)、VS/TUN(隧道模式)
1、NAT模式(VS-NAT)
原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP)。真实服务器响应完请求后,查看默认路由,把响应后的数据包发送给负载均衡器,负载均衡器在接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。
优点:集群中的服务器可以使用任何支持TCP/IP的操作系统,只要负载均衡器有一个合法的IP地址。
缺点:扩展性有限,当服务器节点增长过多时,由于所有的请求和应答都需要经过负载均衡器,因此负载均衡器将成为整个系统的瓶颈。
2、直接路由模式(VS-DR)
原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。
缺点:需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
3、IP隧道模式(VS-TUN)
原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。
缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持“IP Tunneling”。
LVS调度算法
轮询(Round Robin);
加权轮询(Weighted Round Robin);
最少连接(Least Connections);
加权最少连接(Weighted Least Connections);
源地址哈希值(source hash);
目的地址哈希值(destination hash);
基于地址的最小连接(locality-based least-connection)。
以上是一些常用的LVS调度算法。
LVS群集类型
群集的类型:
1)负载均衡群集 LB
作用:提高系统响应效率,处理更多的访问请求,减少延迟,实现高并发、高负载的能力
典型代表:软件类:LVS Nginx HAProxy 等 硬件类:F5 绿盟
2)高可用群集 HA
作用:提高系统可靠性,减少中断时间,确保服务的连续性(通常使用 N 个 9 来代表高可用的指标)
典型代表:Keepalived heartbeat
3)高性能运输群集 HPC
作用:通过云计算或分布式计算获取高性能的CPU、内存等资源,来提高整体运算能力
LVS-NAT模式搭建
ipvsadm 工具选项说明:
-A:添加虚拟服务器
-D:删除整个虚拟服务器
-s:指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc)
-a:表示添加真实服务器(节点服务器)
-d:删除某一个节点
-t:指定 VIP地址及 TCP端口(负载均衡服务器)
-r:指定 RIP地址及 TCP端口(群集服务器)
-m:表示使用 NAT群集模式
-g:表示使用 DR模式
-i:表示使用 TUN模式
-w:设置权重(权重为 0 时表示暂停节点)
-p 60:表示保持长连接60秒(默认关闭连接保持)
-l:列表查看 LVS 虚拟服务器(默认为查看所有)
-n:以数字形式显示地址、端口等信息,常与“-l”选项组合使用。ipvsadm -ln
搭建环境:
负载调度器:内网关 ens33:192.168.3.104,外网关 ens36:12.0.0.1
Web节点服务器1:192.168.3.101
Web节点服务器2:192.168.3.102
NFS服务器:192.168.3.103
客户端:12.0.0.12
1、NFS部署
在NFS服务器和Web节点服务器上下载nfs-utils,然后在NFS服务器上配置nfs服务
mkdir /opt/test1
echo "test1" > /opt/test1/index.html
mkdir /opt/test2
echo "test2" > /opt/test1/index.html
mkdir /opt/tomcat1
echo "tomcat1" > /opt/tomcat1/test.jsp
mkdir /opt/tomcat2
echo "tomcat2" > /opt/tomcat2/test.jsp
vim /etc/exports #配置共享的文件/opt/test1 192.168.3.0/24(rw,sync)
/opt/test2 192.168.3.0/24(rw,sync)
/opt/tomcat1 192.168.3.0/24(rw,sync)
/opt/tomcat2 192.168.3.0/24(rw,sync)exportfs -v #查看自己的nfs配置
systemctl start nfs #启动nfs服务
2、web服务器部署(节点服务器)
使用nginx服务,提前安装好的nginx,将nfs共享文件挂载到nginx网页的根目录下
#web服务器1
mount 192.168.3.103:/opt/test1 /apps/nginx/html #挂载nfs共享文件
systemcrl start nginx.service
vim /etc/sysconfig/network-scripts/ifcfg-ens33 #设置节点服务器的网关指向网关服务器地址GATEWAY=192.168.3.104
systemctl restart network
#web服务器2mount 192.168.3.103:/opt/test2 /apps/nginx/html #挂载nfs共享文件
systemcrl start nginx.service
vim /etc/sysconfig/network-scripts/ifcfg-ens33 #设置节点服务器的网关指向网关服务器地址
GATEWAY=192.168.3.104
systemctl restart network #重启网卡
修改web服务的长连接保持时间为0,修改/安装目录/nginx/conf/nginx.conf主配置文件
如果是tomcat服务,修改/安装目录/conf/server.xml,在文档结尾加上KeepAlive off字段即可
3、负载调度器配置
1)首先加个网卡,将其设置为仅主机模式,并配置ip地址为12.0.0.12
ip a #查看你添加的网卡名
cd /etc/sysconfig/network-scripts/ #切换到网卡配置目录下
cp ifcfg-ens33 ifcfg-ens36 #复制ens33网卡到当前文件下,并改名ens36
vim ifcfg-ens36 #修改ens36配置文件
TYPE=Ethernet
BOOTPROTO=static
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=12.0.0.12
NETMASK=255.255.255.0
systemctl restart network #重启网卡
2)开启路由转发功能,并配置防火墙
vim /etc/sysctl.conf #编辑该配置文件,在最后一行添加如下语句,实现路由转发
net.ipv4.ip_forward = 1
#然后使用sysctl -p命令使其生效sysctl -p
iptables -F
iptables -F -t natiptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens36 -j SNAT --to-source 12.0.0.1
3)加载LVS内核模块,并安装ipvsadm管理工具
modprobe ip_vs #加载 ip_vs模块
cat /proc/net/ip_vs #查看 ip_vs版本信息for i in `ls /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs/|grep -o "^[^.]*"`
> do
> modprobe $i
> done# 使用循环加载所有的ip_vs模块
yum -y install ipvsadm #安装ipvsadm工具
4)配置负载均衡策略
ipvsadm-save > /etc/sysconfig/ipvsadm
或者 ipvsadm --save > /etc/sysconfig/ipvsadm #配置前须先保存负载均衡分配策略ipvsadm -C #清除原有策略
ipvsadm -A -t 12.0.0.1:80 -s rr #添加虚拟服务器地址,以及调度算法
ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.11:80 -m #添加节点服务器,-m表示使用NAT模式
ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.12:80 -mipvsadm #启用策略
4、使用客户端测试
先将客户端的ip改为12.0.0.12,且网卡是仅主机模式
LVS-DR模式搭建
负载调度器: 192.168.3.104 VIP(ens33:0):192.168.3.254
Web节点服务器1:192.168.3.101 VIP(lo:0):192.168.3.254
Web节点服务器2:192.168.3.102 VIP(lo:0):192.168.3.254
NFS服务器:192.168.3.103
客户端:192.168.3.100
1、NFS部署
参照LVS-NAT中的NFS部署
2、节点服务器部署
web1:192.168.3.101 web2:192.168.3.102
vim /etc/sysctl.conf #添加如下语句,否则ifup lo:0不成功
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p #使上述语句生效vim /etc/sysconfig/network-scripts/ifcfg-lo:0 #添加VIP
ifup lo:0
ifconfig lo:0
修改web服务的长连接保持时间为0,修改/安装目录/nginx/conf/nginx.conf主配置文件
如果是tomcat服务,修改/安装目录/conf/server.xml,在文档结尾加上KeepAlive off字段即可
3、调度服务器部署
调度服务器:192.168.3.104
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.3.254
NETMASK=255.255.255.255
route add -host 192.168.3.254 dev lo:0 #添加路由
安装ipvsadm和加载ip_vs模块
modprobe ip_vs #加载ip_vs模块
cat /proc/net/ip_vs
yum -y install ipvsadm #安装ipvsadmipvsadm-save > /etc/sysconfig/ipvsadm #备份ipvsadm原有的配置
systemctl start ipvsadm #开启ipvsadmipvsadm -C #清除原有的ipvsadm配置
ipvsadm -A -t 192.168.3.254:80 -s rr #添加虚拟IP (VIP)
ipvsadm -a -t 192.168.3.254:80 -r 192.168.3.101:80 -g #若隧道模式,-g替换为-i
ipvsadm -a -t 192.168.3.254:80 -r 192.168.3.102:80 -g #添加节点服务器ipvsadm
ipvsadm -ln #查看节点状态,Route代表 DR模式
4、使用客户端测试
在浏览器中输入192.168.3.254,然后一直刷新就会出现不同的页面,说明实现负载均衡效果
LVS-DR+keepaliced群集高可用
负载调度器: 192.168.3.104 VIP(ens33:0):192.168.3.254
Web节点服务器1:192.168.3.101 VIP(lo:0):192.168.3.254
Web节点服务器2:192.168.3.102 VIP(lo:0):192.168.3.254
NFS服务器:192.168.3.103
客户端:192.168.3.1
1、NFS部署
与上述LVS-NAT模式中的NFS部署一样,参照LVS-NAT模式中的NFS部署
2、节点服务器部署
与上述LVS-DR模式的节点服务器部署操作一样,参照上述LVS-DR模式的节点服务器部署
3、调度服务器+keepalived部署
主调度服务器
yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs
vim /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf.....
global_defs { #定义全局参数
--10行--修改,邮件服务指向本地smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02router_id LVS_01
--14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接#vrrp_strict
}vrrp_instance VI_1 { #定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUPstate MASTER
--21行--修改,指定承载vip地址的物理接口interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致 virtual_router_id 10#nopreempt #如果设置非抢占模式,两个节点state必须为BACKUP,并加上配置 nopreempt
--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90priority 100advert_int 1 #通告间隔秒数(心跳频率)authentication { #定义认证信息,每个热备组保持一致auth_type PASS #认证类型
--27行--修改,指定验证密码,主备服务器保持一致auth_pass abc123}virtual_ipaddress { #指定群集vip地址192.168.3.254}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.3.254 80 {delay_loop 6 #健康检查的间隔时间(秒)lb_algo rr #指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)lb_kind DRpersistence_timeout 0 #连接保持时间(秒)protocol TCP #应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口real_server 192.168.3.101 80 {weight 1 #节点的权重
--45行--删除,添加以下健康检查方式 TCP_CHECK {connect_port 80 #添加检查的目标端口connect_timeout 3 #添加连接超时(秒)nb_get_retry 3 #添加重试次数delay_before_retry 3 #添加重试间隔}}real_server 192.168.3.102 80 { #添加第二个 Web节点的地址、端口weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
##删除后面多余的配置##
}
修改后的配置
1 ! Configuration File for keepalived23 global_defs {4 notification_email {5 acassen@firewall.loc6 failover@firewall.loc7 sysadmin@firewall.loc8 }9 notification_email_from Alexandre.Cassen@firewall.loc10 smtp_server 127.0.0.1 #修改IP为127.0.0.111 smtp_connect_timeout 3012 router_id LVS_01 #修改为LVS_01,并删除下面4行13 }1415 vrrp_instance VI_1 {16 state MASTER 17 interface ens33 #修改成自己的网卡名18 virtual_router_id 5119 priority 10020 advert_int 121 authentication {22 auth_type PASS23 auth_pass 111124 }25 virtual_ipaddress {26 192.168.3.254 #虚拟地址(VIP)27 }28 }2930 virtual_server 192.168.3.254 80 { #虚拟地址(VIP)端口号31 delay_loop 632 lb_algo rr #调度算法 rr表示轮询33 lb_kind DR #LVS模式DR34 persistence_timeout 0 #超时时间35 protocol TCP3637 real_server 192.168.3.101 80 { #节点服务器地址和端口38 weight 1 #权重39 TCP_CHECK { #健康检查40 connect_port 80 #添加检查的目标端口号41 connect_timeout 3 #添加连接超时42 nb_get_retry 3 #添加超时重试次数43 delay_before_retry 3 #添加重试间隔时间44 }45 }46 real_server 192.168.3.102 80 { #节点服务器地址和端口47 weight 1 #权重48 TCP_CHECK { #健康检查49 connect_port 80 #添加检查的目标端口号50 connect_timeout 3 #添加连接超时51 nb_get_retry 3 #添加超时重试次数52 delay_before_retry 3 #添加重试间隔时间53 }54 }55 }
调整 proc 响应参数,关闭Linux 内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
启动keepalived和ipvsadm
systemctl start keepalived
ip a
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadmipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived
备调度服务器
步骤与主调度服务器一样,只有在keepalived.conf文件中有差别,如下:
12 router_id LVS_02 #文档的第12行
16 state BACKUP #文档的第16行
19 priority 90 #优先级也需要改,比主设备的优先级小
4、使用客户机测试
在浏览器中输入192.168.3.254,然后一直刷新就会出现不同的页面,说明实现负载均衡效果