负载均衡集群

一、集群的基本原理

集群:数据内容是一致的,集群可以被替代

分布式:各司其职,每台服务器存储自己独有的数据,对外作为单点被访问是访问整体的数据;

                分布式是不能被替代的;分布式分为MFS、GFS、ceph;

                优点:效率快

 数据库分布式存储:

如果两个人同时修改数据库,会出现数据不隔离,不能同步的问题;这时候就用到了事务隔离、还可以用主从复制、还可以用mycat实习读写分离;读写分离主要是php内部会做条件判断、一旦要进行写操作,它会去找某一台mysql数据库;因为写服务器只有一台,如果写服务器崩了,就会造成损失,这时用到了数据库的高可用-MHA、PXC、MMM,这样一旦数据库写服务器出了问题,当前服务器就会降级,而另一台服务器就会升级为新的写服务器。

会话保持:

动态资源要和数据库资源进行联动,例:购物车——如果会话没有保持,php动态资源里没有数据,导致它不知道调用哪一个数据库,导致你购物车里也没数据。因此我们要想办法保存:cookie、session;session需要用session服务器——Redis(中间件),会话是以键值对存储的、

redis也可以做集群,哨兵(cluster)

【注】:代理和调度的本质是负载均衡。 

LVS、F5(四层负载均衡 ):tcp/ip栈的传输层,针对多个应用做负载均衡,如:80、3306

七层负载均衡:如用的是http协议,只能通过http协议做负载均衡;自己是http服务器、负载均衡被调度方也是http对应的web服务器,这种就被称为代理负载均衡

代理负载均衡分为:同构代理(http、ftp、mysql):只是普通端口代理

                                异构代理(fastcgi、uwsgi):跨程序代理

1.概述

集群(cluster),也称为群集,表示一群的意思,在服务器领域表示大量的服务器的集合体。

2.计算机性能扩展方案

①纵向扩展

②横向扩展--->集群

3.企业网站架构器群的由来

    

4.企业级集群分类:

①负载均衡集群(LB---->Load Balance)

②高可用集群(HA--->High Availability)

③高性能集群(HP)

将各个主机组成集群,形成一个系统组合工作。其系统的可扩展性、可用性、容量、性能都会有大规模的提升。

5.集群部署的思路:

①可用   (然后再优化,注意系统内尽量要避免串行化和交互)

②标准化

③自动化

6.集群的种类

①:负载均衡集群(LB)

在企业网站架构中,提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体能力。

例如“DNS轮询”“应用层交换”“反向代理”等都可做负载均衡集群。

LB负载分配依赖于主节点的算法,将来自客户机的访问请求分担给多个多个服务器节点,从而缓解整个系统的负载压力。

②:高可用集群(HA)

提高应用系统的可靠性,尽可能减少终端时间为目标,确保服务的连续的性,达到高可用(HA)的容错效果,例如“故障切换”“双机热备”“多机热备”等都属于高可用集群技术

HA工作方式包括双工和主从两种模式。双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从才切换为从节点。

③:高性能集群(HP)

以提高应用系统的CPU运算速度,扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力。

如“云计算”“网格计算”;高性能群集依赖于“分布式运算”、并行计算:通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,

实现大型、超级计算机才具备的计算能力。、

7.负载均衡集群实现方式

①:硬件方式   F5   A10  Citrix NetScaler  array   梭子鱼   绿盟   ......

②:软件方式:LVS   haproxy   nginx  ats  ......

8.负载均衡集群工作的层次划分

传输层:LVS,haproxy(模拟在传输层进行调度)  新版nginx也支持

应用层:haproxy  nginx   ats

二、LVS原理详解和LVS的配置

1.LVS基本介绍

①:LVS(Linux Virtual Server)工作在传输层,基于TCP和UDP进行调度工作。已经被Linux官方编译入内核,作者是章文嵩。

②:工作方式:根据目标IP和端口转发入后端主机集群(服务器池)中的某一台主机(如何挑选,基于某种特定的算法)

③:LVS附着在netfilter基础上进行工作  ip_vs   ipvsadm

