RabbitMQ(3)-单机与集群搭建
RabbitMQ(3)-单机与集群搭建
你我他有个梦 发表于2年前
RabbitMQ(3)-单机与集群搭建
  • 发表于 2年前
  • 阅读 1336
  • 收藏 3
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: 下面主要是windows下和linux下单机单间、linux下搭建集群以及负载均衡器的配置,RabbitMQ集群依赖于ErLang集群,RabbitMQ集群又分为普通集群与镜像队列集群,

一.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服务器,作负载均衡以及故障转移操作




 


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
你我他有个梦
粉丝 92
博文 110
码字总数 98858
×
你我他有个梦
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: