5_企业架构LNMP高可用负载均衡服务器

企业架构LNMP高可用负载均衡服务器之Nginx

学习目标和内容

1、能够描述负载均衡的作用

2、能够了解负载均衡常见实现方式

3、能够使用Nginx实现负载均衡

4、能够描述Nginx的常见负载均衡算法

一、背景描述及其方案设计

1、业务背景描述

时间:2011.6.-2013.9

发布产品类型:互联网动态站点 商城

⽤户数量: 4000-8000(用户量猛增)

PV : 16000-100000(24⼩时访问次数总和)

QPS: 50-100*(每秒访问次数)

DAU: 400-800(每日活跃用户数)

随着业务量骤增,之前单点服务器,已经不能够满足业务使用需要。如果主服务器宕机,备服务器提供服务,因为流量太大,备也宕机。需要多台服务器,同时提供服务。

2、模拟运维设计方案

以上架构服务器,已经不能够满足以上提到的业务需求。架构发生如下变化

二、服务器基本环境部署

1、克隆复制虚拟机

server01 web1 192.168.17.102

server02 mysql 192.168.17.100

server03 web2 192.168.17.101

server04 lb load balance 192.168.17.103

2、基础环境配置

网卡IP、主机名称、hosts解析

三、负载均衡服务器搭建

1、引入负载均衡技术

负载均衡技术 (load blance) 是一种概念 把资源的使用进行平均分配。

负载均衡:分发流量、请求到不同的服务器。使流量平均分配(理想的状态的)

作用:

服务器容灾 流量分发

主要作用:

①流量分发 请求平均 降低单例压力

其他作用:

②安全 隐藏后端真实服务

③屏蔽非法请求(七层负载均衡)

2、负载均衡分类

1)二层负载均衡(mac)

根据OSI模型分的二层进行负载,一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后,再分配后端实际的MAC地址响应

2)三层负载均衡(ip)

一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后,再分配后端实际的IP地址响应

3)四层负载均衡(tcp) 网络运输层面的负载均衡

在三层负载均衡的基础上,用ip+port接收请求,再转发到对应的机器

4)七层负载均衡(http) 智能型负载均衡

根据虚拟的url或IP,主机接收请求,再转向(反向代理)相应的处理服务器

3、常见实现方式

实现方式分类:

①软件级别 性价比高 可控性强

②硬件级别 性能好 价格高 几万到几十万不等

硬件是实现方式:

F5 BIG-IP 四层和七层

软件实现方式:

OSI分层实现方式
七层Nginx、HAProxy
四层LVS、HAProxy、Nginx(1.9版本后)

四层和七层对比:

4、Nginx负载均衡配置

官方文档:Module ngx_http_upstream_module

架构分析:

①用户访问请求Nginx负载均衡服务器

②Nginx负载均衡服务器再分发请求到web服务器

实际配置负载均衡,只需修改作为负载均衡服务器的Nginx即可。当前架构中的server04

①在客户端解析域名到负载均衡服务器

②在负载均衡的Nginx配置

#注意本次架构中  server04的Nginx服务器是负载均衡服务器
shell > cd /usr/local/nginx/conf/nginx.conf

配置文件示例

#在http段进行配置
#分发请求到后端服务器
upstream shop {
    #web1 server01
    server 192.168.17.102;
    #web2 server02
    server 192.168.17.101;
}
#修改之前的shop的server段配置
server {
    listen 80;
    server_name www.shop.com;
    location / {
        #代理转发到shop段  匹配到上面的upstream
        proxy_pass http://shop;
        #以下两条配置,实质是设置了传输的header头信息  
        #传输域名给后端服务器  进行识别  方便匹配对应server虚拟主机
        proxy_set_header Host $host;
        #发送客户端IP  给后端服务器  用来方便后端服务器识别用户真实IP
        proxy_set_header X-Real-IP $remote_addr;
    }
}

③重载负载均衡服务器Nginx配置测试查看效果

可以停掉其中一台web服务器进行测试

5、查看确认负载均衡

如何确认服务器是否实现了负载均衡?

①在不同的web服务器同路由访问的文件中,写入不同的信息,以示区别。

②通过查看后端web服务器的访问日志进行确定

==方法一:在不同服务器写入不同信息==

①分别修改web服务器的信息

shell > vim /usr/local/nginx/html/tp5shop/application/home/controller/Base.php

写入一个动态参数,根据php语法自动调用当前主机名称

②访问查看负载均衡效果

方法二:查看后端web服务器的访问日志

shell > cat /usr/local/nginx/logs/access.log

##6、负载均衡后获取客户端IP

负载均衡之后,在后端的web服务器获取到的是负载均衡服务器的IP,而不能够获取到客户端的真实IP。

需要进行以下特殊配置:

①首先在负载均衡服务器中配置,转发客户端IP给后端web服务器

②后端web服务器需要配置,识别从负载均衡服务器传输过来的客户端真实IP

官方网址:Module ngx_http_realip_module

