一、概述
RabbiMQ是用Erang开发的,集群非常方便,因为Erlang天生就是一门分布式语言,但其本身并不支持负载均衡。
RabbiMQ模式
RabbitMQ模式大概分为以下三种: (1)单一模式。 (2)普通模式(默认的集群模式)。 (3) 镜像模式(把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA方案,在对业务可靠性要求较高的场合中比较适用)。 要实现镜像模式,需要先搭建一个普通集群模式,在这个模式的基础上再配置镜像模式以实现高可用。
RabbiMQ特点
RabbitMQ的集群节点包括内存节点、磁盘节点。RabbitMQ支持消息的持久化 也就是数据写在磁盘上,最合适的方案就是既有内存节点,又有磁盘节点。
二、正式搭建
环境
操作系统 | ip | 主机名 | 配置 |
---|---|---|---|
centos 6.9 | 192.168.31.7 | mq_01 | 1核2g |
centos 6.9 | 192.168.31.216 | mq_02 | 1核2g |
centos 6.9 | 192.168.31.214 | mq_03 | 1核2g |
注意,这里三台服务器都连接上互联网,另外RabbitMQ集群节点必须在同一网段里,如果是跨广域网,效果会变差。
配置hosts文件
修改主机名
更改三台MQ节点的计算机名分别为mq_01、mq_02 和mq_03,然后修改hosts配置文件
代码语言:javascript复制vim /etc/hostname
内容如下:
代码语言:javascript复制mq_01
其他两台操作相同,内容不一样。
增加hosts记录
代码语言:javascript复制vi /etc/hosts
内容如下:
代码语言:javascript复制192.168.31.7 mq_01
192.168.31.216 mq_02
192.168.31.214 mq_03
其他两台操作相同,内容也是一样。
为了让主机名永久生效,重启3台服务器。
代码语言:javascript复制reboot -f
配置yum源
3台服务器都安装一下
代码语言:javascript复制yum install -y epel-release
安装erlang
3台服务器都安装一下
代码语言:javascript复制wget https://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el6.x86_64.rpm
yum install -y socat
rpm -ivh erlang-19.0.4-1.el6.x86_64.rpm
安装rabbitmq-server
3台服务器都安装一下
代码语言:javascript复制wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.8/rabbitmq-server-3.6.8-1.el6.noarch.rpm
rpm -ivh rabbitmq-server-3.6.8-1.el6.noarch.rpm
创建目录
3台服务器都执行一下
代码语言:javascript复制mkdir -p /data/log/rabbitmq
mkdir -p /data/rabbitmq/mnesia
chown -R rabbitmq.rabbitmq -R /data/log/rabbitmq /data/rabbitmq/mnesia
创建配置文件
3台服务器都执行一下
代码语言:javascript复制vi /etc/rabbitmq/rabbitmq-env.conf
内容如下:
代码语言:javascript复制RABBITMQ_LOG_BASE=/data/log/rabbitmq
RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia
启动rabbit
3台服务器都执行一下
代码语言:javascript复制/etc/init.d/rabbitmq-server start
拷贝erlang.cookie
Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群景象。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie中,文件是400的权限。所以必须保证各节点cookie一致,不然节点之间就无法通信。
登录到mq_01节点,查看erlang.cookie
代码语言:javascript复制# cat /var/lib/rabbitmq/.erlang.cookie
RUIRJRRZDNYEHCCWITRS
用scp的方式将mq_01节点的.erlang.cookie的值复制到其他两个节点中。
代码语言:javascript复制scp /var/lib/rabbitmq/.erlang.cookie root@192.168.31.216:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@192.168.31.214:/var/lib/rabbitmq/.erlang.cookie
设置权限,另外2台都执行一下
代码语言:javascript复制chown -R rabbitmq.rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie
安装插件
RabbitMQ提供了一个非常友好的图形化监控页面插件(rabbitmq_management),让我们可以一目了然看见Rabbit的状态或集群状态。
3台服务器都执行一下
代码语言:javascript复制rabbitmq-plugins enable rabbitmq_management
查看端口
代码语言:javascript复制netstat -napt|grep 5672
加入mq01节点集群中
将mq_02、mq_03作为内存节点加入mq01节点集群中
在mq_02、mq_03执行如下命令:
停掉rabbit应用
代码语言:javascript复制rabbitmqctl stop_app
加入到磁盘节点
代码语言:javascript复制rabbitmqctl join_cluster --ram rabbit@mq_01
启动rabbit应用
代码语言:javascript复制rabbitmqctl start_app
(1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,mq02和mq03是内存节点,mq01是磁盘节点。 (2)如果要使mq02、mq03都是磁盘节点,去掉--ram参数即可。 (3)如果想要更改节点类型,可以使用命令rabbitmqctl change_cluster_node_type disc(ram),前提是必须停掉rabbit应用
查看集群状态
3台节点,都执行一下
代码语言:javascript复制rabbitmqctl cluster_status
添加管理用户
3台节点,都执行一下
代码语言:javascript复制rabbitmqctl add_user admin 'admin123'
rabbitmqctl set_permissions -p / admin . . .
rabbitmqctl set_user_tags admin administrator
解释:
第一行命令表示,创建用户admin,密码为admin123
第二行命令表示,admin用户对virtual host为'/'所有资源,具有配置,写,读权限。注意:后面3个点表示这3个权限。
第三行命令表示,为admin用户分配管理员权限。
登录rabbitmq web管理控制台
打开浏览器输入http://192.168.31.7:15672,
用户名:admin,密码:admin123
登录后出现如图所示的界面。
本文参考链接:
https://www.cnblogs.com/shihaiming/p/11014257.html