使用Keepalived配置主从热备实现Nginx高可用(HA)

Keepalived 简要介绍

Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。

Keepalived 以 VRRP 协议为实现基础,用 VRRP 协议来实现高可用性(HA)。VRRP(Virtual RouterRedundancy Protocol)协议是用于实现路由器冗余的协议,

VRRP 协议将两台或多台路由器设备虚拟成一个 设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如果工作正常的话就是 MASTER,

或者是通过算法选举产生,MASTER 实现针对虚拟路由器 IP 的各种网络功能, 如 ARP 请求,ICMP,以及数据的转发等;其他设备不拥有该虚拟 IP,状态是 BACKUP,

除了接收 MASTER 的 VRRP 状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP 将接管原先 MASTER 的网络功能。

VRRP 协议使用多播数据来传输 VRRP 数据,VRRP 数据使用特殊的虚拟源 MAC 地址发送数据而不是自身 网卡的 MAC 地址,VRRP 运行时只有 MASTER 路由器定时发送 VRRP 通告信息,

表示 MASTER 工作正常以及虚 拟路由器 IP(组),BACKUP 只接收 VRRP 数据,不发送数据,如果一定时间内没有接收到 MASTER 的通告信 息,各 BACKUP 将宣告自己成为 MASTER,

发送通告信息,重新进行 MASTER 选举状态。

Keepalived + Nginx 方案图

Nginx相关环境基于上篇Nginx安装博客的配置;

Keepalived 安装

通过yum安装:

yum install -y keepalived

耐心等待安装完毕。

安装完毕后 会生成 /etc/keepalived 目录

相关命令:

service keepalived start         #启动服务
service keepalived stop          #停止服务
service keepalived restart       #重启服务  

Keepalived 配置

防火墙添加arrp组播规则,或关闭防火墙

iptables:

vi /etc/sysconfig/iptables
-A INPUT -p vrrp -d 224.0.0.18/32 -j ACCEPT

firewall:

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface enp4s0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload

关闭selinux:

vi /etc/sysconfig/selinux
#修改:
SELINUX=disabled
#setenforce 0

keepalived 的所有功能都是通过配置 keepalived.conf文件来实现的。

建议备份一下keepalived.conf文件重新添加一个新文件填写或者清空keepalived.conf文件重新填写。

抢占模式配置

红色字体为不同配置

Master节点:

global_defs {
   router_id nginx_01  #标识本节点的名称,通常为hostname
}

## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
       script "/etc/keepalived/nginx_check.sh"
       interval 2  #每2秒检测一次nginx的运行状态
       weight -20  #失败一次,将自己的优先级-20
}

vrrp_instance VI_1 {
    state MASTER                  # 状态,主节点为MASTER,备份节点为BACKUP
    interface eno16777736         # 绑定VIP的网络接口,通过ip add查看自己的网络接口
    virtual_router_id 51          # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
    mcast_src_ip 192.168.60.131   # 本机IP地址(80端口已配置好nginx)
    priority 100                  # 节点优先级,值范围0~254,MASTER要比BACKUP高
    advert_int 1                  # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
    # 设置验证信息,两个节点必须一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
    virtual_ipaddress {
        192.168.60.200
    }

    track_script {
       chk_nginx  # nginx存活状态检测脚本
    }
}

BackUp 节点:

global_defs {
   router_id nginx_02  #标识本节点的名称,通常为hostname
}

## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
       script "/etc/keepalived/nginx_check.sh"
       interval 2  #每2秒检测一次nginx的运行状态
       weight -20  #失败一次,将自己的优先级-20
}

vrrp_instance VI_1 {
    state BACKUP                  # 状态,主节点为MASTER,备份节点为BACKUP
    interface eno16777736         # 绑定VIP的网络接口,通过ip add查看自己的网络接口
    virtual_router_id 51          # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
    mcast_src_ip 192.168.60.133   # 本机IP地址(80端口已配置nginx)
    priority 90                  # 节点优先级,值范围0~254,MASTER要比BACKUP高
    advert_int 1                  # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
    # 设置验证信息,两个节点必须一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
    virtual_ipaddress {
        192.168.60.200
    }

    track_script {
       chk_nginx  # nginx存活状态检测脚本
    }
}

