RabbitMq安装配置

rabbitmq有3种模式,集群模式2种
• 单机模式:即单机情况不做集群,就单独运行一个rabbitmq而已。
• 普通模式:默认模式,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。
当rabbit01节点故障后,rabbit02节点无法取到rabbit01节点中还未消费的消息实体。如果做了消息持久化,那么得等rabbit01节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象。
• 高可用模式:把需要的队列做成镜像队列,存在与多个节点属于RabbitMQ的HA方案。该模式解决了普通模式中的问题,其实质和普通模式不同之处在于:消息实体会主动在镜像节点间同步,而不是在客户端取数据时临时拉取。该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉。所以在对可靠性要求较高的场合中适用。

单机模式安装

离线安装包官网下载地址:http://www.rabbitmq.com/download.html
官网安装文档:http://www.rabbitmq.com/install-debian.html

RabbitMQ需要运行Erlang / OTP。标准Debian和Ubuntu中的Erlang / OTP包也可能相当过时。考虑到离线安装依赖包比较麻烦,本文采用标准Ubuntu安装。
注: Erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境
注:本文的所有安装部署均在root用户下执行。

  1. 安装erlang环境
    a) 在线安装(推荐)
sudo apt-get install -y erlang-nox erlang-dev erlang-src
sudo apt-get intstall –f erlang

b) 离线安装(遇到问题,暂未解决)

# 安装依赖包
sudo apt-get install gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
# 解压otp 包
tar -zxvf otp_src_19.0.tar.gz
# 配置
cd otp_src_19.0
./configure --prefix=/usr/local/erlang --with-ssl -enable-threads -enable-smmp-support -enable-kernel-poll --enable-hipe --without-javac
# 安装
make
make install

可能会报错
configure: error: No curses library functions found configure: error: /bin/sh '/home/liyixiang/erlang/configure' failed for erts
原因:缺少ncurses依赖包
解决(笔者试过,实际上没有解决问题)
apt-cache search ncurses
apt-get install libncurses5-dev

  1. 安装rabbitmq-server
    a) 离线安装(推荐)
    准备rabbitmq-server-generic-unix-3.6.10.tar.xz
# 解压即可
tar -xvf rabbitmq-server-generic-unix-3.6.10.tar.xz
# 目录名字太长,建议改短一点
mv rabbitmq_server-3.6.10 rabbitmq-3.6.10

b) 在线安装

# 执行以下命令将APT存储库添加到/etc/apt/sources.list.d中:
echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list
# 请注意,这行中的testing是指我们发布的RabbitMQ的状态,而不是任何特定的Debian发行版,您可以使用Debian稳定,测试或不稳定以及Ubuntu,我们将该版本描述为“测试“,强调我们稍微放松一些。
#(可选)要避免有关未签名包的警告,请使用apt-key(8)将我们的公钥添加到您的信任密钥列表中 :
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc |
     sudo apt-key add –
#运行以下命令更新程序包列表:
sudo apt-get update
# Install rabbitmq-server package:
sudo apt-get install rabbitmq-server
  1. 配置erlang和rabbitmq环境变量
sudo vi /etc/profile

文件底部加入以下内容

#set rabbitmq environment
RABBITMQ_HOME=/opt/rabbitmq-3.6.10 
export PATH=$PATH: $RABBITMQ_HOME/sbin
#set erlang environment
ERLANG_HOME=/opt/otp_src_19.3 
PATH=$PATH: $ERLANG_HOME/bin
  1. 至此,已经安装完毕。以下是常用命令
#启动Erlang node和Rabbit应用:
./sbin/rabbitmq-server
#后台启动Rabbit node
./sbin/rabbitmq-server –detached
# 启用web管理界面,语法rabbitmq-plugins enable xxx
./sbin/rabbitmq-plugins enable rabbitmq_management
# 添加用户rabbitmq,密码为rabbitmq
./sbin/rabbitmqctl add_user rabbitmq rabbitmq
#列出所有用户
./sbin/rabbitmqctl list_users
# 设置用户的管理员权限
./sbin/rabbitmqctl set_user_tags rabbitmq administrator
#设置用户的管理员权限,语法set_permissions [-pvhostpath] {user} {conf} {write} {read}
./sbin/rabbitmqctl set_permissions -p / rabbitmq '.*' '.*' '.*'
# 测试连接
wget http://127.0.0.1:15672/
# 关闭整个节点,包括应用
./sbin/rabbitmqctl stop
#仅关闭应用
./sbin/rabbitmqctl stop_app
#启动应用
./sbin/rabbitmqctl start_app 
#获取服务器状态信息
./sbin/rabbitmqctl status
# 关闭插件,语法rabbitmq-plugins disable xxx,eg.
./sbin/rabbitmq-plugins disable rabbitmq_management

