keepalived nginx 双机热备图文讲解

原文:http://blog.csdn.net/wanglei_storage/article/details/51175418

keepalived nginx 双机热备实战精讲

在试验之前先贴张图上来,大致说下具体的需求及环境(注:实验所用到的脚本在文章末尾,如果在过程中遇到可以先看脚本)

环境: 
VIP(漂移地址):192.168.1.60-192.168.1.61 
nginx-1:192.168.1.50 
nginx-2:192.168.1.51

关闭 iptables、关闭selinux 并且打通ssh配置,使得192.168.1.50和192.168.1.51可以免密码登录(主要同于同步 nginx 配置和 reload, 公钥验证文件:authorized_keys)

需求:

两只 nginx web 服务器分别提供相同的访问,当一只主机无法提供服务(keepalived 、nginx 或者说主机宕机)后,另一只马上转换为MASTER状态,并且继承VIP,继续向用户提供服务。

1、如果 keepalived 状态转换为 MASTER,则发送邮件进行通知运维人员(由下面 keepalived_check.sh 脚本实现) 
2、需要nginx两台服务器提供的服务是完全一致的,并且当一台 nginx 的配置改变,则另一台立刻变为相同的配置,并且 reload 。(由 rsync+inotify 实时同步脚本 nginx_rsync.sh 脚本实现) 
3、如果keepalived 挂掉,则检测并且重启keepalived;如果nginx 挂掉,则关闭keepalived,且让VIP转移到 keepalived-slave上面(由 nginx_check.sh脚本实现)



下面开始实验:

一、nginx-1(master 主机配置)

1、时间校准 
ntpdate ntp.api.bz

2、安装依赖软件 
yum -y install openssl openssl-devel kernel-devel

3、使用inotify机制,还需要安装inotify-tools工具,以便提供inotifywait,inotifywatch辅助工具,用来监控,汇总改动情况 
yum -y install inotify-tools

4、准备 keepalived 和 nginx 包(keepalived 包可以去 keepalived.org 下载,nginx 包则去 tengine 官方下载)

5、解包、编译安装

tar zxf keepalived-1.2.20.tar.gz -C /usr/local/src/
cd /usr/local/src/keepalived-1.2.20/
./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-573.22.1.el6.x86_64/
make && make install

6、拷贝配置文件

mkdir -p /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

7、创建脚本文件及目录(脚本我会在尾部添加)

三个脚本,分别为 keepalived 脚本脚本、nginx 检测脚本、nginx 同步脚本

mkdir -p /data/sh

touch /data/sh/keepalived_check.sh
touch /data/sh/nginx_check.sh
touch /data/sh/nginx_rsync.sh

chmod +x /data/sh/keepalived_check.sh
chmod +x /data/sh/nginx_check.sh
chmod +x /data/sh/nginx_rsync.sh

8、安装 mailx 包,用于发送邮件 
yum -y install mailx

编辑 /etc/mail.rc 文件,在尾部添加两行:

9、keepalived 配置文件:

! Configuration File for keepalived

############################ 全局配置 #############################

global_defs {

# 定义管理员邮件地址,表示keepalived在发生诸如切换操作时需要发送email通知,以及email发送给哪些邮件地址,可以有多个,每行一个
    notification_email {
        [email protected]
    }

# 表示发送通知的邮件源地址是谁
    notification_email_from [email protected]

# smtp服务器配置
    smtp_server 127.0.0.1
    smtp_connect_timeout 30

# router_id 则为机器标识
    router_id keepalived_1

#   vrrp_skip_check_adv_addr
#   vrrp_strict

}

############################ VRRPD配置 #############################

# 定义nginx_check脚本,脚本执行间隔10秒,权重10
#vrrp_script nginx_check {
#    script "/data/sh/nginx_check.sh"
#    interval 10
#    weight 10
#}

