[Linux] LVS负载均衡群集+NAT部署

一、LVS负载均衡群集知识

1.1 群集的的定义及意义

Cluster,集群(也称群集)由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机。

群集的作用:

对于企业服务的的性能提升一般会有两种方式:

纵向扩展 :  对服务器的CPU 内存 硬盘 等硬件进行升级或者扩容来实现的     性能上限会有瓶颈,成本昂贵,收效比不高等问题

横向扩展 :  通过增加服务器主机数量来应该高并发的场景

群集的目的 :

        提高性能:计算密集应用。如天气预报,核试验模拟

        降低成本:相对百万美元的超级计算机,价格便宜

        提高可扩展性:只要增加集群节点即可

        增强可靠性:多个节点完成相同功能,避免单点失败

企业级群集的类型 :

负载均衡(LB):提高应用系统的响应效率,处理更多的访问请求,减少延迟,提高并发和负载能力。 同时也是如今企业运用最多的群集类型。
高可用(HA): 提高应用系统的可靠性,减少服务中断时间,确保服务的连续性
高性能运算(HPC):将多台主机的硬件计算资源整合到一起实现分布式运用,比如 云计算 

二、LVS负载均衡的三种模式

群集的负载调度技术有三种工作模式:地址转换(NAT模式) ,直接路由(DR模式),IP隧道(IP-TUN)。对于商用来说,最常用是NAT模式和DR模式。

NAT(地址转换) 

缺点:调度器作为所有节点服务器的网关,既作客户端的访问入口,也作节点服务器响应的访问出口,也就意味着调度器将成为整个集群系统的瓶颈。

优点:由于再转发过程中做了地址转发,对于节点服务器的安全性比其它模式较好。

调度器至少要有2个网卡,一个承载VIP用于接收客户端的请求,另一个用于使用私有IP在同一个局域网中与节点服务器相互通信。

工作原理:

(1)用户通过Internet DNS服务器在我们的负载均衡设备上解析为外网地址。 相对于真实的服务器,LVS外网IP也被称为VIP(虚拟IP地址)。 通过访问VIP,用户可以连接到后端的真实服务器,所有这些对用户都是透明的。 用户认为他正在访问真正的服务器,但不知道访问的VIP只是一个dispatcher.It目前尚不清楚后端真正的服务器在哪里以及其中有多少是真实的。

(2)用户向LVS负载均衡调度器(也是网关服务器)的外部网卡发送请求。 此时LVS根据预先配置的算法选择后端的真实服务器(内网实际处理数据的web服务器),并将数据请求包转发给真实服务器。转发前,LVS改变数据报文的目的地址和目的端口,并将目的地址和目的端口改变为所选择的真实服务器的IP地址和对应端口。

(3)真实服务器向LVS调度器返回响应数据包。 调度员收到响应数据包后,将源地址和源端口更改为VIP和调度员对应的端口。 当更改完成时,调度器将响应数据包发送回终端用户。 此外,由于LVS调度程序有一个连接哈希表,连接请求和传输信息都记录在该表中。 当同一连接的下一个数据包发送到调度器时,可以直接从哈希表中查找到上一个连接记录,并将记录的信息发送到调度器。 

 DR(直接路由)

特点:调度器只根据调度算法接收客户端的请求,并将其转发给节点服务器。节点服务器处理完请求后直接向客户端响应,已经响应的数据包不经过dispatcher.In DR模式下,调度器和后端服务器必须在同一个局域网中,并且VIP地址必须在调度器和所有后端服务器之间共享。 性能高于NAT模式 调度器和节点服务器使用私有IP与同一局域网中的节点服务器进行通信。

工作原理:

(1)用户向Director服务器(负载均衡器)发送请求,请求的数据包(源IP为CIP,目标IP为VIP)到达内核空间。

(2)由于Director服务器和real服务器在同一网络中,通过二层的数据链路层进行传输。 内核空间确定所述数据包的目标IP为本地IP。 此时,IPVS比较数据包请求的业务是否为集群业务。 在那种情况下,重新打包数据包并将源MAC地址更改为DIP的MAC地址,将目标MAC地址更改为RIP的MAC地址。 如果源和目的IP地址没有改变,则将数据包发送到真实服务器。

