RabbitMQ安装及集群搭建
1、在 172.16.0.123、172.16.0.124、172.16.0.125 三个节点配置换进变量:
1.下载erlang
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v22.0.1/erlang-22.0.1-1.el7.x86_64.rpm
2.安装erlang
(1)正常安装
yum install -y erlang-22.0.1-1.el7.x86_64.rpm
(2)如果发生冲突需要强制安装,强制安装erlang
rpm -ivh --force erlang-22.0.1-1.el7.x86_64.rpm
3.查看erlang包
rpm -q erlang
4.卸载erlang(注意卸载erlang同时也会卸载rabbitmq-server)
yum remove -y erlang
2、在 172.16.0.123、172.16.0.124、172.16.0.125 三个节点安装rabbitmq:
1.下载rabbitmq
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.15/rabbitmq-server-3.7.15-1.el7.noarch.rpm
2.安装rebbitmq
yum install -y rabbitmq-server-3.7.15-1.el7.noarch.rpm
3.配置rabbitmq
(1)创建配置文件
vim /etc/rabbitmq/rabbitmq.config
(2)编辑内容如下
[
{rabbit,[{tcp_listeners, [{"0.0.0.0", 5672}]}]},
{rabbitmq_stomp, [{tcp_listeners, [15673]}]},
{rabbitmq_web_stomp, [{tcp_listeners, [15674]}]}
].
(3)rabbitmq默认创建的用户guest,密码也是guest,这个用户默认只能是本机访问,localhost或者127.0.0.1
4.启动服务
rabbitmq-server start
5.启用web界面
rabbitmq-plugins enable rabbitmq_management
访问http://127.0.0.1:15672即可看到管理界
6.添加用户
#添加帐号:admin 密码:123456
rabbitmqctl add_user admin 123456
#赋予其administrator角色
rabbitmqctl set_user_tags admin administrator
#设置权限
rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
#查看权限列表
rabbitmqctl list_permissions
7.js调用RabbitMQ
文档 https://www.rabbitmq.com/web-stomp.html
#查看插件状态
rabbitmq-plugins list
#启用
rabbitmq-plugins enable rabbitmq_web_stomp
#关闭
rabbitmq-plugins disable rabbitmq_web_stomp
8.查看相关端口状态
netstat -nplt | grep beam
9.查看服务状态
service rabbitmq-server status
10.开机启动
chkconfig rabbitmq-server on
11.官方文档
http://www.rabbitmq.com/configure.html#configuration-file
http://www.rabbitmq.com/management.html
http://www.rabbitmq.com/configure.html
http://www.rabbitmq.com/networking.html
3、然后开启 RabbitMQ 监控插件:
rabbitmq-plugins enable rabbitmq_management
4、 为了方便机器间的相互访问,三台主机都执行 vim /etc/hosts,添加下边的配置(注意修改成自己设备的IP):
修改用户名:
hostname node1
hostname node2
hostname node3
172.16.0.123 node1
172.16.0.124 node2
172.16.0.125 node3
5、停止RabbitMQ 服务
$ service rabbitmq-server stop
Redirecting to /bin/systemctl stop rabbitmq-server.service
6、设置 Erlang Cookie
(1)设置不同节点间同一认证的Erlang Cookie
这里将 node1 的该文件复制到 node2、node3,由于这个文件权限是 400为方便传输,先修改权限,非必须操作,所以需要先修改 node2、node3 中的该文件权限为 777
$ chmod 777 /var/lib/rabbitmq/.erlang.cookie
$ scp /var/lib/rabbitmq/.erlang.cookie node2:/var/lib/rabbitmq/
$ scp /var/lib/rabbitmq/.erlang.cookie node3:/var/lib/rabbitmq/
(2)然后将 node1 中的该文件拷贝到 node2、node3,最后将权限和所属用户/组修改回来
$ chmod 400 /var/lib/rabbitmq/.erlang.cookie
$ chown rabbitmq /var/lib/rabbitmq/.erlang.cookie
$ chgrp rabbitmq /var/lib/rabbitmq/.erlang.cookie
(3)会提示输入yes 和 密码
(4)使用 -detached 参数运行各节点
$ rabbitmqctl stop
$ rabbitmq-server -detached
(5)组成集群
按照顺序执行 先node2,node3
node2 $ rabbitmqctl stop_app # 停止rabbitmq服务
node2 $ rabbitmqctl join_cluster rabbit@node1 # node2和node1构成集群, node2必须能通过node1的主机名ping通
node2 $ rabbitmqctl start_app # 开启rabbitmq服务
node3 $ rabbitmqctl stop_app # 停止rabbitmq服务
node3 $ rabbitmqctl join_cluster rabbit@node1 # node3和node1构成集群, node2必须能通过node1的主机名ping通
node3 $ rabbitmqctl start_app # 开启rabbitmq服务
此时 node2 与 node3 也会自动建立连接
(6)如果执行rabbitmqctl join_cluster rabbit@node1报错
报错:
Error: unable to perform an operation on node 'rabbit@node1'
解决:
于是修改rabbitmq-env.conf配置文件(rabbitmq默认路径:/etc/rabbitmq/rabbitmq-env.conf)
在集群每台机器上执行 vim /etc/rabbitmq/rabbitmq-env.conf(该文件默认不存在,需手动添加),添加配置如下
[root@node1]# vim /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_NODENAME=rabbit@node1
RABBITMQ_NODENAME=rabbit@node2
RABBITMQ_NODENAME=rabbit@node3
每台机器配置好后,执行ps -aux|grep mq 查看所有rabbitmq进程,然后kill -9 杀死所有RabbitMQ进程
(7)重启RabbitMQ服务加入集群
service rabbitmq-server start
可能会报错:Job for rabbitmq-server.service failed because the control process exited with error code. See “systemctl status rabbitmq-server.service” and “journalctl -xe” for details.
如果报错执行:nohup rabbitmq-server start &
(8)重新执行(5)组成集群
如果没有报错,rabbitmq集群搭建完成。
(9)查看集群状态
[root@slave1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit-node2 ...
[{nodes,[{disc,['rabbit@rabbit-node1','rabbit@rabbit-node2',
'rabbit@rabbit-node3']}]},
{running_nodes,['rabbit@rabbit-node3','rabbit@rabbit-node1',
'rabbit@rabbit-node2']},
{cluster_name,<<"rabbit@slave2">>},
{partitions,[]},
{alarms,[{'rabbit@rabbit-node3',[]},
{'rabbit@rabbit-node1',[]},
{'rabbit@rabbit-node2',[]}]}]
(10)此时 node2 与 node3 也会自动建立连接;如果要使用内存节点,则可以使用
node2 # rabbitmqctl join_cluster --ram rabbit@node1
7、将节点从总控移除
将node3节点从node1移除
rabbitmqctl -n rabbit@node1 forget_cluster_node rabbit@node3
8、这时我们打开任意一个节点的Web管理界面,显示如下,看到集群已经配置完成了: