Junhc

岂止于博客

RabbitMQ集群搭建

安装
安装Erlang

官网下载地址otp_src_22.3.tar.gz 将Erlang安装包放到/opt目录下面

cd /opt
tar zxvf otp_src_22.3.tar.gz
mv otp_src_22.3 erlang
cd erlang
./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac
make && make install

修改/etc/profile文件

export ERALNG_HOME=/opt/erlang
export PATH=$ERLANG_HOME/bin:$PATH

之后执行 source /etc/profile 命令让配置文件生效

RabbitMQ的安装

官网下载地址rabbitmq-server-generic-unix-3.8.2.tar.xz
将RabbitMQ安装包放到/opt目录下面

cd /opt
tar zxvf rabbitmq-server-generic-unix-3.8.2.tar.xz
mv rabbitmq-server-3.8.2 rabbitmq

修改/etc/profile文件

export RABBITMQ_HOME=/opt/rabbitmq;
export PATH=$PATH:$RABBITMQ_HOME/sbin;

之后执行 source /etc/profile 命令让配置文件生效

运行
# 守护进程方式在后台运行
rabbitmq-server start &

# 查看状态
rabbitmqctl status

# 停用
rabbitmqctl stop

# 添加新用户,用户名为root,密码为111111
rabbitmqctl add_user root 111111

# 为root用户设置所有权限
rabbitmqctl set_permissions -p / root ".*" ".*" ".*"

# 设置root用户为管理员
rabbitmqctl set_user_tags administrator

# 启用管控台
rabbitmq-plugins enable rabbitmq_management

# 浏览器访问 http://localhost:15672
RabbitMQ用户角色
  • node

    不能访问 management plugin

  • management

    用户可以通过AMQP做的任何事外加 列出自己可以通过AMQP登入的virtual hosts
    查看自己的virtual hosts中的queues, exchanges 和 bindings
    查看和关闭自己的channels 和 connections
    查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动

  • policymaker

    management可以做的任何事外加
    查看、创建和删除自己的virtual hosts所属的policies和parameters

  • monitoring

    management可以做的任何事外加
    列出所有virtual hosts,包括他们不能登录的virtual hosts
    查看其他用户的connections和channels
    查看节点级别的数据如clustering和memory使用情况
    查看真正的关于所有virtual hosts的全局的统计信息

  • administrator

    policymaker和monitoring可以做的任何事外加
    创建和删除virtual hosts
    查看、创建和删除users
    查看创建和删除permissions
    关闭其他用户的connections

RabbitMQ模式
  • 单一模式
  • 普通模式(默认的集群模式)
  • 镜像模式
    把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA方案,在对业务可靠性要求较高的场合中比较适用
    要实现镜像模式,需要先搭建一个普通集群模式,在这个模式的基础上再配置镜像模式以实现高可用

RabbitMQ的集群节点包括内存节点、磁盘节点。
RabbitMQ支持消息的持久化也就是数据写在磁盘上。
最合适的方案就是既有内存节点,又有磁盘节点。

RabbitMQ普通集群搭建
配置hosts文件
IP地址 主机名 操作系统 防火墙和SELinux  
10.100.18.5 mqnode01 Linux 关闭 磁盘节点
10.100.18.7 mqnode02 Linux 关闭 内存节点
vim /etc/hostname
mqnode01

vim /etc/hosts
10.100.18.5 mqnode01
10.100.18.7 mqnode02
拷贝erlang.cookie

RabbitMQ的集群是依附于Erlang的集群来工作的,所以必须先构建起Erlang的集群。
Erlang的集群中各节点是经过一个magic cookie来实现的,如果是通过源码安装,这个cookie存放在/root/.erlang.cookie,
如果是通过yum安装,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie,文件是400的权限。
所以必须保证各节点cookie一致,不然节点之间无法通信。

添加管理服务,启动RabbitMQ服务
rabbitmq-plugins list //查看插件安装情况
rabbitmq-plugins enable rabbitmq_management //启用rabbitmq_management服务
rabbitmq-server start
查看监听端口
netstat -ntp|grep 5672
将mqnode02作为内存节点加入mqnode01节点集群中
rabbitmqctl stop_app    //停掉rabbit应用
rabbitmqctl join_cluster --ram rabbit@mqnode01    //加入到磁盘节点
rabbitmqctl start_app  //启动rabbit应用
  1. 默认RabbitMQ启动后是磁盘节点,在这个cluster命令下,mqnode02是内存节点,mqnode01是磁盘节点。
  2. 如果要使mqnode02是磁盘节点,去掉–ram参数即可。
  3. 如果想要更改节点类型,可以使用命令rabbitmqctl change_cluster_node_type disc(ram),前提是必须停掉rabbit应用
查看集群状态
rabbitmqctl cluster_status