==安装过程需要用到root账户权限(sudo),请先新建用户赋予sudo权限==
==确保可以打开以下端口(如果未开放可能导致rabbitmq无法运行)==
端口 | 描述 |
---|---|
4369 | RabbitMQ节点和CLI工具使用的对等发现服务 |
5672 | AMQP 0-9-1和1.0客户端使用没有和使用TLS |
25672 | 用于节点间和CLI工具通信, 除非确实需要这些端口上的外部连接(例如、集群) 否则不应公开这些端口。有关详情, 请参阅网络指南 |
15672 | HTTP API客户端,管理UI和rabbitmqadmin(仅当启用了管理插件时) 。如果不使用web-ui,此端口不需要开放 |
# root用户登录
# 创建用户组
groupadd rabbit
# 创建用户
useradd rabbit -g rabbit
# 为用户创建密码
passwd rabbit
# 修改suduers文件,赋予用户sudo权限
# root用户直接执行
visudo
# 在 "root ALL=(ALL) ALL" 这行下面新增一行
rabbit ALL=(ALL) ALL
# 保存退出
:wq
自行去下载,下载时需要注意版本的支持 ,下载地址如下
https://github.com/rabbitmq/erlang-rpm/releases
https://github.com/rabbitmq/rabbitmq-server/releases
在安装RabbitMQ之前,必须安装受支持的Erlang / OTP 版本 ,这里我们使用已经下载好的rpm包。将erlang-21.0.3-1.el7.centos.x86_64.rpm放置到服务器上之后,使用ROOT用户安装
# 这里使用root用户
# 到根目录
cd /
# 新建文件夹,用来放置安装包,将下载的安装包放入setup文件夹
mkdir setup
# 切换 rabbit 用户
sudo yum install -y erlang-21.0.3-1.el7.centos.x86_64.rpm
# 安装完成之后会显示 Complete!
# 同样在setup目录下 使用rabbit用户执行
sudo yum install -y rabbitmq-server-3.7.7-1.el7.noarch.rpm
# 显示 Complete! 安装完成
使用root用户
# 默认情况下,在安装RabbitMQ服务器软件包时,服务器不会作为守护程序启动。在系统引导时,默认情况下以管理员身份运行时启动守护程序
systemctl enable rabbitmq-server.service
# 启动rabbitMQ
/sbin/service rabbitmq-server start
rabbitmq 在运行时,会新建一个rabbitmq系统用户。rabbitmq由rabbitmq用户运行。
# 查看rabbitMQ 状态
rabbitmqctl status
==NOTE: A、B、C三台机器均需执行。==
使用root用户登录
RabbitMQ节点使用域名称相互通信.
若主机名不可修改,请参考http://www.rabbitmq.com/clustering.html#hostname-resolution-requirement进行配置
登录A机器
# 修改 hosts 文件 ,新增
vi /etc/hosts
A机器IP rabbitmq-node1
B机器IP rabbitmq-node2
C机器IP rabbitmq-node3
# 修改 hostname 文件,新增 abbitmq-node1
vi /etc/hostname
rabbitmq-node1
# 修改 network 文件, 新增 HOSTNAME=abbitmq-node1
vi /etc/sysconfig/network
HOSTNAME=abbitmq-node1
登录B机器
# 修改 hosts 文件 ,新增
vi /etc/hosts
A机器IP rabbitmq-node1
B机器IP rabbitmq-node2
C机器IP rabbitmq-node3
# 修改 hostname 文件,新增 abbitmq-node2
vi /etc/hostname
rabbitmq-node2
# 修改 network 文件, 新增 HOSTNAME=abbitmq-node2
vi /etc/sysconfig/network
HOSTNAME=abbitmq-node2
登录C机器
# 修改 hosts 文件 ,新增
vi /etc/hosts
A机器IP rabbitmq-node1
B机器IP rabbitmq-node2
C机器IP rabbitmq-node3
# 修改 hostname 文件,新增 abbitmq-node3
vi /etc/hostname
rabbitmq-node2
# 修改 network 文件, 新增 HOSTNAME=abbitmq-node3
vi /etc/sysconfig/network
HOSTNAME=abbitmq-node3
修改完之后重启机器
使用A机器的cookie文件,将A机器的cookie文件复制到B机器的 /var/lib/rabbitmq/目录下
cookie通常位于 /var/lib/rabbitmq/.erlang.cookie
此文件使用 ll -a可以观察到。
# 在B机器执行
# 停止服务
rabbitmqctl stop_app
# 重置节点
rabbitmqctl reset
------
ps:
如果在操作过程中报错,请使用 ps -ef| grep rabbitmq 命令查看rabbitmq相关进程,并使用kill结束进程。重新操作一遍。
------
# 在A机器执行
[root@localhost rabbitmq]# cd /var/lib/rabbitmq/
[root@localhost rabbitmq]# ll -a
[root@localhost rabbitmq]# scp .erlang.cookie B机器root用户@B机器IP:/var/lib/rabbitmq/
# 输入B机器的root用户密码
B机器root用户@B机器IP's password:
.erlang.cookie
[root@localhost rabbitmq]# scp .erlang.cookie C机器root用户@C机器IP:/var/lib/rabbitmq/
# 输入C机器的root用户密码
C机器root用户@C机器IP's password:
.erlang.cookie
NOTE: 注意.erlang.cookie文件所属用户组,所属用户,应都为rabbitmq
将B机器rabbitmq加入A机器集群
在B机器执行以下命令:
rabbitmqctl join_cluster rabbit@rabbitmq-node1
在C机器执行
rabbitmqctl join_cluster rabbit@rabbitmq-node1
高可用配置
执行此步需先新建vhost 为AAA的虚拟机。
# 在A机器上执行此命令,给vhost为 AAA 的所有的队列配置镜像队列
rabbitmqctl set_policy -p 'AAA' --priority 9 --apply-to all ecas-ha "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
A机器执行即可
当服务器首次开始运行会初始化一个账户
为了安全起见,要删除这个默认用户,并新建使用的用户。(命令参考)
删除guest用户
rabbitmqctl delete_user guest
新建用户 aaa 密码为 aaa
rabbitmqctl add_user aaa aaa
新建名为 ecas 的虚拟机
rabbitmqctl add_vhost aaa
授予aaa用户访问 aaa虚拟机的权限
rabbitmqctl set_permissions -p aaa aaa".*" ".*" ".*"
查看有权限访问的用户
rabbitmqctl list_permissions -p ecas
如果需要有后台操作管理rabbitmq的需要,执行以下命令
==NOTE: 此操作需要开放15672 端口==
rabbitmq-plugins enable rabbitmq_management
开启管理界面之后,还需要为用户设置可访问管理界面的权限
# 这里赋予用户 aaa管理员的权限
rabbitmqctl set_user_tags aaa administrator
vi rabbitRun.sh
#!/bin/bash
echo "The rabbitmq will be runs! waiting~~~~~~~~~~~~"
/sbin/service rabbitmq-server start
:wq
chmod +x ./rabbitRun.sh
vi /etc/rc.d/rc.local
sh 脚本所在路径/rabbitRun.sh
:wq
备份方法这里采用人工通过web-ui手动备份元数据的的方式(即 用户,vhost,队列,交换,绑定,运行时参数 ),如果未开启web管理界面请参考更多备份方式,如果要备份消息请参考官网。
与spring整合使用spring提供的spring-amqp
导入依赖,在pom中添加
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-amqpartifactId>
dependency>
在resources新建下新建rabbit-context.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<rabbit:connection-factory id="connectionFactory"
addresses="A机器ip:5672,B机器IP:5672,C机器ip:5672" username="ecas"
password="ecas" virtual-host="ecas" channel-cache-size="50" />
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />
</beans>
如果是springBoot,需要在Application.java 中添加
@ImportResource("classpath:rabbit-context.xml")
如果是spring,需要在web.xml中声名rabbit-context.xml
具体的用法以及相关设置请参考http://spring.io/projects/spring-amqp