文档章节

RabbitMQ(3)-单机与集群搭建

你我他有个梦
 你我他有个梦
发布于 2015/12/20 13:13
字数 1853
阅读 1383
收藏 3

一.windows下搭建单机RabbitMQ

RabbitMQ依赖于ErLang(面向并发的编程语言)

1.ErLang for windows 64 bit


下载最新版Erlanghttp://www.erlang.org/download.html,然后安装,设置环境变量

ERLANG_HOME=E:\erl7.1erlang安装位置)

添加到PATH:       ;% ERLANG_HOME%\bin

2.RabbitMQ for windows 64 bit


下载地址:http://www.rabbitmq.com/download.html

官网安装教程http://www.rabbitmq.com/install-windows.html

设置环境变量:RABBITMQ_SERVER=E:\RabbitMQ Server\rabbitmq_server-3.5.6rabbitmq服务安装位置)

添加到PATH     ;% RABBITMQ_SERVER%\sbin

3.测试RabbitMQ安装成功

命令行中运行rabbitmq-service,出现下面的界面证明配置成功



4.激活Rabbit MQ's Management Plugin

使用可视化的方式查看RabbitMQ的服务实例状态,激活方式:

 

进入% RABBITMQ_SERVER%\sbin目录,执行rabbitmq-plugins.bat enable rabbitmq_management

然后重启服务即可生效:net stop RabbitMQ  -->   net start RabbitMQ(不区分大小写)

访问http://localhost:15672  默认用户名密码都是guest

针对web管理界面,在overview视图最下方可以导出当前所有配置的json数据,也可以更改json文件,上传到web管理界面,刷新即可看到相关修改

二.ubuntu15.1搭建单机RabbitMQ

(可选的)为了避免未签名的错误信息,请使用apt-key命令将公钥添加到你的可信任密钥列表中:

wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc

sudo apt-key add rabbitmq-signing-key-public.asc

更新仓库:

apt-get update

安装服务:

sudo apt-get install rabbitmq-server

激活rabbitmq的管理插件

sudo rabbitmq-plugins enable rabbitmq_management

开启服务:

sudo rabbitmq-server

停止rabbitmq的服务:

sudo rabbitmqctl stop

查看其代理状态:

sudo rabbitmqctl status

测试Erlang是否安装成功:命令行下输入erl,可进入ErlangEshell模式

测试RabbitMQ,开启服务后访问http://localhost:15672


三.Centos6.5搭建单机RabbitMQ

1.ErLang搭建

前提是你的系统中需要有java编译环境,如果没有请自行安装

下载最新版erlang OTP18.1

 

wget http://www.erlang.org/download/otp_src_18.1.tar.gz

解压

tar -zxvf otp_src_18.1.tar.gz -C /

在编译前可能会遇到缺少依赖包的问题


*********************************************************************
********************** APPLICATIONS DISABLED **********************
*********************************************************************
crypto : No usable OpenSSL found
jinterface : Java compiler disabled by user
odbc : ODBC library - link check failed
orber : No C++ compiler found
ssh : No usable OpenSSL found
ssl : No usable OpenSSL found
*********************************************************************

可依次安装

yum -y install ncurses-devel

yum -y install openssl-devel

yum -y install unixODBC-devel

yum -y install gcc-c++

编译以及安装

mkdir /home/erlang

cd otp_src_18.1/

./configure --prefix=/home/erlang --without-javac

make && make install

配置环境变量:

vim /etc/profile

export ERLANG_HOME=

export PATH=$PATH:$ERLANG_HOME/bin

输入erl即可进入其shell模式

2.rabbitmq安装

下载最新版rabbitmq-server-3.5.6

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.6/rabbitmq-server-3.5.6.tar.gz

然后解压

tar -zxvf  rabbitmq-server-3.5.6.tar.gz -C /

编译前安装其依赖包,否则会报错:/bin/sh: xmlto: command not found

yum -y install xmlto

进行编译:

make

make install TARGET_DIR=/usr/rabbitmq SBIN_DIR=/usr/rabbitmq/sbin MAN_DIR=/usr/rabbitmq/man DOC_INSTALL_DIR=/usr/rabbitmq/doc

为了方便使用rabbitmq的相关启动等命令,将其配置到环境变量下

vim /etc/profile

export RABBITMQ_HOME=/usr/rabbitmq

