美文网首页
keepalived + nginx 实现高可用集群方案

keepalived + nginx 实现高可用集群方案

作者: Crazy_Coder | 来源:发表于2018-08-21 16:36 被阅读0次

    准备工作

    1. 两台虚拟机如:
      • 10.211.55.8
      • 10.211.55.10
    2. 准备安装文件
      • nginx-1.13.1.tar.gz
      • pcre-8.36.zip
      • keepalived-1.2.22.tar.gz

    安装nginx

    1. 参考安装Linux一文,在两台服务器安装nginx

      10.211.55.8 称为 nginx1

      10.211.55.10 称为 nginx2

    安装keepalived

    1. 解压文件

       cd /opt/software
       tar -zxvf keepalived-1.2.22.tar.gz
       cd keepalived-1.2.22
      
    2. 安装

       ./configure --prefix=/opt/keepalived
       make && make install
      
    3. 处理配置文件和可执行文件

       cp /opt/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
       cp /opt/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
       mkdir /etc/keepalived
       cp /opt/keepalived/etc/keepalived/keepalived.conf /etc/keepalived
       ln -s /opt/keepalived/sbin/keepalived /usr/sbin/
      
    4. 启动服务

       /etc/init.d/keepalived start
      
    5. 按照相同的步骤在另一台服务器安装keepalived

    修改配置文件

    vim /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived
    
    global_defs {
       # keepalived 自带的邮件提醒需要开启 sendmail 服务。建议用独立的监控或第三方 SMTP,也可配置邮件发送
       router_id 10.211.55.8
    }
    
    vrrp_script chk_nginx {
        # 运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
        script "/opt/shell/nginx_check.sh"
        # 检测时间间隔
        interval 2
        # 如果条件成立的话,则权重 -20
        weight -20
    }
    
    # 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
    vrrp_instance VI_1 {
        # 来决定主从(从:BACKUP)
        state MASTER
        # 绑定虚拟 IP 的网络接口,根据自己的机器填写
        interface eth0
        # 虚拟路由的 ID 号, 两个节点设置必须一样
        virtual_router_id 121
        # 填写本机ip
        mcast_src_ip 10.211.55.10
        # 节点优先级,主节点比从节点优先级高
        priority 100
        # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
        nopreempt
        # 组播信息发送间隔,两个节点设置必须一样,默认 1s
        advert_int 1
    
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    
        # 将 track_script 块加入 instance 配置块
        track_script {
            #执行 Nginx 监控的服务
            chk_nginx
        }
    
        virtual_ipaddress {
            # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
            10.211.55.100
        }
    }
    

    以上配置为主节点配置,从节点类似,有区别的已经标明。下面是监控服务脚本内容

    #!/bin/bash
    A=`ps -C nginx –no-header |wc -l`
    if [ $A -eq 0 ];then
        /opt/nginx/sbin/nginx
        sleep 2
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
            killall keepalived
        fi
    fi
    

    定义变量,此变量为检查nginx进程脚本,如果进程为0,则启动nginx服务,再次检查nginx服务,如果仍没启动 ,杀掉所有keepalived的进程。

    测试高可用

    1. 打开浏览器,输入虚拟ip 10.211.55.100

    2. 显示的是nginx1的页面

    3. 此时可以停掉一台nginx服务器

       /opt/nginx/sbin/nginx -s stop
      
    4. 这时候,单独访问这台服务器,发现还是可以的,也就是说,keepalived监控到nginx服务down掉了,然后自动重启这台机器了。

    5. 这时再停掉一台keepalived服务器

       /etc/init.d/keepalived stop
      
    6. 刷新浏览器,显示的将是另外一台nginx

    7. 这时就可以证明已经实现高可用

    相关文章

      网友评论

          本文标题:keepalived + nginx 实现高可用集群方案

          本文链接:https://www.haomeiwen.com/subject/hxyjiftx.html