LVS负载均衡群集——LVS-NAT模式搭建和LVS-DR模式搭建

2023-09-13 13:40:58

目录

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服务器2

mount  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 nat

iptables -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 -m

ipvsadm        #启用策略

 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:0

DEVICE=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        #安装ipvsadm

ipvsadm-save > /etc/sysconfig/ipvsadm        #备份ipvsadm原有的配置
systemctl start ipvsadm        #开启ipvsadm

ipvsadm -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_02
	router_id LVS_01
--14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
	#vrrp_strict
}

vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state MASTER
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	
    virtual_router_id 10
	#nopreempt		#如果设置非抢占模式,两个节点state必须为BACKUP,并加上配置 nopreempt
--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
    priority 100
    advert_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 DR
    persistence_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 1
        TCP_CHECK {
			connect_port 80
			connect_timeout 3
			nb_get_retry 3
			delay_before_retry 3
		}
	}
##删除后面多余的配置##
}

修改后的配置

  1 ! Configuration File for keepalived
  2
  3 global_defs {
  4    notification_email {
  5      acassen@firewall.loc
  6      failover@firewall.loc
  7      sysadmin@firewall.loc
  8    }
  9    notification_email_from Alexandre.Cassen@firewall.loc
 10    smtp_server 127.0.0.1    #修改IP为127.0.0.1
 11    smtp_connect_timeout 30
 12    router_id LVS_01    #修改为LVS_01,并删除下面4行
 13 }
 14
 15 vrrp_instance VI_1 {
 16     state MASTER    
 17     interface ens33    #修改成自己的网卡名
 18     virtual_router_id 51
 19     priority 100
 20     advert_int 1
 21     authentication {
 22         auth_type PASS
 23         auth_pass 1111
 24     }
 25     virtual_ipaddress {
 26         192.168.3.254    #虚拟地址(VIP)
 27     }
 28 }
 29
 30 virtual_server 192.168.3.254 80 {    #虚拟地址(VIP)端口号
 31     delay_loop 6
 32     lb_algo rr    #调度算法 rr表示轮询
 33     lb_kind DR    #LVS模式DR
 34     persistence_timeout 0    #超时时间
 35     protocol TCP
 36
 37     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 ipvsadm

ipvsadm -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,然后一直刷新就会出现不同的页面,说明实现负载均衡效果

 

更多推荐

c++编译过程-各阶段任务

首先,g++在编译源代码时,会经历下面几个阶段-E首先进行预处理,还是源代码格式.i-S编译器生成汇编语言.s-c汇编器生成二进制文件.o-链接库文件,其他代码.out一.预处理预处理主要是1.将#宏定义进行展开,2.将头文件内容替换3.去掉注释二.编译编译主要是将预处理后的代码转换成汇编语言:1.对代码进行语法分析,

AndroidUtil - 强大易用的安卓工具类库

官网https://github.com/Blankj/AndroidUtilCode/blob/master/README-CN.md项目介绍AndroidUtilCode🔥是一个强大易用的安卓工具类库,它合理地封装了安卓开发中常用的函数,具有完善的Demo和单元测试,利用其封装好的APIs可以大大提高开发效率,如

解锁黑科技!群晖管家+cpolar内网穿透,让你的本地黑群晖实现公网远程访问!

白嫖怪狂喜!黑群晖也能使用群晖管家啦!文章目录白嫖怪狂喜!黑群晖也能使用群晖管家啦!1.使用环境要求:2.下载安装群晖管家app3.随机地址登陆群晖管家app4.固定地址登陆群晖管家app自己组装nas的白嫖怪们虽然也可以通过在局域网使用黑群晖,但是群晖quickconnect需要绑定正版群晖账号,那么白嫖怪们要怎样在

【自动化测试】如何下载安装webdriver

1.下载合适的浏览器驱动2.配置环境变量写自动化脚本的时候经常会用到selenium,selenium来自webdriver模块,所以需要安装对应的webdriver驱动。1.查看自己浏览器的版本;发现我的浏览器版本已经升到了最新的版本,我参照这个链接,下载了最新版本的驱动,https://googlechromela

基于JAVA+SpringBoot+Vue+协同过滤算法+爬虫的前后端分离的租房系统

✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌🍅文末获取项目下载方式🍅一、项目背景介绍:随着城市化进程的加快,租房需求逐渐增多,传统的租房方式已经无法满足人们的需求。为了提

Linux下的系统编程——信号(十一)

前言:信号在我们的生活中随处可见,如:古代战争中摔杯为号;现代战争中的信号弹;体育比赛中使用的信号枪......他们都有共性,信号是信息的载体,Linux/UNIX环境下,古老、经典的通信方式,现下依然是主要的通信手段。Unix早期版本就提供了信号机制,但不可靠,信号可能丢失。Berkeley和AT&T都对信号模型做了

如何在前端传递一个String 的变量和一个obj对象到后端,然后被Java后端接收

首先我们通过post向后端发送请求,本篇博客仅纪录一下,在实际开发中需要从前端传递多值到后端,并且不存放到一个对象中进行传值处理,简单的一个案例展示该怎么做罢了!!!//创建一个包含字符串和对象的数据constpostData={stringValue:"Hello,World!",//你要发送的字符串数据yourOb

华为云Stack的学习(七)

八、华为云Stack存储服务介绍1.云硬盘EVS云硬盘(ElasticVolumeService,EVS),又名磁盘,是一种虚拟块存储服务,主要为ECS(ElasticCloudServer)和BMS(BareMetalServer)提供块存储空间。用户可以在线创建云硬盘并挂载给实例,云硬盘的使用方式与传统服务器硬盘完

浅谈电力电容器技术的发展及选型

安科瑞华楠摘要:介绍了我国电力电容器产品制造技术的发展现状。在与国外电力电容器产品先进水平对比的基础上,讨论了我国电力电容器产品的差距和某些对策,并对我国电力电容器技术发展趋势提出了一些看法。关键词:电力电容器;制造技术;技术发展0引言电力电容器是一种重要的基础工业产品,他是电力系统并联无功补偿、串联补偿、谐波滤波装置

基变换与矩阵对角化

矩阵乘法的本质是映射坐标的意思是把映射到以和为基的向量空间中表示将展示成我们正常基向量空间中显示,而是将用其本身的坐标系展示。这也是基变换的本质,如果想对一组在向量空间中的向量进行旋转操作,旋转逆时针90度,则需要先将其转换为我们向量空间中显示,即,然后再执行旋转操作,最后再将它转变为自己的坐标系展示,。就是基变换。特

驾驭Java线程池:一步一步带你从新手到高手!

驾驭Java线程池:一步一步带你从新手到高手!java框架中例如Tomcat、Dubbo等都离不开线程池,这些框架用到线程的地方,都会用线程池来负责。我们在使用这些框架的时候,会设置线程池参数,用于提高性能。那么开多少线程合适?今天我们将围绕这个问题来学习一下线程池。为什么使用线程池平常我们使用java线程的时候,都是

热文推荐