创建nginx服务检测脚本

分别在主备服务器/etc/keepalived目录下创建nginx_check.sh脚本,并为其添加执行权限chmod +x /etc/keepalived/nginx_check.sh

用于keepalived定时检测nginx的服务状态,如果nginx停止了,会尝试重新启动nginx,如果启动失败,会将keepalived进程杀死,将vip漂移到备份机器上。

#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx #尝试重新启动nginx
    sleep 2  #睡眠2秒
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
    fi
fi

配置完毕,分别启动主从服务器keepalived服务

service keepalived start
ps aux | grep keepalived

两节点的启动情况

查看vip绑定情况

ip add

主节点:

BackUp节点:

测试vip漂移

停止Master上的keepalived服务

BackUp节点:

重新开启Master的keepalived服务再次看下vip绑定情况:

BackUp:

实现抢占式配置。

非抢占模式

Master 节点修改配置文件:

global_defs {
   router_id nginx_01  #标识本节点的名称,通常为hostname
}

## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
       script "/etc/keepalived/nginx_check.sh"
       interval 2  #每2秒检测一次nginx的运行状态
       weight -20  #失败一次,将自己的优先级-20
}

vrrp_instance VI_1 {
    state MASTER                  # 状态,主节点为MASTER,备份节点为BACKUP
    interface eno16777736         # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
    virtual_router_id 51          # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
    mcast_src_ip 192.168.60.131   # 本机IP地址
    priority 100                  # 节点优先级,值范围0~254,MASTER要比BACKUP高
    advert_int 1                  # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
   #非抢占式
    nopreempt
   # 设置验证信息,两个节点必须一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
    virtual_ipaddress {
        192.168.60.200
    }

    track_script {
       chk_nginx  # nginx存活状态检测脚本
    }
}

BackUp节点修改配置文件:

global_defs {
   router_id nginx_02  #标识本节点的名称,通常为hostname
}

## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_nginx {
       script "/etc/keepalived/nginx_check.sh"
       interval 2  #每2秒检测一次nginx的运行状态
       weight -20  #失败一次,将自己的优先级-20
}

vrrp_instance VI_1 {
    state BACKUP                  # 状态,主节点为MASTER,备份节点为BACKUP
    interface eno16777736         # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
    virtual_router_id 51          # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
    mcast_src_ip 192.168.60.133   # 本机IP地址
    priority 100                  # 节点优先级,值范围0~254,MASTER要比BACKUP高
    advert_int 1                  # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
   #非抢占式
    nopreempt
   # 设置验证信息,两个节点必须一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
    virtual_ipaddress {
        192.168.60.200
    }

    track_script {
       chk_nginx  # nginx存活状态检测脚本
    }
}

红色为修改部分,从中可看出backup节点需要把优先级设置与master节点一样。

重启两个节点的keepalived服务,再次断开Master节点keepalived服务,vip漂移到BackUp节点,然后再开启Master节点keepalived服务:

Master:

BackUp:

Master没有抢占过去,非抢占式配置成功。

最后看下keepalived与nginx的配置成果:

原文地址:https://www.cnblogs.com/MrZheng/p/8618694.html

时间: 2024-10-09 12:50:03

使用Keepalived配置主从热备实现Nginx高可用(HA)的相关文章

Haproxy+Keepalived(双机热备)搭建高可用web架构

