Nginx高级-扩容

通过扩容提升整体吞吐量

1.单机垂直扩容:硬件资源增加

云服务资源增加

整机:IBM、浪潮、DELL、HP等

CPU/主板:更新到主流

网卡:10G/40G网卡

磁盘:SAS(SCSI) HDD(机械)、HHD(混合)、SATA SSD、PCI-e SSD、 MVMe SSD

SSD

多副本机制

系统盘/热点数据/数据库存储

HDD

冷数据存储

2.水平扩展:集群化

会话管理

Nginx高级负载均衡

ip_hash

hash $cookie_jsessionid;

hash $request_uri;

使用lua逻辑定向分发

Redis + SpringSession

upstream httpds {
ip_hash;
server 192.168.44.102 ;
server 192.168.44.103 ;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://httpds;
# root html;
}
 location ~*/(css|img|js) {
root /usr/local/nginx/html;
}

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

使用参考

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

tengine中有session_sticky模块我们通过第三方的方式安装在开源版本中

sticky是第三方模块,需要重新编译Nginx,他可以对Nginx这种静态文件服务器使用基于cookie的负载均衡
1.下载模块

项目官网

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

另外一个版本

https://github.com/bymaximus/nginx-sticky-module-ng

下载

https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/1.2.6.zip
2.上传解压
3.重新编译Nginx

依赖 openssl-devel

进到源码目录重新编译

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

执行make

如遇报错修改源码

[image]

打开 ngx_http_sticky_misc.c 文件

在12行添加

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

备份之前的程序

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

把编译好的Nginx程序替换到原来的目录里

cp objs/nginx /usr/local/nginx/sbin/

升级检测

make upgrade

检查程序中是否包含新模块

nginx -V

配置方法

upstream httpget {
sticky name=route expires=6h;
server 192.168.44.102;
server 192.168.44.103;
}

KeepAlive

在http协议header中可以看到当前连接状态

测试工具charles

下载地址

https://www.charlesproxy.com/assets/release/4.6.2/charles-proxy-4.6.2-win64.msi?k=fc1457e312

官网

https://www.charlesproxy.com

什么时候使用?

明显的预知用户会在当前连接上有下一步操作

复用连接,有效减少握手次数,尤其是https建立一次连接开销会更大

什么时候不用?

访问内联资源一般用缓存,不需要keepalive

长时间的tcp连接容易导致系统资源无效占用

对客户端使用keepalive
keepalive_time

限制keepalive保持连接的最大时间
新功能
keepalive_timeout

用于设置Nginx服务器与客户端保持连接的超时时间

用于踢出不活动连接
keepalive_timeout = 0 即关闭

● send_timeout 10; 10秒

● send_timeout 10 10; 同时下发一个header 告诉浏览器
send_timeout

两次向客户端写操作之间的间隔 如果大于这个时间则关闭连接 默认60s

此处有坑,注意耗时的同步操作有可能会丢弃用户连接

该设置表示Nginx服务器与客户端连接后,某次会话中服务器等待客户端响应超过10s,就会自动关闭连接。
keepalive_request

默认1000

单个连接中可处理的请求数
keepalive_disable

不对某些浏览器建立长连接

默认msie6

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65 65; #超过这个时间 没有活动,会让keepalive失效
keepalive_time 1h; # 一个tcp连接总时长,超过之后 强制失效
send_timeout 60;# 默认60s 此处有坑!! 系统中 若有耗时操作,超过 send_timeout 强制断开连接。 注意:准备过程中,不是传输过程
keepalive_requests 1000; #一个tcp复用中 可以并发接收的请求个数

对上游服务器使用keepalive

首先需要配置使用http1.1协议。以便建立更高效的传输,默认使用http1.0,在http1.0中需要配置header才能

在Upstream中所配置的上游服务器默认都是用短连接,即每次请求都会在完成之后断开
相关配置

upstream中配置
配置

keepalive 100;

向上游服务器的保留连接数

**keepalive_timeout **

连接保留时间

**keepalive_requests **

一个tcp复用中 可以并发接收的请求个数
server中配置

proxy_http_version 1.1;
配置http版本号
默认使用http1.0协议,需要在request中增加"Connection: keep-alive" header才能够支持,而HTTP1.1默认支持。
proxy_set_header Connection "";
清楚close信息

AB安装

yum install httpd-tools
参数说明:

● -n 即requests,用于指定压力测试总共的执行次数。

● -c 即concurrency,用于指定的并发数。

● -t 即timelimit,等待响应的最大时间(单位:秒)。

● -b 即windowsize,TCP发送/接收的缓冲大小(单位:字节)。

● -p 即postfile,发送POST请求时需要上传的文件,此外还必须设置-T参数。

● -u 即putfile,发送PUT请求时需要上传的文件,此外还必须设置-T参数。

● -T 即content-type,用于设置Content-Type请求头信息,例如:application/x-www-form-urlencoded,默认值为text/plain。

● -v 即verbosity,指定打印帮助信息的冗余级别。

● -w 以HTML表格形式打印结果。

● -i 使用HEAD请求代替GET请求。

● -x 插入字符串作为table标签的属性。

● -y 插入字符串作为tr标签的属性。

● -z 插入字符串作为td标签的属性。

● -C 添加cookie信息,例如:"Apache=1234"(可以重复该参数选项以添加多个)。

● -H 添加任意的请求头,例如:"Accept-Encoding: gzip",请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。

● -A 添加一个基本的网络认证信息,用户名和密码之间用英文冒号隔开。

● -P 添加一个基本的代理认证信息,用户名和密码之间用英文冒号隔开。

● -X 指定使用的和端口号,例如:"126.10.10.3:88"。

● -V 打印版本号并退出。

● -k 使用HTTP的KeepAlive特性。

● -d 不显示百分比。

● -S 不显示预估和警告信息。

● -g 输出结果信息到gnuplot格式的文件中。

● -e 输出结果信息到CSV格式的文件中。

● -r 指定接收到错误信息时不退出程序。

● -h 显示用法信息,其实就是ab -help。

相关推荐
vvw&8 分钟前
如何在 Ubuntu 22.04 上安装 Graylog 开源日志管理平台
linux·运维·服务器·ubuntu·开源·github·graylog
大哥_ZH12 分钟前
Linux umami在国产麒麟系统安装网站统计工具(只能上国内网站的系统)
linux·服务器
做梦敲代码39 分钟前
达梦数据库-读写分离集群部署
数据库·达梦数据库
不爱学英文的码字机器1 小时前
[Linux] Shell 命令及运行原理
linux·运维·服务器
cdut_suye1 小时前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
qq_433618441 小时前
shell 编程(三)
linux·运维·服务器
苹果醋31 小时前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
小蜗牛慢慢爬行1 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
hanbarger1 小时前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
网安墨雨1 小时前
常用网络协议
网络·网络协议