RabbitMQ-Java-09-集群搭建

RabbitMQ-Java-09-集群搭建,第1张

RabbitMQ-Java-09-集群搭建 说明
  • RabbitMQ-Java-09-集群搭建
  • 官方文档已包含绝大多数本案例内容。请移步:https://docs.spring.io/spring-amqp/docs/current/reference/html/
核心概念 》集群搭建说明
  • 集群搭建是为了解决什么问题呢?
    • 大量消息情况下性能问题
  • 注意点有哪些呢?
    • 每个node(机器)需要设置正确的host(hostname、hosts),保证通过host能互相连通。
    • 所有加入集群的node地位相等,新加入node只需要连接任意一个node都能加入到集群,任意一个node丢失都不会影响整个node。
    • 所有加入集群的node必须保证erlang.cookie与其他相同
  • 搭建集群后为什么要配置镜像队列
    • 默认搭建好集群,来一个消息会被随机分配到其中一台节点,一旦该节点宕机而该消息未被消费就会丢失,为了解决这个问题就需要配置镜像队列。
    • 镜像队列一般是备份两份(主node、备node各一份),你也可以设置备份多份(最多不能超过所有node数量),但是这样是大大的浪费,没必要。
    • 配置备份两份以后,当其中一个node宕机,会自动备份到其他node,保证数据永远有两份,即使剩下最后一台节点也不会数据丢失,除非所有节点全部宕机。
    • 配置镜像队列必须配置好集群,单台node是没有镜像队列选项值的。
    • 配置完镜像队列就基本上可以保证消息不丢失了。
*** 作步骤 》准备环境
  • 准备三台服务器(虚拟机),先准备一台配置好RabbitMQ,如果是本地虚拟机的话其他两台用这一台创建链接克隆,如此一来就不用分别配置了。
》开始搭建集群
  • 分别修改三台服务器主机名
    # 第一个节点
    [root@host0202 admin]# vi /etc/hostname
    host0202
    
    # 第二个节点
    [root@host0203 admin]# vi /etc/hostname
    host0203
    
    # 第三个节点
    [root@host0204 admin]# vi /etc/hostname
    host0204
    
  • 分别修改三台服务器hosts文件
    # 第一个节点
    [root@host0202 admin]# vi /etc/hosts
    192.168.0.202   host0202
    192.168.0.203   host0203
    192.168.0.204   host0204
    
    # 第二个节点
    [root@host0203 admin]# vi /etc/hosts
    192.168.0.202   host0202
    192.168.0.203   host0203
    192.168.0.204   host0204
    
    # 第三个节点
    [root@host0204 admin]# vi /etc/hosts
    192.168.0.202   host0202
    192.168.0.203   host0203
    192.168.0.204   host0204
    
  • 统一三台服务器的erlang.cookie,在第一台(host0202)执行以下 *** 作(如果你是跟我一样直接克隆的虚拟机那么这一步可以省略)
    [root@host0202 admin]# cd /var/lib/rabbitmq/
    [root@host0202 rabbitmq]# ls -al
    total 8
    drwxr-xr-x.  3 rabbitmq rabbitmq   42 Dec 28 18:29 .
    drwxr-xr-x. 27 root     root     4096 Dec 28 18:23 ..
    -r--------.  1 rabbitmq rabbitmq   20 Dec 28 00:00 .erlang.cookie
    drwxr-x---.  4 rabbitmq rabbitmq  104 Dec 28 21:39 mnesia
    
    [root@host0202 rabbitmq]# scp .erlang.cookie root@host0203:/var/lib/rabbitmq/
    
    [root@host0202 rabbitmq]# scp .erlang.cookie root@host0204:/var/lib/rabbitmq/
    
  • 分别在三台服务器中重启RabbitMQ、Erlang虚拟机
    # 第一个节点
    [root@host0202 rabbitmq]# rabbitmq-server -detached
    
    # 第二个节点
    [root@host0203 rabbitmq]# rabbitmq-server -detached
    
    # 第三个节点
    [root@host0204 rabbitmq]# rabbitmq-server -detached
    
  • 将第二个节点加入第一个节点
    [root@host0203 rabbitmq]# rabbitmqctl stop_app
    Stopping rabbit application on node rabbit@host0203 ...
    
    [root@host0203 rabbitmq]# rabbitmqctl reset
    Resetting node rabbit@host0203 ...
    
    [root@host0203 rabbitmq]# rabbitmqctl join_cluster rabbit@host0202
    Clustering node rabbit@host0203 with rabbit@host0202
    
    [root@host0203 rabbitmq]# rabbitmqctl start_app
    Starting node rabbit@host0203 ...
    
    • rabbitmqctl stop_app:关闭RabbitMQ不关闭Erlang虚拟机
    • rabbitmqctl stop:关闭RabbitMQ和Erlang虚拟机
  • 将第三个节点加入第二个节点
    [root@host0204 rabbitmq]# rabbitmqctl stop_app
    Stopping rabbit application on node rabbit@host0204 ...
    
    [root@host0204 rabbitmq]# rabbitmqctl reset
    Resetting node rabbit@host0204 ...
    
    [root@host0204 rabbitmq]# rabbitmqctl join_cluster rabbit@host0203
    Clustering node rabbit@host0204 with rabbit@host0203
    
    [root@host0204 rabbitmq]# rabbitmqctl start_app
    Starting node rabbit@host0204 ...
    
  • 查看集群状态(任意一个节点都行)
    [root@host0202 rabbitmq]# rabbitmqctl cluster_status
    
    • 或者登陆RabbitMQ管理后台查看:Overview -> Nodes
  • 如果配置完后台登陆不了,重新创建用户,具体参考我的安装RabbitMQ相关教程
  • 解除集群节点
    # 第一种方式:在第三个节点执行:
    [root@host0204 rabbitmq]# rabbitmqctl stop_app
    [root@host0204 rabbitmq]# rabbitmqctl reset
    [root@host0204 rabbitmq]# rabbitmqctl start_app
    [root@host0204 rabbitmq]# rabbitmqctl cluster_status
    
    # 第二种方式:在第一个节点执行(该方式执行前需先stop掉要解除的节点):
    [root@host0202 rabbitmq]# rabbitmqctl forget_cluster_node rabbit@host0204
    
》配置镜像队列
  • 启动所有集群中的node,登陆任意一个node的RabbitMQ后台
  • 配置策略policy:Admin -> Policies -> Add/update a policy
    • name:策略名字,随便写
    • Pattern:正则匹配规则,(比如^mirror=以mirror开头)
    • Apply to:应用到交换机还是队列或全部
    • Priority:优先级,默认空即可
    • Definition:
      • ha-mode:备份模式,exactly=备份模式,指备份几份
      • ha-params:备份的分数
      • ha-sync-mode:同步模式,automatic=自动
  • 策略说明
    - name:my-policy001
    - Pattern:^mirror
    - Apply to:
    - Priority:
    - Definition:
        - ha-mode:exactly
        - ha-params:2
        - ha-sync-mode:automatic
    
备注
  • 该教程部分内容收集自网络,感谢原作者。
附录

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5695897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存