1、nginx介绍
Nginx是一个高性能的、开源的、跨平台的Web服务器和反向代理服务器。它是由俄罗斯的程序员Igor Sysoev开发的,并于2004年首次公开发布。
Nginx的特点包括:
- 高性能:Nginx使用事件驱动的架构,能够处理大量的并发连接,同时保持低的内存消耗。
- 轻量级:Nginx的核心占用很小的内存空间,并且可以扩展到更大的服务器集群。
- 反向代理和负载均衡:Nginx可以作为反向代理服务器,将请求转发给后端的多个服务器,实现负载均衡和高可用性。
- 静态资源处理:Nginx可以直接处理静态文件,如图片、CSS和JavaScript文件,不需要转发给后端应用服务器。
- 动态模块扩展:Nginx支持通过动态模块扩展功能,可以添加各种额外的功能,如缓存、日志等。
- 可靠性和稳定性:Nginx在设计上考虑到了高可用性和故障恢复,在处理请求时不会中断正在进行的连接。
- 跨平台:Nginx可以在多个操作系统平台上运行,包括Linux、Windows、MacOS等。
Nginx被广泛应用于互联网公司、大型网站和应用程序中,它的高性能、稳定性和灵活性使得它成为了一个流行的Web服务器和反向代理服务器。
2、nginx安装及基本命令
2.1.nginx安装命令
- 对于Ubuntu/Debian系统:
sudo apt update
sudo apt install nginx
- 对于CentOS/RHEL系统:
sudo yum update
sudo yum install nginx
2.2.nginx基本命令
2.2.1.查看nginx运行状态
sudo systemctl status nginx
2.2.2.启动nginx
2.2.3.停止nginx
2.2.4.开机自启nginx
2.2.5.热更新配置
这个功能非常好用,试想一下,在生产环境发生了无法热修复的bug需要重启,我们可以临时屏蔽某个节点,等修完bug重启之后再恢复节点。这种利用“节点切换”实现不停服修复bug ,绝对是一把运维利器。
具体命令也非常简单。
sudo systemctl reload nginx
3、部署多节点
3.1.多节点配置
一台服务器不管硬件性能多强悍,程序优化多完善,能承载的访问量终归是有限的。一台服务不够,就部署多几个节点,只要保证节点可水平拓展,数据库也能水平拓展,nginx网关也能水平扩展,就可以轻易部署分布式集群服务。利用多节点部署服务集群,这在特定的业务需求下,是最简易的分布式服务了。
nginx部署多节点也是非常简单。
编辑/etc/nginx/nginx.conf文件,在upstream配置服务器的节点信息,在listen配置对外暴露的http端口。如此,外界通过8080端口发送到nginx的请求都会被分配到对应的服务节点。
http {upstream web_service {#根据ip进行映射,保证同一个用户所有请求到映射到同一台web服务ip_hash;server 192.168.0.121:8081;server 192.168.0.121:8082;}server {listen 8080;location / {proxy_pass http://web_service;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
如果需要利用“节点切换”进行修复bug,可临时屏蔽以上的某些节点,再通过 reload 命令进行切换。
3.2.负载轮询算法
nginx的负载轮询算法指的是nginx在将请求分发到多个后端服务器时,按照轮询的方式依次将请求分发给每个服务器。主要是负载算法有以下:
-
轮询(Round Robin):将请求按照轮询的方式依次分发给每个后端服务器。 配置方法:在upstream块中使用"round-robin"。
-
加权轮询(Weighted Round Robin):为每个后端服务器分配不同的权重,根据权重比例来分发请求。 配置方法:在upstream块中使用"weight"参数设置服务器的权重。
-
IP哈希(IP Hash):根据客户端的IP地址进行哈希计算,将同一个IP的请求发送给同一个后端服务器。 配置方法:在upstream块中使用"ip_hash"。
-
最少连接(Least Connections):将请求分发给当前连接数最少的后端服务器。 配置方法:在upstream块中使用"least_conn"。
-
加权最少连接(Weighted Least Connections):根据后端服务器的连接数和权重来分发请求,连接数越多,权重越低。 配置方法:在upstream块中使用"least_conn"和"weight"。
-
随机(Random):随机选择一个后端服务器处理请求。 配置方法:在upstream块中使用"random"。
本文选择的是IP哈希,具体是因为对于用户请求,会同时涉及到对数据的增删查改,为了保持用户的会话状态,需要将同一个用户的请求映射到同一台物理机。当然,由于ip生成的hash值不具备负载均衡性,可能导致不同节点的请求频率差异很大。严格来说,这种算法不算是负载均衡算法。
如果服务是完全无状态的,或者提供的是静态数据,那最好还是选择其他的负载均衡算法。