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. C#多线程之线程高级(下)

    四.Monitor信号构造 信号构造本质:一个线程阻塞直到收到另一个线程发来的通知. 当多线程Wait同一对象时,就形成了一个"等待队列(waiting queue)",和用于等待 ...

  2. labuladong

    由于 labuladong 的算法网站频繁被攻击,且国内访问速度可能比较慢,所以本站同时开放多个镜像站点: https://labuladong.gitee.io/algo/ https://labu ...

  3. 基于.NET 7 的 WebTransport 实现双向通信

    Web Transport 简介 WebTransport 是一个新的 Web API,使用 HTTP/3 协议来支持双向传输.它用于 Web 客户端和 HTTP/3 服务器之间的双向通信.它支持通过 ...

  4. C ++:树

    C++:树 树的概念: 所谓"树"是输就结构的一种,树大概可以分为两大类: 有根树 和 无根树 有根树使有一个确定的根节点,反之为无根树 · 子节点:从树根开始,通过树边向下扩展的 ...

  5. 使用lamdba查询datatable中的一个值或者单元格

    首先创建一个datatable,结构简单的分为两列 Datatable dt=new Datatable(); dt.Columns("code"); dt.Columns(&qu ...

  6. 关于小米mini路由器开启ssh红灯解决

    前言 小米 后续版本 对 ssh固件校验失败导致的,下载路由器旧版开发版固件,然后用后台web升级成老版本后,再采用官方方法刷入即可. 旧版路由器固件下载 地址 其他 后续的刷机可以参考我的文章

  7. 在 win11 下搭建并使用 ubuntu 子系统(同时测试 win10)——(附带深度学习环境搭建)

    对于一个深度学习从事者来说,Windows训练模型有着诸多不便,还好现在Windows的Ubuntu子系统逐渐完善,近期由于工作需求,配置了Windows的工作站,为了方便起见,搭建了Ubuntu子系 ...

  8. jquery操作内容

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 【Java SE】Day07 API、Scanner类、Random类、ArrayList类

    一.API 1.概述: API(Application Programming Interface),应用程序编程接口 Java API:程序员的字典,是类的说明文档 2.使用步骤 帮助文档:JDK_ ...

  10. .NET性能优化-ArrayPool同时复用数组和对象

    前两天在微信后台收到了读者的私信,问了一个这样的问题,由于私信回复有字数和篇幅限制,我在这里统一回复一下.读者的问题是这样的: 大佬您好,之前读了您的文章受益匪浅,我们有一个项目经常占用 7-8GB ...