1.目的搭建web高可用架构,用haproxy作为前段负载均衡分摊后端web服务器压力,Keepalived保证haproxy的存活(双机热备:一台haproxy挂了,自动切换到另外一台haproxy上)2.环境(系统均为centos7,防火墙与selinux都关闭)192.168.0.100:web1(端口7000).web2(端口8000)192.168.0.101:haproxy1.keepalived(MASTER)192.168.0.102:haproxy2.keepalived(BA

Lvs+keepalived+mysql主从热备

p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 10.5pt; font-family: "Calibri", "sans-serif" } h1 { margin-top: 17.0pt; margin-right: 0cm; margin-bottom: 16.5pt; margin-left

tomcate+keepalived配置双机热备

环境清单: 应用1:192.168.51.101 应用2:192.168.51.75 虚拟IP:192.168.51.179 一.安装Tomcat(参照其他文档): 二.部署应用,并修改响应的端口(9090): 1.修改server.xml文件,修改后内容如下: <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more con

keepalived实现nginx高可用,一主一备

keepalived实现nginx高可用(HA) 安装直接yum安装就可以,版本可能比官网落后,但是够用了, yum -y install keepalived 编辑配置文件,默认路径 /etc/keepalived/keepalived.conf,这里将默认配置文件重命名,新建一个空的配置文件 mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak vim /etc/keepalived/keepalived

主从热备+负载均衡(LVS + keepalived)

前言 淘宝架构师李智慧大牛的书籍<大型网站技术架构>以及旭龙兄的博客 --->[大型网站技术实践]初级篇:借助LVS+Keepalived实现负载均衡. 从上参考而得来本文,本文旨在记录自己的学习过程,同时给大家参考,不对的地方欢迎大家拍砖,拍砖的同时也希望甚至恳请大家能写出原因,让大家都有所明白和收获! 相关的概念我这里就不多讲了,可以从如上的书籍和旭龙兄的博客中去了解,那么下面直接开始我们的实践! 环境准备 本机 + virtualBox + 4台centOs虚拟机,如下图 virt

企业实战-KeepAlived+Redis实现主从热备、秒级切换

最近公司生产环境需要做一个Redis+Keepalived的集群架构,分别用六个端口,实现多路复用,最终实现主从热备.秒级切换. 一.部署Redis集群 首先用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环 境.然后模拟成功,方可去线上生产服务器部署. redis 采用 redis-3.2.4 版本. 两台虚拟机都是 CentOS ,一台 CentOS6.5 (IP:192.168.31.245),一台 CentOS7(IP:192.168.31.210)

Mysql5.6主从热备配置

数据库是应用系统的核心,为了保证数据库的安全采用主从热备是很常见的方法,也就是主数据库DDL.DML都将被同步到从数据库. 一.      实验环境 操作系统:windowsserver 2008 R2 数据库:MySQL-advanced-5.6.21-winx64 二. 准备工作 1.        把需要同步的数据库实例从主数据库备份出来,然后手动导入从数据库,以保证数据库同步的时候主从数据库是一致的. 2.        配置主数据库所在操作系统的防火墙,开放数据库访问端口,默认端口33

LVS+keepalived实现双机热备

昨晚写了关于lvs的文章,今天以实例介绍下LVS+keepalived实现双机热备 服务器IP地址设置表 服务器名称 网络接口 IP地址 路由器 外网IP 121.201.24.138 lvs-master eth0 172.16.100.2 eth1(VIP) 172.16.100.100 lvs-backup eth0 172.16.100.3 lo:0(VIP) 172.16.100.100 web1 eth0 172.16.100.4 lo:0(VIP) 172.16.100.100 w

Keepalived+lvs 双机热备

Keepalived 双机热备 使用 Keepalived 做双机热备非常简单,经常和 LVS 搭配来实现高可用负载平衡方案 1. Master / Slave 首先准备两台测试服务器和一个虚拟IP. Server A: 192.168.1.10 (主服务器) Server B: 192.168.1.20 Virtual IP: 192.168.1.100 测试服务: 在两台服务器上分别安装 Nginx,并修改默认的 index.html 文件,显示当前服务器 IP 以便识别. 1. 在两台服务