Nginx(三)--Nginx 的高可用

1. Nginx 进程模型简介

多进程+多路复用

master 进程 、 worker 进程

启动nginx,查看nginx的线程,可以发现:

[[email protected] ~]# 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
[[email protected] ~]#  

worker_processes 1 cpu 总核心数

epoll . select ....

#user nobody; 用户

worker_processes 1; 工作进程数

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

events {

use epoll ; io 模型

worker_connections 1024; 理论上 processes* connections

}

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 的高可用方案

Nginx 作为反向代理服务器,所有的流量都会经过 Nginx,所以 Nginx 本身的可靠性是我们首先要考虑的问题

keepalived

Keepalived 是 Linux 下一个轻量级别的高可用解决方案,Keepalived 软件起初是专为 LVS 负载均衡软件设计的,

用来管理并监控 LVS 集群系统中各个服务节点的状态,后来又加入了可以实现高可用的 VRRP 功能。因此,Keepalived 除了能够管理 LVS 软件外,

还可以作为其他服务(例如:Nginx、Haproxy、MySQL 等)的高可用解决方案软件Keepalived 软件主要是通过 VRRP 协议实现高可用功能的。

VRRP 是 VirtualRouter RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP 出现的目的就是为了解决静态路由单点故障问题的,

它能够保证当个别节点宕机时,整个网络可以不间断地运行;(简单来说,vrrp 就是把两台或多态路由器设备虚拟成一个设备,实现主备高可用)

所以,Keepalived 一方面具有配置管理 LVS 的功能,同时还具有对 LVS 下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能

LVS 是 Linux Virtual Server 的缩写,也就是 Linux 虚拟服务器,在 linux2.4 内核以后,已经完全内置了 LVS 的各个功能模块。

它是工作在四层的负载均衡,类似于 Haproxy, 主要用于实现对服务器集群的负载均衡。

关于四层负载,我们知道 osi 网络层次模型的 7 层模模型(应用层、表示层、会话层、传输层、网络层、数据链路层、物理层);

四层负载就是基于传输层,也就是ip+端口的负载;而七层负载就是需要基于 URL 等应用层的信息来做负载,同时还有二层负载(基于 MAC)、三层负载(IP);

常见的四层负载有:LVS、F5; 七层负载有:Nginx、HAproxy; 在软件层面,Nginx/LVS/HAProxy 是使用得比较广泛的三种负载均衡软件

对于中小型的 Web 应用,可以使用 Nginx、大型网站或者重要的服务并且服务比较多的时候,可以考虑使用 LVS

轻量级的高可用解决方案

LVS 四层负载均衡软件(Linux virtual server)

监控 lvs 集群系统中的各个服务节点的状态

VRRP 协议(虚拟路由冗余协议)

linux2.4 以后,是内置在 linux 内核中的

lvs(四层) -> HAproxy 七层

lvs(四层) -> Nginx(七层)

Keepalived 下载地址

https://www.keepalived.org/download.html

 

实践

\1. 下载 keepalived 的安装包

\2. tar -zxvf keepalived-2.0.7.tar.gz

\3. 在/data/program/目录下创建一个 keepalived 的文件

\4. cd 到 keepalived-2.0.7 目录下,执行 ./configure --prefix=/data/program/keepalived --sysconf=/etc

\5. 如果缺少依赖库,则 yum install gcc; yum install openssl-devel ; yum install libnllibnl-devel

\6. 编译安装 make && make install

\7. 进入安装后的路径 cd /data/program/keepalived, 创建软连接: ln -s

sbin/keepalived /sbin\8. cp /data/program/keepalived-2.0.7/keepalived/etc/init.d/keepalived/etc/init.d

\9. chkconfig --add keepalived

\10. chkconfig keepalived on

\11. service keepalived start

keepalived 的配置

master

! 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 #设置对外服务的接口
 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 #监测端口
 }
 }
}

keepalived 日志文件配置

\1. 首先看一下/etc/sysconfig/keepalived 文件

vi /etc/sysconfig/keepalived

KEEPALIVED_OPTIONS="-D -d -S 0"

“-D” 就是输出日志的选项

这里的“-S 0”表示 local0.* 具体的还需要看一下/etc/syslog.conf 文件

\2. 在/etc/rsyslog.conf 里添加:local0.* /var/log/keepalived.log

\3. 重新启动 keepalived 和 rsyslog 服务:

service rsyslog restart

service keepalived restart

原文地址:https://www.cnblogs.com/flgb/p/10909295.html

时间: 2024-10-17 05:40:09

Nginx(三)--Nginx 的高可用的相关文章

Nginx负载均衡+Keepalived高可用集群

一.搭建环境及软件版本 负载均衡:Nginx 高可用:Keepalived Linux:Centos 6.5 Nginx:nginx-1.6.2 Keepalived:keepalived-1.2.13 LB-00:Nginx+Keepalived 192.168.174.40 LB-01:Nginx+Keepalived 192.168.174.41 Web1:LNMP 192.168.174.20 Web2:LAMP 192.168.174.30 二.负载均衡搭建 ①解压编译安装Nginx

