centos7 搭建 rabbitMq集群


* 参考博客

准备:

配置每台服务器的 hosts 文件:

192.168.10.133 rabbit1
192.168.10.136 rabbit2

一、erlang安装
  • 1、首先安装erlang语言环境,需要安装C++编译:
$ yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC unixODBC-devel httpd python-simplejson
  • 2、下载erlang
$ wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-20.3.8.6-1.el7.centos.x86_64.rpm/download.rpm
  • 3、将rpm包放在/opt目录下,安装erlang
$ rpm -ivh erlang-20.3.8.6-1.el7.centos.x86_64.rpm
二、rabbitMq安装
  • 1、下载rabbitMq
$ wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.7/rabbitmq-server-3.7.7-1.el7.noarch.rpm
  • 2、安装rabbitMq
$ rpm -ivh rabbitmq-server-3.7.7-1.el7.noarch.rpm
  • [x] 2.1、安装过程报错如下:
[root@localhost ~]# rpm -ivh rabbitmq-server-3.7.7-1.el7.noarch.rpm 
warning: rabbitmq-server-3.7.7-1.el7.noarch.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY
error: Failed dependencies:
    socat is needed by rabbitmq-server-3.7.7-1.el7.noarch
  • 3、安装依赖包:socat
$ yum -y install socat
  • 4、生成配置文件
cp /usr/share/doc/rabbitmq-server-3.7.7/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
  • 5、启动rabbitMq
$ systemctl start rabbitmq-server
# 查看启动状态
$ systemctl status rabbitmq-server
  • 6、管理插件安装
# 查看插件:
$ rabbitmq-plugins list
# web插件安装:
$ rabbitmq-plugins enable rabbitmq_management
  • 7、常用命令:
# 停止服务
rabbitmqctl -n rabbit@izuf6e78y3y0pi1watmli4z stop_app
# 加入集群 --ram 类型为内存节点;不加此参数默认为磁盘节点
rabbitmqctl -n rabbit@izuf6e78y3y0pi1watmli4z join_cluster --ram rabbit@izuf6ghdadtcqh6fnjs6zgz
# 启动服务
rabbitmqctl -n rabbit@izuf6e78y3y0pi1watmli4z start_app
# 查看节点的集群状态
rabbitmqctl -n rabbit_2@izuf6ghdadtcqh6fnjs6zgz cluster_status
# 启动界面管理服务插件
rabbitmq-plugins -n rabbit_2@izuf6ghdadtcqh6fnjs6zgz enable rabbitmq_management
# 将节点移除集群
rabbitmqctl -n rabbit_2@izuf6e78y3y0pi1watmli4z reset
# 更改节点类型 disc:磁盘节点;ram:内存节点
rabbitmqctl -n rabbit@izuf6ghdadtcqh6fnjs6zgz change_cluster_node_type disc
查看rabbitMq进程:ps -ef | grep rabbitmq

默认监听端口15672/5672:netstat -anplt | grep LISTEN rabbitmq
  • 8、用户管理:
# 新增一个用户
rabbitmqctl add_user Username Password
# 删除一个用户
rabbitmqctl delete_user Username
# 修改用户的密码
rabbitmqctl change_password Username Newpassword
# 查看当前用户列表
rabbitmqctl list_users

# 用户角色:
(1) 超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。

(2) 监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

(3) 策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
与administrator的对比,administrator能看到这些内容

(4) 普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。

(5) 其他
无法登陆管理控制台,通常就是普通的生产者和消费者。

# 设置用户角色的命令为:
rabbitmqctl set_user_tags User Tag
# User为用户名, Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)。
# 也可以给同一用户设置多个角色,例如
rabbitmqctl set_user_tags hncscwc monitoring policymaker

# 允许用户远程访问
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
三、集群服务配置
  • 一、普通集群:
  • 1、说明:

    Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群镜像。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在 home/.erlang.cookie 中,我的是用rpm安装的,所以.erlang.cookie就放在/var/lib/rabbitmq中。如果我们使用解压缩方式安装部署的rabbitmq,那么这个文件会在{home}目录下。
  • 2、复制cookie内容
# .erlang.cookie 路径
cd /var/lib/rabbitmq

# 修改其他节点服务器的的.erlang.cookie 保证所有服务器的 .erlang.cookie文件保持一致
# 修改文件权限(可编辑):
chmod 777  /var/lib/rabbitmq/.erlang.cookie
# 修改完 .erlang.cookie 后必须改回文件权限(启动前必须设置400,只有owner拥有权限即可,否则启动rabbitmq服务失败)
chmod 400  /var/lib/rabbitmq/.erlang.cookie
  • 3、设置好cookie后先将每个节点的rabbitmq重启
