网络结构如下图:

共有104、105、106三台RabbitMQ Server,互为集群
其中104和105安装了Haproxy,每个Haproxy承担三台RabbitMQ server的负载均衡
两台Harpoxy采用Keepalived互为主备,VIP是172.16.0.108
操作系统为Ubuntu

以下介绍操作步骤:

1、三台主机安装RabbitMQ

     apt-get install rabbitmq-server

     开启RabbitMQ management,激活控制台以方便MQ的管理与监控
     sudo rabbitmq-plugins enable rabbitmq_management 
     开启监控后可以输入http://ip:15672可以登录管理界面,默认账户guest/guest
 
2、配置MQ集群
    2.1 cookie文件
     因为RabbitMQ的集群是通过Erlang的集群来实现的,所以,要求三台机器的
     /var/lib/rabbitmq/.erlang.cookie 文件内容一致,用VI等工具将它的内容修改为 zHDCGETPYWOWREASJUAB
    
     由于RabbitMQ在启动Booker时会检查该文件的权限,必须为400,否则会报错,所以要修改文件的权限
     chmod 400 .erlang.cookie
 
    2.2 修改各机器hosts
     172.16.0.104    pzs-test-1
     172.16.0.105    pzs-test-2
     172.16.0.106    pzs-test-3
       保证三台机器可以互相访问对方   
 
   2.3 加入集群
     对主节点(104):
     #启动Broker
     rabbitmq-server –detached > nohup.out&
     #启动集群
     rabbitmqctl start_app
      #查看集群状态
     rabbitmqctl cluster_status
 
     对备节点(105、106):
     rabbitmq-server –detached > nohup.out&
     rabbitmqctl start_app
     rabbitmqctl stop_app
     #加入集群
     rabbitmqctl join_cluster --ram rabbit@pzs-test-1
     rabbitmqctl start_app
     #查看集群状态
     rabbitmqctl cluster_status
 
     在三台机器运行以下命令:
   设置成镜像队列
  # rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' //["^"匹配所有]
 
3、安装配置HaProxy
     安装过程省略
     修改/etc/haproxy/haproxy.cfg,在文件后面添加以下内容
listen rabbitmq_local_cluster 0.0.0.0:25672
#配置TCP模式
mode tcp
option tcplog
#简单的轮询
balance roundrobin
#rabbitmq集群节点配置
server rabbit1 172.16.0.104:5672 check inter 5000 rise 2 fall 2
server rabbit2 172.16.0.105:5672 check inter 5000 rise 2 fall 2
server rabbit3 172.16.0.106:5672 check inter 5000 rise 2 fall 2
   
#配置haproxy web监控,查看统计信息
listen private_monitoring :8100
mode http
option httplog
stats enable
#设置haproxy监控地址为http://localhost:8100/stats
stats uri /stats
stats refresh 30s
#添加用户名密码认证
stats auth admin:1234
    
启动haproxy: haproxy -f haproxy.cfg
访问http://172.16.0.104:8100/stats和http://172.16.0.105:8100/stats
可以查看haproxy的运行状态及一些统计信息
 
4、安装配置Keepalived
  安装过程省略
 【haproxy_check.sh文件内容】
     #!/bin/bash
     LOGFILE="/var/log/keepalived-haproxy-state.log"
     date >> $LOGFILE
     if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
     echo "fail: check_haproxy status" >> $LOGFILE
     exit 1
     else
     echo "success: check_haproxy status" >> $LOGFILE
     exit 0
     fi
 
【haproxy_master.sh文件内容】
     LOGFILE="/var/log/keepalived-haproxy-state.log"
     echo "Being Master ..." >> $LOGFILE
 
然后修改/etc/keepalived/keepalived.conf文件
主机(104)
global_defs {
   router_id test
}
vrrp_script chk_haproxy
{
     script "/etc/keepalived/scripts/haproxy_check.sh"
     interval 2
     timeout 2
     fall 3
}
vrrp_instance haproxy {
    state MASTER # 主也配置为SLAVE
    interface eth0 
    virtual_router_id 61
    priority  150       
    virtual_ipaddress { 
    172.16.0.108
    }
    track_script {
         chk_haproxy
    }
    notify_master "/etc/keepalived/scripts/haproxy_master.sh"
}
 
备机(105)
global_defs {
    router_id redis
}

vrrp_script chk_haproxy
{
     script "/etc/keepalived/scripts/haproxy_check.sh"
     interval 2
     timeout 2
     fall 3
}
vrrp_instance haproxy {
    state BACKUP # 主也配置为SLAVE
    interface eth0 
    virtual_router_id 61
    priority  100       
    virtual_ipaddress { 
    172.16.0.108
    }
    track_script {
         chk_haproxy
    }
    notify_master "/etc/keepalived/scripts/haproxy_master.sh"

}
 