(3)当真实服务器检测到请求报文的MAC地址为自己的MAC地址时,接收报文,重新打包报文(源IP地址为VIP,目标IP为CIP),通过lo接口将响应报文发送到物理网卡, 真实服务器直接向客户端发送响应消息。 

TUN(IP隧道) 

TUN(IP隧道) 架构类似于DR,但节点服务器分散在Internet上的不同地方,都具有独立的公共IP,并通过专用IP隧道与调度器通信。

采用开放的网络结构,负载调度器只作为客户端访问入口,每个节点通过负载调度器传输压力小于NAT。

服务器节点分散在Internet上的不同位置,具有独立的公共IP地址,并通过专用IP隧道和负载调度器相互通信。

缺点:成本很高。

该模型常用于特殊场景,如在全国范围内分布节点服务器,以防止物理攻击(地震、战争等)。).为灾难做好准备。 

(1)当用户请求到达Director服务器时,请求的数据包首先被移动到内核空间优先路由链。 此时源IP为CIP,目标IP为VIP。

(2)PREROUTING确认数据包的目标IP为本机,并将数据包转发到输入链。

(3)IPVS比较数据包请求的服务是否足以为集群服务。 在这种情况下,ip数据包在请求数据包的头部被封装一次,并且封装的数据包的源IP是DIP和目标IP是RIP.それをPOSTROUTINGに送信しますCHAIN.At 本次源IP为DIP,目标IP为RIP

(4)POSTROUTING chain根据最新封装的IP报文向RS发送数据报文(由于在外部封装中多了一层IP头,此时可以理解为是通过隧道发送的)。

(5)RS收到数据包后,RS检测到是自己的IP地址。 执行完解封装操作后,去掉最外层的IP后,可以看到里面还有一层IP头,目标是自己的LO接口VIP,此时RS会处理这个请求。 程完成后,通过lo接口发送到eth0网卡,并通过出线。源IP地址为VIP,目标IP为CIP。

(6)响应消息到达客户端。 

2.2 LVS的负载调度算法 

 固定调度算法:rr, wrr, dh,sh

 rr:轮询算法(Round Robin)

请求分配给不同的RS节点在turn.distributed.It 它适用于所有RS节点的处理性能接近的情况。

将接收到的访问请求的安装顺序依次分配给集群中的每个节点(真实服务器),并平等对待每个服务器,而不考虑实际连接数和服务器上的系统负载。 

wrr:加权轮询调度(Weighted Round Robin) 

        依据不同RS的权重值分配任务。权重值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。

        保证性能强的服务器承担更多的访问流量。

dh:目的地址哈希调度(destination hashing) 

        以目的地址为关键字查找一个静态hash表来获得所需RS。

sh:源地址哈希调度(source hashing)

        源地址为关键字查找--个静态hash表来获得需要的RS

 动态调度算法: wlc,lc,lblc 

lc:最小连接数调度( Least Connections) 

        ipvs表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。

        根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。

wlc:加权最小连接数调度(Weighted Least Connections)

        假设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次取Ti/Wi为最小的RS作为下一个分配的RS。

        在服务器节点的性能差异较大时,可以为真实服务器自动调整权重。

        性能较高的节点将承担更大比例的活动连接负载。

lblc:基于地址的最小连接数调度(locality-based least-connection)

将来自同一个目的地址的请求分配给同一-台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。

三、LVS部署前

3.1 ipvsadm 工具选项说明 

pvsadm的选项作用
-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 

 3.2 ip_vs通用模块 

ls /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs

 modprobe ip_vs     //手动加载 ip_vs 模块​cat /proc/net/ip_vs    //查看当前系统中ip_vs模块的版本信息

for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

四、 LVS负载均衡-NAT模式的部署

4.1 NAT模式实验部署操作前的准备设计以及需求 

实验需求

通过NAT模式使外网客户机能够访问到相关的web服务,并且LVS调度器使内网中的web服务器达到负载均衡的效果。此外NFS共享存储为web服务提供更大的存储空间 

实验设备准备

