nginx 使用 keepalived 部署高可用

一、准备工作

  1.   准备两台机器 192.168.1.2(master)、192.168.1.3(slave)
  2.   准备虚拟IP 192.168.1.1

二、安装

  1. 安装nginx(两台)

    yum -y install nginx

    systemctl start nginx

    systemctl enable nginx

    # master

    echo "111111" > /usr/share/nginx/html/index.html

    # slave

    echo "222222" > /usr/share/nginx/html/index.html

 

  2. 安装keepalived(两台)

    安装依赖

    yum -y install gcc openssl-devel popt-devel

 

    打开下载页面,找到最新版本 https://www.keepalived.org/download.html

    cd /usr/local

    wget https://www.keepalived.org/software/keepalived-2.2.4.tar.gz --no-check-certificat

    tar -zxvf keepalived-2.2.4.tar.gz

    cd keepalived-2.2.4

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

    make && make install

 

    开机启动

    cp keepalived/etc/init.d/keepalived /etc/init.d/
    cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/

    mkdir /etc/keepalived

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

    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

 

  3. 修改配置

    vim /etc/keepalived/keepalived.conf

 

master配置:

! Configuration File for keepalived

global_defs {
    #一个没重复的名字即可
    router_id nginx_master
}

# 检测nginx是否运行
vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh"
        interval 2
     weight -20 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
     fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
     rise 1 #检测1次成功就算成功。但不修改优先级
}

vrrp_instance VI_1 {

    # 此处不设置为MASTER,通过priority来竞争master
    state BACKUP

    # 网卡名字,文章下方会给出如何获取网卡名字的方法
    interface eth0

    # 同一个keepalived集群的virtual_router_id相同
    virtual_router_id 51

    # 权重,master要大于slave
    priority 100

    # 主备通讯时间间隔
    advert_int 1

    # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
    # 本机ip
    unicast_src_ip 192.168.1.2
    unicast_peer {
        # 其他机器ip
        192.168.1.3
    }

    # 设置nopreempt防止抢占资源
    nopreempt

    # 主备保持一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    # 与上方nginx运行状况检测呼应
    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        # 虚拟ip地址(VIP,一个尚未占用的内网ip即可)
        192.168.1.1
    }
}

 

slave配置:

! Configuration File for keepalived

global_defs {
    #一个没重复的名字即可
    router_id nginx_slave
}

# 检测nginx是否运行
vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh"
        interval 2
     weight -20 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
     fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
     rise 1 #检测1次成功就算成功。但不修改优先级
}

vrrp_instance VI_1 {

    # 此处不设置为MASTER,通过priority来竞争master
    state BACKUP

    # 网卡名字,文章下方会给出如何获取网卡名字的方法
    interface eth0

    # 同一个keepalived集群的virtual_router_id相同
    virtual_router_id 51

    # 权重,master要大于slave
    priority 90

    # 主备通讯时间间隔
    advert_int 1

    # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
    # 本机ip
    unicast_src_ip 192.168.1.3
    unicast_peer {
        # 其他机器ip
        192.168.1.2
    }

    # 设置nopreempt防止抢占资源
    nopreempt

    # 主备保持一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    # 与上方nginx运行状况检测呼应
    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        # 虚拟ip地址(VIP,一个尚未占用的内网ip即可)
        192.168.1.1
    }
}

 

nginx监听脚本:

touch /etc/keepalived/nginx_check.sh

chmod +x /etc/keepalived/nginx_check.sh

vim /etc/keepalived/nginx_check.sh

#! /bin/bash
pidof nginx
if [ $? -ne 0 ];then
    /etc/init.d/keepalived stop
fi

 

  4. 防止脑裂

# 指定keepalived配置的网卡:enp0s3,固定的VRRP广播地址:224.0.0.18
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface enp0s3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface enp0s3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload

# 查看配置的规则
firewall-cmd --direct --get-rules ipv4 filter INPUT
firewall-cmd --direct --get-rules ipv4 filter OUTPUT

 

  5. 启动keepalived

    service keepalived start

    # 配置开机自启动
    systemctl enable keepalived

 

三、 nginx 配置文件同步

yum -y install rsync

yum -y install inotify-tools

 

posted @ 2021-12-01 16:31  运维之王  阅读(57)  评论(0)    收藏  举报