• Nginx+Keepalived实现高可用部署


    本篇主要介绍通过Keepalived实现Nginx高可用部署,本篇所介绍的内容依赖前面几篇搭建的Nginx反向代理负载均衡环境。如果你还没有这个环境,可以先看前面几篇博文:

    VMware Workstation安装Redhat6.4全过程附图(一)

    VMware Workstation安装Redhat6.4全过程附图(二)

    Linux环境JDK1.8安装

    Linux环境Nginx安装

    Linux环境Nginx反向代理实现负载均衡

    如果已经有linux虚拟机,可以跳过第一,第二篇。

    下面开始Keepalived高可用搭建

    1、Keepalived下载

    下载地址:https://www.keepalived.org/software/keepalived-2.0.20.tar.gz

    2、Keepalived安装

    进入keepalived下载目录/usr/local/soft,执行解压命令

    [root@test1 soft]# tar -zxvf keepalived-2.0.20.tar.gz

    进入/usr/local/soft/keepalived-2.0.20目录,依次执行下面3条命令进行安装

    [root@test1 keepalived-2.0.20]# ./configure --prefix=/usr/local/keepalived
    [root@test1 keepalived-2.0.20]# make
    [root@test1 keepalived-2.0.20]# make install

    3、Keepalived配置及启动

    安装完成后,一般会将Keepalived注册为系统服务,设置为开机启动,防止服务挂掉。

    进入安装目录的etc目录下,将keepalived相应的配置文件拷贝到系统相应的目录当中。keepalived启动时会从/etc/keepalived目录下查找keepalived.conf配置文件,如果没有找到则使用默认的配置。/etc/keepalived目录安装时默认是没有创建的,需要手动创建。

    [root@test1 keepalived-2.0.20]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    [root@test1 keepalived-2.0.20]# cp /usr/local/soft/keepalived-2.0.20/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
    [root@test1 keepalived-2.0.20]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
    [root@test1 keepalived-2.0.20]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

    增加nginx状态检测脚本:

    [root@test1  ~]# cd /usr/local/keepalived/
    [root@test1 keepalived]# touch check_nginx.sh
    [root@test1 keepalived]# chmod 755 check_nginx.sh
    [root@test1 keepalived]# vim check_nginx.sh

    check_nginx.sh文件内容如下:

    #!/bin/bash
    COUNT=$(ps -C nginx --no-header |wc -l)
    echo $COUNT
    #判断Nginx 是否都挂掉了
    if [ $COUNT -eq 0 ]
    then
        #nginx安装地址,如果挂掉了,就启动nginx(nginx命令的地址要写对)
        /usr/local/nginx/sbin/nginx
        echo "重启nginx"
        #等5秒钟后,再次查看是否 启动成功
        sleep 5
        #如果nginx没有启动起来,就直接干掉keepalived
        COUNT=$(ps -C nginx --no-header |wc -l)
        if [ $COUNT -eq 0 ]
        then
                echo "干掉keepalived",使得从服务器能够接管服务。
                #如果killall命令不能使用,就需要安装psmisc工具了
                #yum install -y psmisc
                killall keepalived
        fi
    fi

    主节点配置:

    vim /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived
    global_defs {
        #唯一标识,一般为用户名
        router_id username1
    }
    #监控服务.NGINX mysql等
    vrrp_script chk_nginx {
        script "/usr/local/keepalived/check_nginx.sh"
        #每2s检查一次
        interval 2
        #每次检查-20
        weight -20
    }
    vrrp_instance VI_1 {
        ##主从设置 MASTER/BACKUP  
        state MASTER
        #网卡名称
        interface eth0
        #同一个集群下这个 router_id是一样的
        virtual_router_id 51
        #本机的ip,需要修改
        mcast_src_ip 172.16.43.103
        #优先级,从节点 配置,需要小于主节点
        priority 100
        #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
        advert_int 1
        #认证的密码
        authentication {
            auth_type PASS
            #设定授权密码,密码相同的为一个集群
            auth_pass 1111
        }
        #触发的脚本
        track_script {
              chk_nginx  #检测脚本,上面配置的
        }
        #虚拟ip地址(同一个集群中的虚拟ip必须得相同,可配置多个)
        virtual_ipaddress {
            172.16.43.188
            172.16.43.199
        }
    }

    从节点配置:

    vim /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived
    global_defs {
        #唯一标识,一般为用户名
        router_id username2
    }
    #监控服务.NGINX mysql等
    vrrp_script chk_nginx {
        script "/usr/local/keepalived/check_nginx.sh"
        #每2s检查一次
        interval 2
        #每次检查-20
        weight -20
    }
    vrrp_instance VI_1 {
        ##主从设置 MASTER/BACKUP  
        state BACKUP
        #网卡名称
        interface eth0
        #同一个集群下这个 router_id是一样的
        virtual_router_id 51
        #本机的ip,需要修改
        mcast_src_ip 172.16.43.104
        #优先级,从节点 配置,需要小于主节点
        priority 80
        #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
        advert_int 1
        #认证的密码
        authentication {
           auth_type PASS
           #设定授权密码,密码相同的为一个集群
           auth_pass 1111
        }
        #触发的脚本
        track_script {
           chk_nginx  #检测脚本,上面配置的
        }
        #虚拟ip地址
        virtual_ipaddress {
            172.16.43.188
            172.16.43.199
        }
    }

    设置keepalived服务开机启动

    chmod 755 /etc/init.d/keepalived #权限
    chkconfig keepalived on #开机启动
    chkconfig --add keepalived  #加为系统服务
    service keepalived start  #启动服务
    service keepalived status  #查看服务状态

    启动后查看keepalived启动状态:

     想要停止keepalived服务,执行service keepalived stop。

    在103(真实IP)上可以通过ip a命令查看虚拟IP是否正常

    在104(真实IP)上查看ip a

    上一篇通过Nginx的真实IP访问测试服务:http://172.16.43.103/test/test.html,http://172.16.43.104/test/test.html

    现在我们通过虚拟IP同样可以访问测试服务:

    http://172.16.43.188/test/test.html,结果如下:

    http://172.16.43.199/test/test.html,结果如下:

    4、测试Nginx高可用

    停掉103上的keepalived服务

    [root@test1 sbin]# service keepalived stop
    停止 keepalived: [确定]
    [root@test1 sbin]# service keepalived status
    keepalived 已停

    刷新http://172.16.43.199/test/test.html,发现仍然可以访问。

    在103,和104上输入ip a,查看虚拟IP状态,可以看到虚拟IP188,199已经飘到104服务器上了。

     

     为了证明高可用生效,刷新test.html页面的时候,大家可以把nginx日志打开,看得更清楚一些。

    查看日志命令:

    [root@test2 logs]# tail -f /usr/local/nginx/logs/access.log 

    再将103上的keepalived服务启动,请求又回到103上了。

    到此,nginx高可用演示完成。

  • 相关阅读:
    【linux命令】命名管道(mkfifo)+ 结合xargs命令使用
    【SSH服务】远程连接管理服务SSH
    【VSFTP服务】rhel8安装vsftp软件
    【linux命令】关机和重启命令
    POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
    Windows下虚拟机安装Ubuntu15.10 Destop简易操作过程
    POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治
    Ubuntu15.10下华南师大锐捷认证客户端的使用详解
    POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法
    Ubuntu 14.04 LTS 下升级 gcc 到 gcc-4.9、gcc-5 版本
  • 原文地址:https://www.cnblogs.com/shileibrave/p/14574573.html
Copyright © 2020-2023  润新知