简介:
RabbitMQ是采用Erlang语言实现AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ等等。
RabbitMQ是目前非常热门的一款消息中间件,很多行业都在使用这个消息中间件,RabbitMQ凭借其高可靠、易扩展、高可用及丰富的功能特性收到很多人的青睐。
一、软件下载:
下载Erlang 百度云提取码: 864m
下载Rabbitmq 源码包 百度云提取码: qwih
二、安装环境:
node1 172.31.8.8 system Centos 7 —- node3 172.31.8.107 system Centos 7
node2 172.31.8.13 system Centos 7 —- node4 172.31.8.75 system Centos 7
软件版本:
Erlang 21.3
rabbitmq 3.7.7
三、单点安装(以下操作需要在其他四个节点重复执行)
1、分别编辑四台机器的/etc/hosts 文件,增加以下内容
172.31.8.8 node1
172.31.8.13 node2
172.31.8.107 node3
172.31.8.75 node4
2、安装依赖包
yum install -y *epel* gcc-c++ unixODBC unixODBC-devel openssl-devel ncurses-devel
3、编译安装 Erlang
[root@node1 ~]# tar xf otp_src_21.3.tar.gz
[root@node1 ~]# cd otp_src_21.3
[root@node1 otp_src_21.3]# ./configure --prefix=/usr/local/bin/erlang --without-javac
[root@node1 otp_src_21.3]# make && make install
[root@node1 otp_src_21.3]# echo "export PATH=$PATH:/usr/local/bin/erlang/bin:/usr/local/bin/rabbitmq_server-3.6.5/sbin" >> /etc/profile
[root@node1 otp_src_21.3]# source /etc/profile
查看erlang 是否安装成功,出现以下输出即证明erlang已经安装成功
4、安装Rabbitmq
[root@node1 ~]# tar xf rabbitmq-server-generic-unix-3.7.7.tar
[root@node2 ~]# mv rabbitmq_server-3.7.7 /usr/local/rabbitmq-3.7.7
[root@node2 ~]# cd /usr/local/rabbitmq-3.7.7/
[root@node1 ~]# echo "export PATH=$PATH:/usr/local/rabbitmq-3.7.7/sbin" >> /etc/profile
[root@node1 ~]# source /etc/profile
[root@node1 ~]# rabbitmq-plugins enable rabbitmq_management ---打开管理页面插件
[root@node1 ~]# rabbitmq-server -detached --后台启动服务
[root@node1 ~]# rabbitmqctl add_user admin 123456 --增加用户名admin,密码123456
[root@node1 ~]# rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
[root@node1 ~]# rabbitmqctl set_user_tags admin administrator --设置用户admin为管理员
打开web页面,出现以下页面即安装成功
node1
node2
四、部署集群:
1、 修改 .erlang.cookie文件,node1、node4节点内容改为一致
[root@node1 ~]# chmod 400 .erlang.cookie --设置.erlang.cookie文件权限,为了防止添加集群失败四个节点均需要调整为一致
[root@node1 ~]# scp .erlang.cookie root@172.31.8.13:/root/
[root@node1 ~]# scp .erlang.cookie root@172.31.8.107:/root/
[root@node1 ~]# scp .erlang.cookie root@172.31.8.75:/root/
添加集群失败报错示例: 出现此信息可根据提示进行排查
2、 替换完.erlang.cookie文件,需要重启各个节点的rabbitmq服务
node1
[root@node1 ~]# kill -9 PID
[root@node1 ~]# rabbitmq-server -detached
node2
[root@node2 ~]# kill -9 PID
[root@node2 ~]# rabbitmq-server -detached
node3
[root@node3 ~]# kill -9 PID
[root@node3 ~]# rabbitmq-server -detached
node4
[root@node4 ~]# kill -9 PID
[root@node5 ~]# rabbitmq-server -detached
3、添加节点到集群,将node1节点作为主节点
在 node2 节点执行以下命令:
[root@node2 ~]# rabbitmqctl stop_app
[root@node4 ~]# rabbitmqctl join_cluster rabbit@node1 --默认为disc节点,如果需要指定节点角色,可以添加--ram/--disc参数
[root@node4 ~]# rabbitmqctl start_app
[root@node4 ~]# rabbitmqctl cluster_status
以上命令在node3、4节点重复执行
执行结果:
打开web管理页面查看状态
到此Rabbitmq集群已经安装完毕,四个节点均已正常运行
五、集群管理
1、假设Rabbitmq-node2节点需要退出集群
在node2节点执行:
rabbitmqctl stop_app --停止rabbitmq服务
rabbitmqctl reset --将RabbitMQ node还原到最初状态.包括从所在群集中删除此node,从管理数据库中删除所有配置数据,如已配置的用户和虚拟主机,以及删除所有持久化消息.
rabbitmqctl start_app
在主节点(node1)执行
rabbitmqctl forget_cluster_node rabbit@node2 --此命令会从集群中删除rabbit@node2节点.
2、修改node2、node4节点为内存节点,在node2、4节点执行:
[root@node2 ~]# rabbitmqctl stop_app --停止rabbitmq服务
[root@node2 ~]# rabbitmqctl change_cluster_node_type ram --修改节点为内存节点
[root@node2 ~]# rabbitmqctl start_app --启动服务
[root@node2 ~]# rabbitmqctl cluster_status --查看集群状态
执行结果可以看到node2节点已经修改为RAM节点,disc节点为node1、3、4
再修改node4节点:
node2、node4节点已经成功修改为内存节点,现在集群就是双内存、双硬盘节点,从控制台查看更为直观:
更多管理命令可参考文档:
https://blog.csdn.net/wulex/article/details/64127224