配置nginx + keepalived双主模式(双机互为主备)
Linux搭建nginx+keepalived 高可用(主备+双主模式)
keepalived 学习笔记(三)vrrp包通过防火墙
当前博客内容仅作参考,不完善!不能作为完整的教程!待后续更新~
安装keepalived
安装yum -y install keepalived
yum -y install keepalived
|
启动命令
查看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服务
主备模式
主备模式的配置文件区别:
主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 }
}
|