2.回顾Netfilter的五个钩子函数

①:PREROUTING ---> INPUT

②:PREROUTING ---> FORWARD --->POSTROUTING

③:OUTPUT ---> POSTROUTING

LVS由工作在用户空间的ipvsadm和内核空间的ipvs组成

ipvsadm:用户空间命令工具,用于管理LVS集群服务

ipvs:工作在内核netfilter  INPUT链

查看系统内核是否编译了LVS,以及支持的功能

grep -i -A 10 'IPVS' /boot/config-3.10.0-514.el7.x86_64

通常ipvs模块在Linux内核中被自动装载,若没有被装载,执行modprobe ip_vs进行装载,然后cat /proc/net/ip_vs 查看是否装载成功。

4.LVS架构名词

①:调度器(director) DIP

②:RS(real server)  RIP

③:CIP(client IP)

④:VIP(Director Virutal IP)

5.LVS结构类型

①:lvs-nat

②:lvs-dr(direct routing)

③:lvs-tun

④:lvs-fullnat

NAT模式:

①多目标的DNAT,real-server为隐藏的内网私有地址,用户请求需要基于NAT地址转换。

②:nat模式请求流程:通过修改请求报文目标IP地址(可能修改目标端口),挑选出某个RS的RIP实现转发。

注意事项:①:RS应该和DIP都使用私网地址,并且RS网关须指向DIP

                  ②:请求和响应报文都要基于director转发,在生产环境通常director需要高可用

                  ③:director支持端口映射,RS可以使用任何操作系统

                  ④:RS的RIP和director的DIP必须在同一网络。

原理:客户封装一个请求报文(数据载荷+源IP:CIP+目标IP:VIP),发送到调度器LVS上,在调度器上的INPUT链做DNAT转换,然后封装报文变动(数据载荷+源IP:CIP+目标IP:后台某个RIP),调度器利用算法探测后端服务器哪个比较空闲,这样报文就可基于导演服务器的某种算法顺利的转发给后端某台服务器。后台某个服务器接收到了报文,做一个响应报文(数据载荷+源IP:后台某个RIP+目标IP:CIP),然后发送给LVS调度器,在LVS做一个SNAT转换(数据载荷+源IP:自己的VIP+目标IP:CIP),最后发送给客户端

【注】:必须要求nat服务器一手托两家,请求报文和响应报文都经过DIP,后面RIP的网关必须指向导演;nat服务器要开启核心路由转发功能

DR模式:

通过修改目标MAC地址来实现调度转发

注意事项:①:保证前端路由器将目标IP为VIP的请求报文发送给director

                              解决方案:修改RS主机内核参数

                  ②:RS的RIP可以使用私有地址,也可以使用公网地址

                  ③:RS跟director必须在同一物理网络中

                  ④:请求报文经由director调度,但响应报文一定不能经过director

                  ⑤:不支持端口映射

                  ⑥:RS可以是大多数OS

                  ⑦:RS网关不能指向director

原理:请求报文(数据载荷+源IP:CIP+目标IP:VIP),经过层层路由,到达LVS调度器,它不会做任何ip地址转换,只是通过甩锅把报文甩到RIP某一个服务器上,这时LVS调度器重新封装报文(数据载荷+源IP:CIP+目标IP:后端某一台RIP);当后端RIP收到请求报文时,它会返回一个响应报文(数据载荷+源IP:自己的RIP+目标IP:CIP)

【注】:必须要求每个RIP回环接口上面都绑定一个VIP地址(避免RIP绑定的VIP和调度器上的VIP产生局域网IP冲突)

