1 扩容方式介绍

  一个单一站点,想要扩,可以从硬件软件等多个方面来进行。

1 单机垂直扩容:硬件资源增加
2 水平扩展:集群化
3 细粒度拆分:分布式
  3-1 数据分区
  3-2 上游服务SOA化(原生支持水平/垂直扩容)
  3-3 入口细分
    3-3-1 浏览器
    3-3-2 移动端原生App(物联网)
    3-3-3 H5内嵌式应用
4 数据异构化
4-1 多级缓存
4-1-1 客户端缓存
4-1-2 CDN缓存
4-1-3 异地多活
4-1-4 Nginx缓存
5 服务异步化
5-1 拆分请求
5-2 消息中间件

2 垂直扩容和水平扩容

  垂直扩容择是增加硬件内存等配置的方式,来实现增加缓存实例系统容量的。

  水平扩容指的是通过增加节点的方式来增加整个系统的容量,这一种扩容方式是需要应用程序支持的。

  两者的区别在于垂直扩容则是增加设备自身容量来进行扩容,水平扩容是通过加机器进行的一种扩容。

  举个例子来说,就比如说用篮子来用苹果。100个苹果需要运送,总共有两个篮子,每个篮子只能运10个,现在想要增加运行效率,垂直扩容的方案就是将篮子的容量扩大,而水平扩容就是添加篮子

  两种扩容都是常见的扩容方式,虽然都能够有效的扩容,但是两者也有着相应的缺点

  水平扩容,它会牵扯到数据迁徙,在迁徙过程中又要保证业务可用,又要保证数据不丢失,这就容易出现错误。

  而垂直扩容所需要的成本比较大,并且有些数据并不能一直使用垂直扩容,所以会存在相对应的弊端。两者在使用上基本上是依据个人的需求进行选择。

3 水平扩展时,集群中使用Nginx做负载均衡

3.1 nginx方向代理和负载均衡

  https://www.cnblogs.com/jthr/p/16827617.html

3.2 nginx支持的负载均衡策略

  https://www.cnblogs.com/jthr/p/16827617.html 中的4.4

4 使用sticky模块完成Nginx的负载均衡

4.1 nginx官网介绍

  http://nginx.org/en/docs/http/ngx_http_upstream_module.html#sticky

4.2 sticky项目官网

  https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src/master/

4.3 sticky介绍

  sticky是第三方模块,可以在nginx这一类静态服务器做负载均衡的时候下发给客户端cookie。

  它不需要上游服务器支持cookie,通过sticky下发cookie即可。

4.4 工作原理

  1)客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。

  2)后端服务器处理完请求,将响应数据返回给nginx。

  3)此时nginx通过sticky生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值

  4)客户端接收请求,并保存带route的cookie。

  5)当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器

4.5 下载安装

4.5.1 下载

  https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/downloads/?tab=tags

4.5.2 上传到服务器并解压

tar xzvf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz 

4.5.3 重新编译Nginx

  进入nginx源码目录,注意nginx-1.21.6事源码目录,nginx是安装目录(之前nginx安装好了)

注意:--prefix=/usr/local/nginx这里的/usr/local/nginx是安装目录  add-module指的是添加第三方的模块 后面根刚才stikey的解压的文件目录
注意:这个命令相当于给nginx做了个升级,生成一个全新的nginx,不会记住原来的额配置
./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d

4.5.4 执行命令make

1)出现如下报错

  

  因为缺少了一些依赖

2)安装依赖

yum -y install gcc openssl openssl-devel pcre-devel zlib zlib-devel

3)再次执行命令

./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d

4)再次执行make,还有错误

5) 进入stikey的目录

cd /usr/local/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d

修改文件ngx_http_sticky_misc.h

vi ngx_http_sticky_misc.h

加上配置内容

#include <openssl/sha.h>
#include <openssl/md5.h>

6)回到nginx源码目录,再次执行命令

./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d

7)再次执行命令make

  成功

  make成功后,不要直接make install,因为它会直接覆盖掉原先安装好的的nginx。

  

8)测试下

  执行命令

make upgrade

  出现下图,说明没有问题

  

4.5.5 升级好的文件

  make它不是在原安装目录直接升级覆盖,而是创建了新的执行文件,在objs文件夹下

4.5.6 备份原来的安装文件

  为了平滑升级,先把原来的文件重命名

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

4.5.7 把新的执行文件复制过去

cp nginx /usr/local/nginx/sbin/

4.5.8 查看nginx有哪些功能

进入安装目录

cd /usr/local/nginx/sbin/

执行命令  

./nginx -V

发现stikey模块已经有了

4.6 使用sticky下发cooike来负载均衡

  name:cookie的key,非必要配置

  expires:cookie失效时间,非必要配置

upstream httpget {

sticky name=route expires=6h;

server 192.168.44.102;
server 192.168.44.103;
}

  最简配置

upstream httpget {

sticky;

server 192.168.44.102;
server 192.168.44.103;
}

  