# 定义vrrp实例
vrrp_instance http {

# state定义instance的初始状态
    state BACKUP

# 实际绑定的网卡,配置虚拟IP的时候必须是在已有的网卡上面添加的
    interface eth0

# 要检测状态的网卡,当其中任意一块出现故障时keepalived都视为故障
    track_interface {
        eth0
#       eth1
    }

# 当该keepalived切换为MASTER状态时,执行下面的脚本
    notify_master /data/sh/keepalived_check.sh

# 这里设置VRID,相同的VRID为一个组,他将决定多播的MAC地址
    virtual_router_id 51

# 设置本节点优先级,高的为MASTER,如果优先级一样,则IP地址大的是MASTER
    priority 200

# 组播信息发送间隔,两个节点设置必须一样
    advert_int 10

# 验证方式与验证密码
    authentication {
        auth_type PASS
        auth_pass 1111
    }

# 这里设置VIP,它随着state变化而增加删除,当state为master的时候就添加,当state为backup的时候则删除,由优先级决定,可以设置多个地址
    virtual_ipaddress {
        192.168.1.60
        192.168.1.61
    }

# 设置不抢占,这里只能设置在state为backup的节点上,而且这个节点的优先级必须别另外的高
#    nopreempt

# 执行nginx检测脚本
#    track_script {
#        nginx_check weight 10
#    }

}

10、nginx 配置

安装nginx依赖 
yum -y install pcre-devel pcre openssl-devel openssl

解包,编译安装 
tar zxf tengine-2.1.2.tar.gz -C /usr/local/src/ 
cd /usr/local/src/tengine-2.1.2/

./configure –prefix=/usr/local/nginx 
make && make istall

11、启动nginx、启动脚本分别为:nginx_check.sh nginx_rsync.sh(可以看到,nginx 和 两个脚本都已经启动)

12、启动 keepalived

13、查看日志(可以看到,keepalived已经启动,并且成功绑定了 VIP 192.168.1.60和61)

14、查看网卡 IP 地址(除了自身IP地址以外、VIP也已经绑定)

15、通过VIP访问nginx


二、nginx-2(slave 主机配置)

1、前1-8步骤 nginx-1 和 nginx-2 是一样的,照着以前做就行,这里主要帖下 nginx-2 的 keepalived.conf 配置

2、keepalived 配置文件

! Configuration File for keepalived

############################ 全局配置 #############################

global_defs {

# 定义管理员邮件地址,表示keepalived在发生诸如切换操作时需要发送email通知,以及email发送给哪些邮件地址,可以有多个,每行一个
    notification_email {
        [email protected]
    }

# 表示发送通知的邮件源地址是谁
    notification_email_from [email protected]

# smtp服务器配置
    smtp_server 127.0.0.1
    smtp_connect_timeout 30

# router_id 则为机器标识
    router_id keepalived_1

#   vrrp_skip_check_adv_addr
#   vrrp_strict

}

############################ VRRPD配置 #############################

# 定义vrrp脚本,脚本执行间隔10秒,权重10
#vrrp_script nginx_check {
#    script "/data/sh/nginx_check.sh"
#    interval 10
#    weight 10
#}

# 定义vrrp实例
vrrp_instance http {

# state定义instance的初始状态
    state BACKUP

# 实际绑定的网卡,配置虚拟IP的时候必须是在已有的网卡上面添加的
    interface eth0

# 要检测状态的网卡,当其中任意一块出现故障时keepalived都视为故障
    track_interface {
        eth0
#       eth1
    }

# 当该keepalived切换为MASTER状态时,执行下面的脚本
    notify_master /data/sh/keepalived_check.sh

# 这里设置VRID,相同的VRID为一个组,他将决定多播的MAC地址
    virtual_router_id 51

# 设置本节点优先级,高的为MASTER,如果优先级一样,则IP地址大的是MASTER
    priority 200

# 组播信息发送间隔,两个节点设置必须一样
    advert_int 10

# 验证方式与验证密码
    authentication {
        auth_type PASS
        auth_pass 1111
    }

# 这里设置VIP,它随着state变化而增加删除,当state为master的时候就添加,当state为backup的时候则删除,由优先级决定,可以设置多个地址
    virtual_ipaddress {
        192.168.1.60
        192.168.1.61
    }

# 设置不抢占,这里只能设置在state为backup的节点上,而且这个节点的优先级必须别另外的高
#   nopreempt

# 执行nginx_check叫测脚本
#    track_script {
#        nginx_check weight 10
#    }

}

3、nginx 配置

安装nginx依赖 
yum -y install pcre-devel pcre openssl-devel openssl

解包,编译安装 
tar zxf tengine-2.1.2.tar.gz -C /usr/local/src/ 
cd /usr/local/src/tengine-2.1.2/

./configure –prefix=/usr/local/nginx 
make && make istall

4、启动nginx、启动 nginx_check.sh(nginx_rsync.sh 不必启动,因为只需配置一个nginx,则另一个也会自动同步并且 reload)

