centos nginx重启_【实战演练】Linux操作系统14-keepalived实现Nginx服务器高可用

#本文欢迎转载,转载请注明出处和作者。

理论部分,在之前的文章已经说明过了,详见:

繁星亮与鲍包包:【理论研究】业务系统高可用及负载均衡​zhuanlan.zhihu.com
6e02cf4b0c5065bb555187ab73a4749c.png

上一篇已经讲述通过单台Nginx服务器对2/多台Apache服务器做负载均衡,但是Nginx本身却存在单点故障隐患。

繁星亮与鲍包包:【实战演练】Linux操作系统13-Nginx实现WEB服务器负载均衡​zhuanlan.zhihu.com

如前面理论所述,解决上述问题,本篇介绍通过安装keepalive,对Nginx服务器做高可用HA。

ba2207d6c1e1d31e37d341991d698d4e.png

1、Keepalived简介

Linux有很多开源的HA软件,keepalived是其中的一款,用keepalived可以用来解决很多应用程序的高可用问题。(如本篇的Nginx,以后后面对LVS、Mysql都可以用Keepalived来做高可用配置)

2、LVS、Keepalived、Nginx区别

LVS是用来做4层的负载均衡的,只能通过IP五元组进行流量分发。

Keepalived是用来做HA的,可以对任意的程序(需要写脚本)进行检测,然后对该软件做HA,例如可以对LVS、Nginx、Mysql等来做HA。

Keepalived内嵌LVS模块的,提供VIP的功能。所以如果用了Keepalived,就不需要额外做LVS的Director配置了,但是Realserver的配置还是需要。

Nginx,是可以做7层的负载均衡。LVS只能对IP五元组进行流量分发,而Nginx可以做到应用级别,例如动静分离(图片、视频)等。

3、安装Keepalived

3.1 安装

yum install keepalived -y

3.2 修改配置文件

cd /etc/keepalived
rm keepalived.conf
#原有的配置文件
vi keepalived.conf
#创建新的配置文件

注意配置文件只有一些关键参数必须修改,其他都是默认的。

Master(主)服务器配置

global_defs {
    notification_email {
        xxx@xxx.com
    }
    notification_email_from sns-lvs@gmail.com
    smtp_server xxx.xxx.xxx.xxx
    smtp_connection_timeout 30
    router_id LVS_MASTER         # 设置lvs的id,在一个网络应该是唯一的
}

vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh"    #最后手动执行下此脚本,以确保此脚本能够正常执行
    interval 2                          #(检测脚本执行的间隔,单位是秒)
    weight 2
}


vrrp_instance VI_1 {
    state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface eth1            # 当前进行vrrp通讯的网络接口卡(当前centos的网卡),注意如果网卡是eth1,要对应修改。
    virtual_router_id 66        # 虚拟路由编号,主从要一直
    priority 100            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    authentication {
        auth_type PASS
        auth_pass 1111
    }

track_script {
    chk_http_port            #(调用检测脚本)
    }

    virtual_ipaddress {
        10.1.30.31        # 定义虚拟ip(VIP),可多设,每行一个
    }
}

注意上面配置中vrrp_script后面定义了一个叫chk_http_port的脚本,而真正脚本实际的路径是/usr/local/src/下面的check_nginx_pid.sh。这个是要后面实际添加的,也就是需要写一个脚本检测nginx服务运行状况。

下面的tracks_cript设置检测脚本为上面定义的chk_http_port,keepalived启动后会自动按照设置好的时间间隔,周期性调用检测脚本。

Slave(从)服务器配置

global_defs {
    notification_email {
        xxx@xxx.com
    }
    notification_email_from sns-lvs@gmail.com
    smtp_server xxx.xxx.xxx.xxx
    smtp_connection_timeout 30
    router_id LVS_BACKUP         # 设置lvs的id,在一个网络应该是唯一的
}

vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh"    #最后手动执行下此脚本,以确保此脚本能够正常执行
    interval 2                          #(检测脚本执行的间隔,单位是秒)
    weight 2
}

vrrp_instance VI_1 {
    state BACKUP            # 指定keepalived的角色,MASTER为主,BACKUP为备
interface eth1            # 当前进行vrrp通讯的网络接口卡(当前centos的网卡),注意如果网卡是eth1,要对应修改。
virtual_router_id 66        # 虚拟路由编号,主从要一致
    priority 99            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    authentication {
        auth_type PASS
        auth_pass 1111
    }

track_script {
    chk_http_port            #(调用检测脚本)
    }

    virtual_ipaddress {
        10.1.30.31        # 定义虚拟ip(VIP),可多设,每行一个
    }
}

3.3 编写检测脚本

编写nginx检测脚本,注意路径与名称要和上面keepalivce.conf中的保持一致。

vi /usr/local/src/check_nginx_pid.sh
# vi /usr/local/src/check_nginx_pid.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
      /usr/local/nginx/sbin/nginx                #重启nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              killall keepalived
      fi
fi

增加脚本执行权限

chmod +x /usr/local/src/check_nginx_pid.sh

3.4 启动keepalived服务

service keepalived start

3.4 测试

3.4.1 手动停止Nginx

启动进程后,在30.40输入ip a s查看虚拟IP是否成功挂载。

4e86a231fb5ab1cd362a531a2939e878.png

ping 虚拟IP测试

4e86a231fb5ab1cd362a531a2939e878.png

连续通过VIP(10.1.30.31)访问网站,不断刷新测试,发现访问流量已经在两个Apache01与Apache02之间分发。

然后对Nginx主机手动停止Nginx服务。

service nginx stop

然后继续通过VIP(10.1.30.31)访问网站,发现网站依然能够正常访问。

eef57d9f066fd3087638e105fa3d8970.png

8b3209f020bba0e78619a473c02cd3fa.png

通过ip a s查看,发现30.31还是在nginx01上面。

4e86a231fb5ab1cd362a531a2939e878.png

原因是这样的:我们设置了一个脚本(check_nginx_pid.sh),利用keepalived周期性自动运行,脚本检测nginx进程是否存活,如果进程异常退出/没有运行,脚本会重新启动nginx进程。

因此,上面手动停止nginx服务,keepalived并不会将VIP从主Nginx服务器切换到备Nginx服务器,而是通过脚本重启将nginx启动,。因此通过VIP访问网站,由于3秒内nginx已经重启启动了,业务仍然能够正常访问。

3.4.2 手动停止keepalived

主Nginx服务器手动停止Keepalived

service keepalived stop

通过ip a s发现VIP已经自动切换到备Nginx服务器了。

9e62f85bfd061e6681cccdc06d0ed90e.png

通过VIP访问网站,发现业务正常访问。

eef57d9f066fd3087638e105fa3d8970.png

8b3209f020bba0e78619a473c02cd3fa.png

当前,2台Nginx服务器通过keepalived以及nginx检测脚本,实现了HA。但是用户通过VIP访问业务的时候,正常情况下只有1台Nginx负载用户的访问。

为了让2台Nginx服务器都能承载业务负载,下一篇通过keeaplived自带的LVS模块功能,实现2台Nginx服务器的负载均衡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值