Centos7搭建高可用的RabbitMq集群 电脑版发表于:2021/2/8 22:05 ![](https://img.tnblog.net/arcimg/hb/585b0f1ffa7f4c2095baa20c175b32a0.png) >#Centos7搭建高可用的RabbitMq集群 [TOC] 环境准备 ------------ tn>在三台`CentOS7`中搭建好`Rabbitmq`,如果不会搭建请参考:https://www.tnblog.net/hb/article/details/5594 ![](https://img.tnblog.net/arcimg/hb/7b35f5ac94124783b957fe751073ed67.png) 添加域名地址 ------------ tn>我们通过`ifconfig`查看这三台系统的`ip`地址,并将他们的关系列了一张表出来 | 系统名 | 描述 | | ------------ | ------------ | | `10.211.55.4` | 为`Master`服务器,名称为`rabbitmqmaster` | | `10.211.55.6` | 为`Slave`服务器,名称为`slaverabbitmq2` | | `10.211.55.5` | 为`Slave`服务器,名称为`slaverabbitmq1` | ![](https://img.tnblog.net/arcimg/hb/63780925e4b64d708e6bce12491f8290.png) tn>所以我们将他们通过`hosts`的方式更好的做出区分。通过`vim /etc/hosts`的方式对每一台机器的末尾都添加如下代码(请注意这里要填写的是你自己的`ip`,添加好后不会立即生效需要执行`reboot`命令重启后才能生效)。 ```bash 10.211.55.4 rabbitmqmaster 10.211.55.5 rabbitmqslave1 10.211.55.6 rabbitmqslave2 ``` ![](https://img.tnblog.net/arcimg/hb/377cc8b303c5405593ed029dfb345d35.png) 关闭防火墙 ------------ tn>三台机子重启后我们会发现防火墙都是,开着的因此我们需要通过`systemctl stop firewalld.service`将防火墙给关闭掉。(我这里防火墙都管好了) ![](https://img.tnblog.net/arcimg/hb/3f1e72d08ea94c30bd731d24572a71b9.png) 设置Erlang Cookie ------------ tn>在UNIX系统上,cookie通常位于`/var/lib/rabbitmq/.erlang.cookie`(由服务器使用)和`$HOME/.erlang.cookie`(由CLI工具使用)中。请注意,由于`$HOME`的值因用户而异,因此有必要为每个将使用CLI工具的用户放置cookie文件的副本。这适用于`非特权用户`和`root`。我这里呢是用的`root`用户所以`Cookie`在`/root/.erlang.cookie`。(即使你把这个文件给删除了运行`rabbitmq-server`也会再次生成新的`.erlang.cookie`的) ![](https://img.tnblog.net/arcimg/hb/c55977937ee8468ea756c1b3408025a5.png) tn>我们在每一台机器上都去查看一下我们的`.erlang.cookie`发现他们并不相同,但`Rabbitmq`要求集群中的每个RabbitMQ节点都使用相同的`.erlang.cookie`值。所以我们这里将所有的节点修改为`rabbitmqmaster`的`cookie`。 ![](https://img.tnblog.net/arcimg/hb/f775729a16d242c38c827f0c7eefd26e.png) 修改cookie权限 ------------ tn>将三台系统上的`.erlang.cookie`的权限改为`400`。 ```bash chmod 400 /root/.erlang.cookie ``` 集群管理 ------------ >### 熟悉命令 tn>在这之前我希望大家能了解一下如下这些命令,帮助你更好的掌握集群的管理。(在这里我们最好在源路径下进行操作) | 命令 | 描述 | | ------------ | ------------ | | `rabbitmqctl cluster_status` | 查看集群状态 | | `rabbitmqctl join_cluster rabbit@rabbit2` | 从集群中添加`rabbit@rabbit2`节点(默认是[disk]磁盘节点) | | `rabbitmqctl join_cluster --ram rabbit@rabbit1` | 从集群中删除`rabbit@rabbit1`内存[ARM]节点 | | `rabbitmqctl forget_cluster_node rabbit@rabbit1` | 从集群中删除`rabbit@rabbit1`节点 | | `rabbitmqctl change_cluster_node_type disc` | 在集群中把当前节点变成一个磁盘[disk]节点 | | `rabbitmqctl change_cluster_node_type ram` | 在集群中把当前节点变成一个内存[ARM]节点 | | `Rabbitmq-diagnostics check_running` | 运行状况检查 | | `Rabbitmq-diagnostics ping` | 运行状况检查 | >### 启动Master节点 tn>好接下来就好办事了。在`rabbitmqmaster`机器上在`源目录下`中通过`./rabbitmq-server`命令启动`RabbitMq`,然后打开另外一个窗口也在`源目录下`用`./rabbitmqctl cluster_status`查看集群情况,以及集群节点的名称。 ![](https://img.tnblog.net/arcimg/hb/1108e9e140da4b27aeda0edfabf5c6a4.png) tn>我们看到集群节点的名称为`rabbit@rabbitmqmaster`,但现在还没有`node`节点。 >### 添加Slave节点 tn>在`源目录`下通过`./rabbitmq-server`命令启动`RabbitMq`。然后打开另外一个窗口执行`./rabbitmqctl stop`命令停止节点,执行`./rabbitmqctl join_cluster rabbit@rabbitmqmaster`加入到集群节点中去,最后通过`./rabbitmqctl start`启动`Rabbitmq` ![](https://img.tnblog.net/arcimg/hb/fa3828b850074d4da1974fb137e4de00.png) tn>然后按照如上步骤在每一台从机上面进行添加就好了。 ![](https://img.tnblog.net/arcimg/hb/ecadaca968cf44b5a7ac78df172d7d5b.png) >### 添加用户 ```bash # 创建一个用户名为bob,密码为bob的用户 $ ./rabbitmqctl add_user bob bob # 设置用户权限为超级管理员 $ ./rabbitmqctl set_user_tags bob administrator # 授权远程访问 $ ./rabbitmqctl set_permissions -p / admin "." "." ".*" ``` >### 最后在Web上查看 tn>访问你的集群IP地址:{IP}:15672 ![](https://img.tnblog.net/arcimg/hb/16f1818238c64ac29522f4fdc872dd8f.png) tn>我们发现他们都是`disc`磁盘存储,所以我们也可以通过命令来进行修改本机在集群中是什么样的存储类型 >### 添加`ARM`存储 ```bash ./rabbitmqctl stop ./rabbitmqctl join_cluster --arm rabbit@rabbitmqmaster ./rabbitmqctl start ``` >### 修改本地为`ARM`存储 tn>在确保该集群节点没有被关闭的情况下执行如下命令。 ```bash ./rabbitmqctl stop ./rabbitmqctl change_cluster_node_type ram ./rabbitmqctl start ``` ![](https://img.tnblog.net/arcimg/hb/2c3f3907ae6f4dc8a0fde5d05af4d7f5.png)