1.机器信息
机器 | ip | 角色 |
---|---|---|
node1 | 10.12.0.150 | master |
node2 | 10.12.0.169 | backup |
虚拟IP | 10.12.0.155 | 虚拟ip |
2.虚拟机信息
[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
3.安装Keepalived
yum install -y keepalived
4.编辑keepalived配置文件
master
global_defs {
router_id NodeA # 节点标识
}
vrrp_script chk_webapp {
script "/data/python_test/failover.sh" # 只要遵从“正常返回0,失败返回1”的规则即可
interval 1 # 检测间隔
weight -20 # 失败时权重降低数
}
vrrp_instance VI_1 {
state MASTER # MASTER 或BACKUP
interface enp0s3 # 绑定的网络接口。具体主机具体配置
virtual_router_id 51 # 各节点一致
priority 100 # 节点权重
advert_int 1 # 广播间隔
authentication {
auth_type PASS # 节点间验证模式
auth_pass 1234 # 主备口令相同
}
virtual_ipaddress {
10.12.0.155/24 # 可不必给出掩码位数
}
track_script {
chk_webapp # 检查服务状态的vrrp_script
}
}
backup
global_defs {
router_id NodeB # 节点标识
script_user root
enable_script_security
}
vrrp_script chk_webapp {
script "data/python_test/failover.sh" # 只要遵从“正常返回0,失败返回1”的规则即可
interval 1 # 检测间隔
weight -20 # 失败时权重降低数
}
vrrp_instance VI_1 {
state BACKUP # MASTER 或BACKUP
interface enp0s3 # 绑定的网络接口。具体主机具体配置
virtual_router_id 51 # 各节点一致
priority 100 # 节点权重
advert_int 1 # 广播间隔
authentication {
auth_type PASS # 节点间验证模式
auth_pass 1234 # 主备口令相同
}
virtual_ipaddress {
10.12.0.155/24 # 可不必给出掩码位数
}
track_script {
chk_webapp # 检查服务状态的vrrp_script
}
5.web服务检查脚本
#!/bin/bash
SERVICE='flask_api.py'
STATUS=$(ps aux | grep $SERVICE | grep -v grep)
# 状态正常返回0,不正常就返回1。
if [ "$STATUS"x != ""x ]; then
exit 0
else
exit 1
fi
6.python flask代码
from flask import Flask
import socket
host_name = socket.gethostname()
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello World! this {} 1</h1>'.format(host_name)
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0',port=5001)
7.启动keepalived
systemctl start keepalived
8.测试
image.png
把node1的web服务关闭
image.png
网友评论