使用ngx_http_realip_module模块提供的set_real_ip_from语法,默认此模块没有安装,需要编译时添加编译参数

web服务器上配置set_real_ip_from 代表从哪儿来源的IP,需要识别真实客户端IP

示例配置:

#此配置在web服务器上的nginx
#可配置到http、server、location中,推荐配置到server中
#配置需要识别的IP来源   负载均衡的IP
set_real_ip_from  192.168.17.103

##7、upstream中server的关键字

upstream中的分发之后的几个关键字:

backup 备 其他的没有backup标识的都无响应,才分发到backup

down 此条配置,不会被分发到

upstream shop {
    server 192.168.17.102 down;
    server 192.168.17.101 backup;
}

##8、session一致性问题

访问管理后端页面,登录发现验证码不通过

分析原因:

①比如分发到web1服务器,生成验证码,存储到session中,默认在服务器本地

②再次校验的时候,请求分发到web2服务器了,所有验证码一直校验不通过

解决方案思路:

①生成和验证session都请求同一台服务器

②共享session nfs mysql ==内存缓存软件(memcached、redis)==

9、Nginx的负载均衡算法

Nginx 官方默认3种负载均衡的算法

①==Round-Robin RR轮询(默认)== 一次一个的来(理论上的,实际实验可能会有间隔)

②==weight 权重== 权重高多分发一些 服务器硬件更好的设置权重更高一些

③==ip_hash== 同一个IP,所有的访问都分发到同一个web服务器

Tip:

第三方模块实现的调度算法 需要编译安装第三方模块

④fair 根据后端服务器的繁忙程度 将请求发到非繁忙的后端服务器

⑤url_hash 如果客户端访问的url是同一个,将转发到同一台后端服务器

验证一:验证加权轮询算法

示例配置:

upstream shop {
    #web1 server01
    server 192.168.17.102 weight=5;
    #web2 server02
    server 192.168.17.101 weight=3;
}

server01 web 1 1 1 1 1 1

server03 web 2 1 1 1

8次中,server01分发5次,server03分发3次

验证二:ip一致性算法

示例配置:

upstream shop {
    #ip hash 一致性算法配置  设置此项  weight就失效了
    ip_hash;
    #web1 server01
    server 192.168.17.102 weight=5;
    #web2 server02
    server 192.168.17.101 weight=3;
}

10、实现负载均衡高可用

所有的请求流量,都要经过负载均衡服务器,负载均衡服务器压力很大,防止它宕机,导致后端服务所有都不可用,需要对负载均衡服务器,做高可用

给负载均衡服务器server04做一台备用服务器server05,通过keepalived实现高可用。

通过keepalived实现VIP在负载均衡服务器组的切换。

server04 master LB 192.168.17.103

server05 backup LB 192.168.17.50

主负载均衡的keepalived配置

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    #虚拟路由ID 新ID 不要之前的冲突
    virtual_router_id 52
    priority 100
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        #添加新VIP
        192.168.17.201
    }
    track_script {
        check_nginx
    }
}

备负载均衡的keepalived配置

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    #修改route_id
    virtual_router_id 52
    priority 99
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #unicast_src_ip 192.168.17.101
    #unicast_peer {
    #    192.168.17.102
    #}
    virtual_ipaddress {
        #新VIP
        192.168.17.201
    }
    track_script {
        check_nginx
    }
}
​

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

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

相关文章

移动平均滤波的原理和C代码

移动平均滤波是一种简单有效的平滑信号的方法,它通过计算一系列数据点的平均值来减小信号中的波动。基本的移动平均滤波方法有两种:简单移动平均(SMA)和指数加权移动平均(EWMA)。 简单移动平均滤波&#xf…

Stream API 方法使用总结

文章目录 1.1、Stream介绍1.2、Stream创建对象(1)empty()方法(2)of()方法(3)Arrays.stream()方法(4)list.stream()方法 1.3、Stream中间方法(1)filter()方法&…

SpringBoot之自定义Starter

目录 一、自己的理解 1. 理解一 2. 理解二 二、自定义starter(重点) 三、以mybatis-spring-boot-starter为例进行分析 1. 写好自己的自动配置类逻辑 2. 创建自己的starter项目并引入自动配置类项目的依赖 3. 在其它项目中使用自定义的starter 一…

如何开启Windows Server 2016 远端桌面

使用GUI 设定 服务器管理器–> 本地服务器–> 远端桌面 启用远端桌面 远端–> 允许远端连线至此电脑 会提示防火墙设定跟电源设定 防火墙之前已经关闭了 完成

设计基于STM32的温度传感器实时数据采集和显示系统

温度传感器作为常见的传感器之一,被广泛应用于各种领域,如工业自动化、家电控制等。为了实时监测和控制温度,设计一个基于STM32的温度传感器实时数据采集和显示系统是很有必要的。本文将详细介绍如何设计这样一个系统,并提供相应的…

nodejs微信小程序+python+PHP健身房信息管理系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