注意:keepalived可能运行多个实例,比如redis和haproxy共存,在这种情况下,必须注意几点:
一、VIP必须各实例不同
二、virtual_router_id必须各实例不同
三、脚本文件中不允许出现kill keepalived进程的操作
 
运行keepalived -D 启动keepalived

RabbitMQ高可用配置(Haproxy + Keepalived)的更多相关文章

  1. Redis高可用配置(Keepalived)

    主:172.16.0.104 备:172.16.0.105 VIP:172.16.0.107 客户端直接连VIP,当master 104的redis挂掉后,105作为master.当104重启后,10 ...

  2. linux中keepalived实现nginx高可用配置

    linux中keepalived实现nginx高可用配置 安装keepalived 运行如下命令即可 tar -zxvf keepalived-2.0.8.tar.gz -C /usr/src cd ...

  3. RabbitMQ集群安装配置+HAproxy+Keepalived高可用

    RabbitMQ集群安装配置+HAproxy+Keepalived高可用 转自:https://www.linuxidc.com/Linux/2016-10/136492.htm rabbitmq 集 ...

  4. RabbitMQ 集群与高可用配置

    集群概述 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送 ...

  5. (转)RabbitMQ 集群与高可用配置

    集群概述 环境 配置步骤 集群概述 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务 ...

  6. RabbitMQ高可用集群配置

    1.安装RabbitMQ 1)下载和安装erlang 下载erlang wget http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el6.x ...

  7. MariaDB+Keepalived双主高可用配置MySQL-HA

    利用keepalived构建高可用MySQL-HA,保证两台MySQL数据的一致性,然后用keepalived实现虚拟VIP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换. ...

  8. 基于keepalived对redis做高可用配置---转载

    关于keepalived的详细介绍,请移步本人相关博客:http://wangfeng7399.blog.51cto.com/3518031/1405785 功能 ip地址 安装软件 主redis 1 ...

  9. Keepalived保证Nginx高可用配置

    Keepalived保证Nginx高可用配置部署环境 keepalived-1.2.18 nginx-1.6.2 VM虚拟机redhat6.5-x64:192.168.1.201.192.168.1. ...

随机推荐

  1. 蓝桥杯 C语言 入门训练 Fibonacci数列

    问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...

  2. python3.5学习之路_day1_login

    登录程序1.输入用户名密码2.认证成功后显示欢迎信息3.输错三次后锁定 #!/usr/bin/env python #_*_coding:utf-8_*_ #by anthor zhangxiaoyu ...

  3. Oracle 数据备份、恢复以及导入时表空间不存在的解决方案

    一.数据备份(导出) 1.exp命令导出dmp文件(exp -help查看帮助信息) 命令:exp username/userpasswd@192.168.99.199/orcl file=C:\jd ...

  4. 驱动10.nor flash

    1 比较nor/nand flash NOR                                  NAND接口:    RAM-Like,引脚多                 引脚少, ...

  5. 办理卡尔加里大学(本科)学历认证『微信171922772』calgary学位证成绩单使馆认证University of calgary

    办理卡尔加里大学(本科)学历认证『微信171922772』calgary学位证成绩单使馆认证University of calgary Q.微信:171922772办理教育部国外学历学位认证海外大学毕 ...

  6. charles支持https抓包

    前言 最近发现访问项目的网页偶尔会被插入广告,很有可能是运营商劫持流量插入进去的,我在家里使用的长城宽带打开非加密的网页,时不时会弹个广告窗,这个也算是中国特色了.因此计划项目上线https,抓包分析 ...

  7. [SQL基础教程] 4-4 事务

    [SQL基础教程] 4 数据更新 4-4 事务 事务 需要在同一处理单元中执行的一系列更新处理的集合 创建事务 事务开始语句; DML语句1; DML语句2; . . . 事务结束语句; 事务开始语句 ...

  8. [SQL基础教程] 4-2 数据删除(DELETE)

    [SQL基础教程] C4 数据更新 4-2 数据删除(DELETE) DROP TABLE / DELETE DROP TABLE - 完全删除表 DELETE - 仅删除数据,保留表容器 DELET ...

  9. Maven之(一)Maven是什么

    首先,Maven的正确发音是[ˈmevən],而不是"马瘟"以及其他什么瘟.Maven在美国是一个口语化的词语,代表专家.内行的意思,约等于北京话中的老炮儿. 一个对Maven比较 ...

  10. ToDictionary用法

    ToDictionary其实可以简单化,可以传两个lambada表达式,第一个是Key,第二个就是Value. ToDictionary( key => key.Attribute(" ...