export PATH=$PATH:$RABBITMQ_HOME/sbin

 

安装web插件管理界面:

mkdir /etc/rabbitmq

rabbitmq-plugins enable rabbitmq_management

启动   即可访问管理界面:

rabbitmq-server start

停止:

rabbitmqctl stop

四.Centos6.5搭建RabbitMQ集群

首先有四台机器,一台使用磁盘模式,另外两台使用内存模式,这三台的rabbitmq已经搭建好,然后下面进行集群的配置

1.服务器说明

前三台用于搭建rabbitmq集群,第四台用于提供对rabbitmq的负载均衡

192.168.111.128     liuzhaoqiang128

192.168.111.129     liuzhaoqiang129

192.168.111.130     liuzhaoqiang130

192.168.111.131     liuzhaoqiang131

2.erlang集群

rabbitmqctl首先会启动erlang节点,然后会从erlang分布式系统尝试连接RabbitMQ,而这时候需要erlang cookie和合适的节点名称,erlang节点通过交换作为秘密令牌的erlang cookie以获得认证,.erlang.cookie中存储的就是此令牌信息,所以集群所以erlang节点的erlang.cookie令牌信息必须一致

由于Rabbitmq的集群依赖erlang的集群,所以需要构建erlang集群,erlang集群之间是通过magic cookie实现的,这个cookie存放在$HOME/.erlang.cookie,随便选取一个节点的cookie复制到另外两个节点使三台保持一致

scp .erlang.cookie root@liuzhaoqiang129:/root

scp .erlang.cookie root@liuzhaoqiang130:/root

设置好之后即可重启rabbitmq

3.使用detached参数运行rabbitmq

在遇到增加或停止节点时这一步是必要的

root@liuzhaoqiang128#rabbitmqctl stop

root@liuzhaoqiang129#rabbitmqctl stop

root@liuzhaoqiang130#rabbitmqctl stop

 

root@liuzhaoqiang128#rabbitmq-server detached

root@liuzhaoqiang129# rabbitmq-server detached

root@liuzhaoqiang130# rabbitmq-server detached

可以查看每个节点上的集群信息:

rabbitmqctl cluster_status

4.节点连接

liuzhaoqiang129liuzhaoqiang130作为内存节点与liuzhaoqiang128连接起来,分别在两台内存节点上执行以下命令

rabbitmqctl stop_app

rabbitmqctl join_cluster --ram rabbit@liuzhaoqiang128

rabbitmqctl start_app

其中--ram代表是内存节点,如果希望是磁盘节点则不用加--ram,在rabbitmq集群中,至少需要一个磁盘节点

然后可以使用localhost:15672即可访问,可以查看到三台节点的信息

5.镜像模式

上面搭建的仅仅是普通集群,虽然交换机、绑定等可以复制到集群的其他节点,但是队列内容不会复制,如果队列宕机将会导致队列无法使用,不能保证队列的高可用性。


更多详情:http://my.oschina.net/moooofly/blog/94113

6.增加负载均衡器

会监听5672端口,轮询每个内存节点

安装haproxy

yum -y install haproxy

修改/etc/haproxy/haproxy.cfg文件

# round robin balancing between the various backends

#---------------------------------------------------------------------

listen rabbitmq_cluster 192.168.111.131:5670

mode tcp

    balance     roundrobin

    server  rqslave1 192.168.111.129:5672 check inter 2000 rise 2 fall 3

    server  rqslave2 192.168.111.130:5672 check inter 2000 rise 2 fall 3

    server  rqmaster 192.168.111.128:5672 check inter 2000 rise 2 fall 3

参数说明:

check inter:每隔两秒进行健康检测

rise:服务器被确认2次为可正常工作

fall:失败三次不可用

所以当某台节点宕机,而正在发送消息,会经过6秒(check inter*fall)连接到其他节点重新发送

7.设置镜像队列策略

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

将所有队列设置为镜像队列,队列会被复制到各个节点,状态保持一致

rabbitmqctl set_policy -p newvhost ha-allqueue"^rqmessage" '{"ha-mode":"all"}'

这行命令在vhost名称为newvhost创建了一个策略,策略名称为ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为 “^” 表示所有匹配所有队列名称。

更多介绍在http://www.rabbitmq.com/man/rabbitmqctl.1.man.html

8.haproxy监控

haproxy.cfg配置文件中