Gitee拉取代码报错You hasn‘t joined this enterprise! fatal unable to access

文章目录 一、问题二、解决2.1、进入**控制面板**2.2、进入**用户账户**2.3、进入**管理Windows凭据**2.4、**普通凭据**2.4.1、添加2.4.2、编辑 2.5、重新拉取|推送代码 三、最后 一、问题 Gitee拉取仓库代码的时候报错You hasnt joined this enterprise! fatal unable to ac…

二十五、DSL查询文档(全文检索查询、精确查询、地理查询、复合查询)

目录 一、全文检索查询 1、match查询 语法: 2、multi_match查询 语法: 3、match和mult_match的区别 二、精确查询 1、term查询: 语法: 2、range查询:(范围查询) 语法: 三、地理查询 1、geo_bou…

SSM新闻发布管理系统

SSM毕设分享 序号1:SSM新闻发布管理系统 1 项目简介 Hi,各位同学好,这里是郑师兄! 今天向大家分享一个毕业设计项目作品【SSM新闻发布管理系统】 师兄根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数…

【算法】单调栈题单——矩阵系列⭐

文章目录 题目列表84. 柱状图中最大的矩形(单调栈找左右两边第一个更低的位置)85. 最大矩形⭐⭐⭐⭐⭐解法1——使用柱状图的优化暴力方法解法2——单调栈 :归因到 84. 柱状图中最大的矩形 🐂 1504. 统计全 1 子矩形⭐解法1——枚…

Java 不要在父类的构造方法里面调用可以被子类重写的方法

不要在父类的构造方法(代码块)里面调用可以被子类重写的方法 我们从第一天学习Java开始,就对Java的类初始化顺序牢记于心。但是在实际开发过程中,似乎很难能接触这一部分的应用。在这之前,我也认为它只是面试中八股文而已,直到最…

The Big IAM Challenge 云安全 CTF 挑战赛

The Big IAM Challenge 云安全 CTF 挑战赛 今天,我们来做一下有关于云安全 的CTF 挑战赛 The Big IAM Challenge,旨在让白帽子识别和利用 IAM错误配置,并从现实场景中学习,从而更好的认识和了解IAM相关的风险。比赛包括6个场景,每…

Zotero 安装及常用插件设置指南

Zotero 安装及常用插件设置指南 本指南旨在帮助用户安装并配置 Zotero。通过本教程,您将能够实现以下功能: 界面语言设置为中文使用颜色标签来区分不同阅读状态的文献重要文献标记显示影响因子、JCP和中科院分区翻译插件Sci-Hub 集成 安装和设置步骤…

leetCode 90.子集 II + 回溯算法 + 图解 + 笔记

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列 示例 1: 输入:nums [1,2,2] 输出…

基于CNN对彩色图像数据集CIFAR-10实现图像分类--keras框架实现

项目地址(kaggle):基于CNN对彩色图像数据集CIFAR-10实现图像分类--keras | Kaggle 项目地址(Colab):https://colab.research.google.com/drive/1gjzglPBfQKuhfyT3RlltCLUPgfccT_G9 导入依赖 在tensorflow…

第一百八十八回 分享三个使用TextField的细节

文章目录 1. 概念介绍2. 使用方法2.1 修改组件的填充颜色2.2 修改组件的高度2.3 给组件添加圆角3. 示例代码4. 内容总结我们在上一章回中介绍了"DropdownButton组件"相关的内容,本章回中将介绍**TextField组件的细节.**闲话休提,让我们一起Talk Flutter吧。 1. 概念…

EasyRecovery易恢复2024最新免费版电脑数据恢复软件功能介绍

EasyRecovery从(易恢复2024)支持恢复不同存储介质数据,在Windows中恢复受损和删除文件,以及能检索数据格式化或损坏卷,甚至还可以从初始化磁盘。同时,你只需要最简单的操作就可以恢复数据文件,如&#xff1…

YITH Product Shipping for WooCommerce商城产品配送运输插件

点击访问原文 YITH Product Shipping for WooCommerce商城产品配送运输插件 - 易服客工作室 YITH Product Shipping for WooCommerce商城产品配送运输插件根据商店的每个产品处理不同的运费,例如您可以为每个州、地区或城市设置不同的费用。 根据店铺的单品处理不…

搭建 ebpf 开发测试环境

0 内容说明 这部分主要讲述了如何通过官网学习ebpf,以及如何搭建自己的ebpf开发测试环境,主要是需要安装哪些工具链。 1 ebpf在线学习 ebpf官网中提供了一个快速在线学习ebpf的路径,在这个学习平台中一共有两项学习内容,一个是…

在Spring Boot中隔离@Async异步任务的线程池

在异步任务执行的时候,我们知道其背后都有一个线程池来执行任务,但是为了控制异步任务的并发不影响到应用的正常运作,我们需要对线程池做好相关的配置,以防资源过度使用。这个时候我们就考虑将线程池进行隔离了。 那么我们为啥要…