更多的命令可以查看官网文档:http://www.rabbitmq.com/manpages.html

管理员页面
http://127.0.0.1:15672/

配置文件与日志文件目录(管理员页面可查看)
Config file: /opt/rabbitmq-3.6.10/etc/rabbitmq/rabbitmq.config (not found)
Database directory: /opt/rabbitmq-3.6.10/var/lib/rabbitmq/mnesia/rabbit@vm1
Log file:/opt/rabbitmq-3.6.10/var/log/rabbitmq/rabbit@vm1.log
SASL log file:/opt/rabbitmq-3.6.10/var/log/rabbitmq/rabbit@vm1-sasl.log

普通模式集群(单机上的集群)

普通模式集群官网安装文档:http://www.rabbitmq.com/clustering.html

在某些情况下,在单台计算机上运行一组RabbitMQ节点可能非常有用。这通常对于在台式机或笔记本电脑上进行群集测试而无需为群集启动多个虚拟机的开销就很有用

为了在单台计算机上运行多个RabbitMQ节点,有必要确保节点具有不同的节点名称,数据存储位置,日志文件位置,并绑定到不同的端口,包括插件使用的端口(可以参考官网的配置引导中的
RABBITMQ_NODENAME、RABBITMQ_NODE_PORT和 RABBITMQ_DIST_PORT参数设置)

1.  进入安装目录下的sbin目录,以下所有命令都在sbin目录下执行。
cd /opt/rabbitmq-3.6.10/sbin
2.  执行命令启动不同端口的节点。
RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit1 ./rabbitmq-server –detached

RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbit2 ./rabbitmq-server -detached

3.  此时已经启动了两个节点rabbit1和rabbit2,分别在两个集群,现在只需要把rabbit2加入到rabbit1集群就形成了一个集群两个节点了,在加入集群之前需要停止rabbitmq应用,加入成功再启动rabbitmq应用。
rabbitmqctl -n rabbit2 stop_app
rabbitmqctl -n rabbit2 join_cluster rabbit1@vm1
rabbitmqctl -n rabbit2 start_app

注:rabbit1@vm1的格式是“节点名@主机名”,其中主机名可以在/etc/hostname修改,最好在安装rabbitmq-server前修改,否则可能引起问题。

普通模式集群(真实集群)

安装原理

  1. 主机名配置
    所有集群成员的主机名必须从所有集群节点以及可在其上使用诸如rabbitmqctl等命令行工具的机器进行解析 ,因此需要配置主机所有集群节点的主机名。主机名解析可以使用任何标准操作系统提供的方法:
     DNS记录
     本地主机文件(例如/ etc / hosts),本文使用该方式。
    在更严格的环境中,DNS记录或主机文件修改很可能是受限的,Erlang VM可以配置为使用备用主机名解析方法,如备用DNS服务器,本地文件,非标准主机文件位置,或混合的方法。这些方法可以与标准的OS主机名解析方法效果是一致的。

注:如果需要使用完全限定名称,需要修改rabbitmq-env.conf 配置文件。

