网络结构如下图:

共有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. Java排序方法sort的使用详解

    对数组的排序: //对数组排序 public void arraySort(){ int[] arr = {1,4,6,333,8,2}; Arrays.sort(arr);//使用java.util ...

  2. list、dict、tuple的一些小操作总结

    一.list 1.赋值(append) list.append(data) 2.去重 list(set(list)) list_gpcode = list(set(list(dfQuery.index ...

  3. CSS3的radial-gradient(径向渐变)

    所谓径向渐变,如图下,类似光晕 语法: radial-gradient(  [    [渐变大小]?    [ at 渐变圆心坐标]?  ,]?  颜色[ 开始位置]  [,颜色[ 开始位置]]+); ...

  4. angularJS 自定义元素和属性

    创造自定义元素和属性的方法是:directive('string',function(){ return{}; }); ①函数接收两个参数:一个字符串(指令的名字),一个函数: ②回调函数必须返回一个 ...

  5. js getByClass函数封装

    function getByClass(oParent, sClass) { var aEle=oParent.getElementsByTagName('*'); var aResult=[]; v ...

  6. atnodes命令+sort+uniq统计特征信息到结果文件

    atnodes 'zgrep -oE "保单号重复" log.2016-10-23*.gz log.2016-10-24*.gz log.2016-10-25-*gz | grep ...

  7. magento模块的建立

    所有路径都是从根目录开始的: 1.建立模块的配置文件: 路径:app/etc/models/下建一个文件(模块名称是Orderlottery)为Bf170_Orderlottery.xml,内容如下: ...

  8. Maven之(七)pom.xml配置文件详解

    setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件:而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和li ...

  9. Ansible Filter

    没啥好说的. 自己看吧 http://docs.ansible.com/ansible/playbooks_filters.html

  10. 1.webpack-----模块加载器兼打包工具

    一.webpack的优势 1. 能模块化 JS . 2. 开发便捷,能替代部分 grunt/gulp 的工作,比如打包.压缩混淆.图片转base64等. 3. 扩展性强,插件机制完善,特别是支持 Re ...