• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Nginx+Keepalived实现双机主备的方法

    前言

    首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,起初是专为LVS负载均衡软件设计的,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现web服务端的高可用。

    Keepalived以VRRP协议为实现基础,VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。

    VRRP出现的目的就是为了解决静态路由的单点故障问题的,它能保证当个别节点宕机时,整个网络可以不间断地运行。

    下面我们介绍一下nginx keepalived高可用方案的部署安装。

    环境准备

    在两台主机上准备如下压缩文件:

    虚拟IP

    真实IP

    nginx端口

    主从

    192.168.124.20

    192.168.124.13

    80

    MASTER

    192.168.124.20

    192.168.124.14

    80

    BACKUP

    安装nginx

    新建一个用户:

    useradd tianyan

    确定安装目录,我这里的安装目录是:/home/tianyan/tianyan_soft/nginx.install。

    在这个目录下分别新建两个目录用于安装nginx和keepalived,解压两个压缩包。

    执行安装命令:

    ./configure --prefix=/home/tianyan/tianyan_soft/nginx.install \
    
    --sbin-path=/home/tianyan/tianyan_soft/nginx.install/sbin/nginx --conf-path=/home/tianyan/tianyan_soft/nginx.install/conf/nginx.conf \
    
    --error-log-path=/home/tianyan/tianyan_soft/nginx.install/error.log \
    
    --http-log-path=/home/tianyan/tianyan_soft/nginx.install/access.log \
    
    --pid-path=/home/tianyan/tianyan_soft/nginx.install/nginx.pid \
    
    --lock-path=/home/tianyan/tianyan_soft/nginx.install/nginx.lock \
    
    --user=tianyan --group=tianyan \
    
    --with-http_stub_status_module \
    
    --with-http_gzip_static_module \
    
    --with-http_ssl_module \
    
    --with-http_realip_module \
    
    --with-threads \
    
    --with-pcre \
    
    --http-client-body-temp-path=/home/tianyan/tianyan_soft/nginx.install/client/ \
    
    --http-proxy-temp-path=/home/tianyan/tianyan_soft/nginx.install/proxy/ \
    
     --http-fastcgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/fcgi/ \
    
    --http-uwsgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/uwsgi \
    
    --http-scgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/scgi

    如果报错,记得安装相关依赖:

    yum install gcc gcc-c++
    nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)。

    注:以非root权限启动时,会出现 nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied) 错误。

    原因:Linux只有root用户可以使用1024一下的端口

    解决办法:

    1.按照root权限启动

    2.将 /usr/local/nginx/conf/nginx.conf 文件中的80端口改为1024以上。

    安装keepalived

    ./configure --prefix=/usr/local/keepalived

    上述命令执行完毕后继续执行:

    make && make install

    安装完毕后,目录是这个样子:

    将配置文件拷贝到系统对应的目录下

    mkdir /etc/keepalived
    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

    编辑 master 节点的 keepalived.conf

    vim /etc/keepalived/keepalived.conf

    内容参考如下:

    ! Configuration File for keepalived
    
    global_defs {
      #一个没重复的名字即可
      router_id hyq_slave
      }
    
    
    #ng是否运行
    vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh"
        interval 2
        weight -20
    }
    
    vrrp_instance VI_1 {
      state BACKUP   # 必填,可以是MASTER或BACKUP
    
      interface ens33
      virtual_router_id 101
      priority 90
      advert_int 1
    
      # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
      # 本机ip
      unicast_src_ip 192.168.124.14
      unicast_peer {
        # 其他机器ip
        192.168.124.13
      }
      # 设置nopreempt防止抢占资源
      nopreempt
    
      authentication {
        auth_type PASS
        auth_pass 1111
      }
    
      # 与上方nginx运行状况检测呼应
      track_script {
        chk_nginx
      }
      virtual_ipaddress {
        192.168.124.20
      }
    }

    编辑 slave 节点的 keepalived.conf

    vim /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
      #一个没重复的名字即可
      router_id hyq_slave
      }
    
    
    #ng是否运行
    vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh"
        interval 2
        weight -20
    }
    
    vrrp_instance VI_1 {
      state BACKUP   # 必填,可以是MASTER或BACKUP  
    
    
      interface ens33
      virtual_router_id 101
      priority 90
      advert_int 1
    
      # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
      # 本机ip
      unicast_src_ip 192.168.124.14
      unicast_peer {
        # 其他机器ip
        192.168.124.13
      }
      # 设置nopreempt防止抢占资源
      nopreempt
    
      authentication {
        auth_type PASS
        auth_pass 1111
      }
    
      # 与上方nginx运行状况检测呼应
      track_script {
        chk_nginx
      }
      virtual_ipaddress {
        192.168.124.20
      }
    }

    编写nginx_check.sh脚本

    在/etc/keepalived目录下新建nginx_check.sh脚本

    touch nginx_check.sh

    编辑其内容为:

    #!/bin/sh
    A=`ps -C nginx --no-header |wc -l`
    if [ $A -eq 0 ]
    then
     /usr/sbin/nginx
     sleep 1
     A2=`ps -C nginx --no-header |wc -l`
     if [ $A2 -eq 0 ]
     then
      systemctl stop keepalived
     fi
    fi

    含义是:如果 nginx 停止运行,尝试启动,但是如果无法启动,则杀死本机的 keepalived 进程, keepalied将会把虚拟 ip 绑定到 BACKUP 机器上。 注意: /usr/sbin/nginx是nginx的启动命令,如果你安装到其他目录,则相应的替换。

    Keepalived的日志

    Keepalived日志默认位置是在/var/log/messages目录下。我们将其修改一下。

    由于系统是centos7,修改位置为:/lib/systemd/system/keepalived.service

    原内容:

    EnvironmentFile=-/usr/local/keepalived/etc/sysconfig/keepalived
    ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS

    修改为:

    修改完毕后重新加载service

    systemctl daemon-reload

    创建命令软连接:

    ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

    执行:

    keepalived -D -f /etc/keepalived/keepalived.conf

    -D 将日志输出到message日志,默认日志也在message
    -f 是指定配置文件

    修改/etc/sysconfig/keepalived

    把KEEPALIVED_OPTIONS="-D" 修改为:KEEPALIVED_OPTIONS="-D -d -S 0"

    在/etc/rsyslog.conf 末尾添加

    local0.*/var/log/keepalived.log

    最后执行命令:

    service rsyslog restart

    重启keepalived后就可以看到日志在/var/log/keepalived.log下了。

    测试验证VIP

    当keepalived和nginx都启动后,我们来测试一下。

    首先在浏览器里面访问三个地址

    我修改了一下nginx的index.html,可以看到当前vip指向是13的master节点:

    然后,我们手动停止13上的nginx,再次访问http://192.168.124.20。

    说明安装成功。

    其中通过ip address命令可以观察到网卡的变化

    实验到这里,我们就完成了keepalived + nginx 主从配置的安装部署了。

    思考:如何开启双主模式

    什么是双主模式?

    分别介绍一下两种配置

    1、Nginx+keepalived 主从配置

    这种方案就是上文介绍过的,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,仅仅用于灾备,平时都是空闲着的。

    2、Nginx+keepalived 双主配置

    这种方案,使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,如下图:

    【实战】 elasticsearch 写入速度提升的案例分享

    用java做一个能赚钱的微信群聊机器人(PC协议)

    Mysql百万量级数据高效导入Redis

    java线上故障分析+性能调优

    到此这篇关于Nginx+Keepalived实现双机主备的方法的文章就介绍到这了,更多相关Nginx Keepalived 双机主备内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    上一篇:linux 下 g++编译程序时-I(大写i) 与-L(大写l)-l(小写l) 的作用详解
    下一篇:如何解决docker容器启动失败
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    Nginx+Keepalived实现双机主备的方法 Nginx+Keepalived,实现,双,机主,