流程:客户端发送请求报文(数据载荷+源IP:CIP+目标IP:VIP),发送到路由器右侧接口,路由器会发送一个VIP地址解析对应的ARP广播,这时为了防止后面的RIP服务器接到VIP广播,就要修改对应的内核参数(让其禁止接收ARP广播、禁止回应ARP广播);此时只有LVS调度服务器可以收到ARP广播,由于此时是在内网通信,内网通信走MAC地址,所以此时的报文封装形式就发生了变化(数据载荷+源IP:CIP+目标IP:VIP+源MAC:路由器右侧接口MAC+目标MAC:调度器VIP接口的MAC),然后发送给LVS导演服务器;当导演收到后,基于调度算法挑选RIP中某一台服务器,并封装局域网的MAC地址(源MAC:调度器自己的MAC+目标MAC:RIP某一台服务器的MAC),注意由于回环地址没有MAC地址,只有真网卡有MAC地址,为了保证真网卡可以顺利把报文传给回环网卡做匹配,所以要把真网卡到回环网卡之间开启核心路由转发功能;然后重新封装响应报文(源IP:VIP+目标IP:CIP+源MAC:真网卡MAC+目标MAC:路由器右侧接口的MAC地址)

tun模式:

不修改请求报文的ip首部,通过原有ip头部之外,再封装一个ip头部。

价格比较昂贵,在企业中走专线,在企业中用的少

注意事项:①DIP  RIP   VIP  全是公网地址

                  ②RS的网关不能指向DIP

                  ③请求报文必须由director调度,响应报文必须不能经过director

                  ④不支持端口映射

                  ⑤RS的OS必须支持隧道功能

原理:

lvs-fullnat模式(默认内核不支持):

Director通过同时修改请求报文的目标地址和源地址进行转发,可以实现跨机房部署

注意事项:①:VIP是公网地址,RIP和DIP是私网地址,二者无需在同一网络

                  ②:RS接受到请求报文的源地址为DIP,因此要响应给DIP

                  ③:请求报文和响应报文都必须经由Director

                  ④:支持端口映射

                  ⑤:RS可以使用任意OS

原理:因为不在同一个网络,所以要做双向FullNAT,客户端发请求报文(源IP:CIP+目标iP:vip),调度器那会做报文更改(源IP:DIP+目标iP:RIP),当RIP收到到会返回一个响应报文(源IP:RIP+目标iP:DIP),通过层层路由到调度器,然后做报文更改(源IP:vip+目标iP:cip),最后客户收到响应报文。

6.负载均衡必须要考虑的问题--->会话保持

负载均衡集群进行调度,尤其在web服务集群,调度过程中无法避免的问题就是会话保持。

会话保持解决方案:

      ①:session绑定(以ip_hash机制进行绑定,会一定程度上损害负载均衡效果)

              cookie:LVS无法实现

      ②:session集群

      ③:session服务器(较大规模生产环境)

7.LVS的调度算法

负载均衡集群进行调度,如何挑选后端RS进行调度?--->基于固定的调度算法

静态方法:根据算法本身进行调度

RR(轮询)   WRR(加权轮询)   SH(源地址hash,实现session保持)    DH(目的地址hash)   

动态方法:根据算法以及各个RS的当前负载状态进行调度

 LC(最小连接数)   WLC(加权最小连接)    SED(最短期望延迟)    NQ(永不排队)    LBLC(基于局部性的最少链接)   LBLCR(带复制的基于局部性最少链接)

8.LVS客户端工具--->ipvsadm的用法

【注】:①:在一个ipvs主机中可以定义多个集群服务;一个集群服务中一个director至少应该能调度一个RS

                ②:使用客户端工具ipvsadm完成LVS的规则调度。

                ③:管理LVS集群服务

新增和修改集群

ipvsadm -A|E -t|u|f service-address [-s scheduler]      (-A 添加  -E 修改  -t 指定tcp  -u 指定udp  -s:指定调度算法)

service-address:①如果是tcp   -t ip:port

                           ②如果是udp  -u ip:port

scheduler:调度算法,默认是wlc

例如:ipvsadm -A -t 173.16.16.88:80 -s rr   (添加VIP为173.16.16.88的集群服务,基于TCP协议,端口为80,调度算法为轮询)

 ipvsadm -E -t 192.168.10.88:80 -s wrr  (修改VIP为192.168.10.88集群的调度算法为加权轮询)

删除集群

ipvsadm -D -t|u|f service-address      (-D 删除)

例如:ipvsadm -D -t 173.16.16.88:80       (删除VIP为173.16.16.88,并且端口为80的集群)

