zoukankan      html  css  js  c++  java
  • Rabbitmq集群搭建

      参考:https://www.cnblogs.com/shihaiming/p/11014257.html

        https://www.cnblogs.com/knowledgesea/p/6535766.html

      Rabbitmq简介

      RabbiMQ是用Erang开发的,集群非常方便,因为Erlang天生就是一门分布式语言,但其本身并不支持负载均衡。

      RabbiMQ模式

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

       RabbiMQ特点

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

      配置环境查看

       主机规划

      

    IP地址主机名操作系统防火墙和SELinux用途
    192.168.1.101 mq01 CentOS7.4(64位) 关闭 磁盘节点
    192.168.1.102 mq02 CentOS7.4(64位) 关闭 内存节点
    192.168.1.103 mq03 CentOS7.4(64位) 关闭 内存节点

      注意,这里三台服务器都连接上互联网,另外RabbitMQ集群节点必须在同一网段里,如果是跨广域网,效果会变差。

      RabbitMQ普通集群配置

      更改三台MQ节点的计算机名分别为mq01、mq02 和mq03,然后修改hosts配置文件

    cat /etc/hosts
    192.168.1.101 mq01
    192.168.1.102 mq02
    192.168.1.103 mq03
    

       注意:主机名也需要修改

      安装rabbitmq-server

      三台主机均操作安装

    yum -y install rabbitmq-server
    

       拷贝erlang.cookie

      Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群景象。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie中,文件是400的权限。所以必须保证各节点cookie一致,不然节点之间就无法通信。

      注意:默认第一次启动才会生成该文件,在第一台主机先启动rabbitmq再拷贝至另外两台主机

    # cat /var/lib/rabbitmq/.erlang.cookie 
    NBFIDWJAUZKASAOOWFAE
    

       拷贝

    scp /var/lib/rabbitmq/.erlang.cookie root@192.168.1.102:/var/lib/rabbitmq/
    scp /var/lib/rabbitmq/.erlang.cookie root@192.168.1.103:/var/lib/rabbitmq/
    

       拷贝后默认权限是root需要修改成rabbitmq权限

    chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
    

       分别查看三个节点并添加管理服务,最后启动rabbitmq服务

      三个阶段均操作

    /usr/lib/rabbitmq/bin/rabbitmq-plugins list //查看插件安装情况
    
    /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management //启用rabbitmq_management服务
    
    systemctl restart rabbitmq-server
    

       查看监控端口

       将mq02、mq03作为内存节点加入mq01节点集群中

    rabbitmqctl stop_app    //停掉rabbit应用
    
    rabbitmqctl join_cluster --ram rabbit@mq01 //加入到磁盘节点
    
    rabbitmqctl start_app  //启动rabbit应用
    

       注意:如果是修改了主机名以后需要重新连接一次ssh否则会报连接local的rabbitmq错误

      

    (1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,mq02和mq03是内存节点,mq01是磁盘节点。
    (2)如果要使mq02、mq03都是磁盘节点,去掉--ram参数即可。
    (3)如果想要更改节点类型,可以使用命令rabbitmqctl change_cluster_node_type disc(ram),前提是必须停掉rabbit应用
    

       退出集群

    #停止应用
    rabbitmqctl stop_app
    #重置退出
    rabbitmqctl reset
    

      查看集群状态

       登录rabbitmq web管理控制台,创建新的队列

      打开浏览器输入http://192.168.1.101:15672, 输入默认的Username:guest,输入默认的Password:guest ,登录后出现如图所示的界面。

       根据界面提示创建一条队列

     

       注意:在RabbitMQ集群集群中,必须至少有一个磁盘节点,否则队列元数据无法写入到集群中,当磁盘节点宕掉时,集群将无法写入新的队列元数据信息。

      RabbitMQ镜像集群配置

      上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。虽然该模式解决一项目组节点压力,但队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。镜像队列是基于普通的集群模式的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做。

      设置的镜像队列可以通过开启的网页的管理端,也可以通过命令,这里说的是其中的网页设置方式。

       1,创建rabbitmq策略

      在mq01节点的控制台上创建策略

      (1)点击admin菜单–>右侧的Policies选项–>左侧最下下边的Add/update a policy。

      (2)按照图中的内容根据自己的需求填写。

     

       此时分别登陆mq02、mq03两个节点的控制台,可以看到上面添加的这个策略,如图所示:

     

       添加队列测试

      在mq01添加队列

     

       将鼠标指向+2可以显示出另外两台消息节点。

      创建消息

      (1)点击ab队列按钮
      (2)拖动滚动条,点击publish message
      (3)填写相关内容

    2-Persistent:表示持久化
    Headers:随便填写即可
    Properties:点击问号,选择一个消息ID号
    Payload:消息内容
    

     

      点击queue按钮,发现ab队列的Ready和Total中多了一条消息记录。

       破坏性测试

      将mq01节点关闭,再通过mq02和mq03查看消息记录是否还存在。

    rabbitmqctl stop_app
    

     

     

       从中可以看到ab队列已经从之前的+2显示成+1了,而且消息记录是存在的。

      再将mq02节点的服务关闭,通过mq03查看消息记录是否还存在。

    rabbitmqctl stop_app
    

     

       将mq01和mq02的服务再启动起来

    rabbitmqctl start_app
    

     

       从中可以看到ab队列后面+2变成了粉色,鼠标指上去显示镜像无法同步。如果这时候停掉mq03节点的服务,那么队列里面的消息将会丢失。

       采取的解决办法是选择在mq02节点上执行同步命令。

    rabbitmqctl sync_queue ab  //同步ab队列
    

     

       同步完成后,+2又变成了蓝色。

      这样,我们就测试了rabbitmq集群的破坏性测试,说明集群配置成功。

  • 相关阅读:
    Android游戏开发22:Android动画的实现J2me游戏类库用于Android开发
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第三部分,完整代码)
    使用OGR创建dxf格式矢量数据
    mysql 数据库引擎 MyISAM InnoDB 大比拼 区别
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第二部分)
    mysql 更改数据库引擎
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第一部分)
    android 数字键盘使用
    MySQL Innodb数据库性能实践
    eclipse : Error while performing database login with the driver null
  • 原文地址:https://www.cnblogs.com/minseo/p/13280447.html
Copyright © 2011-2022 走看看