nginx 进程结构和高可用,热重载,热升级原理
nginx 进程结构图:
nginx 实际上是一个父进程 下开启多个子进程(之所以不采用多线程模式,因为线程共享同一个地址空间, 当第三方模块引发地址空间段错误,地址越界,会导致进程nginx 挂掉, 违反高可靠性).
- 父进程master 只做控制器,做子进程 worker 的管理. 不做其他功能(减少挂掉可能性)
- 子进程woker是实际处理请求的程序, worker 要与系统cpu核数一致, 并且与cpu绑定,以方便更好的使用cpu缓存, 减少缓存失效的命中率.
- master 进程内还有cache 缓存空间, 用来缓存反向代理请求, 由子进程 cache loader 载入cache manager 管理.
- master 进程内的共享内存, 用来做子进程之间的通信
nginx 高可用的真相:
实际上nginx 的高可用完全依靠master ; nginx 对 worker 的控制是通过获取CHLD信号来达成的. worker 挂掉的同时,会给 master 父进程发送一个 CHLD 信号, master 收到这个信号就会立即新启动一个新 worker 进程来替代挂掉的 worker 进程, 所以要保持 master 功能的简洁 .
热重载原理
执行 nginx -s reload , 实际上先新开启相同数量的 worker 子进程来替代 原来的worker 进程, 但是不是马上关闭老 worker 进程, 只是把老 worker 进程接受请求的通道切换给新 worker , 在老 worker 处理完原已经接受的所有请求后, 再关闭 worker . 这样就很平滑的过度给了新 worker .
热升级和回滚
热升级: 执行 kill -USR2 要升级的 nginx master 进程ID , 这个时候系统首先会去修改老pid文件 , 加后缀 .oldbin, 接着利用新nginx新启动一个新的 master , 并向老 master 发送 QUIT 信号, 此时请求通道从老 master 切换对接新 master , 老 master 不再接受任何 请求 , 等到老 master 内请求处理完毕之后, 关闭所有老 master 中的所有子程序. 但是老 master 不会关闭(保证可以回滚).
回滚: 回滚原理与热升级原理基本相同.
- 用RHEL6.4(64bit)Nginx+Keepalived实现Nginx进程的主从、双主高可用
- nginx---进程开启、关闭和重载配置文件
- 如何实现Nginx+Keepalived中Nginx进程的高可用
- 如何实现Nginx+Keepalived中Nginx进程的高可用 推荐
- KeepLived + Nginx 实现高可用 负载均衡 原理
- nginx的高可用(一)原理
- Linux 守护进程原理及实例(Redis、Nginx)
- 如何实现Nginx+Keepalived中Nginx进程的高可用
- keepalived原理及keepalived+nginx的高可用、keepalived+lvs_DR负载均衡、keepalived高可用双主模型实例
- 常见的笔试面试题(概念性的:死锁,进程通信方式,指向字符变量的指针,文件索引结构,可被重载的运算符)
- (2)LVS+Keepalived+nginx高可用负载均衡架构原理及配置
- 如何实现Nginx+Keepalived中Nginx进程的高可用
- 如何实现Nginx+Keepalived中Nginx进程的高可用
- AlwaysON同步的原理及可用模式
- Android Binder跨进程通信原理分析
- 智能指针原理理解 和 ->运算符的重载
- 搭建Keepalived + Nginx + Tomcat的高可用负载均衡架构
- windows进程中的内存结构
- keepalived + nginx组建高可用负载平衡Web server集群