rabbitmq 3.7.8集群部署
[toc]
Rebbitmq介绍
消息中间件rabbitmq,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步。
rabbitmq是依据erlang的分布式特性(RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以获得认证)来实现的,所以部署rabbitmq分布式集群时要先安装erlang,并把其中一个服务的cookie复制到另外的节点。
rabbitmq集群中,各个rabbitmq为对等节点,即每个节点均提供给客户端连接,进行消息的接收和发送。节点分为内存节点和磁盘节点,一般的,均应建立为磁盘节点,为了防止机器重启后的消息消失;
RabbitMQ的Cluster集群模式一般分为两种,普通模式和镜像模式。消息队列通过rabbitmq HA镜像队列进行消息队列实体复制。
普通模式下,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。
镜像模式下,将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。
实验环境
- 软硬件信息:
- CentOS Linux release 7.3.1611 (Core)
- rabbitmq-server-generic-unix-3.7.8.tar.xz
- otp_src_20.0.tar.gz
- 服务器IP:
- 10.241.0.10
- 10.241.0.11
- 10.241.0.12
- /etc/hosts(所有节点)
- 10.241.0.10 node1
- 10.241.0.11 node2
- 10.241.0.12 node3
安装
安装依赖工具(所有节点)
yum -y install make gcc glibc-devel m4 ncurses-devel autoconf openssl-devel yum -y install unixODBC unixODBC-devel
安装erlang(所有节点)
[root@node1 ~]# wget http://erlang.org/download/otp_src_20.0.tar.gz [root@node1 ~]# tar -xvf otp_src_20.0.tar.gz [root@node1 ~]# cd otp_src_20.0 [root@node1 ~]# ./configure --prefix=/usr/local/erlang --enable-hipe --enable-threads --enable-smp-support --enable-kernel-poll --without-javac ********************************************************************* ********************** APPLICATIONS DISABLED ********************** ********************************************************************* jinterface : Java compiler disabled by user ********************************************************************* ********************************************************************* ********************** APPLICATIONS INFORMATION ******************* ********************************************************************* wx : wxWidgets not found, wx will NOT be usable ********************************************************************* ********************************************************************* ********************** DOCUMENTATION INFORMATION ****************** ********************************************************************* documentation : fop is missing. Using fakefop to generate placeholder PDF files. ********************************************************************* [root@node1 ~]# make -j`lscpu | grep ^CPU\(s\):|awk '{print $2}'` [root@node1 ~]# make install [root@node1 ~]# ln -s /usr/local/erlang/bin/erl /usr/local/bin/ #测试 [root@node2 otp_src_20.0]# erl Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:10] [hipe] [kernel-poll:false] Eshell V9.0 (abort with ^G) 1>
安装rabbitmq(所有节点)
[root@node1 ~]# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.8/rabbitmq-server-generic-unix-3.7.8.tar.xz [root@node1 ~]# tar -xvf rabbitmq-server-generic-unix-3.7.8.tar.xz -C /usr/local [root@node1 local]# cd /usr/local [root@node1 local]# mv rabbitmq_server-3.7.8 rabbitmq #新建配置文件 [root@node1 rabbitmq]# mkdir -p /data/rabbitmq [root@node1 rabbitmq]# vim rabbitmq-env.conf RABBITMQ_NODENAME=node1 RABBITMQ_NODE_IP_ADDRESS=10.241.0.10 RABBITMQ_NODE_PORT=5672 LOG_BASE=/data/rabbitmq MNESIA_BASE=/data/rabbitmq/mnesia #创建软连接 [root@node1 rabbitmq]# ln -s /usr/local/rabbitmq/sbin/* /usr/local/bin/ 前台启动命令: ./rabbitmq-server 后台启动命令: ./rabbitmq-server -detached 停止服务命令:./rabbitmqctl stop #导入rabbitmq的管理界面 [root@node1 local]# cd rabbitmq [root@node1 rabbitmq]# sbin/rabbitmq-plugins enable rabbitmq_management
启动rabbitmq和添加用户
node1节点
#启动rabbitmq [root@node1 rabbitmq]# /usr/local/rabbitmq/sbin/rabbitmq-server -detached Warning: PID file not written; -detached was passed. #添加用户 [root@node1 rabbitmq]# /usr/local/rabbitmq/sbin/rabbitmqctl add_user admin admin Adding user "admin" ... #添加到administrator管理组 [root@node1 rabbitmq]# /usr/local/rabbitmq/sbin/rabbitmqctl set_user_tags admin administrator Setting tags for user "admin" to [administrator] ... #保证三台机器上的cookie是一致的 [root@node1 rabbitmq]# scp ~/.erlang.cookie root@10.241.0.11:~/.erlang.cookie [root@node1 rabbitmq]# scp ~/.erlang.cookie root@10.241.0.12:~/.erlang.cookie
node2节点
#启动添加用户和组 [root@node2 local]# /usr/local/rabbitmq/sbin/rabbitmq-server -detached Warning: PID file not written; -detached was passed. [root@node2 local]# /usr/local/rabbitmq/sbin/rabbitmqctl add_user admin admin Adding user "admin" ... [root@node2 local]# /usr/local/rabbitmq/sbin/rabbitmqctl set_user_tags admin administrator Setting tags for user "admin" to [administrator] ... #停止后重置数据加入集群 [root@node2 local]# /usr/local/rabbitmq/sbin/rabbitmqctl stop_app Stopping rabbit application on node rabbit@node2 ... [root@node2 local]# /usr/local/rabbitmq/sbin/rabbitmqctl reset Resetting node rabbit@node2 ... [root@node2 local]# /usr/local/rabbitmq/sbin/rabbitmqctl join_cluster rabbit@node1 Clustering node rabbit@node2 with rabbit@node1 #加入后启动并查看集群状态 [root@node2 local]# /usr/local/rabbitmq/sbin/rabbitmqctl start_app Starting node rabbit@node2 ... completed with 3 plugins. [root@node2 local]# /usr/local/rabbitmq/sbin/rabbitmqctl cluster_status Cluster status of node rabbit@node2 ... [{nodes,[{disc,[rabbit@node1,rabbit@node2]}]}, {running_nodes,[rabbit@node1,rabbit@node2]}, {cluster_name,<<"rabbit@node2">>}, {partitions,[]}, {alarms,[{rabbit@node1,[]},{rabbit@node2,[]}]}]
node3节点
[root@node3 rabbitmq]# /usr/local/rabbitmq/sbin/rabbitmq-server -detached Warning: PID file not written; -detached was passed. [root@node3 rabbitmq]# /usr/local/rabbitmq/sbin/rabbitmqctl add_user admin admin Adding user "admin" ... [root@node3 rabbitmq]# /usr/local/rabbitmq/sbin/rabbitmqctl set_user_tags admin administrator Setting tags for user "admin" to [administrator] ... [root@node3 rabbitmq]# /usr/local/rabbitmq/sbin/rabbitmqctl stop_app Stopping rabbit application on node rabbit@node3 ... [root@node3 rabbitmq]# /usr/local/rabbitmq/sbin/rabbitmqctl reset Resetting node rabbit@node3 ... [root@node3 rabbitmq]# /usr/local/rabbitmq/sbin/rabbitmqctl join_cluster rabbit@node1 Clustering node rabbit@node3 with rabbit@node1 [root@node3 rabbitmq]# /usr/local/rabbitmq/sbin/rabbitmqctl start_app Starting node rabbit@node3 ... completed with 3 plugins. [root@node3 rabbitmq]# /usr/local/rabbitmq/sbin/rabbitmqctl cluster_status Cluster status of node rabbit@node3 ... [{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]}, {running_nodes,[rabbit@node1,rabbit@node2,rabbit@node3]}, {cluster_name,<<"rabbit@node2">>}, {partitions,[]}, {alarms,[{rabbit@node1,[]},{rabbit@node2,[]},{rabbit@node3,[]}]}]
登录rabbitmq
http://10.241.0.10:15672/#/ 账号: admin 密码: admin
image (2).png
常用命令
rabbitmqctl stop_app 仅关闭应用,不关闭节点 rabbitmqctl start_app 开启应用 rabbitmq--server -detached 启动节点和应用 rabbitmqctl 关闭节点和应用
服务器启动与关闭
启动: rabbitmq-server –detached 关闭: rabbitmqctl stop 若单机有多个实例,则在rabbitmqctlh后加–n 指定名称
插件管理
开启某个插件:rabbitmq-plugins enable xxx 关闭某个插件:rabbitmq-plugins disable xxx 注意:重启服务器后生效。
virtual_host管理
新建virtual_host:rabbitmqctl add_vhost xxx 撤销virtual_host:rabbitmqctl delete_vhost xxx
用户管理
新建用户:rabbitmqctl add_user xxxpwd 删除用户: rabbitmqctl delete_user xxx 查看用户:rabbitmqctl list_users 改密码: rabbimqctl change_password {username} {newpassword} 设置用户角色:rabbitmqctlset_user_tags {username} {tag ...} Tag可以为 administrator,monitoring, management
权限管理
权限设置:set_permissions [-pvhostpath] {user} {conf} {write} {read} Vhostpath Vhost路径 user 用户名 Conf 一个正则表达式match哪些配置资源能够被该用户访问。 Write 一个正则表达式match哪些配置资源能够被该用户读。 Read 一个正则表达式match哪些配置资源能够被该用户访问。
获取服务器状态信息
服务器状态:rabbitmqctl status
获取集群状态信息
rabbitmqctl cluster_status
原文地址:https://www.jianshu.com/p/73cfdc203ff6
相关推荐
-
如何学习 Linux 内核网络协议栈 服务器
2020-6-10
-
通过自研数据库画像工具支持“去O”数据库评估 服务器
2020-5-31
-
nginx 反向代理进行yum配置 服务器
2019-10-13
-
在Ignite中使用线性回归算法 服务器
2020-6-13
-
HTTP 简史 服务器
2019-5-6
-
docker machine介绍和使用 服务器
2019-8-29
-
我是如何利用Hadoop做大规模日志压缩的 服务器
2019-5-13
-
PYTHON内置方法的时间复杂度 服务器
2020-6-22
-
linux系统lvm中lv使用空间的调整 服务器
2019-9-9
-
从入门到精通-Nginx,图文并茂、负载均衡、动静分离、虚拟主机 附案例源码 服务器
2020-7-11