• keepalived双机热备nginx


      nginx目前是我最常用的反向代理服务,线上环境为了能更好的应对突发情况,一般会使用keepalived双机热备nginx或者使用docker跑nginx集群,keepalived是比较传统的方式,虽然用docker跑nginx集群更方便,但传统的方式总是有他的可取之处,并且多学一些东西也很好。以后也会写如何使用docker跑nginx集群。

      环境准备:

      2台centos: 192.168.0.105 和192.168.0.118, 虚拟IP(VIP)为192.168.0.119

    配置keepavlived

      分别在105和118上安装keepalived

    yum install keepalived

      准备心跳角本

      keepalived的配置相当灵活,可以定时执行角本命令,用于心跳检查,比如,我们访问nginx发现nginx不可访问时,就关闭keepalived,从而切换到从nginx来实现不间断的服务支持。

    vi /etc/keepalived/keepalived.conf
    #!/bin/bash
    
    count=0
    for (( k=0; k<2; k++ ))
    do
       check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\n" http://localhost:81 -o /dev/null )
       if [ "$check_code" != "200" ]; then
           count=count +1
           continue
       else
           count = 0
           break
       fi
    done
    if [ "$count" != "0" ]; then
       killall keepalived
       exit 1
    else
       exit 0
    fi

      这段角本的意思就是说每次的心跳检查会执行一个for循环,访问http://localhost:81,在for的2次循环中如果返回的状态都不是200就会关闭keepalived。这个角本在105和118两台机器上都要准备好。

      设置118机器上的keepalived为主节点,105机器上的keepalived为从节点,它们两个的配置文件差不太多

    vi /etc/keepalived/keepalived.conf

      118机器keepalived的配置文件

    ! Configuration File for keepalived
    vrrp_script chk_nginx {
       script "/etc/keepalived/check_nginx.sh" # 心跳检测角本
       interval 2 #脚本执行间隔,每2s检测一次
       weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
       fall 3 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
       rise 2 #检测1次成功就算成功。但不修改优先级
    }
    
    vrrp_instance VI_1 {
       state MASTER #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
       interface eth0 #指定监测网络的接口。实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的
       mcast_src_ip  192.168.0.118 ## 发送多播数据包时的源IP地址
       virtual_router_id 51 #虚拟路由标识,MASTER和BACKUP必须是一致的
       priority 100 #定义优先级,数字越大,优先级越高
       advert_int 2 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
       authentication { #设置验证类型和密码。主从必须一样
           auth_type PASS #设置vrrp验证类型,主要有PASS和AH两种
           auth_pass 1111 #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
       }
       virtual_ipaddress {
           192.168.0.119 #VRRP 虚拟地址 如果有多个VIP,换行填写
       }
       track_script {
          chk_nginx # 心跳脚本,即在 vrrp_script 部分指定的名字
       }
    }

    115机器上的角本对上面的角本稍做变动即可

    改变 state MASTER -> state BACKUP,priority 100 -> priority 90,mcast_src_ip 192.168.0.118 -> mcast_src_ip 192.168.0.105。其他的地方保持不变,是不是很简单。

    ! Configuration File for keepalived
    vrrp_script chk_nginx {
       script "/etc/keepalived/check_nginx.sh"
       interval 2
       weight -5
    }
    
    vrrp_instance VI_1 {
       state BACKUP # 修改
       interface eth0
       mcast_src_ip  192.168.0.105 # 修改 为本机IP
       virtual_router_id 51
       priority 90  #数字变小
       advert_int 2
       authentication {
           auth_type PASS
           auth_pass 1111
       }
       virtual_ipaddress {
           192.168.0.119
       }
       track_script {
          chk_nginx
       }
    }

    到这里keepalived的简单配置就完成了下面就启动keepalived

    service keepalived start

    安装Nginx

     
    查看nginx的依赖库是否完整
     
    rpm -qa zlib
    rpm -qa zlib-devel
    rpm -qa openssl
    rpm -qa openssl-devel
    rpm -qa pcre
    rpm -qa pcre-devel
    rpm -qa gcc
    如果没有就安装
     
    yum -y install gcc zlib zlib-devel openssl openssl-devel pcre-devel
    下载并解压nginx
    mkdir nginxsrc
    cd nginxsrc/
     
     
    wget http://nginx.org/download/nginx-1.13.9.tar.gz
     
    tar zxvf nginx-1.13.9.tar.gz
     
    cd nginx-1.13.9/
     
    ./configure --prefix=/usr/local/nginx   --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module
     
    安装在/usr/local/nginx/sbin/nginx 目录下
     
     
    make&&make install
     
    执行成功后会显示leaving directory 
     
     
    启动
    /usr/local/nginx/sbin/nginx
     
     
    检查
    ps aux|grep nginx

     
     
    开机启动
    vi /etc/rc.local
    添加一行
    /usr/local/nginx/sbin/nginx
     
     
     

     因为我的机器上80端口被别的应用占用了,所以就修改105和118的 nginx.conf 把端口80 修改为81

    vi /usr/local/nginx/conf/nginx.conf

     分别个性105 和119上的index.html 加上一个ip以便们们识别打开的是哪个ip上的index.html

    vi /usr/local/nginx/html/index.html 

    nginx重新加载配置

    /usr/local/nginx/sbin/nginx -s reload

    好了,我们访问一下

    curl 192.168.0.119:81

    返回的html是 118机器上的index.html

     现在我们把118的nginx停止

     /usr/local/nginx/sbin/nginx -s stop

    这时118上的keepalived的心跳检查角本发现nginx无法访问会把keepalived关闭,然后转向从节点

    我们再访问一下119

     curl 192.168.0.119:81

     

    在118上重新启动nginx和keepalived

    再访问119 返回的网址是118上的index.html

  • 相关阅读:
    Java实验--基于Swing的简单的歌曲信息管理系统(三)
    Java实验--基于Swing的简单的歌曲信息管理系统(二)
    Java实验--基于Swing的简单的歌曲信息管理系统(一)
    《下厨房》移动应用开发需求分析(第二版)
    《下厨房》移动应用开发需求分析
    结对编程之黄金点游戏
    常用JS正则
    JS正则表达式
    transition-
    DOM与BOM区别js
  • 原文地址:https://www.cnblogs.com/li-peng/p/8490928.html
Copyright © 2020-2023  润新知