需要五台虚拟机(一台web1服务器,一台web2服务器,一台负载均衡调度器,一台NFS共享存储机,一台外网客户机做测试作用)

 各设备的IP设置如下:

负载调度器:内网关 ens33:192.168.136.100,外网关 ens36:12.0.0.100
Web节点服务器1:192.168.136.120
Web节点服务器2:192.168.136.130
NFS服务器:192.168.136.110
客户端:12.0.0.66

 4.2 NAT模式实验部署操作步骤

第一步:部署共享服务(主机IP:192.168.136.110)
 95  systemctl stop firewalld.service96  systemctl disable firewalld.service97  setenforce 098  yum install nfs-utils rpcbind -y99  systemctl start rpcbind.service100  systemctl start nfs.service101  systemctl enable nfs.service102  systemctl enable rpcbind.service103  mkdir -p /var/www/html/{cxk,xhz}104  cd /var/www/html/105  ls106  echo 'this is cxk_web01!' >cxk/test.html107  echo 'this is xhz_web02!' >xhz/test.html108  cat cxk/test.html 109  cat xhz/test.html 110  vim /etc/exports111  systemctl enable --now rpcbind nfs112  showmount -e113  systemctl stop firewalld114  setenforce 0115  showmount -e116  systemctl enable --now rpcbind nfs117  showmount -e118  vim /etc/exports119  systemctl status rpcbind.service 120  systemctl status nfs121  showmount -e122  exportfs -a123  showmount -e

第二步:配置节点服务器(192.168.136.120 192.168.136.130) 

两台web节点服务器相同的操作:

77  systemctl restart network.service78  systemctl disable --now firewalld79  setenforce 080  showmount -e 192.168.136.11081  cd /etc/yum.repos.d/82  ls83  mkdir bak84  mv *.repo bak85  rz -E86  ls87  yum -y install nginx88  vim /etc/fstab 89  mount -a90  df -h91  ls92  ls /usr/share/nginx/html/93  cat te94  ls /usr/share/nginx/html/95  cat /usr/share/nginx/html/test.html 96  vim /etc/nginx/nginx.conf 97  systemctl restart nginx98  vim /etc/sysconfig/network-scripts/ifcfg-ens3399  systemctl restart network nginx

 web1节点服务器的后续操作:

  web2节点服务器的后续操作:

 

第三步:配置负载调度器(内网关 ens33:192.168.136.100,外网关 ens36:12.0.0.100)  
101  cd /etc/sysconfig/network-scripts/102  ls103  ip a104  cp ifcfg-ens33 ifcfg-ens34105  ls106  vim ifcfg-ens34107  vim ifcfg-ens33108  ls109  systemctl restart network110  ip a111  vim /etc/sysctl.d/112  vim /etc/sysctl.d113  vim /etc/sysctl.conf 114  sysctl -p115  modprobe ip_vs116  cat /proc/net/ip_vs117  yum -y install ipvsadm.x86_64 118  cd /etc/yum.repos.d/119  ls120  vim /etc/sysconfig/network-scripts/ifcfg-ens33121  cd /etc/sysconfig/122  vim /etc/sysconfig/network-scripts/ifcfg-ens33123  systemctl restart network124  yum -y install ipvsadm.x86_64 125  vim /etc/sysconfig/network-scripts/ifcfg-ens33126  systemctl restart network127  ip a128  systemctl start ipvsadm.service 129  systemctl status ipvsadm.service 130  ipvsadm-save /etc/sysconfig/ipvsadm131  systemctl start ipvsadm.service 132  ipvsadm-save > /etc/sysconfig/ipvsadm133  systemctl start ipvsadm.service 134  ipvsadm -C135  ipvsadm -ln136  ipvsadm -A -t 12.0.0.100 -s rr137  ipvsadm -A -t 12.0.0.100:80 -s rr138  ipvsadm -ln139  ipvsadm -a -t 12.0.0.100:80 -r 192.168.136.120:80 -m140  ipvsadm -a -t 12.0.0.100:80 -r 192.168.136.130:80 -m141  ipvsadm -ln142  ipvsadm143  ipvsadm -ln144  ls /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs145  cat /proc/net/ip_vs

保存LVS的配置策略以及删除策略的方法: 

