部署运维

rabbitmq 3.7.8集群部署

2019-01-29  本文已影响53人  baiyongjie

[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消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。

实验环境

安装

安装依赖工具(所有节点)

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
上一篇 下一篇

猜你喜欢

热点阅读