暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

原创|NO.A.0002|集群|LBC负载均衡集群|6台server|

Java BBS 2021-02-22
528

一、LBC-介绍(负载均衡集群介绍)

集群拓扑图


  • web负载均衡集群拓扑

  • 用户通过互联网访问到了网站,其实不是直接连接到web服务器上,

  • 若访问到的主机是有web服务集群的,其实访问到负载均衡调度器,负载均衡个调度器接收到访问数据通过轮询的方法发给真正的web服务器。

  • 若还要访问数据库,若是访问量比较少的话,可能是单个的数据存储,数据量大的话可能是数据库集群。

  • 负载均衡服务器还有主备的集群

  • 此环境包含:负载均衡集群,高可用,存储集群

负载均衡结构图(上图拆分出来的一部分)

负载调度器(最简单的是轮询)

  • 负载调度器:

  • 真实服务器池:

分类:软件/硬件


  • LVS:最普及的软件负载均衡

  • Nginx:代理负载均衡的功能,企业版的:融合了监控nginx-plagues服务;相当于是插件的含义;HAProc:linux 中HA项目中的一个子项目;专门做负载调度器的。四层的话没有LVS广;拆成7层的话没有nginx用途广。

  • F5:硬件:半圆球发红光的去定位为F5

分类-工作层级

注:

物理层:负责实际的bite流传输,及其特性定义

数据链路层:Mac地址互联,Mac地址编址:交换机在这一层

网络层:安全的编址,路由选择,

传输层:端口 确定传输协议,确定是UDP还是TCP的

会话层:提供给用户识别的部分

表示层:提供给用户识别的部分

应用层:提供给用户识别的部分

  • 二层:数据链路层:实现负载均衡:负载均衡调度器在这一层;典型的代表是F5 ,引入带宽。提升性能多买三大运营商的带宽,介入到F5内部,会根据不同的而用户用不同供应商的专线去提供数据。F5可以判断数据来源是哪个运营商,而提供最快的方案。

  • 四层:传输层:LVS典型代表,F5也是可以做的。在这一层向下的都可以观测到。LVS可以根据端口,ip地址来判断它是否需要进行负载调度

  • 七层:应用层:nginx典型代表,向下的6层它可以全部识别,可以识别http/域名/主机名进行数据识别分发。F5在七层也是可以实现的,可以和F5和LVS来实现负载再来一层nginx。常规不需要这样做。实现特定的功能。

二、LBC-原理(负载均衡集群原理)

分类-四层工作逻辑

注:

  • 假设用户地址是公网地址

  • LVS也假设是公网地址:对外暴露的是LVS的地址

  • Apache为私有地址:通过LVS转化过去的公有地址。直接返回数据报文。

  • Apache是谁访问我,我给谁数据。

  • LVS只是中间做了一个伪装,LVS的压力会非常大。导致宕机。只做了地址伪装,没有把数据真实接收数据。

  • 在Apache压力大的持续叠加Apache服务器的时候,LVS压力是最大的,需要配置高可用。

  • LVS数据只是把地址伪装,更换地址信息的更改,没有进行真实的数据数据存储和数据传输。没有实际的数据转发。

  • 进行了一次完整的TCP连接。只把地址伪装后为用户转发数据。

  • 不涉及到真实的转发

分类-七层工作逻辑

注:

  • 用户会发送一个数据报文到nginx负载调度器。

  • 源地址是用户访问地址;源端口依赖nginx随机端口,借助nginx的规则库。分发给Apache服务器,

  • 会根据当前的算法,想后端服务器去要数据,Apache会接收到nginx的请求,返回给nginx服务器。两个不同的tcp文件。

  • 源变为负载均衡服务器;直接不会告诉Apache不是客户要的数据,而是我要的。nginx收到数据后,把数据重新封装后反馈给用户。

  • 这里进行了两次不同的完整的TCP连接以及访问。

  • 对nginx的压力最大。所有的数据都会进行过重新封装分发。nginx是轻量级的,但在负载均衡上来说,压力是比较大的。

  • 涉及到数据的真实转发

分类-访问量

注:

  • LVS是nginx代理的上百倍,

适用场景

注:

  • LVS:B/S C/S 可以代理任何TCP/UDP    TCP里面还有http协议,这就是BS结构,  mysql是C/S结构,

  • NGINX:C/S:只能代理/C/S结构,只能识别到http协议;标准版本,识别协议,端口,主机名,IP都是可以识别到的。

  • nginx的负载均衡压力会很大,在有些场景下还是需要nginx来做负载,在特定需要直接进行数据转发会使用。

