CentOs7.3中搭建RabbitMQ3.6单机多实例服务的步骤与使⽤
RabbitMQ简介
RabbitMQ是⼀个开源的AMQP实现,服务器端⽤Erlang语⾔编写,⽀持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,⽀持AJAX。⽤于在分布式系统中存储转发消息,在易⽤性、扩展性、⾼可⽤性等⽅⾯表现不俗。
AMQP,即Advanced message Queuing Protocol,⾼级消息队列协议,是应⽤层协议的⼀个开放标准,为⾯向消息的中间件设计。消息中间件主要⽤于组件之间的解耦,消息的发送者⽆需知道消息使⽤者的存在,反之亦然。
AMQP的主要特征是⾯向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
注意事项
centos 7.x 关闭firewall
$ systemctl stop firewalld.service # 停⽌firewall
不想关闭防⽕墙,就开放15672端⼝,设置之后可以通过⽹页⽅式管理MQ
安装安装iptables防⽕墙
yum install iptables-services
添加配置
iptables -I INPUT -p tcp --dport 5672 -j ACCEPT
iptables -I INPUT -p tcp --dport 15672 -j ACCEPT
保存配置
service iptables save
重启
systemctl restart iptables.service
设置开机⾃启动
systemctl enable iptables.service
安装
安装 Erlang
RabbitMQ 安装需要依赖 Erlang 环境
$ cd /usr/local/src
$ wget www.rabbitmq/releases/erlang/erlang-19.0.s.x86_64.rpm
$ yum install erlang-19.0.s.x86_64.rpm
安装 RabbitMQ
$ cd /usr/local/src
$ wget www.rabbitmq/releases/rabbitmq-server/v3.6.10/rabbitmq-server-3.6.arch.rpm
$ yum install rabbitmq-server-3.6.arch.rpm
启动服务
$ service rabbitmq-server start
服务状态
$ service rabbitmq-server status
Redirecting to /bin/systemctl status rabbitmq-server.service
● rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)
Active: active (running) since ⼀ 2018-03-05 21:42:10 CST; 15s ago
Main PID: 2493 (beam.smp)
Status: "Initialized"
CGroup: /system.slice/rabbitmq-server.service
├─2493 /usr/lib64/erlang/erts-8.0.3/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 32000 -K true -- -root /usr/lib64/erlang -progname erl -- -home /
├─2634 /usr/lib64/erlang/erts-8.0.3/bin/epmd -daemon
├─2750 erl_child_setup 1024
├─2760 inet_gethost 4
└─2761 inet_gethost 4
3⽉ 05 21:42:07 master01 rabbitmq-server[2493]: RabbitMQ 3.6.10. Copyright (C) 2007-2017 Pivotal Software, Inc.
3⽉ 05 21:42:07 master01 rabbitmq-server[2493]: ## ## Licensed under the MPL. See www.rabbitmq/
3⽉ 05 21:42:07 master01 rabbitmq-server[2493]: ## ##
3⽉ 05 21:42:07 master01 rabbitmq-server[2493]: >> Logs: /var/log/rabbitmq/rabbit@master01.log
3⽉ 05 21:42:07 master01 rabbitmq-server[2493]: ># ## /var/log/rabbitmq/rabbit@master01-sasl.log
3⽉ 05 21:42:07 master01 rabbitmq-server[2493]: >>
3⽉ 05 21:42:07 master01 rabbitmq-server[2493]:
3⽉ 05 21:42:10 master01 rabbitmq-server[2493]: systemd unit for activation check: "rabbitmq-server.service"
3⽉ 05 21:42:10 master01 systemd[1]: Started RabbitMQ broker.
3⽉ 05 21:42:10 master01 rabbitmq-server[2493]: completed with 0 plugins.
查看⽇志
$ less /var/log/rabbitmq/rabbit\@master01.log
=INFO REPORT==== 5-Mar-2018::21:42:07 ===
Starting RabbitMQ 3.6.10 on Erlang 19.0.4
Copyright (C) 2007-2017 Pivotal Software, Inc.
Licensed under the MPL. See www.rabbitmq/
=INFO REPORT==== 5-Mar-2018::21:42:07 ===
node  : rabbit@master01
home dir : /var/lib/rabbitmq
config file(s) : /etc/fig (not found)
cookie hash : +9loSJmR5x/9GEguoed28A==
log  : /var/log/rabbitmq/rabbit@master01.log
sasl log : /var/log/rabbitmq/rabbit@master01-sasl.log
database dir : /var/lib/rabbitmq/mnesia/rabbit@master01
=INFO REPORT==== 5-Mar-2018::21:42:09 ===
Memory limit set to 732MB of 1831MB total.
=INFO REPORT==== 5-Mar-2018::21:42:09 ===
Enabling free disk space monitoring
=INFO REPORT==== 5-Mar-2018::21:42:09 ===
Disk free limit set to 50MB
=INFO REPORT==== 5-Mar-2018::21:42:09 ===
Limiting to approx 924 file handles (829 sockets)
=INFO REPORT==== 5-Mar-2018::21:42:09 ===
FHC read buffering: OFF
=INFO REPORT==== 5-Mar-2018::21:42:07 ===
Starting RabbitMQ 3.6.10 on Erlang 19.0.4
Copyright (C) 2007-2017 Pivotal Software, Inc.
Licensed under the MPL. See www.rabbitmq/
=INFO REPORT==== 5-Mar-2018::21:42:07 ===
node  : rabbit@master01
home dir : /var/lib/rabbitmq
config file(s) : /etc/fig (not found)
cookie hash : +9loSJmR5x/9GEguoed28A==
log  : /var/log/rabbitmq/rabbit@master01.log
sasl log : /var/log/rabbitmq/rabbit@master01-sasl.log
database dir : /var/lib/rabbitmq/mnesia/rabbit@master01
=INFO REPORT==== 5-Mar-2018::21:42:09 ===
Memory limit set to 732MB of 1831MB total.
=INFO REPORT==== 5-Mar-2018::21:42:09 ===
Enabling free disk space monitoring
=INFO REPORT==== 5-Mar-2018::21:42:09 ===
Disk free limit set to 50MB
=INFO REPORT==== 5-Mar-2018::21:42:09 ===
Limiting to approx 924 file handles (829 sockets)
=INFO REPORT==== 5-Mar-2018::21:42:09 ===
FHC read buffering: OFF
FHC write buffering: ON
=INFO REPORT==== 5-Mar-2018::21:42:09 ===
Database directory at /var/lib/rabbitmq/mnesia/rabbit@master01 is empty. Initialising
=INFO REPORT==== 5-Mar-2018::21:42:09 ===
Waiting for Mnesia tables for 30000 ms, 9 retries left
=INFO REPORT==== 5-Mar-2018::21:42:09 ===
Waiting for Mnesia tables for 30000 ms, 9 retries left
这⾥显⽰的是没有到配置⽂件,我们可以⾃⼰创建这个⽂件
config file(s) : /etc/fig (not found)
创建fig
$ cd /etc/rabbitmq/
$ fig
编辑内容如下:
[{rabbit, [{loopback_users, []}]}].
这⾥的意思是开放使⽤,rabbitmq默认创建的⽤户guest,密码也是guest,这个⽤户默认只能是本机访问,localhost或者127.0.0.1,从外部访问需要添加上⾯的配置。保存配置后重启服务
$ service rabbitmq-server restart
开启管理UI
$ /sbin/rabbitmq-plugins enable rabbitmq_management
重启服务
$ service rabbitmq-server restart
访问管理UI
授权操作
添加⽤户
命令格式
rabbitmqctl add_user <username> <newpassword>
$ rabbitmqctl add_user zhdya 123456
Creating user "zhdya"
删除⽤户
rabbitmqctl delete_user <username>
$ rabbitmqctl delete_user admin_test
Deleting user "admin_test"
修改密码
rabbitmqctl change_password <username> <newpassword>
$ rabbitmqctl change_password zhdya 123456
Changing password for user "zhdya"
⽤户授权
rabbitmqctl set_permissions [-pvhostpath] {user} {conf} {write} {read}
该命令使⽤户zhdya /(可以访问虚拟主机) 中所有资源的配置、写、读权限以便管理其中的资源
$ rabbitmqctl set_permissions -p "/" zhdya ".*" ".*" ".*"
Setting permissions for user "zhdya" in vhost "/"
查看⽤户授权
rabbitmqctl list_permissions [-p VHostPath]
$ rabbitmqctl list_permissions -p /
Listing permissions in vhost "/"
guest .* .* .*
zhdya .* .* .*
查看当前⽤户列表
可以看到添加⽤户成功了,但不是administrator⾓⾊centos vim命令
$ rabbitmqctl list_users
Listing users
guest [administrator]
zhdya []
添加⾓⾊
这⾥我们也将ymq⽤户设置为administrator⾓⾊
命令格式
rabbitmqctl set_user_tags <username> <tag>
$ rabbitmqctl set_user_tags zhdya administrator
Setting tags for user "zhdya" to [administrator]
再次查看权限
$ rabbitmqctl list_users
Listing users
guest [administrator]
zhdya [administrator]
清除权限信息
rabbitmqctl clear_permissions [-p VHostPath] ymq
rabbitmqctl clear_permissions -p / zhdya
Clearing permissions for user "zhdya" in vhost "/"
官⽅⽂档
web 界⾯
添加⽤户
⿏标点击,划红线的⾓⾊,选择⼀种
RabbitMQ的⽤户⾓⾊分类:
none、management、policymaker、monitoring、administrator
RabbitMQ各类⾓⾊描述:
none
不能访问 management plugin
management
⽤户可以通过AMQP做的任何事外加:
列出⾃⼰可以通过AMQP登⼊的virtual hosts
查看⾃⼰的virtual hosts中的queues, exchanges 和 bindings
查看和关闭⾃⼰的channels 和 connections
查看有关⾃⼰的virtual hosts的“全局”的统计信息,包含其他⽤户在这些virtual hosts中的活动。policymaker
management可以做的任何事外加:
查看、创建和删除⾃⼰的virtual hosts所属的policies和parameters
monitoring
management可以做的任何事外加:
列出所有virtual hosts,包括他们不能登录的virtual hosts
查看其他⽤户的connections和channels
查看节点级别的数据如clustering和memory使⽤情况
查看真正的关于所有virtual hosts的全局的统计信息
administrator
policymaker和monitoring可以做的任何事外加:
创建和删除virtual hosts
查看、创建和删除users
查看创建和删除permissions
关闭其他⽤户的connections
设置权限
该⽤户⽆权访问任何虚拟主机
点击⽤户名 Set permission
设置可以访问虚拟主机中所有资源的配置、写、读权限以便管理其中的资源
⾄此rabbitMQ单机服务已经完全搭建完毕,下⾯来操作单机多实例:
rabbitMQ 单机多实例
其实在操作前我在⽹上看到了很多这种⽅案,多数为如下:
RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 rabbitmq-server -detached
RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached
RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached
不过我觉得对于新⼈来说过于简陋和不负责任
第⼀个节点
下⾯指定了特定hostname启动的,当然你也可以指定为localhost。
[root@master01 sbin]# vim /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1  localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 master01
启动第⼀个节点
RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit@master01 ./rabbitmq-server
第⼆个节点
[root@master01 sbin]# RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit1@master01 rabbitmq-server -detached Warning: PID file not written; -detached was passed.
你可能发现不了什么,假如你去掉-detached 你会发现,最后你得到了⼀个这样的错误信息:崩溃了的信息。。。
Crash dump is being written to: erl_done
往上翻信息或者查看⽇志,你会看到这样的提⽰:
BOOT FAILED
===========
Error description:
{could_not_start,rabbitmq_mqtt,
{{shutdown,
{failed_to_start_child,'rabbit_mqtt_listener_sup_:::1883',
{shutdown,
{failed_to_start_child,
{ranch_listener_sup,{acceptor,{0,0,0,0,0,0,0,0},1883}},
{shutdown,
{failed_to_start_child,ranch_acceptors_sup,
{listen_error,
{acceptor,{0,0,0,0,0,0,0,0},1883},
eaddrinuse}}}}}}},
{rabbit_mqtt,start,[normal,[]]}}}
启动第⼆个节点
[root@master01 sbin]# 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=rabbit1 ./rab Warning: PID file not written; -detached was passed.
查看端⼝:
[root@master01 sbin]# !net
netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address  Foreign Address  State  PID/Program name
tcp  0  0 0.0.0.0:4369  0.0.0.0:*    LISTEN  3779/epmd
tcp  0  0 0.0.0.0:22    0.0.0.0:*    LISTEN  1348/sshd
tcp  0  0 0.0.0.0:15672  0.0.0.0:*    LISTEN  3598/beam.smp
tcp  0  0 0.0.0.0:15673  0.0.0.0:*    LISTEN  5679/beam.smp
tcp  0  0 127.0.0.1:25  0.0.0.0:*    LISTEN  2065/master
tcp  0  0 0.0.0.0:25672  0.0.0.0:*    LISTEN  3598/beam.smp
tcp  0  0 0.0.0.0:25673  0.0.0.0:*    LISTEN  5679/beam.smp
tcp6  0  0 :::3306    :::*    LISTEN  1418/mysqld
tcp6  0  0 :::4369    :::*    LISTEN  3779/epmd
tcp6  0  0 :::22    :::*    LISTEN  1348/sshd
tcp6  0  0 ::1:25    :::*    LISTEN  2065/master
tcp6  0  0 :::5672    :::*    LISTEN  3598/beam.smp
tcp6  0  0 :::5673    :::*    LISTEN  5679/beam.smp
查看rabbit1的状态:
cd /sbin/
./rabbitmqctl status -n rabbit1
第三个节点
[root@master01 sbin]# RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit2@master01 rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
启动第三个节点
[root@master01 sbin]# RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}] -rabbitmq_stomp tcp_listeners [61615] -rabbitmq_mqtt tcp_listeners [1885]" RABBITMQ_NODENAME=rabbit2 ./rab Warning: PID file not written; -detached was passed.
查看rabbit2的状态:
cd /sbin/
./rabbitmqctl status -n rabbit2
查看启动状态:
[root@master01 sbin]# !net
netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address  Foreign Address  State  PID/Program name
tcp  0  0 0.0.0.0:25674  0.0.0.0:*    LISTEN  6759/beam.smp
tcp  0  0 0.0.0.0:4369  0.0.0.0:*    LISTEN  3779/epmd
tcp  0  0 0.0.0.0:22    0.0.0.0:*    LISTEN  1348/sshd
tcp  0  0 0.0.0.0:15672  0.0.0.0:*    LISTEN  3598/beam.smp
tcp  0  0 0.0.0.0:15673  0.0.0.0:*    LISTEN  5679/beam.smp
tcp  0  0 127.0.0.1:25  0.0.0.0:*    LISTEN  2065/master
tcp  0  0 0.0.0.0:15674  0.0.0.0:*    LISTEN  6759/beam.smp
tcp  0  0 0.0.0.0:25672  0.0.0.0:*    LISTEN  3598/beam.smp
tcp  0  0 0.0.0.0:25673  0.0.0.0:*    LISTEN  5679/beam.smp
tcp6  0  0 :::5674    :::*    LISTEN  6759/beam.smp
tcp6  0  0 :::3306    :::*    LISTEN  1418/mysqld
tcp6  0  0 :::4369    :::*    LISTEN  3779/epmd
tcp6  0  0 :::22    :::*    LISTEN  1348/sshd
tcp6  0  0 ::1:25    :::*    LISTEN  2065/master
tcp6  0  0 :::5672    :::*    LISTEN  3598/beam.smp
tcp6  0  0 :::5673    :::*    LISTEN  5679/beam.smp
集操作
把节点rabbit1 加⼊ rabbit中
1.停⽌第⼆个节点的应⽤程序
./rabbitmqctl -n rabbit1@master01 stop_app
2.重新设置第⼆个节点的元数据和状态为清空状态。
./rabbitmqctl -n rabbit1@master01 reset
3.加⼊第⼀节点
./rabbitmqctl -n rabbit1@master01 join_cluster rabbit@localhost
4.重新启动第⼆节点
.
/rabbitmqctl -n rabbit1@master01 start_app
现在再次登陆web界⾯你可以到web端看到集已经存在了
把节点rabbit2 加⼊ rabbit中
同如上步骤的1234:其中注意点是,如果你需要设置第三个集节点为内存模式,⽽⾮磁盘模式,可以参考当前版本的命令提⽰,在最后加上 –ram 参数
添加第三节点的完整命令
./rabbitmqctl -n rabbit2@master01 stop_app
./rabbitmqctl -n rabbit2@master01 reset
./rabbitmqctl -n rabbit2@master01 join_cluster rabbit@master01
./rabbitmqctl -n rabbit2@master01 start_app
注意:如上第三步,如果你要设置第三个集节点为内存模式,⽽⾮磁盘模式,那就需要 --ram
./rabbitmqctl -n rabbit2@master01 join_cluster rabbit@master01 --ram
查看集状态
./rabbitmqctl cluster_status -n rabbit@localhost
[root@master01 sbin]# ./rabbitmqctl cluster_status -n rabbit@localhost
Cluster status of node rabbit@localhost
[{nodes,[{disc,['rabbit1@master01','rabbit2@master01',
rabbit@localhost]}]},
{running_nodes,['rabbit2@master01','rabbit1@master01',
rabbit@localhost]},
{cluster_name,<<"rabbit@master01">>},
{partitions,[]},
{alarms,[{'rabbit2@master01',[]},
{'rabbit1@master01',[]},
{rabbit@localhost,[]}]}]
到web端看下效果吧
⾄此,集搭建完毕。
遇到的问题:
RabbitMQ在安装后可能会出现⽆法启动,如:
Applying plugin configuration to failed.
* Could not contact node rabbit@192.
Changes will take effect at broker restart.
* Options: --online - fail if broker cannot be contacted.
--offline - do not try to contact broker.
Error: unable to connect to node rabbit@192: nodedown
DIAGNOSTICS
===========
attempted to contact: [rabbit@192]
rabbit@192:
* unable to connect to epmd (port 4369) on 192: badarg (unknown POSIX error)
current node details:
- node name: 'rabbitmq-cli-97@192'
- home dir: /var/lib/rabbitmq
- cookie hash: rb2CNGgDqm+k5+jq1wj6vg==
Error: unable to connect to node rabbit@192: nodedown
解决办法
vi /etc/f
在⽂件中写⼊“NODENAME=rabbit@localhost” ,保存。
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论