Nginx高可用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx高可用相关的知识,希望对你有一定的参考价值。

参考技术A 一、nginx概念
Nginx是一个高性能的http和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好
Nginx专为性能优化而开发,性能就是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数

二、Nginx配置文件
第一部分全局块
从配置文件开始到events之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令,比如worker_processes 1; worker_processes值越大,可以支持的并发处理量越多
第二部分events块
events块涉及的指令主要影响Nginx服务器与用户的网络连接,比如worker_connections 1024; 支持的最大连接数
第三部分http全局块
http全局配置的指令包括文件引入、mime-type定义,日志自定义,连接超时时间,单连接请求数上限,server块等

三、反向代理
1、正向代理
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问

2、反向代理
我们只需要将请求发送到代理服务器,有反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址

配置方式
方式一

方式二指定location规则代理

四、负载均衡
增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

1、配置两台服务器负载

2、Nginx分配服务器策略
轮询(默认)
每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
weight
weight代表权重默认为1,权重越高被分配的客户端越多
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况

ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题

五、动静分离
Nginx动静就是动态请求和静态请求分开,减轻动态服务器的压力

方式一
Nginx配置location规则处理静态请求,可以设置expires静态资源缓存时间

autoindex 列出文件目录
方式二
配置静态服务器和动态服务器分开请求

六、高可用
一台代理服务可能出现down机导致服务不可用,无法保证高可用
高可用架构配置多台服务器比如两台服务器一台正常使用一台用来备份,通过keepalived 心跳机制进行监控当主的服务器down掉立即启用备份服务器保证服务的高可用

安装keepalived 配置keepalived.conf 添加检测脚本 绑定网卡配置虚拟ip

七、Nginx原理

1、工作模式master和worker

2、一个master和多个workers的机制好处?
①可以使用nginx -s reload 热部署,利于nginx热部署操作
②每个worker是独立的进程,如果有其中一个worker出现问题,其他worker独立的继续进行争抢,实现请求过程,不会造成服务中断
需要设置多少个worker
nginx同redis类似都采用了io多路复用机制,每个worker都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,即使是成千上万个请求也不再话下。每个worker的线程可以把一个cpu的性能发挥到极致
所以worker数和服务器的cpu数相等是最为适宜的。少了浪费cup,多了会造成cpu频繁切换上下文带来消耗

3、连接数worker_connection
①发送请求,占用了worker的几个连接数?
2个或者4个
②nginx有一个master,有四个worker,每个worker支持最大的连接数1024,支持最大的并发数是多少?
普通的静态访问最大并发数是:worker_connection * worker_processes / 2
如果是http做反向代理最大并发数是worker_connection * worker_processes / 4

nginx高可用

15.1. 传统的高可用思路

tomcat的高可用的思路,是在tomcat集群前面加一层负载服务nginx。如下图

 

 

这种做法,解决了tomcat的高可用问题。但是引入了前面的负载机器的高可用问题(Nginx如果挂了,玩完)

如果nginx沿用此思路,总会有一个最前端是单机的,存在宕机玩完的风险(鸡生蛋蛋生鸡无穷尽)

15.2. lvs 思想解决高可用问题

 

 

如上图,由服务器集群虚拟出来一台 虚拟网关vip(不真实存在,自然不存在宕机问题),

vip由两台机器共同协商生成。当有一台机器宕机时,另一台机器一样能维持vip。这保证了,只要两台机器不同时宕机,vip就存在

15.3. keepalived配置LVS过程

前提

1.关闭selinux,打开/etc/sysconfig/selinux设置其中值  à SELINUX=disabled

 

 

2.安装必须的依赖包

yum -y install libnl libnl-devel libnfnetlink-devel

keepalived安装

下载源码包--不能使用yum方式安装(有bug --wget https://www.keepalived.org/software/keepalived-1.3.4.tar.gz

配置(指定安装目录和配置目录,否则文件太散乱) --./configure --prefix=/usr/local/keepalived --sysconf=/etc

make && make install

keepalived主机配置

打开/etc/keepalived/keepalived.conf,只需要配置如下一段。(其它是多余配置,删除)

 

 

启动keepalived,查看机器ip地址,可发现多出一个244.200ip

 

 

此时,使用原ip地址244.253能打开的页面,使用244.200也能打开

 

 

keepalived从机配置

从机配置与主机过程完全一样,配置文件内以下标识id与优先级稍作变化即可

 

 

启动从机的keepalived后,可发现其ip地址无变化

keepalived校验LVS效果

1、此时,杀掉主机上的keepalived244.200ip将从主机上消失。而出现的从机的ip

2、再次启动主机的keepalived244.200ip将被主机重新夺回

3、此效果是单主单备方式。备机资源有一定的浪费。可以重复前面的动作,虚拟出第二个ip,将主从机优先级颠倒,从而利用起备机服务

keepalived监控服务软件

以上操作中,keepalived很好的实现了LVS功能,即集群机器共同虚拟一个vip,并实现在集群中自动漂移。

但假如物理机状况良好,并不能保障其上运行的服务软件ok,因此需要借助keepalived来监控服务软件。

a、使用keepalived来监控nginx

编辑一个sh监控脚本,sh脚本:

#!/bin/bash

A=`ps -C nginx --no-header |wc -l`       #统计nginx进程是否存在

if [ $A -eq 0 ];then                            #0,表明nginx停止了

      /usr/local/nginx/sbin/nginx                #尝试重启nginx

      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则keepalived自杀,进行VIP转移

              killall keepalived    #杀掉,vip就漫游到另一台机器                

      fi

fi

b在配置文件中加入以下两处配置:

 

 

c、重启keepalived,测试监控效果,如下图操作:

 

 

nginx已变成不死鸟

以上是关于Nginx高可用的主要内容,如果未能解决你的问题,请参考以下文章

nginx内置高可用配置与第三方高可用模块nginx_ustream_check_mudule配置

nginx高可用

Nginx高可用

Nginx高可用

Nginx keepalived 高可用集群

nginx + keepalived 实现高可用性