5、启动 keepalived 并查看日志


三、故障及需求演练

1、当 keepalived 挂掉,那么理论上说 keepalived 服务会重新启动起来(通过nginx_check.sh 脚本实现)

在下图中可以看到,我第一次 status 之后 keepalived 的状态是 running的,当我执行 stop 之后 keepalived 马上变为 stopped 状态,可过会之后 keepalived 状态又变为 running

2、当 nginx 挂掉后,那么理论上说 keepalived 服务也会关闭(通过nginx_check.sh 脚本实现)

在下图中可以看到,第一次我 status 的时候 keepalived 的状态是 running… 的,nginx 进程也在,当我 killall 掉 nginx 之后,前三秒 keepalived 的状态还是 running… 接着马上停止该服务(脚本检测时间为10秒一次)

3、当 keepalived 状态变为 Master 之后,发送邮件(通过 keepalived_check.sh 脚本实现)

在第一个问题中,我停止 keepalived 服务,那么这时候 slave 就会将状态转换为 master,则相应的,我也会收到报警邮件或者短信

4、当 nginx-1 配置改动之后,nginx-2 的配置也会相应的更改,并且 reload (通过 nginx_rsync.sh 脚本实现)

我在nginx-1上面执行下列命令,接着我们查看nginx-1和nginx-2的 /usr/local/nginx/html/index.html的配置信息和改动时间

由下图可以发现 nginx-1 的 index.html 和 nginx-2 的 index.html 改动时间完全相同,并且配置也完全相同。


四、实验脚本

1、keepalived_check.sh 脚本(执行方式:keepalived.conf 中配置)

#!/bin/bash
time=$(date +%Y-%m-%d-%H-%M)
echo “$time keepalived-1 is a down,keepalived-2 is a MASTER”|mail -s keepalived_down [email protected]
echo “$time keepalived-1 is a down,keepalived-2 is a MASTER”|mail -s keepalived_down [email protected]

2、nginx_check.sh 脚本(执行方式:后台,nohup sh nginx_check.sh &)

#!/bin/bash

while  :
do

# 获取nginx、keepalived的进程数
nginxcheck=`ps -C nginx --no-header | wc -l`
keepalivedcheck=`ps -C keepalived --no-header | wc -l`

# 如果检测到(nginx)进程数等于0,并且(keepalived)进程数不等于0,则关闭(keepalived)
if [ $nginxcheck -eq 0 ];then
    if [ $keepalivedcheck -ne 0 ];then
        killall -TERM keepalived
    else
        echo "keepalived is stoped"
    fi

# 如果检测到(nginx)进程数不等于0,则(keepalived)进程数等于0,那么启动keepalived服务
else
    if [ $keepalivedcheck -eq 0 ];then
        /etc/init.d/keepalived start
    else
        echo "keepalived is running"
    fi
fi

sleep 10
done

3、nginx_rsync.sh 脚本(执行方式:后台,nohup sh nginx_rsync.sh 该脚本只有一只主机在后台执行)

#!/bin/bash

ip_address="192.168.1.51"

inotify_cmd="inotifywait -mrq -e modify,create,attrib,move,delete /usr/local/nginx/"
rsync_cmd="rsync -azH --delete /usr/local/nginx/ [email protected]${ip_address}:/usr/local/nginx/"

$inotify_cmd | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ];then
        $rsync_cmd
        ssh [email protected]${ip_address} "/usr/local/nginx/sbin/nginx -t"
        if [ $? -eq 0 ];then
            ssh [email protected]${ip_address} "/usr/local/nginx/sbin/nginx -s reload"
        fi
    fi
done

keepalived nginx 双机热备实战精讲

在试验之前先贴张图上来,大致说下具体的需求及环境(注:实验所用到的脚本在文章末尾,如果在过程中遇到可以先看脚本)

环境: 
VIP(漂移地址):192.168.1.60-192.168.1.61 
nginx-1:192.168.1.50 
nginx-2:192.168.1.51

关闭 iptables、关闭selinux 并且打通ssh配置,使得192.168.1.50和192.168.1.51可以免密码登录(主要同于同步 nginx 配置和 reload, 公钥验证文件:authorized_keys)

需求:

两只 nginx web 服务器分别提供相同的访问,当一只主机无法提供服务(keepalived 、nginx 或者说主机宕机)后,另一只马上转换为MASTER状态,并且继承VIP,继续向用户提供服务。

