课程名称:Java架构师-技术专家
课程章节: 第6周 集群架构:LVS+Nginx高可用集群
主讲老师:慕课讲师团:Geely、风间影月、阿神……
今天的学习内容包括:
nginx通过配置监听端口,映射路由到指定服务。
server { listen 80; # 监听的端口号 server_name localhost; # 服务名 localtion / { # 映射 root html; index index.html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
由于Nginx安装我已经很娴熟,所以不在此赘述,在此记录一下Nginx常用命令。这些命令由 master 进程接受。
# 切换到nginx安装目录 # 启动 nginx ./sbin/nginx # 停止nginx ./sbin/nginx -s stop # 完成当前工作后停止 ./sbin/nginx -s quit # 在不停止nginx的情况下,重启nginx,重新加载配置文件,启动新的工作进程,完美停止旧的工作进程 ./sbin/nginx -s reload # 检测nginx配置文件是否可用 # nginx -t -c ./nginx.conf
ps-ef | grep nginx
命令查看 nginx 进程[root@iZ2zeausm2jefqqtmpikzqZ ~]# ps -ef | grep nginx root 4608 4222 0 Jul21 ? 00:00:00 runsv nginx root 4621 4608 0 Jul21 ? 00:00:00 svlogd -tt /var/log/gitlab/nginx root 4623 4608 0 Jul21 ? 00:00:00 nginx: master process /opt/gitlab/embedded/sbin/nginx -p /var/opt/gitlab/nginx polkitd 4667 4623 0 Jul21 ? 00:00:00 nginx: worker process polkitd 4668 4623 0 Jul21 ? 00:00:00 nginx: worker process polkitd 4669 4623 0 Jul21 ? 00:00:00 nginx: worker process polkitd 4670 4623 0 Jul21 ? 00:01:11 nginx: worker process
nginx 在启动之后会产生一个master进程,默认一个worker进程。在./conf/nginx.conf
配置文件中可以配置worker进程数。
worker_processes 2;
master会专门接受一些来自外界的指令,然后把这些指令传递给 worker执行,如果worker发生了异常退出了,那么 master 会启动一些新的worker 去做事。
Nginx多进程保证了多个worker之间是相互独立,一个worker退出不影响其它的worker。
假设Nginx启动以后,创建了3个Worker,当客户端有请求进入到Nginx的时候,每一个worker都要去争抢锁(该锁和客户端一一对应),抢到锁之后 client 和 worker1 会建立响应的关系,才能去处理来自客户端的请求。
传统服务器采用同步阻塞的方式处理请求,必须等一个请求处理完毕之后才回去处理下一个请求。
Nginx采用异步非阻塞的方式处理请求。Nginx可以设置默认连接数,默认是1024。
events { # 默认使用epoll use epoll; # 每个worker允许连接的客户端最大连接数 worker_connections 10240; }
总结 Nginx高性能的原因是采用了抢占机制和异步非阻塞的通信模式(多路复用器,在Netty里面会涉及到)。master是作为监听,当worker获得了client请求的时候,并且处理到了阻塞的部分,worker就不会继续等待该阻塞的请求,而是会处理一些其它的客户端的请求。
main 全局配置 ├── worker_processes 工作进程数 ├── event 配置工作模式以及连接数,是一个指令块。 ├── http http模块相关配置 │ └── server 虚拟主机,是一个服务器。可以配置多个 │ ├── localtion 路由规则,表达式 │ ├── listen 该虚拟主机监听端口 │ └── upstream 集群,内网服务器,负载均衡的规则
通过今天的学习了解了