三、LVS-工作方式

LVS工作层级

注:

  • user:用户空间:更贴近用户;用户连接

  • kernel:内核空间:更贴近系统,驱动,操作系统,QQ,微信都是在内核空间的

  • ipvsadm:通过命令行管理工具去触发,类似于/etc/sysconfig开启路由转发。

  • ipvs:它才是真正的内核组件,是嵌在linux主机内核的,才是真正的LVS 的核心组件,只需要考虑有没有触发,通过命令确认

LVS工作模式分类

注:第四种模式正在开发,GitHub上可以看到,提交了一个新的字典,目前还是只支持三种模式

  • NAT模式:LVS有两个网卡, ,内网网卡:需要和后端的生产服务器建立所谓的数据传输,必须要相互通信。公网网卡:和用户去连接的部分。通过私网和负载路由器相连

  • TUN模式:负载路由器和用户都是通过公网直接和业务服务器直连的,也就意味着我们的业务服务器在全国各地的情况下通过TUN模式把它结合起来,构成一个完整的负载均衡集群,比较特殊,用途不是特别广泛

  • DR模式:负载路由器与我们的业务服务器都是处于同一个广播域之中,若外部用户想访问进来的话,需要借助一个物理的路由器进行跳转,这种模式是整个环境中负载量最高的一种方式。也是企业比较容易选择的一种方式。    

LVS-NAT模式

注:

  • 负载和业务服务器是处于同一个网域之中的,

  • 数据包经过交换及路由的传输,会到达负载路由器

  • 负载路由想把数据包传递给后端的服务器,所以要经过自己的算法去选择将目标地址改为后面真实服务器的其中一个地址,怎么去确定它们三个其中哪一个呢,是经过算法去决定的。

  • 数据包若是选择了11这台服务器,它会把目标地址改为11:80端口,

  • 使用的DNAT技术:目标地址转换。目的地址进行更改,完成数据报文的传输,前提是开启路由转发。

  • 数据包能够到达客户端吗?肯定是没有任何问题的

  • 客户与之能够与源数据服务器建立连接吗,是不行的只有当发出的数据报文的格式源时11,12,13,14,目标是11,12,13,14的时候,源数据报文才能够到达我们的客户端

  • rs1、rs2、rs3都是指向DNAT/SNAT,进行数据的转发。所有的数据报文都是需要进过负载路由器进行数据的转发。

LVS-NAT模式-总结

  • 集群节点处于同一个网络环境中:

  • 真实服务器必须将网关指向负载调度器

  • RIP通常是私有IP,仅用于各个集群节点通信

  • 负载调度器必须位于RS与DS之间,充当网关:客户与真实服务器之间,

  • 支持端口映射:真实服务器的端口不一定一直,只需要在LVS中把对应端口注明明确即可

  • 负载调度器必须是Linux操作系统,真实服务器随意;LVS:linux虚拟服务技术,所以必须是linux系统。

  • 进出数据报文都要进过负载调度器机器,压力较大;

LVS-DR模式

注:

  • 不管是负载调度器,真实服务器都是处于同一个网络域中,必须处于同一个网络域

  • 客户设置的是一个私有地址,真实的生产环境中是通过公网去访问的。设置私有地址授课是不涉及到路由器的转发。数据报文的转发是比较困难的,单网络的访问加入路由就可以进行公网访问

  • 把数据报文转发给后边某一台真实服务器上,怎么转发:

  • 源和目标对应不上,改为目标mac,可以通过三层转,也可以通过三层转,

  • 数据报文给rs1,对应不是自己的Mac,而是另外一台Mac,而我们还是想让它接收包,为它设置一个100的IP地址,并且把它隐藏起来。只要rs1自己知道就可以了;rs1会拿着100的IP去返回数据,并传输到客户端。

LVS-DR模式-总结

  • 集群节点处于同一个广播域中

  • 真实服务器将网关指向真实路由器:真实路由器:只是做了一个二层数据报文的修改。

  • 负载调度器只负责处理入站请求,压力最小;并发量越大的原有;并发量最大。

  • 不支持端口映射:协议层是配置不到的,所以不支持端口映射,客户端访问的80,真实服务器的端口是80 ,访问的443,真实服务器的端口必须是443。

  • 负载调度器必须是Linux,真实服务器最好是Linux

LVS-TUN模式

