摘自:

http://www.cnblogs.com/wangyichen/p/4917241.html

公司两台文件服务器要做高可用,避免单点故障,故采用keepalived实现,其中一台宕机,依靠另外一台继续提供服务,并且邮件通知服务状态。

1.keepalived介绍

  Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。

keepalived实现原理是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗协议。 虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个虚拟路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,组播地址:224.0.0.18,当backup收不到vrrp包时就认为master出问题了,这时就需要根据VRRP的优先级(0-255)从backup中选举出一个master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是core、checkers和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。checkers负责健康检查,包括常见的各种检查方式(tcp、http、ssl)。vrrp模块是来实现VRRP协议实现的。

2.vrrp的优势

  冗余:可以使用多个路由器设备作为LAN客户端的默认网关,大大降低了默认网关成为单点故障的可能性;
  负载共享:允许来自LAN客户端的流量由多个路由器设备所共享;
  多VRRP组:在一个路由器物理接口上可配置多达255个VRRP组;
  多IP地址:基于接口别名在同一个物理接口上配置多个IP地址,从而支持在同一个物理接口上接入多个子网;
  抢占:在master故障时允许优先级更高的backup成为master;
  通告协议:使用IANA所指定的组播地址224.0.0.18进行VRRP通告;
  VRRP追踪:基于接口状态来改变其VRRP优先级来确定最佳的VRRP路由器成为master;

3.Keepalived+Nginx

  环境:Openstack 虚拟机,这里使用unicast单播实现master/slave之间的心跳信号通讯。

  node1:192.168.242.133

  node2:192.168.242.130

  VIP:192.168.242.50

3.1安装keepalived:

vim /etc/ansible/hosts
[nginx]
    192.168.242.133
    192.168.242.130
#ansible all -m yun -a "name=keepalived state=present"

3.2配置文件和服务启动脚本

配置文件:
/etc/keepalive/keepalive.conf
服务脚本:
/etc/rc.d/init.d/keepalive

3.2 Nginx和RabbitMQ检测脚本

   该脚本会检测ngnix的运行状态,根据其脚本返回状态码,判断服务在线状态,如果检测服务失败则降低其优先级,准备让其它机器接管VIP。

#!/bin/bash
count=`netstat -ntlp | grep "\<5672\>" | wc -l`
killall -0 nginx &> /dev/null
[ $? -eq 0 ] && [ $count -gt 0 ] && exit 0 || exit

3.2 keepalived notify脚本

  

#!/bin/bash
# Author: DevOps vip=172.50.0.50
contact='xxxx@163.com' notify() {
mailsubject="`hostname` to be $1: $vip floating"
mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"
echo $mailbody | mail -s "$mailsubject" $contact
} case "$1" in
master)
notify master
exit 0
;;
backup)
notify backup
exit 0
;;
fault)
notify fault
exit 0
;;
*)
echo 'Usage: `basename $0` {master|backup|fault}'
exit 1
;;
esac

3.3 keepalived配置文件

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
! Configuration File for keepalived
 
global_defs {                         ##全局定义段
   notification_email {               ##通知机制,收件人
     xx@xx.com
   }
   notification_email_from devops@devops.com     ####发件人
   smtp_server 192.168.x.x                       ##发件服务器
   smtp_connect_timeout 30                       ##服务器连接超时时间
   router_id LVS_DEVEL                           ##路由器标志
}
 