ipvsadm-save > /opt/ipvsadm						#保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
----------------------------------------------------------------------------------------------------------
ipvsadm -d -t 12.0.0.100:80 -r 192.168.136.120:80				#删除群集中某一节点服务器
ipvsadm -D -t 12.0.0.100:80									#删除整个虚拟服务器
systemctl stop ipvsadm										#停止服务(清空策略)
systemctl start ipvsadm										#启动服务(根据/etc/sysconfig/ipvsadm重建配置)
ipvsadm-restore < /opt/ipvsadm					            #恢复LVS 策略134  ipvsadm -C135  ipvsadm -ln136  ipvsadm -A -t 12.0.0.100 -s rr137  ipvsadm -A -t 12.0.0.100:80 -s rr138  ipvsadm -ln139  ipvsadm -a -t 12.0.0.100:80 -r 192.168.136.120:80 -m140  ipvsadm -a -t 12.0.0.100:80 -r 192.168.136.130:80 -m141  ipvsadm -ln142  ipvsadm143  ipvsadm -ln

 第四步:进行客户机测试

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/225691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3使用Mars3D写区块地图

效果图 引入相关文件 因为我也是第一次使用&#xff0c;所以我是把插件和源文件都引入了&#xff0c;能使用启动 源文件 下载地址&#xff1a; http://mars3d.cn/download.html 放入位置 在index.html中引入 <!--引入cesium基础lib--><link href"/static/C…

Kubernetes 容器编排 -- 1

前言 知识扩展 早在 2015 年 5 月&#xff0c;Kubernetes 在 Google 上的搜索热度就已经超过了 Mesos 和 Docker Swarm&#xff0c;从那儿之后更是一路飙升&#xff0c;将对手甩开了十几条街,容器编排引擎领域的三足鼎立时代结束。 目前&#xff0c;AWS、Azure、Google、阿里…

软考科目如何选择?

软考科目繁多&#xff0c;让许多学弟学妹感到困惑&#xff0c;不知道该选择哪个科目。以下是一些建议&#xff0c;可以根据个人实际需求选择备考的科目。 1、初级是可选的 软考初级非常简单&#xff0c;适合刚刚入门学习的朋友报考。对于一些有基础的朋友&#xff0c;建议直接…

【从零开始学习--设计模式--装饰者模式】

返回首页 前言 感谢各位同学的关注与支持&#xff0c;我会一直更新此专题&#xff0c;竭尽所能整理出更为详细的内容分享给大家&#xff0c;但碍于时间及精力有限&#xff0c;代码分享较少&#xff0c;后续会把所有代码示例整理到github&#xff0c;敬请期待。 此章节介绍装…

【vim 学习系列文章 13.1 -- 自动命令autocmd 根据文件类型设置vim参数】

文章目录 autocmd 根据文件类型配置vim参数vim 文本类型 autocmd 根据文件类型配置vim参数 在 Vim 中&#xff0c;你可以使用 autocmd &#xff08;自动命令&#xff09;来根据文件类型自动执行特定的函数。首先&#xff0c;你需要定义这些函数&#xff0c;然后使用 autocmd 与…

java实现局域网内视频投屏播放(二)爬虫

代码链接 视频播放原理 大多视频网站使用的是m3u8&#xff0c;m3u8其实不是一个真正的视频文件&#xff0c;而是一个视频播放列表&#xff08;playlist&#xff09;。它是一种文本文件&#xff0c;里面记录了一系列的视频片段&#xff08;segment&#xff09;的网络地址。这些…

原来定时发朋友圈设置这么简单?看完我也会了

目前微信作为最大的社交平台之一&#xff0c;吸引了众多使用者。你是否听过有些朋友感叹这么多微信号&#xff0c;需要每天手动发布朋友圈&#xff0c;任务很繁琐呢&#xff1f;是否希望可以事先设置好定时发送的功能&#xff0c;让朋友圈自动更新&#xff0c;省去手动发送的麻…

初探栈溢出(下)

0x04 漏洞利用 作为脚本小子&#xff0c;先跑一下写好了的exploit脚本。 打开HackSysEVDExploit.sln文件&#xff0c;直接在vs2019上编译即可。 将生成的HackSysEVDExploit.exe拷贝至win7&#xff0c;执行如下命令 直接可以获取system权限。 那么只跑一下脚本肯定不行&#…

