首页 公告 项目 RSS

keepalived 主备切换使用企业微信机器人告警

December 16, 2019 本文有 1225 个字 需要花费 3 分钟阅读

简介

就是简单分享下我的经验,今天的架构是文章图片上这个样子的,两台机器192.168.1.2和192.168.1.3,有一个虚拟ip192.168.1.100,平时是192.168.1.2工作如果keepalived监测到并发太大访问不了nginx的80端口那么会切换到192.168.1.3,然后向微信发送一个信息显示主备已经切换了

正常来说nginx和keepalived是不应该在一台机器上的,因为当主nginx机器宕机了那么主keepalived的也是宕机的状态,主备会自动切换,所以这个架构是有缺点的,但是我们今天的重点在于主备切换来一个微信告警

安装keepalived

这个很简单,我就不多说了

yum install keepalived

之后配置主服务器

vim /etc/keepalived/keepalived.conf

global_defs {
   router_id nginx-node1
}

vrrp_script chk_nginx {
    script "/etc/keepalived/check.sh"
    interval 5
    weight -100
}

vrrp_instance VI_1 {
    state MASTER
    interface ens224
    virtual_router_id 51
    priority 100
    authentication {
        auth_type PASS
        auth_pass 123
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_nginx
    }
    notify_master "/usr/bin/python3 /etc/keepalived/wechat.py master"
    notify_backup "/usr/bin/python3 /etc/keepalived/wechat.py backup"
    notify_fault "/usr/bin/python3 /etc/keepalived/wechat.py fault"
}

解释下配置,全局配置里我只定义了一个router_id定义了机器标识,标识这个是nginx的第一个节点

vrrp_script是用来定义检查nginx状态脚本的我定义了每隔3秒执行以下脚本如果脚本执行失败那么此节点的优先级降100,也就是直接切换

下面是健康检查的脚本

curl 127.0.0.1:80 > /dev/null

vrrp_instance 用来定义这台机器实例,身份状态是master,和网卡ens224绑定,virtual_router_id是51,注意了这个virtual_router_id主备要相同,只有相同了keepalived才会知道这两台机器是一个组,priority 表示这台机器的权重,接着是认证的方式我选择的是密码认证,密码是123,虚拟地址就是我们上面说过的192.168.1.100, track_script 表示使用哪个健康检查的脚本,notify_master 表示切换到master的时候我们要执行的脚本,notify_backup表示切换到backup的时候我们哟啊执行的脚本,notify_fault 表示主备切换失败的时候我们要执行的脚本,上面我都只执行了一个脚本就是wechat.py这个脚本,然后把master,backup和fault这三个参数以变量的形式传入脚本。wecaht.py 这个脚本内容如下

import requests
import json
import sys


wechat_boot_url = ""
def send_wechat(message):
    headers = {'Content-Type': 'application/json;charset=utf-8'}
    body = {
        "msgtype": "text",
        "text": {
            "content": message
        }
    }
    requests.post(wechat_boot_url, json.dumps(body), headers=headers)

if __name__ == '__main__':
    message="nginx 负载已切换至 " + sys.argv[1]
    send_wechat(message)

其实就是发送一个post请求到微信机器人中,使用的时候记得替换wechat_boot_url这个地址

配置完成主服务器之后我们配置从服务器,从服务器的配置文件

global_defs {
   router_id nginx-node2
}

vrrp_script chk_nginx {
    script "bash /etc/keepalived/check.sh"
    interval 5
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens224
    virtual_router_id 51
    priority 80
    authentication {
        auth_type PASS
        auth_pass 123
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_nginx
    }
}

备服务器比主服务器配置少了

    notify_master "/usr/bin/python3 /etc/keepalived/wechat.py master"
    notify_backup "/usr/bin/python3 /etc/keepalived/wechat.py backup"
    notify_fault "/usr/bin/python3 /etc/keepalived/wechat.py fault"

如果备服务器也加上了上面这三句那么每一次主备切换在微信中你会收到两条通知,其他的配置上面都讲过了,你看着办就好

安装nginx

这个我不多讲了,直接用docker或者什么方式安装一个nginx,之后你开关nginx去监测有没有微信机器人的信息就好了

欢迎关注我的博客www.bboy.app

Have Fun