负载均衡集群

news/2024/7/26 11:02:41/文章来源:https://blog.csdn.net/m0_51586984/article/details/137221844

一、集群的基本原理

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

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

                分布式是不能被替代的;分布式分为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.luyixian.cn/news_show_1034562.aspx

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

相关文章

基于springboot+vue+Mysql的教学视频点播系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

设计模式之代理模式解析(上)

代理模式 1)概述 1.定义 给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。 2.作用 当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问…

ssm018简易版营业厅宽带系统+jsp

营业厅宽带系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本营业厅宽带系统就是在这样的大环境下诞生,其可以帮助管理者在短时间…

Python快速入门系列-9(Python项目实战)

第九章:Python项目实战 9.1 开发一个简单的Web应用9.1.1 项目概述9.1.2 环境准备9.1.3 项目结构9.1.4 代码实现9.1.4.1 创建数据库模型9.1.4.2 创建视图9.1.4.3 实用工具函数9.1.4.4 运行应用9.1.5 模板设计9.2 数据分析与可视化项目9.2.1 项目概述9.2.2 环境准备9.2.3 数据分…

主干网络篇 | YOLOv8改进之用RCS-OSA替换C2f(来源于RCS-YOLO)

前言:Hello大家好,我是小哥谈。RCS-YOLO是一种目标检测算法,它是基于YOLOv3算法的改进版本。通过查看RCS-YOLO的整体架构可知,其中包括RCS-OSA模块。RCS-OSA模块在模型中用于堆叠RCS模块,以确保特征的复用并加强不同层之间的信息流动。本文就给大家详细介绍如何将RCS-YOLO…

使用Java流API构建树形结构数据

简介: 在实际开发中,构建树状层次结构是常见需求,如组织架构、目录结构或菜单系统。本教案通过解析给定的Java代码,展示如何使用Java 8 Stream API将扁平化的菜单数据转换为具有层级关系的树形结构。 1. 核心类定义 - Menu Data…

Day65-企业级防火墙iptables精讲1

Day65-企业级防火墙iptables精讲1 补充:1.什么是防火墙?2.防火墙种类2.1 商用防火墙介绍2.2 Linux下防火墙介绍 3.选择何种防火墙?4.企业级架构最佳防火墙场景5.学好iptables的技术栈基础6.Iptables是什么?7.Iptables企业常用场景…

Kafka架构概述

Kafka的体系结构 Kafka是由Apache软件基金会管理的一个开源的分布式数据流处理平台。Kafka具有支持消息的发布/订阅模式、高吞吐量与低延迟、持久化、支持水平扩展、高可用性等特点。可以将Kafka应用于大数据实时处理、高性能数据管道、流分析、数据集成和关键任务应用等场景。…

Java入门学习Day04

本篇文章主要介绍了:如何输入数据、字符串拼接、自增自减运算符、类型转换(int,double等) CSDN:码银 公众号:码银学编程 一、键盘输入练习 Scanner是Java中的一个类,用于从控制台或文件中读…

【Python BUG】ModuleNotFoundError: No module named ‘streamlit.cli‘

问题 streamlit做大模型前端demo,安装后不好使。 解决方案 参考: https://zhuanlan.zhihu.com/p/656164361 找到下面文件: 替换、修改内容: # from streamlit.cli import main from streamlit.web.cli import main原来是上边…

【HTML】注册页面制作 案例二

(大家好,今天我们将通过案例实战对之前学习过的HTML标签知识进行复习巩固,大家和我一起来吧,加油!💕) 案例复习 通过综合案例,主要复习: 表格标签,可以让内容…

力扣Lc26--- 1108. IP 地址无效化(java版)-2024年4月02日

1.题目描述 2.知识点 注1:首先,在Java中,字符类型应该使用单引号’,而不是双引号"。其次,修改字符数组中的元素应该使用单引号。 注2:String类的replace方法用于在字符串中替换指定的字符或字符序列。…

Java获取IP地址以及MAC地址(附Demo)

目录 前言1. IP及MAC2. 特定适配器 前言 需要获取客户端的IP地址以及MAC地址 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class test {public static void main(String[] args) {try {// 执行命令Process process…

158 Linux C++ 通讯架构实战13,epoll 原理和函数介绍,epoll_create,epoll_ctl ,epoll_wait

epoll技术简介 //(2.1)epoll概述 //(1)I/O多路复用:epoll就是一种典型的I/O多路复用技术:epoll技术的最大特点是支持高并发; //传统多路复用技术select,poll,在并发量达到1000-2000,性能就会明显下…

python爬取B站视频

参考:https://cloud.tencent.com/developer/article/1768680 参考的代码有点问题,请求头需要修改,上代码: import requests import re # 正则表达式 import pprint import json from moviepy.editor import AudioFileClip, Vid…

【热门话题】WebKit架构简介

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 WebKit架构简介一、引言二、WebKit概览1. 起源与发展2. 模块化设计 三、WebCore…

LabVIEW挖坑指南

一、挖坑指南 1.1、输出变量放在条件框内 错误写法: 现象:如果没进入对应的分支,输出为默认值 正常写法: 让每个分支输出的值都在预料之内。 1.2、统计耗时不准 错误写法 现象:统计出来的耗时是2000ms 正常写法&a…

PyQt qrc2py 使用PowerShell将qrc文件转为py文件并且将导入模块PyQt或PySide转换为qtpy模块开箱即用

前言 由于需要使用不同的qt环境(PySide,PyQt)所以写了这个脚本,使用找到的随便一个rcc命令去转换qrc文件,然后将导入模块换成qtpy这个通用库(支持pyside2-6,pyqt5-6),老版本的是Qt.py(支持pysi…

pygame--坦克大战(二)

加载敌方坦克 敌方坦克的方向是随机的,使用随机数生成。 初始化敌方坦克。 class EnemyTank(Tank):def __init__(self,left,top,speed):self.images {U: pygame.image.load(img/enemy1U.gif),D: pygame.image.load(img/enemy1D.gif),L: pygame.image.load(img/e…

搜维尔科技:SenseGlove Nova 允许以最简单的方式操作机器人并与物体交互

扩展 Robotics 和 QuarkXR 人机界面 XR 应用 Extend Robotics 利用扩展现实技术,让没有机器人专业知识的个人能够远程控制机器人。他们的 AMAS 解决方案使操作员能够不受地理限制地轻松控制机器人。 需要解决的挑战【搜维尔科技】 目前,操作机器人是一…