【前言】本文是在腾讯云CVM下,搭建云服务器keepalived+nginx主备热备+双机热备。
一、【环境搭建】
1、环境准备
- 2台腾讯云CVM (同一地域,一台master(172.16.0.7),一台backup(172.16.0.9))
- 2个高可用虚拟IP (172.16.0.6、172.16.0.8)(搭建主备只需1个高可用虚拟ip,双主需要2个)
(具体可参考这篇文章:创建高可用虚拟 IP)
2、nginx、keepalived安装
nginx安装自行百度,下面介绍安装keepalived。
安装keepalived:
yum install -y keepalived
常用命令:
#启动
systemctl start keepalived
#停止
systemctl stop keepalived
重启#
systemctl restart keepalived
#查看状态
systemctl status keepalived
#设置开机启动
systemctl enable keepalived
#关闭开机启动
systemctl disable keepalived
vim /etc/keepalived/keepalived.conf
二、【keepalived相关配置】
1、nginx脚本: 创建 check_nginx.sh 文件,判断nginx进程没有数值,尝试重启nginx服务,睡眠2秒,再判断nginx进程有没有数值,没有则停止keepalived服务,高可用虚拟ip则会自动转到备机。
cd /etc/keepalived
vim check_nginx.sh
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/usr/bin/nginx
sleep 2
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
systemctl stop keepalived
fi
fi
2、keepalived邮件报警配置
说明: 实际生产中不适用keepalived自带的邮件功能,所以使用shell脚本发邮件实现报警。
linux 配置发邮件参考《Linux(centos8) 腾讯云CVM配置SMTPS发邮件》
cd /etc/keepalived
vim check_nginx.sh
#!/bin/bash
contact=lisuibi@163.com #接收报警的邮箱
notify() {
mailsubject="$(hostname) to be $1, vip转移"
mailbody="$(date +'%F %T'): vrrptransition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
notify master
;;
backup)
notify backup
;;
fault)
notify fault
;;
*)
echo "Usage: $(basename$0) {master|backup|fault}"
exit 1
;;
esac
3、主备热备模式
– keepalived 配置
/etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
主服务器配置:在 主服务器172.16.0.7 上, VIP设置为172.16.0.8,配置如下:
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL1 #主机标识,全局唯一
}
#检测Nginx是否存活脚本
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -5
}
vrrp_instance VI_1 {
state MASTER # 设置初始状态(MASTER 主机)
interface eth0 # 设置绑定 VIP 的网卡 例如 eth0 (ip addr查看网卡)
virtual_router_id 51 # 配置集群 virtual_router_id 值
nopreempt # 设置非抢占模式,
# preempt_delay 10 # 仅 state MASTER 时生效
priority 150 # 权重
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 172.16.0.7 # 设置本机内网IP地址
unicast_peer {
172.16.0.9 # 对端设备的 IP 地址
}
virtual_ipaddress {
172.16.0.8 # 设置高可用虚拟 VIP
}
#配置keepalived发生故障转移时,触发执行的脚本
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
notify_stop "/etc/keepalived/notify.sh stop"
garp_master_delay 1 # 设置当切为主状态后多久更新 ARP 缓存
garp_master_refresh 5 # 设置主节点发送 ARP 报文的时间间隔
track_interface {
eth0 # 使用绑定 VIP 的网卡 例如 eth0
}
track_script {
check_nginx
}
}
备用服务器:在备用服务器172.16.0.9 上,配置跟主服务器一样,就三不同一相同。
1. router_id 不同
2. state BACKUP不同
3. priority不同
4. virtual_router_id 必相同。
配置如下:
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL2 #主机标识,全局唯一
}
#检测Nginx是否存活脚本
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -5
}
vrrp_instance VI_1 {
# 注意主备参数选择
state BACKUP # 设置初始状态(BACKUP 备用)
interface eth0 # 设置绑定 VIP 的网卡 例如 eth0 (ip addr查看网卡)
virtual_router_id 51 # 配置集群 virtual_router_id 值
nopreempt # 设置非抢占模式
# preempt_delay 10 # 仅 state MASTER 时生效
priority 100 # 权重
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 172.16.0.9 # 设置本机内网 IP 地址
unicast_peer {
172.16.0.7 # 对端设备的 IP 地址
}
virtual_ipaddress {
172.16.0.8 # 设置高可用虚拟 VIP
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
notify_stop "/etc/keepalived/notify.sh stop"
garp_master_delay 1 # 设置当切为主状态后多久更新 ARP 缓存
garp_master_refresh 5 # 设置主节点发送ARP报文的时间间隔
track_interface {
eth0 # 使用绑定 VIP 的网卡 例如 eth0
}
track_script {
check_nginx
}
}
– 启动keepalived测试,查看高可用虚拟ip
syetemctl restart keepalived
1、测试下VIP是否可用:
2、停止主服务器keepalived,查看vip是否漂移
在停止主服务器keepalived后,再请求地址,查看结果,均请求的备用服务器
至此,keepalived+nginx 主备热备模式完成。
4、双机热备模式
– keepalived 配置
此配置为双机热备模式配置
当了解主备模式配置后,双机模式就容易配置多了。只需要在每台keepalived配置文件,加上一个vrrp_instance命名vrrp_instance VI_2即可,更改几个参数,设置另外一个VIP:172.16.0.6
172.16.0.7服务器(keep1) keepalive配置:
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL1 #主机标识,全局唯一
}
#检测Nginx是否存活脚本
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -5
}
vrrp_instance VI_1 {
state MASTER # 设置初始状态(MASTER 主机)
interface eth0 # 设置绑定 VIP 的网卡 例如 eth0 (ip addr查看网卡)
virtual_router_id 51 # 配置集群 virtual_router_id 值
nopreempt # 设置非抢占模式,
# preempt_delay 10 # 仅 state MASTER 时生效
priority 150 # 权重
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 172.16.0.7 # 设置本机内网IP地址
unicast_peer {
172.16.0.9 # 对端设备的 IP 地址
}
virtual_ipaddress {
172.16.0.8 # 设置高可用虚拟 VIP
}
#配置keepalived发生故障转移时,触发执行的脚本
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
notify_stop "/etc/keepalived/notify.sh stop"
garp_master_delay 1 # 设置当切为主状态后多久更新 ARP 缓存
garp_master_refresh 5 # 设置主节点发送 ARP 报文的时间间隔
track_interface {
eth0 # 使用绑定 VIP 的网卡 例如 eth0
}
track_script {
check_nginx
}
}
vrrp_instance VI_2 {
# 注意主备参数选择
state BACKUP # 设置初始状态
interface eth0 # 设置绑定 VIP 的网卡 例如 eth0
virtual_router_id 52 # 配置集群 virtual_router_id 值
nopreempt # 设置非抢占模式,
# preempt_delay 10 # 仅 state MASTER 时生效
priority 100 # 权重
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 172.16.0.7 # 设置本机内网IP地址
unicast_peer {
172.16.0.9 # 对端设备的 IP 地址
}
virtual_ipaddress {
172.16.0.6 # 设置高可用虚拟 VIP
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
notify_stop "/etc/keepalived/notify.sh stop"
garp_master_delay 1 # 设置当切为主状态后多久更新 ARP 缓存
garp_master_refresh 5 # 设置主节点发送 ARP 报文的时间间隔
track_interface {
eth0 # 使用绑定 VIP 的网卡 例如 eth0
}
track_script {
check_nginx
}
}
172.16.0.9服务器(keep2) keepalive配置:
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL2 #主机标识,全局唯一
}
#检测Nginx是否存活脚本
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -5
}
vrrp_instance VI_1 {
# 注意主备参数选择
state BACKUP # 设置初始状态(BACKUP 备用)
interface eth0 # 设置绑定 VIP 的网卡 例如 eth0 (ip addr查看网卡)
virtual_router_id 51 # 配置集群 virtual_router_id 值
nopreempt # 设置非抢占模式
# preempt_delay 10 # 仅 state MASTER 时生效
priority 100 # 权重
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 172.16.0.9 # 设置本机内网 IP 地址
unicast_peer {
172.16.0.7 # 对端设备的 IP 地址
}
virtual_ipaddress {
172.16.0.8 # 设置高可用虚拟 VIP
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
notify_stop "/etc/keepalived/notify.sh stop"
garp_master_delay 1 # 设置当切为主状态后多久更新 ARP 缓存
garp_master_refresh 5 # 设置主节点发送ARP报文的时间间隔
track_interface {
eth0 # 使用绑定 VIP 的网卡 例如 eth0
}
track_script {
check_nginx
}
}
vrrp_instance VI_2 {
# 注意主备参数选择
state MASTER # 设置初始状态均为“备“
interface eth0 # 设置绑定 VIP 的网卡 例如 eth0
virtual_router_id 52 # 配置集群 virtual_router_id 值
nopreempt # 设置非抢占模式
# preempt_delay 10 # 仅 state MASTER 时生效
priority 150 # 两设备是相同值的等权重节点
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 172.16.0.9 # 设置本机内网 IP 地址
unicast_peer {
172.16.0.7 # 对端设备的 IP 地址
}
virtual_ipaddress {
172.16.0.6 # 设置高可用虚拟 VIP
}
#配置keepalived发生故障转移时,触发执行的脚本
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
notify_stop "/etc/keepalived/notify.sh stop"
garp_master_delay 1 # 设置当切为主状态后多久更新 ARP 缓存
garp_master_refresh 5 # 设置主节点发送ARP报文的时间间隔
track_interface {
eth0 # 使用绑定 VIP 的网卡 例如 eth0
}
track_script {
check_nginx
}
}
配置好后分别启动 keep1和keep2,查看绑定VIP情况
– 启动keepalived测试,查看高可用虚拟ip
看到以下结果即为配置成功:
1、测试下VIP是否可用:
2、停止一台服务器keepalived,查看vip是否漂移
停止172.16.0.7 keepalived 服务,查看172.16.0.9 服务器 IP:
systemctl stop keepalived
ip addr
在172.16.0.7 服务器keepalived停止的情况下,再次请求服务地址,查看结果,均请求的172.16.0.9服务器
重新启动172.16.0.7 服务器的keepalived服务,可以看到又重新绑回。
至此,keepalived+nginx 双机热备模式完成。
【项目部署】
项目部署我是采用nginx反向代理到VIP,也可以在腾讯云申请EIP,在高可用虚拟IP页面绑定EIP即可通过域名解析到EIP进行访问。
【总结】
访问keepalived配置的2个VIP都可以正常调度,当停止其中一台keepalived节点,同样也可以正常访问。至此,腾讯云CVM搭建keepalived+nginx高可用(主备热备+双机热备模式)就完成了。
原文地址:https://blog.csdn.net/lisuibi/article/details/129217564
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_43960.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!