Nginx+keepalived高可用集群简单搭建(主从和双主)

给你一囗甜甜゛ 提交于 2020-04-12 10:27:06

nginx搭建高可用集群

在本文中,将利用keepalived + nginx搭建高可用集群,分别介绍主从模式和双主模式。

环境准备

首先需要准备环境,本文使用两台虚拟机搭建一个nginx高可用集群,虚拟机上分别安装nginx和keepalived,安装步骤如下:

  1. 使用如下命令安装相关依赖:

    yum -y install make zlib zlib devel gcc c++ libtool openssl openssl dev el
    
  2. 安装nginx,去官网下载对应tar包,上传到虚拟机,解压,进行解压后的nginx安装包目录使用如下命令:

    ./configure
    make && make install
    
  3. 关闭防火墙或开放对应端口。(不同版本linux命令有所不同,下面是centos7使用firewall命令)

    firewall-cmd --list-all   #查看开放的端口号
    firewall-cmd --add-service=80/tcp --permanent   #设置开放的端口号
    firewall-cmd --reload   #重启防火墙
    systemctl stop firewalld.service  #停止firewall
    systemctl disable firewalld.service  #禁止firewall开机启动
    
  4. 安装keepalived,使用如下命令:安裝完成后再/etc目录下生成keepalived文件,其中有keepalived.conf配置文件。

     sudo yum install keepalived -y
    

主从模式

在这里插入图片描述
主从模式是在搭建的nginx集群中有一个启用节点,在没有出现宕机情况下由该节点完成反向代理等工作,当该节点宕机时,将会启动备用节点,达到高容错、高可用,不会因为一台nginx服务器挂掉而无法调用服务。

接下来进行配置文件的修改,首先查看本机联网网卡的名字,利用ifconfig(centos7是使用ip命令),如下图联网网卡是eth1,记住这个id,后面再配置文件中有用。

在这里插入图片描述

  1. 修改keepalived.conf配置文件,内容如下:

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL           #路由id
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    vrrp_script chk_http_port {
    script "/usr/local/src/nginx_check.sh"       #检测脚本
    interval 2            
    weight 2
    }
    vrrp_instance VI_1 {
        state MASTER     #该节点的状态,从节点需要设置为BACKUP
        interface eth1   #联网网卡
        virtual_router_id 51   #主从节点的virtual_router_id必须相同
        priority 100    #主从节点取冉优先级,主机较大,从机较小
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.145.220   #虚拟ip地址
        }
    }
    
  2. /usr/local/src/目录下增加检测脚本,nginx_check.sh,检测脚本内容如下:

    #!/bin/bash
    A=`ps -C nginx –no-header |wc -l`
    if [ $A -eq 0 ];then
        /usr/local/nginx/sbin/nginx
        sleep 2
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
            killall keepalived
        fi
    fi
    
  3. 两台虚拟机分别启动nginx和keepalived,命令如下:

    ./nginx        #启动nginx
    service keepalived start   #centos6使用该命令启动
    systemctl start keepalived.service   #centos7使用该命令启动
    

    下图显示表示启动成功:

在这里插入图片描述

在这里插入图片描述

  1. 启动完成后,可以使用主机访问虚拟ip地址,可以看到能够正确访问到nginx服务器,接下来停止刚才为MASTER的节点的nginx和keepalived,之后再用该虚拟地址访问,同样可以访问到nginx服务器。这便是主从模式,当主节点宕机后,备份节点将代替主节点工作,继续工作。

在这里插入图片描述

双主模式

双主模式,每个节点既是主节点也是备份节点,当一个节点宕机,两个虚拟地址的请求都会转移到另外一个节点。

主从模式情况下,一台做主,一台做从,但同时只有一台机器工作,当主节点不出现故障时,另一台机器便一直处于资源浪费状态。所以双主模式可以解决资源浪费的情况。

在这里插入图片描述

  • 配置双主模式,需要修改keepalived.conf配置文件,文件内容如下:(在主从模式情况下,主节点配置文件中添加虚拟实例VI_2即可)
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.145.220
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth1
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.145.230
    }
}

在备份节点的keepalived.conf文件中添加以下内容:

vrrp_instance VI_2 {
    state MASTER
    interface eth1
    virtual_router_id 52
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.145.230
    }
}

修改完成后重启keepalived即可,这时通过192.168.145.220192.168.145.230两个虚拟地址都可以访问到nginx服务器,停止其中一台主机的keepalived和nginx服务后,还是可以访问到。

发布了34 篇原创文章 · 获赞 37 · 访问量 4万+
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!