# 停止服务
service rabbitmq-server stop
# 开启服务
service rabbitmq-server start
# 查看服务状态,检查是否启动成功
service rabbitmq-server status

# 查看每个节点集群状态:
rabbitmqctl cluster_status
可以看到节点情况:
Cluster status of node rabbit@rabbit1

[{nodes,[{disc,[rabbit@rabbit1]}]},

{running_nodes,[rabbit@rabbit1]},

{cluster_name,<<"rabbit@rabbit1">>},

{partitions,[]},

{alarms,[{rabbit@rabbit1,[]}]}]
  • 4、添加集群节点

    说明:

    ++rabbitmq-server启动时,会一起启动节点和应用,它预先设置RabbitMQ应用为standalone模式。要将一个节点加入到现有的集群中,你需要停止这个应用,并将节点设置为原始状态。如果使用rabbitmqctl stop,应用和节点都将被关闭。所以使用rabbitmqctl stop_app仅仅关闭应用。++
# 初始化主节点执行队列
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

将rabbit1作为集群主节点,rabbit2和rabbit3加入集群,所以在rabbit2和rabbit3节点上执行如下命令,加入集群节点:

# rabbit2节点执行命令:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app

其中–-ram指的是作为内存节点,要是想做为磁盘节点的话,就不用加–-ram这个参数了。
PS:只要在节点列表里包含了本身,它就成为一个磁盘节点。在RabbitMQ集群里,必须至少有一个磁盘节点存在。

# 查看集群节点状态:
rabbitmqctl cluster_status
出现如下信息即表示集群完成:
[root@rabbit1 rabbitmq]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit1 ...
[{nodes,[{disc,[rabbit@rabbit1]},{ram,[rabbit@rabbit2]}]},
 {running_nodes,[rabbit@rabbit2,rabbit@rabbit1]},
 {cluster_name,<<"rabbit@rabbit2">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbit2,[]},{rabbit@rabbit1,[]}]}]
  • 5、单服务器启动多实例
# 启动多个实例
RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit rabbitmq-server -detatched &amp
RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}] -rabbitmq_stomp tcp_listeners [61614] -rabbitmq_mqtt  tcp_listeners [1884]" RABBITMQ_NODENAME=rabbit_2 rabbitmq-server -detached

# 查看节点状态信息
rabbitmqctl -n rabbit_2@rabbit2 cluster_status

# 加入集群
rabbitmqctl -n rabbit_2@rabbit2 stop_app
rabbitmqctl -n rabbit_2@rabbit2 join_cluster rabbit@rabbit1
# rabbitmqctl -n rabbit_1@rabbit1 reset #将节点移除集群
rabbitmqctl -n rabbit_2@rabbit2 start_app

# 开启节点监控
rabbitmq-plugins -n rabbit_2 enable rabbitmq_management
  • 6、其他运维
# 退出集群节点:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

# 移除节点:
rabbitmqctl stop_app
rabbitmqctl forget_cluster_node rabbit@rabbit2

# 加入集群时指定节点类型:
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbit2
rabbitmqctl start_app
其中,--ram 指定内存节点类型,--disc指定磁盘节点类型

# 修改节点类型:
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc
rabbitmqctl start_app
  • 7、普通集群需注意:

    这种模式更适合非持久化队列,只有该队列是非持久的,客户端才能重新连接到集群里的其他

  • 二、镜像集群:
  • 1、设置镜像队列策略

# 在任意一个节点上执行:
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

# 查看策略
rabbitmqctl list_policies
  • 2、语法讲解:

在cluster中任意节点启用策略,策略会自动同步到集群节点
rabbitmqctl set_policy -p hrsystem ha-allqueue"^" '{"ha-mode":"all"}'
这行命令在vhost名称为hrsystem创建了一个策略,策略名称为ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为 “^” 表示所有匹配所有队列名称。
例如rabbitmqctl set_policy -p hrsystem ha-allqueue "^message" '{"ha-mode":"all"}'
注意:"^message" 这个规则要根据自己修改,这个是指同步"message"开头的队列名称,我们配置时使用的应用于所有队列,所以表达式为"^"
官方set_policy说明参见
set_policy [-p vhostpath] {name} {pattern} {definition} [priority]
http://www.rabbitmq.com/man/rabbitmqctl.1.man.html

四、安装插件
# 插件存放路径
/usr/lib/rabbitmq/lib/rabbitmq_server-3.7.7/plugins

# 查看插件列表
rabbitmq-plugins list

# 启动插件
rabbitmq-plugins enable plugin-name

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

推荐阅读更多精彩内容