#当设置为true时,这将导致RabbitMQ使用完全限定名称来标识节点。
#这可能对EC2有用。请注意,在不重置节点的情况下,无法在使用短名称和长名称之间进行切换(也就是设置完毕后需要重启节点)。
RABBITMQ_USE_LONGNAME=true 
  1. 节点(和CLI工具)如何相互验证:Erlang Cookie
    RabbitMQ节点和CLI工具(例如,rabbitmqctl)使用cookie来确定它们是否被允许相互通信。为了使两个节点能够进行通信,它们必须具有称为Erlang cookie的相同共享密钥。Cookie只是一串字母数字字符。它可以是你想要的长或短。每个群集节点必须具有相同的cookie。
    当RabbitMQ服务器启动时,Erlang VM将自动创建一个随机cookie文件。最简单的方法是允许一个节点创建文件,然后将其复制到集群中的所有其他节点。
    在Unix系统上,cookie通常位于/var/lib/rabbitmq/.erlang.cookie(采用在线安装) 或$HOME/.erlang.cookie(采用解压的方式安装),本文推荐采用的是解压方式安装,因此可以使用SCP命令复制某节点的cookie文件到别的节点上。

  2. 集群可以通过多种方式形成:
    a) 使用rabbitmqctl命令人工配置(例如在开发环境中,本文采用此法)
    b) 通过在配置文件中列出集群节点来声明性地说明
    c) 使用rabbitmq-autocluster(插件)声明性地

安装步骤

本文分别在192.168.253.133(vm1)和192.168.253.134(vm2)两台虚拟机上安装了单机版的rabbitmq,步骤参考单机模式安装。现在我们把vm2的集群加入到vm1形成一个集群包含rabbit@vm1和rabbit@vm2两个节点即可完成部署。
  1. 主机文件修改
# 修改vm1和vm2的hosts文件
sudo nano /etc/hosts
# 修改如下,保存即可
127.0.0.1       localhost
192.168.253.133 vm1
192.168.253.134 vm2
# 重启服务时其生效
sudo/etc/init.d/networking restart
  1. 设置一致的cookie
# 使用Erlang命令在vm1设置cookie
erl -name rabbit@vm1 --setcookie 123456789
# 使用Erlang命令在vm2设置相同的cookie
erl -name rabbit@vm1 --setcookie 123456789
# 在vm1的erl 下设置允许其他节点加入,此处可以指定允许的节点,即net_kernel:allow([‘rabbit@vm2’]). 本文设置允许任何节点加入:
net_kernel:allow([]).
  1. 现在我们要把vm2的节点加入到vm1,首先确保所有节点的rabbitmq服务已启动。
#关闭vm2的rabbitmq应用
./sbin/rabbitmqctl stop_app
#加入vm1集群
./sbin/rabbitmqctl join_cluster -ram rabbit@vm1
#启动vm2的rabbitmq应用
./sbin/rabbitmqctl start_app
#到vm1的机器,查看集群节点vm1状态
./sbin/rabbitmqctl cluster_status

可见,两个节点已经形成了集群。若想加入新的节点,如法炮制,把新节点加入到vm1。

Cluster status of node rabbit@vm1
[{nodes,[{disc,[rabbit@vm1,rabbit@vm2]}]},
 {running_nodes,[rabbit@vm1]},
 {cluster_name,<<"rabbit@vm1">>},
 {partitions,[{rabbit@vm1,[rabbit@vm2]}]},
 {alarms,[{rabbit@vm1,[]}]}]

你可能遇到的问题:
Error: operation join_cluster used with invalid parameter: ["-ram", "rabbit@vm1"]
解决:

  1. 检查所有集群节点的Cookie文件是否一致。有些教程采用远程复制cookie文件,但是文件可能在/var/lib/rabbitmq/.erlang.cookie(采用在线安装) 或$HOME/.erlang.cookie(采用解压的方式安装),注意这点,推荐使用本文的erl命令设置。
  2. 检查/etc/hosts和/etc/hostname

高可用(镜像)模式集群

高可用模式集群官网安装文档:http://www.rabbitmq.com/ha.html

待续未完。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342

推荐阅读更多精彩内容

  • 整体架构 部署步骤 基于 Docker 基本概念内存节点只保存状态到内存,例外情况是:持久的 queue 的内容将...
    mvictor阅读 12,741评论 5 30
  • 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时...
    预流阅读 584,371评论 51 785
  • RabbitMQ 原理介绍及安装部署 标签:RabbitMQ 安装 简介 RabbitMQ 是一个用 Erlang...
    神仙CGod阅读 8,550评论 0 60
  • RabbitMQ 安装和配置 RabbitMQ 说明 MQ 全称为 Message Queue, 消息队列(MQ)...
    彩虹之梦阅读 4,872评论 0 1
  • 本来安装这种事不难,就是要选个正确的方向.... 另外吐槽一下,官网的字体...真的不是人看的:( 下载和安装 首...
    zerouwar阅读 467评论 1 0