Nginx(三)--Nginx 的高可用
1. Nginx 进程模型简介

启动nginx,查看nginx的线程,可以发现:
- [root@localhost ~]# ps -ef |grep nginx
- root 20714 1 0 02:36 ? 00:00:00 nginx: master process ../ngnix/sbin/nginx
- root 21728 20714 0 05:04 ? 00:00:00 nginx: worker process
- root 22694 22655 0 06:49 pts/2 00:00:00 grep nginx
- [root@localhost ~]#
1. 在创建master进程时,先建立需要监听的socket(listenfd),然后从master进程中fork()出多个worker进程,如此一来每个worker进程都可以监听用户请求的socket。一般来说,当一个连接进来后,所有Worker都会收到通知,但是只有一个进程可以接受这个连接请求,其它的都失败,这是所谓的惊群现象。nginx提供了一个accept_mutex(互斥锁),有了这把锁之后,同一时刻,就只会有一个进程在accpet连接,这样就不会有惊群问题了。
2. 先打开accept_mutex选项,只有获得了accept_mutex的进程才会去添加accept事件。nginx使用一个叫ngx_accept_disabled的变量来控制是否去竞争accept_mutex锁。ngx_accept_disabled = nginx单进程的所有连接总数 / 8 -空闲连接数量,当ngx_accept_disabled大于0时,不会去尝试获取accept_mutex锁,ngx_accept_disable越大,让出的机会就越多,这样其它进程获取锁的机会也就越大。不去accept,每个worker进程的连接数就控制下来了,其它进程的连接池就会得到利用,这样,nginx就控制了多进程间连接的平衡。
3.每个worker进程都有一个独立的连接池,连接池的大小是worker_connections。这里的连接池里面保存的其实不是真实的连接,它只是一个worker_connections大小的一个ngx_connection_t结构的数组。并且,nginx会通过一个链表free_connections来保存所有的空闲ngx_connection_t,每次获取一个连接时,就从空闲连接链表中获取一个,用完后,再放回空闲连接链表里面。一个nginx能建立的最大连接数,应该是worker_connections * worker_processes。当然,这里说的是最大连接数,对于HTTP请求本地资源来说,能够支持的最大并发数量是worker_connections * worker_processes,而如果是HTTP作为反向代理来说,最大并发数量应该是worker_connections * worker_processes/2。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。
相关的配置:
- worker_processes 1; // 工作进程数,建议设成CPU总核心数。
- events { // 多路复用IO模型机制,epoll . select ....根据操作系统不同来选择。linux 默认epoll
- use epoll; //io 模型
- worker_connections 1024; // 每个woker进程的最大连接数,数值越大,并发量允许越大
- }
- http{
- sendfile on;//开启零拷贝
- }
Nginx 的高可用方案
Keepalived 下载地址
https://www.keepalived.org/download.html
- 报错
make[]: *** [namespaces.o] Error- make[]: Leaving directory `/root/keepalived-1.2./keepalived/core'
- make[]: *** [all-recursive] Error
- make[]: Leaving directory `/root/keepalived-1.2./keepalived'
- make: *** [all-recursive] Error
- 升级了下glib试一下能不能解决
- yum update glib*
- 还不行的话,看一下自己的系统版本,换一个低版本的keepalived
- centos6.+keepalived1.2.7
- ● keepalived.service - LVS and VRRP High Availability Monitor
- Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled)
- Active: active (running) since Mon -- :: CST; 5min ago
- Process: ExecStart=/data/program/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=/SUCCESS)
- Main PID: (keepalived)
- CGroup: /system.slice/keepalived.service
- ├─ /data/program/keepalived/sbin/keepalived -D
- └─ /data/program/keepalived/sbin/keepalived -D
- Jun :: localhost.localdomain Keepalived_healthcheckers[]: Timeout connecting server [192.168.....
- Jun :: localhost.localdomain Keepalived_healthcheckers[]: Check on service [192.168.201.100]:tc...d.
- Jun :: localhost.localdomain Keepalived_healthcheckers[]: Removing service [192.168.201.100]:tc...
- Jun :: localhost.localdomain Keepalived_healthcheckers[]: Lost quorum -= > for VS [192.168...
- Jun :: localhost.localdomain Keepalived_healthcheckers[]: Remote SMTP server [192.168.200.1]:...d.
- Jun :: localhost.localdomain Keepalived_healthcheckers[]: Error reading data from remote SMTP s....
- Jun :: localhost.localdomain Keepalived_healthcheckers[]: Error reading data from remote SMTP s....
- Jun :: localhost.localdomain Keepalived_healthcheckers[]: Error reading data from remote SMTP s....
- Jun :: localhost.localdomain Keepalived_healthcheckers[]: Error reading data from remote SMTP s....
- Jun :: localhost.localdomain Keepalived_healthcheckers[]: Error reading data from remote SMTP s....
- Hint: Some lines were ellipsized, use -l to show in full.
- [root@localhost keepalived]#
keepalived 的配置
- ! Configuration File for keepalived
- global_defs {
- router_id MASTER_DEVEL #运行 keepalived 服务器的标识,在一个网络内应该是唯一的
- }
- vrrp_instance VI_1 { #vrrp 实例定义部分
- state MASTER #设置 lvs 的状态,MASTER 和 BACKUP 两种,必须大写
- interface ens33 #设置对外服务的接口,必须跟本地一致
- virtual_router_id 51 #设置虚拟路由标示,这个标示是一个数字,同一个 vrrp 实例使用唯一标示
- priority 150 #定义优先级,数字越大优先级越高,在一个 vrrp——instance 下,master 的优先级必须大于 backup
- advert_int 1 #设定 master 与 backup 负载均衡器之间同步检查的时间间隔,单位是秒
- authentication { #设置验证类型和密码
- auth_type PASS
- auth_pass 1111 #验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同}
- virtual_ipaddress { #设置虚拟 ip 地址,可以设置多个,每行一个
- 192.168.20.110
- }
- }
- virtual_server 192.168.20.100 80 { #设置虚拟服务器,需要指定虚拟 ip 和服务端口
- delay_loop 6 #健康检查时间间隔
- lb_algo rr #负载均衡调度算法
- lb_kind NAT #负载均衡转发规则
- persistence_timeout 50 #设置会话保持时间
- protocol TCP #指定转发协议类型,有 TCP 和 UDP 两种
- real_server 192.168.20.130 80 { #配置服务器节点 1,需要指定 real server 的真实 IP 地址和端口weight 1 #设置权重,数字越大权重越高
- TCP_CHECK { #realserver 的状态监测设置部分单位秒
- connect_timeout 3 #超时时间
- delay_before_retry 3 #重试间隔
- connect_port 80 #监测端口
- }
- }
- }
backup
- ! Configuration File for keepalived
- global_defs {
- router_id BACKUP_DEVEL #运行 keepalived 服务器的标识,在一个网络内应该是唯一的
- }
- vrrp_instance VI_1 { #vrrp 实例定义部分
- state BACKUP #设置 lvs 的状态,MASTER 和 BACKUP 两种,必须大写
- interface ens33 #设置对外服务的接口,必须跟本地ip应用名称一致
- virtual_router_id 51 #设置虚拟路由标示,这个标示是一个数字,同一个 vrrp 实例使用唯一标示
- priority 100 #定义优先级,数字越大优先级越高,在一个 vrrp——instance 下,master 的优先级必须大于 backup
- advert_int 1 #设定 master 与 backup 负载均衡器之间同步检查的时间间隔,单位是秒
- authentication { #设置验证类型和密码
- auth_type PASS
- auth_pass 1111 #验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同}
- virtual_ipaddress { #设置虚拟 ip 地址,可以设置多个,每行一个
- 192.168.20.110
- }
- }
- virtual_server 192.168.20.110 80 { #设置虚拟服务器,需要指定虚拟 ip 和服务端口
- delay_loop 6 #健康检查时间间隔
- lb_algo rr #负载均衡调度算法
- lb_kind NAT #负载均衡转发规则
- persistence_timeout 50 #设置会话保持时间
- protocol TCP #指定转发协议类型,有 TCP 和 UDP 两种
- real_server 192.168.20.128 80 { #配置服务器节点 1,需要指定 real server 的真实 IP 地址和端口weight 1 #设置权重,数字越大权重越高
- TCP_CHECK { #realserver 的状态监测设置部分单位秒
- connect_timeout 3 #超时时间
- delay_before_retry 3 #重试间隔
- connect_port 80 #监测端口
- }
- }
- }
使用命令:systemctl status firewalld.service
查看防火墙状态
执行后可以看到绿色字样标注的“active(running)”,说明防火墙是开启状态
使用命令:systemctl stop firewalld.service
关闭运行的防火墙
输入命令:systemctl disable firewalld.service,禁止防火墙服务器
ip a 来查看虚拟IP是否绑定到本机
安装nginx到本地试一下
Nginx(三)--Nginx 的高可用的更多相关文章
- Keepalived+LVS+Nginx负载均衡之高可用
Keepalived+LVS+Nginx负载均衡之高可用 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常 ...
- 在CentOS上使用Nginx和Tomcat搭建高可用高并发网站
目录 目录 前言 创建CentOS虚拟机 安装Nginx 安装Tomcat 安装lvs和keepalived 反向代理 部署网站 搭建数据库 编写网站项目 解决session一致性 注意 参考资料 前 ...
- nginx与keepalived实现高可用+Apache实现负载均衡
nginx与keepalived实现高可用 本实验使用了四台虚拟机 两台需要安装nginx及keepalived 两台安装Apache nginx可以源码安装也可以用yum安装nginx yum安装n ...
- Nginx+Keepalived负载均衡高可用
Nginx+Keepalived负载均衡高可用方案: Nginx 使用平台:unix.linux.windows. 功能: A.www web服务 http 80 b.负载均衡(方向代理proxy) ...
- Keepalived+Nginx实现负载均衡高可用
一.负载均衡高可用 Nginx作为负载均衡器,所有请求都到了Nginx,可见Nginx处于非常重点的位置,如果Nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了避免负载均衡服务器的宕机 ...
- nginx负载均衡+keepalived高可用
nginx负载均衡+keepalived高可用 环境准备 192.168.88.111:nginx + keepalived MASTER 192.168.88.112:nginx + keepa ...
- Nginx 配置实例-配置高可用
Nginx 配置实例-配置高可用 1. 实现效果 2. 两台机器 nginx 的安装 2.1 192.168.25.120 中 nginx 的安装 2.1.1 安装 pcre 依赖 2.1.2 安装其 ...
- suse 12 编译部署Keepalived + nginx 为 kube-apiserver 提供高可用
文章目录 编译部署nginx 下载nginx源码包 编译nginx 配置nginx.conf 配置nginx为systemctl管理 分发nginx二进制文件和配置文件 启动kube-nginx服务 ...
- 23.Nginx+keepalived负载均衡高可用
Nginx+keepalived负载均衡高可用 结构图 环境: 主 服务器:192.168.239.10 备 服务器:192.168.239.20 Web 服务器1:192.168.239.40 We ...
- centos实现三个节点高可用
centos实现三个节点高可用 使用的资源为keepalived和nginx 高可用主机IP地址 192.168.136.131 192.168.136.133 192.168.136.134 ngi ...
随机推荐
- 06_K-近邻算法
k-近邻算法 算法介绍 定义: 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一类别,则该样本也属于这个类别. 计算距离公式:欧式距离 (两点之间距离) 需要做标准化 ...
- 力扣(LeetCode)亲密字符串 个人题解
给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true :否则返回 false . 示例 1: 输入: A = "ab& ...
- FB力挺的Pytorch深度学习 书本来了
获得 fb首席科学家力挺的 pytorch教程 发布啦, 看截图 golang--反射
反射基本介绍: (1)反射可以在运行时动态获取变量的各种信息,比如变量的类型.类别: (2)如果是结构体变量,还可以获取结构体本身的信息(包括结构体字段.方法): (3)通过反射,可以修改变量的值,可 ...
- Lab6:进程的调度
CPU调度 从就绪队列中挑选下一个占用CPU运行的进程,从多个可用CPU中挑选就绪进程可使用的CPU资源 调度策略 比较调度算法的准则 CPU使用率 吞吐量 周转时间 就绪等待时间 响应时间 吞吐量与 ...