listen rabbitmq_cluster 0.0.0.0:5670上面增加下列内容

listen monitoring_stats                        //自定义listener

        bind *:8100

        mode    http

        option  httplog

        stats enable

        stats  uri  /stats                  //访问的uri   ip:8100/stats

        stats auth admin:admin          //客户端连接需要认证用户名和密码

       #stats hide-version

        stats admin if TRUE             //管理界面,如果认证成功了,可通过webui管理节点

        stats  refresh  5s                //统计页面自动刷新时间

将默认的负载均衡选项删除:

backend static

    balance     roundrobin

    server      static 127.0.0.1:4331 check

frontend  main *:5000

    acl url_static       path_beg       -i /static /images /javascript /stylesheets

    acl url_static       path_end       -i .jpg .gif .png .css .js


    use_backend static          if url_static


    default_backend             app

启动haproxyservice haproxy start

http://192.168.111.131:8100/stats访问监控界面

可以监控到整个集群状态,客户端在连接的时候可以访问131这台主机5670端口,并且使用认证用户名和密码既可以通过haproxy访问其他几台rabbitmq服务器,作负载均衡以及故障转移操作




 


© 著作权归作者所有

共有 人打赏支持
你我他有个梦

你我他有个梦

粉丝 93
博文 110
码字总数 98858
作品 0
昌平
程序员
Rabbitmq集群(单机多实例)

Rabbitmq集群 Distributed Rabbitmq brokers的实现方式有三种,分别是clustering、federation、shovel。本节围绕clustering(集群)讲述。 搭建rabbitmq集群要求: 可靠的网络环境; 集群中所...

阿dai
07/11
0
0
Docker下RabbitMQ三部曲之一:极速体验(单机和集群)

从本章开始,我们一起在Docker环境实战RabbitMQ环境部署和对应的Java开发,当前是《Docker下RabbitMQ三部曲》系列的第一篇,整个三部曲由以下三篇文章组成: 1. 第一篇,即本章,我们用最快的...

boling_cavalry
05/12
0
0
消息中间件—RabbitMQ(集群原理与搭建篇)

摘要:实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理 一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确性那么在本地环境或者测试...

癫狂侠
05/25
0
0
Docker下RabbitMQ四部曲之二:细说RabbitMQ镜像制作

本章是《Docker下RabbitMQ四部曲》系列的第二篇,将详细简述Docker下制作RabbitMQ镜像的技术细节,包括以下内容: 1. 列举制作RabbitMQ镜像时用到的所有材料; 2. 编写Dockerfile; 3. 编写容...

boling_cavalry
05/13
0
0
rabbitmq集群部署及配置 

rabbitmq集群部署及配置 消息中间件rabbitmq,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步。本篇将以rabbitmq+HA方式进行部署。 一、原理介绍 rabbitmq是依据...

DemonsI
08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

springmvc入门之映射处理器(一)

1.简析映射处理器 在spring mvc中,使用映射处理器可以把web请求映射到正确的处理器上,spring内置了很多映射处理器,而且我们也可以自定义映射处理器。下面的实例展示spring中最常用的两个映...

明理萝
3分钟前
1
1
一个破碎的人,窃机浪漫飞行后自由坠毁

简评:A sick man who needs treatment 29 岁的 Richard Russell 是西雅图机场地勤人员,上周五,在刚进入秋天的日子,他偷了一架未载客的飞机,在空中飞行独自超过一小时,甚至驾机在空中翻...

极光推送
5分钟前
0
0
linux一次性解压多个.gz或者.tar.gz文件

解压多个压缩包 对于解压多个.gz文件的,用此命令: for gz in *.gz; do gunzip $gz; done 对于解压多个.tar.gz文件的,用下面命令: for tar in *.tar.gz; do tar xvf $tar; done...

小兔纸乖乖
16分钟前
0
0
bower 安装包的使用

一,bower是什么? bower是一种包管理器,它可用于搜索、安装和卸载如JavaScript、HTML、CSS之类的网络资源。 它依赖于node.js和npm,如果要使用它需要先安装node.js和npm,因为node.js包含n...

nsns
19分钟前
0
0
EXCEL简易的进度条

在进度栏非常简单的进度控制,以下知道程序是否已完成。 Dim x As IntegerDim MyTimer As Double'Change this loop as needed.For x = 1 To 50' Do stuffApplication.StatusBar = ...

tedzheng
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部