CentOs中怎么搭建RabbitMQ3.6单机多实例服务
导读:本文共9958字符,通常情况下阅读需要33分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: rabbitmq简介rabbitmq是一个开源的amqp实现,服务器端用erlang语言编写,支持多种客户端,如:python、ruby、.net、java、jms、c、php、actionscript、xmpp、stomp等,支持ajax。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。amqp,即advanced message q... ...
目录
(为您整理了一些要点),点击可以直达。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
$systemctlstopfirewalld.service#停止firewall
不想关闭防火墙,就开放15672端口,设置之后可以通过网页方式管理mq
安装安装iptables防火墙
yuminstalliptables-services
添加配置
iptables-iinput-ptcp--dport5672-jacceptiptables-iinput-ptcp--dport15672-jaccept
保存配置
serviceiptablessave
重启
systemctlrestartiptables.service
设置开机自启动
systemctlenableiptables.service
安装
安装 erlang
rabbitmq 安装需要依赖 erlang 环境
$cd/usr/local/src$wgethttp://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el7.centos.x86_64.rpm$yuminstallerlang-19.0.4-1.el7.centos.x86_64.rpm
安装 rabbitmq
$cd/usr/local/src$wgethttp://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-3.6.10-1.el7.noarch.rpm$yuminstallrabbitmq-server-3.6.10-1.el7.noarch.rpm
启动服务
$servicerabbitmq-serverstart
服务状态
$servicerabbitmq-serverstatusredirectingto/bin/systemctlstatusrabbitmq-server.service●rabbitmq-server.service-rabbitmqbrokerloaded:loaded(/usr/lib/systemd/system/rabbitmq-server.service;disabled;vendorpreset:disabled)active:active(running)since一2018-03-0521:42:10cst;15sagomainpid:2493(beam.smp)status:"initialized"cgroup:/system.slice/rabbitmq-server.service├─2493/usr/lib64/erlang/erts-8.0.3/bin/beam.smp-ww-a64-p1048576-t5000000-stbtdb-zdbbl32000-ktrue---root/usr/lib64/erlang-prognameerl---home/var/l...├─2634/usr/lib64/erlang/erts-8.0.3/bin/epmd-daemon├─2750erl_child_setup1024├─2760inet_gethost4└─2761inet_gethost43月0521:42:07master01rabbitmq-server[2493]:rabbitmq3.6.10.copyright(c)2007-2017pivotalsoftware,inc.3月0521:42:07master01rabbitmq-server[2493]:####licensedunderthempl.seehttp://www.rabbitmq.com/3月0521:42:07master01rabbitmq-server[2493]:####3月0521:42:07master01rabbitmq-server[2493]:##########logs:/var/log/rabbitmq/rabbit@master01.log3月0521:42:07master01rabbitmq-server[2493]:########/var/log/rabbitmq/rabbit@master01-sasl.log3月0521:42:07master01rabbitmq-server[2493]:##########3月0521:42:07master01rabbitmq-server[2493]:startingbroker...3月0521:42:10master01rabbitmq-server[2493]:systemdunitforactivationcheck:"rabbitmq-server.service"3月0521:42:10master01systemd[1]:startedrabbitmqbroker.3月0521:42:10master01rabbitmq-server[2493]:completedwith0plugins.
查看日志
$less/var/log/rabbitmq/rabbit\@master01.log=inforeport====5-mar-2018::21:42:07===startingrabbitmq3.6.10onerlang19.0.4copyright(c)2007-2017pivotalsoftware,inc.licensedunderthempl.seehttp://www.rabbitmq.com/=inforeport====5-mar-2018::21:42:07===node:rabbit@master01homedir:/var/lib/rabbitmqconfigfile(s):/etc/rabbitmq/rabbitmq.config(notfound)cookiehash:+9losjmr5x/9geguoed28a==log:/var/log/rabbitmq/rabbit@master01.logsasllog:/var/log/rabbitmq/rabbit@master01-sasl.logdatabasedir:/var/lib/rabbitmq/mnesia/rabbit@master01=inforeport====5-mar-2018::21:42:09===memorylimitsetto732mbof1831mbtotal.=inforeport====5-mar-2018::21:42:09===enablingfreediskspacemonitoring=inforeport====5-mar-2018::21:42:09===diskfreelimitsetto50mb=inforeport====5-mar-2018::21:42:09===limitingtoapprox924filehandles(829sockets)=inforeport====5-mar-2018::21:42:09===fhcreadbuffering:off=inforeport====5-mar-2018::21:42:07===startingrabbitmq3.6.10onerlang19.0.4copyright(c)2007-2017pivotalsoftware,inc.licensedunderthempl.seehttp://www.rabbitmq.com/=inforeport====5-mar-2018::21:42:07===node:rabbit@master01homedir:/var/lib/rabbitmqconfigfile(s):/etc/rabbitmq/rabbitmq.config(notfound)cookiehash:+9losjmr5x/9geguoed28a==log:/var/log/rabbitmq/rabbit@master01.logsasllog:/var/log/rabbitmq/rabbit@master01-sasl.logdatabasedir:/var/lib/rabbitmq/mnesia/rabbit@master01=inforeport====5-mar-2018::21:42:09===memorylimitsetto732mbof1831mbtotal.=inforeport====5-mar-2018::21:42:09===enablingfreediskspacemonitoring=inforeport====5-mar-2018::21:42:09===diskfreelimitsetto50mb=inforeport====5-mar-2018::21:42:09===limitingtoapprox924filehandles(829sockets)=inforeport====5-mar-2018::21:42:09===fhcreadbuffering:offfhcwritebuffering:on=inforeport====5-mar-2018::21:42:09===databasedirectoryat/var/lib/rabbitmq/mnesia/rabbit@master01isempty.initialisingfromscratch...=inforeport====5-mar-2018::21:42:09===waitingformnesiatablesfor30000ms,9retriesleft=inforeport====5-mar-2018::21:42:09===waitingformnesiatablesfor30000ms,9retriesleft
这里显示的是没有找到配置文件,我们可以自己创建这个文件
configfile(s):/etc/rabbitmq/rabbitmq.config(notfound)
创建rabbitmq.config
$cd/etc/rabbitmq/$vimrabbitmq.config
编辑内容如下:
[{rabbit,[{loopback_users,[]}]}].
这里的意思是开放使用,rabbitmq默认创建的用户guest,密码也是guest,这个用户默认只能是本机访问,localhost或者127.0.0.1,从外部访问需要添加上面的配置。
保存配置后重启服务
$servicerabbitmq-serverrestart
开启管理ui
$/sbin/rabbitmq-pluginsenablerabbitmq_management
重启服务
$servicerabbitmq-serverrestart
访问管理ui
通过 http://ip:15672 使用guest, guest 进行登陆了.
授权操作
添加用户
处于安全的考虑,guest这个默认的用户只能通过http://localhost:15672 来登录,其他的ip无法直接使用这个账号。 这对于服务器上没有安装桌面的情况是无法管理维护的,除非通过在前面添加一层代理向外提供服务,这个又有些麻烦了,这里通过配置文件来实现这个功能
命令格式
rabbitmqctladd_user<username><newpassword>$rabbitmqctladd_userzhdya123456creatinguser"zhdya"
删除用户
rabbitmqctldelete_user<username>$rabbitmqctldelete_useradmin_testdeletinguser"admin_test"
修改密码
rabbitmqctlchange_password<username><newpassword>$rabbitmqctlchange_passwordzhdya123456changingpasswordforuser"zhdya"
用户授权
rabbitmqctlset_permissions[-pvhostpath]{user}{conf}{write}{read}
该命令使用户zhdya /(可以访问虚拟主机) 中所有资源的配置、写、读权限以便管理其中的资源
$rabbitmqctlset_permissions-p"/"zhdya".*"".*"".*"settingpermissionsforuser"zhdya"invhost"/"
查看用户授权
rabbitmqctllist_permissions[-pvhostpath]$rabbitmqctllist_permissions-p/listingpermissionsinvhost"/"guest.*.*.*zhdya.*.*.*
查看当前用户列表
可以看到添加用户成功了,但不是administrator角色
$rabbitmqctllist_userslistingusersguest[administrator]zhdya[]
添加角色
这里我们也将ymq用户设置为administrator角色
命令格式
rabbitmqctlset_user_tags<username><tag>$rabbitmqctlset_user_tagszhdyaadministratorsettingtagsforuser"zhdya"to[administrator]
再次查看权限
$rabbitmqctllist_userslistingusersguest[administrator]zhdya[administrator]
清除权限信息
rabbitmqctlclear_permissions[-pvhostpath]ymqrabbitmqctlclear_permissions-p/zhdyaclearingpermissionsforuser"zhdya"invhost"/"
官方文档
安装:
访问控制:
网络:
配置:
集群:
命令:
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=5672rabbitmq_nodename=rabbit1rabbitmq-server-detachedrabbitmq_node_port=5673rabbitmq_nodename=rabbit2rabbitmq-server-detachedrabbitmq_node_port=5674rabbitmq_nodename=rabbit3rabbitmq-server-detached
不过我觉得对于新人来说过于简陋和不负责任!!!
第一个节点
下面指定了特定hostname启动的,当然你也可以指定 为localhost。
[root@master01sbin]#vim/etc/hosts#127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4::1localhostlocalhost.localdomainlocalhost6localhost6.localdomain6127.0.0.1master01
启动第一个节点
rabbitmq_node_port=5672rabbitmq_nodename=rabbit@master01./rabbitmq-server
第二个节点
[root@master01sbin]#rabbitmq_node_port=5673rabbitmq_nodename=rabbit1@master01rabbitmq-server-detachedwarning:pidfilenotwritten;-detachedwaspassed.
你可能发现不了什么,假如你去掉-detached 你会发现,最后你得到了一个这样的错误信息:崩溃了的信息。。。
crashdumpisbeingwrittento:erl_crash.dump...done
往上翻信息或者查看日志,你会看到这样的提示:
bootfailed===========errordescription:{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@master01sbin]#rabbitmq_node_port=5673rabbitmq_server_start_args="-rabbitmq_managementlistener[{port,15673}]-rabbitmq_stomptcp_listeners[61614]-rabbitmq_mqtttcp_listeners[1884]"rabbitmq_nodename=rabbit1./rabbitmq-server-detachedwarning:pidfilenotwritten;-detachedwaspassed.
查看端口:
[root@master01sbin]#!netnetstat-lntpactiveinternetconnections(onlyservers)protorecv-qsend-qlocaladdressforeignaddressstatepid/programnametcp000.0.0.0:43690.0.0.0:*listen3779/epmdtcp000.0.0.0:220.0.0.0:*listen1348/sshdtcp000.0.0.0:156720.0.0.0:*listen3598/beam.smptcp000.0.0.0:156730.0.0.0:*listen5679/beam.smptcp00127.0.0.1:250.0.0.0:*listen2065/mastertcp000.0.0.0:256720.0.0.0:*listen3598/beam.smptcp000.0.0.0:256730.0.0.0:*listen5679/beam.smptcp600:::3306:::*listen1418/mysqldtcp600:::4369:::*listen3779/epmdtcp600:::22:::*listen1348/sshdtcp600::1:25:::*listen2065/mastertcp600:::5672:::*listen3598/beam.smptcp600:::5673:::*listen5679/beam.smp
查看rabbit1的状态:
cd/sbin/./rabbitmqctlstatus-nrabbit1
第三个节点
[root@master01sbin]#rabbitmq_node_port=5674rabbitmq_nodename=rabbit2@master01rabbitmq-server-detachedwarning:pidfilenotwritten;-detachedwaspassed.
启动第三个节点
[root@master01sbin]#rabbitmq_node_port=5674rabbitmq_server_start_args="-rabbitmq_managementlistener[{port,15674}]-rabbitmq_stomptcp_listeners[61615]-rabbitmq_mqtttcp_listeners[1885]"rabbitmq_nodename=rabbit2./rabbitmq-server-detachedwarning:pidfilenotwritten;-detachedwaspassed.
查看rabbit2的状态:
cd/sbin/./rabbitmqctlstatus-nrabbit2
查看启动状态:
[root@master01sbin]#!netnetstat-lntpactiveinternetconnections(onlyservers)protorecv-qsend-qlocaladdressforeignaddressstatepid/programnametcp000.0.0.0:256740.0.0.0:*listen6759/beam.smptcp000.0.0.0:43690.0.0.0:*listen3779/epmdtcp000.0.0.0:220.0.0.0:*listen1348/sshdtcp000.0.0.0:156720.0.0.0:*listen3598/beam.smptcp000.0.0.0:156730.0.0.0:*listen5679/beam.smptcp00127.0.0.1:250.0.0.0:*listen2065/mastertcp000.0.0.0:156740.0.0.0:*listen6759/beam.smptcp000.0.0.0:256720.0.0.0:*listen3598/beam.smptcp000.0.0.0:256730.0.0.0:*listen5679/beam.smptcp600:::5674:::*listen6759/beam.smptcp600:::3306:::*listen1418/mysqldtcp600:::4369:::*listen3779/epmdtcp600:::22:::*listen1348/sshdtcp600::1:25:::*listen2065/mastertcp600:::5672:::*listen3598/beam.smptcp600:::5673:::*listen5679/beam.smp
这样的话你可以通过:http://192.168.161.161:15672/#/,http://192.168.161.161:15673/#/ ,http://192.168.161.161:15674/#/ 访问web查看相关节点是否真的存在。下面就是如何实现集群操作了。
集群操作
把节点rabbit1 加入 rabbit中
1.停止第二个节点的应用程序
./rabbitmqctl-nrabbit1@master01stop_app
2.重新设置第二个节点的元数据和状态为清空状态。
./rabbitmqctl-nrabbit1@master01reset
3.加入第一节点
./rabbitmqctl-nrabbit1@master01join_clusterrabbit@localhost
4.重新启动第二节点
./rabbitmqctl-nrabbit1@master01start_app
现在再次登陆web界面你可以到web端看到集群已经存在了!!!
把节点rabbit2 加入 rabbit中
同如上步骤的1234:其中注意点是,如果你需要设置第三个集群节点为内存模式,而非磁盘模式,可以参考当前版本的命令提示,在最后加上 –ram 参数
添加第三节点的完整命令
./rabbitmqctl-nrabbit2@master01stop_app./rabbitmqctl-nrabbit2@master01reset./rabbitmqctl-nrabbit2@master01join_clusterrabbit@master01./rabbitmqctl-nrabbit2@master01start_app
注意:如上第三步,如果你要设置第三个集群节点为内存模式,而非磁盘模式,那就需要 --ram
./rabbitmqctl-nrabbit2@master01join_clusterrabbit@master01--ram
查看集群状态
./rabbitmqctlcluster_status-nrabbit@localhost[root@master01sbin]#./rabbitmqctlcluster_status-nrabbit@localhostclusterstatusofnoderabbit@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在安装后可能会出现无法启动,如:
applyingpluginconfigurationtorabbit@192...failed.*couldnotcontactnoderabbit@192.changeswilltakeeffectatbrokerrestart.*options:--online-failifbrokercannotbecontacted.--offline-donottrytocontactbroker.error:unabletoconnecttonoderabbit@192:nodedowndiagnostics===========attemptedtocontact:[rabbit@192]rabbit@192:*unabletoconnecttoepmd(port4369)on192:badarg(unknownposixerror)currentnodedetails:-nodename:'rabbitmq-cli-97@192'-homedir:/var/lib/rabbitmq-cookiehash:rb2cnggdqm+k5+jq1wj6vg==error:unabletoconnecttonoderabbit@192:nodedown
解决办法
vi/etc/rabbitmq/rabbitmq-env.conf
在文件中写入“nodename=rabbit@localhost”
,保存。
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
CentOs中怎么搭建RabbitMQ3.6单机多实例服务的详细内容,希望对您有所帮助,信息来源于网络。