配置nginx + keepalived双主模式(双机互为主备)

Linux搭建nginx+keepalived 高可用(主备+双主模式)

keepalived 学习笔记(三)vrrp包通过防火墙


当前博客内容仅作参考,不完善!不能作为完整的教程!待后续更新~


安装keepalived

安装yum -y install keepalived

yum -y install keepalived

启动命令

service keepalived start

查看keepalived状态

service keepalived status

keepalived配置文件基础配置

原配置文件:/etc/keepalived/keepalived.conf

备份原配置文件

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
  • global_defs 全局模块
  • vrrp_instance 配置vip模块
  • vrrp_script 脚本模块,用来检测nginx服务

主备模式

主备模式的配置文件区别:

  • 不同
    • router_id
    • state
    • priority
  • 相同
    • virtual_router_id

主nginx

global_defs {         
# #机器标识,通常可设为hostname,故障发生时,邮件通知会用到。
router_id Nginx_01
}
vrrp_script check_nginx {
# 检测脚本
script "/etc/keepalived/check_nginx.sh"
# 每2s检测一次
interval 2
# 检测失败(脚本返回非0)则优先级 -5
weight -5
# 检测连续 2 次失败才算确定是真失败。会用weight减少优先级(1-255之间)
fall 3
# 检测 1 次成功就算成功。但不修改优先级
rise 2
}
vrrp_instance VI_1 {
# 指定instance(Initial)的初始状态, MASTER 或者BACKUP
state MASTER
# 实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的,(注意自己系统,我的默认是ens33,有的是eth0)
interface ens33
# 发送多播数据包时的源IP地址
virtual_router_id 51
# 设置本节点的优先级,优先级高的为master(1-255)
priority 150
# 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
advert_int 1
# 定义认证方式和密码,主从必须一样
authentication {
auth_type PASS
auth_pass 1111
}
# 这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除,这里主要是有优先级来决定的,和state设置的值没有多大关系,这里可以设置多个IP地址
virtual_ipaddress {
192.168.200.200
}
# 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换
track_script {
check_nginx
}
}

备nginx

global_defs {               
router_id Nginx_02
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -5
fall 3
rise 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.200
}
track_script {
check_nginx
}
}

双主模式


创建目录

mkdir -p /usr/local/keepalived/scripts/

监控脚本 monitor_nginx.sh

# 监控nginx进程,若nginx主进程不存在则启动nginx
# 若5s后nginx进程还是不存在的话kill掉keepalived进程,防止nginx没运行该主机的keepalived还接管虚拟IP
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
/usr/local/nginx/sbin/nginx
sleep 5
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
killall keepalived
fi
fi

keepalived文件

vi /etc/keepalived/keepalived.conf
global_defs
{
notification_email
{
123456@qq.com
}
notification_email_from 123456@qq.com
smtp_server 127.0.0.1
stmp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_script Monitor_Nginx {
script "/usr/local/keepalived/scripts/monitor_nginx.sh"
interval 2
weight 2
}

# 虚拟IP1, 本机作为Master
vrrp_instance VI_1 {
state MASTER
interface enp0s3
virtual_router_id 51
priority 100
advert_int 1
track_interface {
enp0s3
}

authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.30.51
}i
track_script {
Monitor_Nginx
}

}

# 虚拟IP2, 本机作为Backup
vrrp_instance VI_2 {
state BACKUP
interface enp0s3
virtual_router_id 52
priority 100
advert_int 1
track_interface {
enp0s3
}

authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.30.52
}
track_script {
Monitor_Nginx
}

}