vrrp_script chk_nginx {                          ##定义检测脚本名
    script "/etc/keepalived/check_nginx_rabbitmq.sh"         ##检测脚本执行状态
    interval 1                                   ##检测脚本状态间隔时间
    weight -2                                     ##权重值,脚本检测失败,优先级会减去2。
}
vrrp_instance VI_1 {                             ##VRRP实例,定义一个虚拟路由器  VI_1虚拟路由器名
    state MASTER                                 ##设置改节点为MASTER节点
    interface eth0                               ##通告,选举网络接口
    virtual_router_id 51                         ##虚拟路由器ID,双方必须一致
    priority 100                                 ##优先级  0-255
    #nopreempt                                   ##非抢占模式
    unicast_src_ip 192.168.64.133                ##使用单播发送心跳信号,本地作为单播源IP
    unicast_peer {                               ##单播目的IP,另外一台节点
                  192.168.64.130
                }
    advert_int 1                            ##通告时间间隔
    authentication {                        ##心跳认证方式,明文,SHA,不认证三种
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {                       ##VRRP VIP地址
        192.168.64.50
    }
    track_script {                            ##探测脚本执行
        chk_nginx
    }
    notify_master "/etc/keepalived/notify.sh master"    ##定义在状态进行转换时的通知脚本。
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}

  在其BACKUP上,只需要改变 :

    state MASTER :state BACKUP

    priority 100 : priority 99

    unicast_src_ip 192.168.64.130   

    unicast_peer { 192.168.64.133 } 即可。

重启keepalived服务:

  

1
ansible nginx -m shell -a "service keepalived restart"

Rabbitmq+Nginx+keepalived高可用热备的更多相关文章

  1. Nginx+keepalived(高可用主备模式)

    Nginx+keepalived(高可用主备模式) 环境:centos6.7 准备:两台服务器(虚拟机).两台应用(Tomcat).Nginx.keepalived server1:192.168.2 ...

  2. rabbitmq+haproxy+keepalived高可用集群环境搭建

    1.先安装centos扩展源: # yum -y install epel-release 2.安装erlang运行环境以及rabbitmq # yum install erlang ... # yu ...

  3. Nginx+Keepalived高可用集群应用实践

    Nginx+Keepalived高可用集群应用实践 1.Keepalived高可用软件 1.1 Keepalived服务的三个重要功能 1.1.1管理LVS负载均衡软件 早期的LVS软件,需要通过命令 ...

  4. Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...

  5. nginx+keepalived 高可用方案

    nginx+keepalived 高可用方案 准备工作 192.168.157.11 192.168.157.12 安装nginx 跟新yum源文件 rpm -ivh http://nginx.org ...

  6. Nginx入门篇(七)之Nginx+keepalived高可用集群

    一.keepalived介绍 keepalived软件最开始是转为负载均衡软件LVS而设计,用来管理和监控LVS集群系统中各个服务节点的状态,后来又加入了可实现高可用的VRRP功能.所以Keepali ...

  7. 使用Ansible实现nginx+keepalived高可用负载均衡自动化部署

    本篇文章记录通过Ansible自动化部署nginx的负载均衡高可用,前端代理使用nginx+keepalived,端web server使用3台nginx用于负载效果的体现,结构图如下: 部署前准备工 ...

  8. Nginx+keepalived(高可用双主模式)

    Nginx+keepalived(高可用双主模式) tips:前面已经介绍了nginx+keepalived高可用主从模式,今天补充下高可用的双主模式,均可以作为主机使用 server1:192.16 ...

  9. Nginx+keepalived 高可用双机热备(主从模式/双主模式)

    基础介绍负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行. 关于负载均衡介绍,可以参考:li ...

随机推荐

  1. js中推断浏览器类型

    在实际看发展.有时候会遇到在IOS和Android中要用不同的方法处理网页.须要让网页返回当前浏览器的类型. /** * 推断浏览器类型 */ var Browse = function () { / ...

  2. Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental……

    Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to th ...

  3. Vue 中computed 与 methods 区别

    1.示例 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...

  4. UNP学习笔记(第三十章 客户/服务器程序设计范式)

    TCP测试用客户程序 #include "unp.h" #define MAXN 16384 /* max # bytes to request from server */ in ...

  5. VueJS路由

    Vue.js 路由 本章节我们将为大家介绍 Vue.js 路由. Vue.js 路由允许我们通过不同的 URL 访问不同的内容. 通过 Vue.js 可以实现多视图的单页Web应用(single pa ...

  6. How Many Tables-并查集

    id=19354" target="_blank" style="color:blue; text-decoration:none">HDU - ...

  7. Flash威胁的不不过浏览器

    Adobe为提升Flash的安全性.在最新版本号的Flash(18.0.0.209)增加了很多攻击缓解技术. 新的攻击缓解技术为: l  <*>长度验证–添加长度cookie到Vector ...

  8. 程序猿的量化交易之路(32)--Cointrade之Portfolio组合(19)

    转载须注明出处:http://blog.csdn.net/minimicall?viewmode=contents,http://cloudtrade.top/ Portfolio:组合,代表的是多个 ...

  9. ORACLE经常使用系统查询

     1  查询系统全部对象 SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS FRO ...

  10. Fakeapp2.2安装,使用简记--------------转载自iJessie

    原文:https://www.cnblogs.com/iJessie/p/8568377.html 1,硬件和操作系统,支持cuda的Nvidia显卡,8G及以上的内存,Windows10 x64(推 ...