Keepalived+LVS+Nginx负载均衡之高可用

Keepalived+LVS+Nginx负载均衡之高可用 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx负载均衡出现单机故障时,系统正常运行的需求.所以系统架构引入Keepalived组件,实现系统高可用. 一.Keepalived介绍 Keepalived是分布式部署系统解决系统高可用的软件,结合LVS(Linux Virtual Serve

Nginx+Keepalived实现站点高可用

Nginx+Keepalived实现站点高可用 Posted on 2015-05-18   |   In Linux, Nginx  |   15条评论 公司内部 OA 系统要做线上高可用,避免单点故障,所以计划使用2台虚拟机通过 Keepalived 工具来实现 nginx 的高可用(High Avaiability),达到一台nginx入口服务器宕机,另一台备机自动接管服务的效果.(nginx做反向代理,实现后端应用服务器的负载均衡)快速搭建请直接跳至 第2节. 1. Keepalived

nginx结合keepalived做高可用负载集群服务

一.概述 前面几篇介绍了nginx做web网站以及https网站,反向代理,LVS的NAT与DR调度负载,但由于nginx本身负载是七层,需要套接字,即使基于upstream模块模拟成四层代理也是瓶颈,因此本文介绍nginx基于keepalived做高可用负载均衡集群服务,目标就是两台keepalived对nginx反向代理负载服务做检查与调度,做成双主模式,nginx负载调度后端的httpd网站,任何一台调度器(nginx或keepalived服务)故障,不影响业务;后端任何一台web故障也不

Nginx+Tomcat+Keepalived实现高可用web集群

Nginx+Tomcat+Keepalived实现高可用web集群: 环境:CenOS 6.5Nginx-Master:10.10.10.128Nginx-Backup:10.10.10.129Tomcat1:10.10.10.130Tomcat2:10.10.10.131VIP:10.10.10.100 一.环境基础配置1.更换国内yum源2.关闭防火墙.SELinux3.时间同步 二.Web端安装Web服务 1.查看是否安装JDK [[email protected] ~]# java -v

nginx负载均衡+keepalived高可用完全配置小结

nginx做负载均衡(无高可用) 大致步骤. 1. 前端 nginx安装,pcre安装,具体步骤不解释. 2. 负载配置 A. 默认轮循 在nginx.conf  里加入一行 include upstream.conf,然后所有的负载均衡的配置直接在upstream.conf里配置. [[email protected] conf]# cat upstream.conf upstream httpservers { server 192.168.137.10:80 weight=5; serve

Keepalived+Nginx实现双主高可用负载均衡

Keepalived+Nginx实现双主高可用负载均衡 一.部署Nginx+keepalived高可用有两种配置方案: 1.Nginx+keepalived 主从配置 前端使用两台机器,使用一个VIP,即其中一台为主负责全部请求,一台为备,只用在主出现故障时,才会替代主处理请求,平常处于闲置状态,此方案不够理想.  2.Nginx+keepalived 双主配置 前端使用2台机器,使用两个VIP,互为主备,不考虑其他情况时均衡处理请求,当其中一台机器出现故障时,另一台负责处理对两台机器的请求,此

Nginx+Keepalived负载均衡高可用(双机热备)

Nginx+Keepalived负载均衡高可用(双机热备) 1.1 Nginx安装及配置 1.2 Keepalived安装及配置 1.3 WebServer安装 1.4 测试Nginx+Keepalived 环境如下: CentOS 6.4_64K eepalived-1.2.12 Nginx-1.4.4 vip:192.168.10.50 master:192.168.10.11 backup:192.168.10.12 webserver1:192.168.10.13 webserver2:

Keepalived+Nginx实现负载均衡高可用

一.负载均衡高可用 Nginx作为负载均衡器,所有请求都到了Nginx,可见Nginx处于非常重点的位置,如果Nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了避免负载均衡服务器的宕机故障,需要建立一个备份机.主备机上都运行高可用(High Availability)监控程序,通过传送心跳信息来监控对方的运行状况.当备份机不能在一定的时间内收到对方的正常心跳时,它就接管主服务器的服务IP并继续提供负载均衡服务:当备份管理器又从主管理器收到"I am alive"这样的信

nginx+keepalived双主高可用负载均衡

实验环境及软件版本:CentOS版本: 6.6(2.6.32.-504.el6.x86_64)nginx版本: nginx-1.6.3keepalived版本:keepalived-1.2.7 主LB1:LB-110-05 主LB2:LB-111-06 一.安装准备及依赖(用SecureCRT的交互窗口同时对两台LB操作,只贴出LB1的操作过程在此) [[email protected] ~]# mkdir tools [[email protected] ~]# mkdir /applicat