世微 锂电池保护IC DW01 充电器检测过充保护SOT23-6

一、 描述 DW01A 是一个锂电池保护电路&#xff0c;为避免锂电池因过充电、过放电、电流过大导致电池寿命缩短或电池被损坏而设计的。它具有高精确度的电压检测与时间延迟电路。 二、 主要特点 工作电流低 过充检测 4.3V&#xff0c;过充释放 4.05V&#xff1b; 过放检测 2.4…

C 库函数 - ctime()

描述 C 库函数 char *ctime(const time_t *timer) 返回一个表示当地时间的字符串&#xff0c;当地时间是基于参数 timer。 返回的字符串格式如下&#xff1a; Www Mmm dd hh:mm:ss yyyy 其中&#xff0c;Www 表示星期几&#xff0c;Mmm 是以字母表示的月份&#xff0c;dd 表示…

黑马头条--day01.环境搭建

一.前言 该项目学习自黑马程序员&#xff0c;由我整理如下&#xff0c;版权归黑马程序员所有 二.环境搭建 1.数据库 第一天&#xff0c;先创建如下库和表: sql文件如下: CREATE DATABASE IF NOT EXISTS leadnews_user DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_…

MySQL 的索引分类

文章目录 MySQL 的索引分类是什么&#xff1f;单列索引组合索引&#xff1a;全文索引&#xff1a;空间索引&#xff1a; MySQL 的索引分类是什么&#xff1f; 单列索引 普通索引&#xff1a;MySQL 中基本索引类型&#xff0c;没有什么限制&#xff0c;允许在定义索引的列中插…

LeetCode(62)删除排序链表中的重复元素 II【链表】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 删除排序链表中的重复元素 II 1.题目 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1…

【JavaEE】锁的策略

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

20.Java程序设计-基于SSM框架的安卓掌上校园生活系统的设计与实现

摘要&#xff1a; 随着移动互联网技术的快速发展&#xff0c;校园生活信息化成为提高学校管理效率、方便学生生活的关键。本研究以基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的技术体系为基础&#xff0c;致力于设计与实现一款功能强大、高效稳定的安卓…

现代雷达车载应用——第2章 汽车雷达系统原理 2.6节 雷达设计考虑

经典著作&#xff0c;值得一读&#xff0c;英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.6 雷达设计考虑 上述部分给出了汽车雷达基本原理的简要概述。在雷达系统的设计中&#xff0c;有几个方面是必不可少的&#xff0c;它们决定了雷达系…

LeetCode215. Kth Largest Element in an Array

文章目录 一、题目二、题解 一、题目 Given an integer array nums and an integer k, return the kth largest element in the array. Note that it is the kth largest element in the sorted order, not the kth distinct element. Can you solve it without sorting? …

VUE学习三、前端项目部署

1.前端项目打包 执行命令 npm run build:prod正常命令结束 , 会在前端项目里面出现dist文件夹 2.nginx下载安装 nginx下载 : http://nginx.org/en/download.html Windows 下载版本 Mainline version&#xff1a;Mainline 是 Nginx 目前主力在做的版本&#xff0c;可以说…

《使用ThinkPHP6开发项目》 - ThinkPHP6使用使用中间件验证登录Token

https://blog.csdn.net/centaury32/article/details/134997438 按照https://blog.csdn.net/centaury32/article/details/134999029的方法验证登录Token&#xff0c;那么每一步都需要写同样一段代码&#xff0c;这里可以结合中间件进行验证 一、创建中间件&#xff1a;php thi…

QT----第三天,Visio stdio自定义封装控件,鼠标事件,定时器,事件分发器过滤器,绘图事件

目录 第三天1 自定义控件封装2 QT鼠标事件3 定时器4 event事件分发器5 事件过滤器6 绘图事件Qpainter 源码&#xff1a;CPP学习代码 第三天 1 自定义控件封装 新建一个QT widgetclass&#xff0c;同时生成ui,h,cpp文件 在smallWidget.ui里添加上你想要的控件并调试大小 回到…