RabbitMQ集群搭建

rabbitMQ的两种重要特性,异步化提高系统抗峰值能力和系统及功能解耦,这两个特点决定了rabbitMQ在我们的系统中占据了重要的地位,所以为了让RabbitMQ高可用,我们今天就来讲解下RabbitMQ的集群环境搭建

应用常识

一般情况下,一个单机版的rabbitMQ能承受大运1000/s的消息量(跟网络和消息的大小有关,数值存在波动),但是如果是集群环境中,就可以将访问的压力分摊到集群中的其他节点上,增大访问的QPS

RabbitMQ集群中所有的节点都会备份的元数据信息如下:

  • 队列元数据
  • 交换机
  • 绑定关系元数据
  • vhost元数据

集群搭建

首先按照之前的博文Centos7下RabbitMQ的搭建,我们来在另一个服务器上搭建RabbitMQ的环境,本博文只是演示集群环境的搭建,所以采用了两台服务器来搭建集群环境,如果再添加一台服务器的话,步骤是一样的

服务器 IP 节点
RabbitMQ1 192.168.56.105 node1
RabbitMQ2 192.168.56.106 node2
  1. 首先我们来修改各个服务器上的hosts文件,让各个节点都互相的识别对方的存在
    ## 进入的 /etc/hosts 文件中设置hosts文件
    vi /etc/hosts
    
    ## 添加
    192.168.56.105 node1
    192.168.56.106 node2
    

修改完成之后,执行下面语句,查看节点是否生效

    ## 启动rabbitmq服务
    rabbitmq-server -detached
    
    ## 查看rabbitMQ的集群状态节点的命名是否正确
    rabbitmqctl cluster_status
    .......
    Cluster status of node rabbit@node2 ...
        [{nodes,[{disc,[rabbit@node2]}]},
         {running_nodes,[rabbit@node2]},
         {cluster_name,<<"rabbit@node2">>},
         {partitions,[]},
         {alarms,[{rabbit@node2,[]}]}]

如果不是的话,则需要将/etc/hostname中的主机名设置成节点名称,然后在/etc/hosts中添加对应的节点

  1. 编辑RabbitMQ的Cookie文件,以确保各个节点的cookie文件使用的是同一个值

.erlang.cookie文件路径按照安装方式的不同,可以分为以下的情况:

1 如果采用解压缩的方式,那么该文件存在的位置在$HOME目录下,即:$HOME/.erlang.cookie
2 如果使用root安装,则位置为:/root/.erlang.cookie,其他用户对应的位置如下:/root/用户名/.erlang.cookie
3 使用rpm方式来安装,则位置为:/var/lib/rabbitmq目录下

找到该文件之后,使用如下的命令来拷贝文件到另一台服务上

    ## scp来拷贝文件
    scp /root/.erlang.cookie node2:/root/.erlang.cookie
  1. 使用rabbitmqctl工具添加集群节点

如果想node1作为主节点,然后其余节点作为子节点,则需要在其余节点上执行如下的命令

    ## 先停止该节点的rabbitmq服务,但是不停止erlang的服务
    rabbitmqctl stop_app
    ## 然后重置所有的节点信息 注意这里的重置会将之前添加的用户信息也重置点,重置之后,需要添加对应的用户,并且赋予用于权限
    rabbitmqctl reset
    ## 添加节点到主节点
    rabbitmqctl join_cluster rabbit@node1
    ## 添加完成之后,需要重启rabbitMQ的服务
    rabbitmqctl start_app

这里有三点是需要注意的:

1.必须先停止子节点的rabbitMQ的服务,但是不能停止erlang的服务

2.节点重置后,之前的用户信息会消失,准确来说是所有非默认的消息都会被重置,所以需要额外添加用户,并且赋予对应的权限

3.添加集群节点完成之后需要重新启动rabbitMQ的服务

  1. 检测集群是否搭建成功

在任意一节点查看

    ## 查看集群信息
    rabbitmqctl cluster_status
    ......
    Cluster status of node rabbit@node2 ...
    [{nodes,[{disc,[rabbit@node1,rabbit@node2]}]},
     {running_nodes,[rabbit@node1,rabbit@node2]},
     {cluster_name,<<"rabbit@node1">>},
     {partitions,[]},
     {alarms,[{rabbit@node1,[]},{rabbit@node2,[]}]}]

集群注意的地方和命令

上面已经将集群搭建起来了,如果其中任意一个子节点关闭,则在其他节点看不到该节点信息

如果关闭了集群中的所有节点,则需要确保在启动的时候最后关闭的那个节点是第一个启动起来的

  1. 节点的类型

节点类型分为硬盘和内存两个类型,其中内存的性能比较高,但是信息不会持久化,硬盘的具有IO瓶颈,但是信息能持久化,我们默认创建的节点类型就是硬盘型的

我们可以手动修改节点的类型

    ## 修改节点的类型
    rabbitmqctl change_cluster_node_type disc

在集群中,为了保证信息的完整和持久化,至少需要两个节点是硬盘类型的

  1. 剔除节点
    这里提供重置来删除节点
    ## 关闭rabbitMQ的服务
    rabbitmqctl stop_app
    ## 重置节点
    rabbitmqctl reset

rabbitMQ常用的命令

用途 命令
添加虚拟机 rabbitmqctl add_vhost 虚拟机名称
删除虚拟机 rabbitmqctl delete_vhost 虚拟机名称
虚拟机列表 rabbitmqctl list_vhosts
添加用户 rabbitmqctl add_user 用户名 密码
修改用户密码 rabbitmqctl change_password 用户名 密码
授权 rabbitmqctl set_permissions -p / 用户名 "." "." ".*"
分配角色 rabbitmqctl set_user_tags 用户名 角色名
用户列表 rabbitmqctl list_users
删除用户 rabbitmqctl delete_user 用户名
插件列表 rabbitmq-plugins list
启动插件 rabbitmqctl enable 插件名
停止服务(rabbitMQ和erlang) rabbitmqctl stop
停止rabbitMQ服务 rabbitmqctl stop_app
启动服务(rabbitMQ和erlang) rabbitmq-server -detached
启动rabbitMQ服务 rabbitmqctl start_app
集群添加节点 rabbitmqctl join_cluster 节点名称 (--ram)
集群状态 rabbitmqctl cluster_status
修改节点类型 rabbitmqctl change_cluster_node_type {disc/ram}
集群删除节点 rabbitmqctl forget_cluster_node (--offline)

你可能感兴趣的:(RabbitMQ集群搭建)