Nginx08 通过扩容提升整体吞吐量 nginx平滑升级-添加sticky模块和使用的更多相关文章

  1. 让你的网站免费支持 HTTPS 及 Nginx 平滑升级

    为什么要使用 HTTPS ? 首先来说一下 HTTP 与 HTTPS 协议的区别吧,他们的根本区别就是 HTTPS 在 HTTP 协议的基础上加入了 SSL 层,在传输层对网络连接进行加密.简单点说在 ...

  2. Nginx range filter模块数字错误漏洞修复 (Nginx平滑升级) 【转】

    对线上生产环境服务器进行漏洞扫描, 发现有两台前置机器存在Nginx range filter模块数字错误漏洞, 当使用nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header ...

  3. Nginx range filter模块数字错误漏洞修复 (Nginx平滑升级)

    对线上生产环境服务器进行漏洞扫描, 发现有两台前置机器存在Nginx range filter模块数字错误漏洞, 当使用nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header ...

  4. nginx平滑升级实战

    Nginx 平滑升级 1.查看旧版Nginx的编译参数 [root@master ~]# /usr/local/nginx/sbin/nginx -V [root@master ~]# ll ngin ...

  5. Nginx平滑升级版本!(重点)

    一.解释nginx的平滑升级 随着nginx越来越流行使用,并且nginx的优势也越来越明显,nginx的版本迭代也开始了加速模式,1.9.0版本的nginx更新了许多新功能,例如stream四层代理 ...

  6. 02 . Nginx平滑升级和虚拟主机

    Nginx虚拟主机 在真实的服务器环境,为了充分利用服务器资源,一台nginx web服务器会同时配置N个虚拟主机,这样可以充分利用服务器的资源,方便管理员的统一管理 配置nginx虚拟主机有三种方法 ...

  7. Nginx平滑升级详细步骤-113p.cn

    认识平滑升级 有时候我们需要对Nginx版本进行升级以满足运维人员对其功能的需求,例如添加xxx模块,需要xxx功能,而此时Nginx又在跑着业务无法停掉,这时我们就只能平滑升级了. 平滑升级原理 N ...

  8. Nginx 平滑升级、Nginx的一些基础配置

    # Nginx 平滑升级 # 方案一:使用Nginx服务信号进行升级 # 1.将就版本的sbin目录下可执行nginx进行备份(mv nginx nginxold) # 2.将新版本 configur ...

  9. nginx 番外----添加第三方模块

    #第三方模块需要先进行下载,然后再编译时指定文件目录 1.查看当前编译模块 root@nginx sbin]# ./nginx -V #查看当前添加模块 nginx version: nginx/ b ...

  10. Nginx在线服务状态下平滑升级或新增模块的详细操作

    今天应开发的需求,需要在Nginx增加一个模块,并不能影响现有的业务,所以就必须要平滑升级Nginx,好了,不多说了 1:查看现有的nginx编译参数 /usr/local/nginx/sbin/ng ...

随机推荐

  1. Vue3 企业级优雅实战 - 组件库框架 - 7 组件库文档的开发和构建

    该系列已更新文章: 分享一个实用的 vite + vue3 组件库脚手架工具,提升开发效率 开箱即用 yyg-cli 脚手架:快速创建 vue3 组件库和vue3 全家桶项目 Vue3 企业级优雅实战 ...

  2. mysql 多个结构不同表查询 返回相同字段名

    ( select ID,数据库原字段名1 AS 统一字段名1,数据库原字段名2 AS 统一字段名2 from 第一个表名 WHERE 1) UNION(联合表查询)( select ID,数据库原字段 ...

  3. JDK 8 Stream 流 用 法

    import com.entity.Person;import org.junit.Test;import java.util.*;import java.util.function.Function ...

  4. 万字长文!对比分析了多款存储方案,KeeWiDB最终选择自己来

    大数据时代,无人不知Google的"三驾马车"."三驾马车"指的是Google发布的三篇论文,介绍了Google在大规模数据存储与计算方向的工程实践,奠定了业界 ...

  5. adb版本不同导致一个服务杀死另一个服务

    前言 由于我用安装模拟器进行调试app,需要连接到固定端口, 而开发测试的时候用到eclipse中调用sdk中包含一个版本的adb, 另外Android killer中也包含一个版本的adb, 另外我 ...

  6. SpringCloud Alibaba(六) - Seata 分布式事务锁

    1.Seata 简介 1.1 Seata是什么 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事 ...

  7. 玩 ChatGPT 的正确姿势「GitHub 热点速览 v.22.49」

    火了一周的 ChatGPT,HG 不允许还有小伙伴不知道这个东西是什么?简单来说就是,你可以让它扮演任何事物,据说已经有人用它开始了颜色文学创作.因为它太火了,所以,本周特推在几十个带有"c ...

  8. 【机器学习】李宏毅——生成式对抗网络GAN

    1.基本概念介绍 1.1.What is Generator 在之前我们的网络架构中,都是对于输入x得到输出y,只要输入x是一样的,那么得到的输出y就是一样的. 但是Generator不一样,它最大的 ...

  9. java中的静态属性和静态方法

    本文主要讲述java的静态变量和静态方法 静态变量和静态方法,随着类加载完成,而完成,随着类的消失,而销毁. 静态方法只能调用静态变量/方法:普通方法,既能调用静态变量/方法,也能调用非静态变量/方法 ...

  10. cs231n__4.1 Backpropagation and Neural Network

    CS231n 4.1 Backpropagation 回顾: 两个损失函数: 优化的方法: 如何计算梯度: 用有限差分估计 直接计算偏导数(解析梯度) 今天,我们要学习如何计算任意复杂度的解析梯度 要 ...