美文网首页
RabbitMQ集群搭建

RabbitMQ集群搭建

作者: AmosZhu | 来源:发表于2019-07-16 22:13 被阅读0次

    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集群搭建

          本文链接:https://www.haomeiwen.com/subject/givxlctx.html