清空所有集群规则:

ipvsadm -C

④管理服务器池中的RS

添加和修改

ipvsadm -a|e -t|u| service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]

-a:添加可调度的服务器节点   -e:修改添加的服务器节点     -r:指定节点服务器IP地址(RIP)

-g:使用DR模型    -i:TUN模型   -m:NAT模型  (默认是DR模型)

-w:权重

例如:ipvsadm -a -t 192.168.10.88:80 -r 192.168.20.10 -m -w 1   添加服务器池中的RS服务器192.168.20.10,被192.168.10.88调度,使用NAT模型,权重为1

ipvsadm -a -t 192.168.10.88:80 -r 192.168.20.20 -m -w 2   添加服务器池中的RS服务器192.168.20.20,被192.168.10.88调度,使用NAT模型,权重为2

删除RS节点

ipvsadm -d -t|u|f service-address -r server-address

例如:ipvsadm -d -t 192.168.10.88 -r 192.168.20.10

⑤查看LVS配置的相关节点和规则

ipvsadm -L [-n] [--stats] [--rate]

动态监控访问数量   watch [-n #] "ipvsadm -L -n"

-n:不反解    -c:显示当前的连接  --stats 显示统计数据    --rate:统计速率

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

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

相关文章

结构体内存对齐和位段(重点)!!!

乐观学习,乐观生活,才能不断前进啊!!! 我的主页:optimistic_chen 我的专栏:c语言 点击主页:optimistic_chen和专栏:c语言, 创作不易,大佬们点赞鼓…

数据结构栈和堆列

目录 栈: 栈的概念: 栈的实现: 栈接口的实现: 1.初始化栈: 2.入栈: 3.出栈: 4. 获取栈顶元素: 5.获取栈中有效数据的个数: 6.检测栈是否为空,如果为…

谈谈SSH整合--一起学习吧之系统架构

SSH整合是一种非常实用的Web应用程序开发框架,能够大大提高开发效率和应用程序的质量。 一、定义 SSH整合是指将Spring、Hibernate和Struts2这三个框架进行集成,形成一个统一的Web应用程序开发框架。这种整合可以大大提高开发效率和应用程序的稳定性。…

【备忘录】docker-maven-plugin 使用

在使用docker-maven-plugin 插件时,经常会碰到一些奇怪的问题: 比如: 1、docker远程访问时,认证安全问题? 2、dockerHost 访问地址准确性? 3、需要多个tag时如何处理? 4、push 到仓库时&#xf…

Java代码示例:演示多态特性及子类方法重写(day17)

java代码里面体现多态的特点: 第一步创建一个父类father, 然后创建子类subclasses, 最后创建一个DemoMulti, 上面的父类特有的方法不是私有的,因此子类能够继承。 新建一个父类方法Father 创建子类subclasses 在下面的代码中…

LabVIEW深度学习

目录 一、配置环境1.1、显卡选择1.2、下载显卡驱动1.3、下载并安装Anaconda1.4、配置Anaconda软件包下载服务器1.5、配置虚拟环境tf_gpu1.6、安装vscode1.7、安装tensorflow1.8、下载安装Git1.9、安装TensorFlow Object Detection API框架1.10、安装依赖的python软件包1.11、配…

Python 简单使用 RabbitMQ

一、安装 pip install pika 二、推送消息到队列中 执行pythone方法 import pika import time# 用户名和密码 user_info pika.PlainCredentials(admin,admin)# 连接服务器上的rabbitMQ服务 connection pika.BlockingConnection(pika.ConnectionParameters(127.0.0.1, 5672,…

HTTPS、对称/非对称加密、SSL/TLS

问题描述:HTTP的请求和响应都是明文传输,有安全隐患 HTTPS:HTTPS并不是一个单独的协议,是在 TCP 和 HTTP 之间加入了 SSL/TLS 安全协议,使得报文能够加密传输,SSL是TLS的前身,现在使用的大多都…

Taro活动列表中,对某一个活动添加分享按钮

采用data-留下分享链接的拼接参数 1.在item文件中写按钮 openType“share” <ButtonclassName{classes.rowRightShareButton}openType"share"data-share-transfer-id{lastGiftingTransferId}data-share-picture-url{shareUrl}data-share-title{shareTitle}onClic…

【Node】使用Node.js构建简单的静态页面生成器

使用Node.js构建简单的静态页面生成器 在现代的Web开发中&#xff0c;静态网站因其速度快、安全性高而越来越受到开发者的青睐。本文将介绍如何使用Node.js构建一个简单的静态页面生成器&#xff0c;通过这个小项目&#xff0c;你将了解到静态网站生成的基本原理和实现方法。 …

在开源的基础上构建 AI 需要一种全新的应用程序安全方法

人工智能已经从科幻小说中涌现出来&#xff0c;进入了我们的日常生活。 在开源软件&#xff08;OSS&#xff09;模型的支持下&#xff0c;人工智能革命正在加速。这些模型是专为开发 AI 而制作的复杂开源代码包&#xff0c;使组织能够高效、大规模地部署 AI 模型。 虽然大多数…

LLM 的下一站 Mamba,取代 Transformer,虽然在争议

虽然业界大佬对Mamba有点争议&#xff0c;但是直觉而言&#xff0c;Mamba会取代 Transformer 成为LLM的基础模型算法。 1&#xff0c; Mamba 比 Transformer的优点 1.1 处理的序列更长 1.2 比Transformer 更快 1.3 可解释性、可理解性、可控性、可调试性比 Transformer 更强 2…

StreamingT2V文本生成视频多模态大模型,即将开源!

1、前言 Picsart人工智能研究所、德克萨斯大学和SHI实验室的研究人员联合推出了StreamingT2V视频模型。通过文本就能直接生成2分钟、1分钟等不同时间&#xff0c;动作一致、连贯、没有卡顿的高质量视频。 虽然StreamingT2V在视频质量、多元化等还无法与Sora媲美&#xff0c;但…

npm配置项管理

全局模块路径配置 修改配置项 在使用Windows系统时&#xff0c;C盘告急一直被大家所诟病的问题&#xff0c;而nodejs的包管理工具npm默认将全局模块路径设置到了C盘。现要将npm全局模块路径设置到其他位置&#xff0c;减小C盘压力 npm config set prefix "E:\nodejs\no…

【C++第二阶段】文件操作

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 文件操作文件写入流程简单的demo写操作 文件读流程二进制写文件二进制读文件 文件操作 文件写入流程 写文件包括以下几个步骤 1.包含头文件 2.创建流对象 3.打开文件&#xff0…

大数据学习第十二天(hadoop概念)

1、服务器之间数据文件传递 1&#xff09;服务器之间传递数据&#xff0c;依赖ssh协议 2&#xff09;http协议是web网站之间的通讯协议&#xff0c;用户可已通过http网址访问到对应网站数据 3&#xff09;ssh协议是服务器之间&#xff0c;或windos和服务器之间传递的数据的协议…

IP SSL的应用与安装

IP SSL&#xff0c;即互联网协议安全套接字层&#xff0c;它是一种为网络通信提供安全及数据完整性的安全协议。在网络传输过程中&#xff0c;IP SSL可以对数据进行加密&#xff0c;这样即便数据在传输途中被截取&#xff0c;没有相应的解密密钥也无法解读内容。这一过程如同将…

合并两个单链表

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 但行前路&#xff0c;不负韶华&#…

redis的键值基本操作

设置数据 首先设置键值对 删除age&#xff0c;会得到nil&#xff0c;表示这个键已经被删除掉了 判断age键还在不在 查找所有键 查找所有以me结尾的键 删除所有键 redis的键和值都是二进制存储的&#xff0c;所以默认不支持中文。 但是&#xff0c;我们重新登录客户端&#xff…

Unity自定义框架(1)-----------单例模式

前言&#xff1a; Unity作为一款强大的游戏开发引擎&#xff0c;其基础框架的设计对于项目的结构和性能有着重要的影响。其中&#xff0c;单例模式是一种常用的设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点。 什么是单例模式&#xff1f…