基于erlang的分布式特性,RabbitMQ很容易搭建其集群模式。RabbitMQ集群有普通模式和镜像模式两种,但普通模式的可靠性远差于镜像模式;另外,RabbitMQ的消息存储方式也有内存型和磁盘型两种,磁盘型适用于持久型消息,而内存型在重启应用后则消息被清空,故本文只讲述RabbitMQ磁盘型镜像模式集群的搭建方法。
系统环境
基于CentOS 7.2操作系统部署。
服务器IP | 主机名 | 应用 |
10.10.100.101 | RABBITMQ-A | erlang RabbitMQ |
10.10.100.102 | RABBITMQ-B | |
10.10.100.103 | RABBITMQ-C |
安装erlang
点击此处访问Erlang官网。
# 下载并安装erlang cd /opt wget http://erlang.org/download/otp_src_21.0.tar.gz tar xvf otp_src_21.0.tar.gz cd otp_src_21.0 ./configure --prefix=/opt/erlang make && makeinstall # 修改系统环境变量 vim /etc/profile
export ERLANG_HOME=/opt/erlang export PATH=$PATH:$ERLANG_HOME/bin
安装RabbitMQ
阅读RabbitMQ官网提供的yum源配置方法。
# 导入rabbitmq签证 rpm --import https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc # 修改rabbitmq.repo vim /etc/yum.repos.d/rabbitmq.repo
[bintray-rabbitmq-server] name=bintray-rabbitmq-rpm baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7/ gpgcheck=0 repo_gpgcheck=0 enabled=1
# 安装rabbitmq yum -y install rabbitmq-server
配置RabbitMQ:
# 导入插件rabbitmq_management rabbitmq-plugins enable rabbitmq_management # 同步cookie文件 chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie for i in 2 3; do scp /var/lib/rabbitmq/.erlang.cookie root@10.10.100.10$i:/var/lib/rabbitmq; done
新添加的节点也必须使用原集群的erlang cookie,erlang cookie文件位置:
- rpm安装方式 → /var/lib/rabbitmq/.erlang.cookie
- 编译安装方式 → $home/.erlang.cookie
配置RabbitMQ集群
配置RabbitMQ用户
在所有节点上添加用户,并加入administrator用户组:
rabbitmqctl add_user rbtmqadmin Rabbitmq@123 rabbitmqctl set_permissions -p "/" rbtmqadmin ".*" ".*" ".*" rabbitmqctl set_user_tags rbtmqadmin administrator
完成后,即可登录web界面http://10.10.100.101:15672。
提醒:RabbitMQ的默认用户“guest”用于集群检测,一般情况下不要做任何修改。
通过-detached启所有节点
rabbitmqctl stop rabbitmq-server -detached rabbitmqctl cluster_status
创建集群
从第二个节点开始,依次加入到第一个节点中,创建RabbitMQ集群。
rabbitmqctl stop_app rabbitmqctl join_cluster rabbit@RABBITMQ-A rabbitmqctl start_app
设置镜像策略
在web端创建虚拟机(coreserver)并授予rbtmqadmin和guest用户权限:
Admin → Virtual Hosts → Add a new virtual host
然后,在终端执行如下命令:
rabbitmqctl set_policy -p coreserver ha-all "^" '{"ha-mode":"all"}'
至此,RabbitMQ集群已经搭建成功,如果需要搭建HA,可参考haproxy相关文章,以下为关键配置:
listen rabbitmq_admin bind 10.10.100.100:15672 server node1 10.10.100.101:15672 server node2 10.10.100.102:15672 server node3 10.10.100.103:15672 listen rabbitmq_cluster bind 10.10.100.100:5672 option tcplog mode tcp timeout client 1h timeout server 1h option clitcpka balance roundrobin server node1 10.10.100.101:5672 check inter 5s rise 2 fall 3 server node2 10.10.100.102:5672 check inter 5s rise 2 fall 3 server node3 10.10.100.103:5672 check inter 5s rise 2 fall 3
相关知识点
镜像策略参数说明
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
-p Vhost | 可选参数,对指定vhost下的queue进行设置 | ||
Name | 指定policy的名称 | ||
Pattern | 指定queue的匹配模式(正则表达式) | ||
Definition | 指定镜像模式 | ||
ha-mode {all|exactly|nodes} | 指定镜像队列的模式 | ||
all | 对集群中的所有节点进行镜像 | ||
exactly | 表示在指定个数的节点上进行镜像,由ha-params指定节点数量 | ||
nodes | 对指定的节点进行镜像,由ha-params指定节点名称 | ||
ha-params | 对ha-mode定义参数node-name或node-number | ||
ha-sync-mode {automatic|manual} | 进行队列中消息的同步方式,有效值为automatic和manual | ||
Priority | 可选参数,policy的优先级 |
命令操作说明
rabbitmqctl | start_app|stop_app | 启动/关闭应用 |
start|stop [-n {policy-name}] | 关闭节点和应用 | |
add_vhost|delete_vhost {vhost-name} | 新建/删除虚拟机 | |
add_user {user-name} {user-pwd}|delete_user {user-name}|list_users | 新建/删除/查看用户 | |
change_password {user-name} {new-pwd} | 修改密码 | |
set_user_tags {user-name} {administrator|monitoring|management} | 设置用户角色 | |
set_permissions [-p vhostpath] {user} {conf} {write} {read} | 设置权限 | |
change_cluster_node_type {disc|ram} | 更改节点类型 | |
status|cluster_status | 服务器/集群状态 | |
list_queues [-p vhostpath] [queueinfoitem …] | 队列信息 | |
rabbitmq-plugins | enable|disable {plugin-name} | 开启/关闭插件 |
rabbitmq-server | -detached | 启动节点和应用 |
原创文章禁止转载:技术学堂 » Linux搭建RabbitMQ镜像集群及相关操作命令