Nginx的高可用方案

Nginx进程模型简介

多进程

多进程+多路复用

master 进程 、 worker 进程

root      33987      1  0 Oct19 ?        00:00:00 nginx: master process ./nginx
nobody    35733  33987  0 Oct19 ?        00:00:00 nginx: worker process

worker_processes 1; cpu总核数

io模型 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
}

Nginx的高可用方案

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

keepalived

Keepalived 是 Linux 下一个轻量级别的高可用解决方案,Keepalived 软件起初是
专为 LVS 负载均衡软件设计的,用来管理并监控 LVS 集群系统中各个服务节点的
状态,后来又加入了可以实现高可用的 VRRP 功能。因此,Keepalived 除了能够
管理 LVS 软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL 等)的高可用解决方案软件

Keepalived 软件主要是通过 VRRP 协议实现高可用功能的。VRRP 是 Virtual
Router 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(七层)

centos7 nginx高可用配置 nginx高可用方案_Nginx

实战:

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 libnl
libnl-devel

6. 编译安装 make && make install

7. 进入安装后的路径 cd /d

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

# master

! Configuration File for keepalived

global_defs {
    router_id LVS_DEVEL  #运行 keepalived 服务器的标识,在一个网络内应该是唯一的
}
vrrp_instance VI_1 { # vrrp 实例定义部分
    state MASTER #设置 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.11.100
    }
}
virtual_server 192.168.11.100 80 { #设置虚拟服务器,需要指定虚拟 ip 和服务端口
    delay_loop 6 #健康检查时间间隔
    lb_algo rr #负载均衡调度算法
    lb_kind NAT #负载均衡转发规则
    persistence_timeout 50 #设置会话保持时间
    protocol TCP #指定转发协议类型,有 TCP 和 UDP 两种
    real_server 192.168.11.160 80 { #配置服务器节点 1,需要指定 real server 的真实 IP 地址和端口
        weight 1 #设置权重,数字越大权重越高
        TCP_CHECK { #realserver 的状态监测设置部分单位秒
        connect_timeout 3 #超时时间
        delay_before_retry 3 #重试间隔
        connect_port 80 #监测端口
        }
    }
}

backup

# backup
! Configuration File for keepalived
global_defs {
    router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.11.100
    }
}
virtual_server 192.168.11.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
    real_server 192.168.11.161 80 {
        weight 1
        TCP_CHECK {
            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

通过脚本实现动态切换

1. 在 master 和 slave 节点的 /data/program/nginx/sbin/nginx-ha-check.sh 目录
下增加一个脚本
–no-headers 不打印头文件
Wc –l
统计行数

#!bin/sh #! /bin/sh 是指此脚本使用/bin/sh 来执行
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ]
    then
    echo 'nginx server is died'
    service keepalived stop
fi

\2. 修改 keepalived.conf 文件,增加如下配置
track_script: #执行监控的服务。
chknginxservice #

centos7 nginx高可用配置 nginx高可用方案_高可用_02