注:

  • 公网用户:公网IP

  • 北京的负载调度器:公网IP

  • 广州的真实服务器2:公网IP

  • 上市的真实服务器1:公网IP

  • 说明客户端可以被公网IP路由到。客户端发送数据包,可以被负载调度器探测到,并改写。

  • 数据包的二次封装。耗费的资源比LVS-NAT模式高一些,不太好用,走的是公网网络,公网网络典型的特点是慢,特殊的环境中生产服务器下,可以执行这种方案,一般不会去使用。

LVS-TUN模式-总结

  • 集群所有节点都必须直接/间接拥有公网地址:直接:配一个公网IP,间接:路由转换。

  • 真实服务器必须将网关指向真实网关处

  • 不支持端口映射:需要对数据报文进行二次封装,端口映射的话不便于进行修改。

  • DS与RS必须开启隧道功能:必须要对数据报文进行MAC,TCP,UDP的封装,不然不可以进行LVS-TUN级别的负载均衡的。

  • 入站由DS完成,出站由RS完成:入站是需要进过负载调度器的,负载调度器进行二次封装以后转发至真实服务器,真是服务器在进行第二次报文返回给客户真实数据,完成真个链路的负载。

  • 负载调度器是Linux操作系统,真实服务器随意:支持隧道功能就可以配置;现在市面上的服务器都支持隧道功能的。

  • 压力较大:需要对数据进行二次封装,所以压力较大,用途不是很广泛。

四、LVS-DR构建

硬件环境准备(个人环境说明)

注:实验环境:硬件环境准备。

  1. 网络:

  • IP 地址网段    10.10.10.0/24        255.255.255.0

  • 10.10.10.11/12/13/14/15/16           6 台

  1. 配置:

  • VMware         14  pro

  • 网络类型:仅主机模式(把自己确定的DHCP关闭,若开启DHCP会优先抢占)

  1. 操作系统配置: 硬件选项  2 U/1GB/20GB/2块网卡(2 UCPU/1GB内存/20GB存储空间/2块网卡)

  • 操作系统配置:安装desktop桌面版(centos6.8)桌面版本的是因为PXE会借助桌面的配置。

  • 授权版本:GPLv2版本

  • kdump:内存崩溃保护机制,内存是一次性存储器,断电后数据会丢失,kdump功能可以在断电后把内存中的信息保存到硬盘中,是一个缓存同步机制。

——>VMware硬件环境准备<——

  1. 网络类型:仅主机模式:编辑——>虚拟网络编辑器——>取消选中:使用本地DHCP服务京IP地址分配给虚拟机——>END

  2. 虚拟机设置:编辑虚拟机设置——>网络适配器——>仅主机模式——>确定——>END

  3. 本地网路模式配置:VMware Network Adapter VMnet1——>IPV4——>属性——>使用下面的IP地址——> IP:10.10.10.240        子网掩码:255.255.255.0——>END

  • 操作系统硬件准备:

  1. HA-server1:10.10.10.11

  2. HA-server2:10.10.10.12

  3. HA-server3:10.10.10.13

  4. HA-server4:10.10.10.14

  5. HA-server5:10.10.10.15

  6. HA-server6:10.10.10.16

——>操作系统配置<——