1、如果 keepalived 状态转换为 MASTER,则发送邮件进行通知运维人员(由下面 keepalived_check.sh 脚本实现) 
2、需要nginx两台服务器提供的服务是完全一致的,并且当一台 nginx 的配置改变,则另一台立刻变为相同的配置,并且 reload 。(由 rsync+inotify 实时同步脚本 nginx_rsync.sh 脚本实现) 
3、如果keepalived 挂掉,则检测并且重启keepalived;如果nginx 挂掉,则关闭keepalived,且让VIP转移到 keepalived-slave上面(由 nginx_check.sh脚本实现)



下面开始实验:

一、nginx-1(master 主机配置)

1、时间校准 
ntpdate ntp.api.bz

2、安装依赖软件 
yum -y install openssl openssl-devel kernel-devel

3、使用inotify机制,还需要安装inotify-tools工具,以便提供inotifywait,inotifywatch辅助工具,用来监控,汇总改动情况 
yum -y install inotify-tools

4、准备 keepalived 和 nginx 包(keepalived 包可以去 keepalived.org 下载,nginx 包则去 tengine 官方下载)

5、解包、编译安装

tar zxf keepalived-1.2.20.tar.gz -C /usr/local/src/
cd /usr/local/src/keepalived-1.2.20/
./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-573.22.1.el6.x86_64/
make && make install
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

时间: 2024-11-11 01:39:37

keepalived nginx 双机热备图文讲解的相关文章

keepalived+nginx双机热备+负载均衡

keepalived+nginx双机热备+负载均衡 最近因业务扩展,需要将当前的apache 转为nginx(web), 再在web前端放置nginx(负载均衡).同时结合keepalived 对前端nginx实现HA. nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都

用haproxy搭建web群集并由keepalived 实现双机热备

搭建haproxy+keepalived高可用群集. 一.案例概述 1.haproxy是目前比较流行的一种集群调度工具,是一款免费开源的软件,并且具有一定得安全性:haproxy较适用于负载较大的web节点,并且支持数万的并发量.同类调度工具还有很多,如LVS和Nginx.相比较而言,LVS性能最好,但是搭建相对复杂,Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,性能没有haproxy好.haproxy主要实现web群集的负载均衡haproxy官方网站:http:

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

HAproxy + keepalived 实现双机热备

一.HAProxy简介: HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理.HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接.并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上. HAProxy实现了一种事件驱动.单一进程模型,此模型支持非常大的并发连接数.多进程或

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. 在两台服务

Nginx双机热备

Nginx双机热备 Keepalived高可用概述 1.什么是高可用 什么是高可用双击热备, 一般指2台机器启动着相同的业务系统,当有一台机器down机了, 另外一台服务器能快速的接管, 对于访问的用户是无感知的. 2.高可用使用场景 那么高可用使用在什么场景,业务系统需要保证7x24小时不DOWN机, 作为业务来说随时都可用, 让你的业务系统更顽强. Keepalived高可用安装 1.环境准备 服务器系统 角色 外网IP 内网IP CentOS 7.5 keepalived-master e

利用Keepalived实现双机热备详解

在这个高度信息化的IT时代,企业的生产系统.业务运营.销售和支持,以及日常管理等环节越来越依赖于计算机信息和服务,对高可用(HA)技术的应用需求不断提高,以便提供持续的.不间断的计算机系统或网络服务. 一.Keepalived双机热备基础知识 1.Keepalived概述 Keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能--判断LVS负载调度器.节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集. Keepaliv

nginx+keepalived实现双机热备高可用性

搭建准备: 机器两台 ip分别为192.168.100.128 192.168.100.129(能够用虚拟机測试.虚拟机网络模式为NET模式.且为静态ip) 另外须要准备一个虚拟ip对外提供服务.即通过该ip訪问web程序. (keepalive会将虚拟ip绑定到两台机器上)keepalived的核心原理是vrrp协议.英文好能够查看最新协议RFC3768. 1.nginx安装 两台机器都须要安装.能够參考我的上篇博文 Linux tar包安装Nginx http://blog.csdn.net

实现keepalived + tomcat 双机热备

1.安装keepalived 我这里是给予keepalived+mysql 主主双机热备基础上做的 global_defs { router_id HA_MySQL } vrrp_instance VI_1 { state BACKUP interface bond0 virtual_router_id 51 priority 100 advert_int 1 nopreempt authentication { auth_type PASS auth_pass 1111 } virtual_i