//1、linux桌面环境安装,修改默认启动为字符界面设置:Ctrl+Alt+F3=命令行界面——>vim /etc/inittab——>id:5:initdcfault:——>修改为:id:3:initdcfault:———>重启后为字符界面——>END
//2、关闭防火墙
[root@localhost ~]# service iptables stop
[root@localhost ~]# chkconfig iptables off
//3、关闭selinux
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
[root@localhost ~]# setenforce 0 //0表示临时关闭selinux
[root@localhost ~]# setenforce 1 //1表示临时开启selinux
//4、[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:FA:34:71
TYPE=Ethernet
UUID=e5be5c71-003b-46c9-be75-f576f4fbb97d
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=10.10.10.11
NETMASK=255.255.255.0
//5、配置区域网yum源
//编辑虚拟机设置——>CD/DVD——>勾选:已连接,启动时连接——>确定——>END //表示把光盘插入到光驱
[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
CentOS_BuildTag EULA images Packages repodata RPM-GPG-KEY-CentOS-Debug-6 RPM-GPG-KEY-CentOS-Testing-6
EFI GPL isolinux RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Security-6 TRANS.TBL
//设置开机自动挂载
[root@localhost ~]# echo "/dev/sr0 /mnt/cdrom iso9660 defaults 0 0" >>/etc/fstab
[root@localhost yum.repos.d]# mkdir back
[root@localhost yum.repos.d]# mv * back/
[root@localhost yum.repos.d]# cp -a back/CentOS-Media.repo .
[root@localhost yum.repos.d]# vim CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[root@localhost yum.repos.d]# yum clean all
[root@localhost yum.repos.d]# yum makecache
//安装gcc编译环境
[root@localhost yum.repos.d]# yum install -y gcc gcc-c++ lrzsz
//关闭初始化环境,打快照。命名为:Justinstall
[root@localhost yum.repos.d]# shutdown -h now


LVS-DR


注:

  • C 10.10.10.240:本地VMnet1配置地址;

  • D:eth0:10.10.10.11    |    eth0:0:10.10.10.100            负载路由器

  • RS1:真实服务器1

  • RS2:真实服务器2

  • 原地址发送数据包到负载调度器,负载调度器会进行对原地址进行修改,三个真实主机上的100地址是被隐藏的。

  • arp-ignore:改为1        arp-announce:改为2        既不向外发出公告,别人来的时候又不会主动接收

  • 数据报文到大不了Lo:配置路由规则:指一个路由规则,指定一下100地址的话,数据报文来了的情况下,接收数据;数据报文到达Lo;组装报文回信给客户端。完成整个工作流程

  • 在负载路由器关闭广播地址的公告功能。是一个优化方案

  • Lo:把它的子网掩码设置为255:255:255:255  32位:32位:主机位,网络位是同一个IP地址。防止出现意外。

  • 本机的IP地址为:10.10.10.240

ARP通讯行为:ARP响应级别:

  1. arp-ignore

  • 0    只要本机配置有相应IP地址就响应

  • 1    仅在请求的目标地址配置在请求到达的网络接口上时,才给予响应

ARP通告行为:

  1. arp-announce

  • 0    将本机热呢网络接口上的任何地址都向外通告

  • 1    尽可能避免像目标网络通告与网络不匹配的地址信息表

  • 2    仅向目标网络通告与其网络相匹配的地址信息

五、LVS-NAT构建

LVS-NAT

注:

  • C:20.20.20.22:充当本机的客户端

  • D:Eht0:20.20.20.11:负载路由器网卡0:公网地址:和C:20.20.20.22公网相互连接

  • D:Eht1:10.10.10.11:负载路由器网卡1:模拟的是私有地址

  • RS1:Eth0:10.10.10.12:私有地址:Apache充当负载路由器真实服务器地址

  • RS2:Eth0:10.10.10.13:私有地址:Apache充当负载路由器真实服务器地址

  • C 想访问真实服务器:C会发起一个数据包:原地址是:20.20.20.22;目标地址指向负载路由器的Eth0:20.20.20.11;访问到负载路由器的外网网卡之后,数据包会发给负载路由器,负载路由器LVS组件会根据自己的算法把它改为RS1或RS2机器的IP地址,此环境使用的是S-NAT转换;

  • 假设数据包发送给RS1,RS1接收到数据报文之后,RS1会回信给网关,此环境它会把网关指向负载调度器10.10.10.11,负载调度器会把这个数据报文传递给客户端。

  • 为了维持原目标地址对调的一致性,所以在负载路由器使用了S-NAT地址转换去保证它的一致性。

   

END





声明:JavaBBS论坛主要用于IT技术专题的交流学习,为开源技术爱好者提供广泛、权威的技术资料。若您在技术专题有更好的想法或者建议,欢迎交流!!!



推荐阅读

Recommended reading

 







JavaBBS



Git











  






https://www.javabbs.cn/git






  JavaBBS大数据






→ 






https://www.javabbs.cn





/dsj





  JavaBBS云存储






→  https://www.javabbs.cn






/ycc







  JavaBBS数据库













  https://www.javabbs.cn






/sjk







  JavaBBS云计算













  https://www.javabbs.cn






/yjs







  JavaBBSIT.Log













https://www.javabbs.cn






/itl






  JavaBBSNginx













  https://www.javabbs.cn






/ngx






  JavaBBSzabbix













https://www.javabbs.cn






/zbx






  JavaBBSJavaSE













https://www.javabbs.cn






/jse







  JavaBBS社区文章













https://www.javabbs.cn






/bwz






  JavaBBS社区资料













https://www.javabbs.cn






/bzl







文章转载自Java BBS,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论