RabbitMQ两种集群部署方案、账户权限及数据迁移

440 阅读4分钟

rabbitmq集群与镜像集群部署

  1. 部署包地址:

    RabbitMQ 与 Erlang版本对照表:RabbitMQ Erlang Version Requirements — RabbitMQ

    RabbitMQ包下载地址:gh.api.99988866.xyz/https://git…

    Erlang包下载地址:el/7/erlang-23.2.7-2.el7.x86_64.rpm - rabbitmq/erlang · packagecloud

  2. 单机安装命令:

    rpm -Uvh rabbitmq-server-3.10.0-1.el8.noarch.rpm
    yum install -y erlang
  1. 节点分布:

    节点IP所部署角色节点名
    192.168.1.142-master-0
    192.168.1.143-slave-0
    192.168.1.144-slave-1
  2. 部署步骤:

4.1 三台节点安装服务:

    rpm -Uvh rabbitmq-server-3.10.0-1.el8.noarch.rpm

4.2 单独启动每个服务:

    # 先在第一台节点启动
    rabbitmq-server -detached
    
    # 将cookie拷贝给集群里的其他节点
    scp /var/lib/rabbitmq/.erlang.cookie root@192.168.1.143:/var/lib/rabbitmq/
    scp /var/lib/rabbitmq/.erlang.cookie root@192.168.1.144:/var/lib/rabbitmq/
    
    # 如拷贝后文件权限为root,需要手动调整
    chown rabbitmq.rabbitmq .erlang.cookie
    
    # 启动另外两节点
    rabbitmq-server -detached
    
    # 查看每个节点状态:
    rabbitmqctl status

4.3 将其他节点加入主集群:

    # 在其他两节点依次执行此命令,将两节点加入集群
    rabbitmqctl stop_app
    (不必须,需要重置时才需此命令:rabbitmqctl reset)
    rabbitmqctl join_cluster rabbit@master-0
    rabbitmqctl start_app

4.3+ 配置镜像模式(跳过此步骤,是普通的集群模式)

    # 策略根据实际情况调整
    #^test 匹配hello开头的队列
    rabbitmqctl set_policy ha-all "^test" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

4.4 查看集群状态:

    rabbitmqctl cluster_status
    

5. 开启web访问:

    rabbitmq-plugins enable rabbitmq_managemen
    # 集群模式则每台都需打开

6. 配置web访问用户:

    # 创建admin用户与密码
    rabbitmqctl add_user admin admin
    # 设置admin为管理员
    rabbitmqctl set_user_tags admin  administrator
    
    # 注:用户只需要在第一台节点创建即可;只有管理员才可以登陆web页面
    

helm 部署rabbitmq cluster及operator cluster

二者区别:

statefulset cluster:按照statefulset模板自定义编辑即可,但一个集群部署多套服务时,不可直接复用。需要调整多个values文件配置,及clusterName等。

operator cluster:按照operator设计者的理念,如需修改配置则须理解crd中的定义。但部署多套服务时只需要rabbitmq中修改name即可复用。(name同时为clusterName)

相同点:

部署后的集群模式相同,使用方法相同

1. rabbitmq statefulset cluster

  1. 获取chart地址:charts/bitnami/rabbitmq at main · bitnami/charts · GitHub

  2. 部署local-path-provisioner - 掘金 (juejin.cn)

  3. 修改values配置文件

    # 修改存储类名
    18    storageClass: "local-path"
    # 自定义密码
    128   password: "reny.123"
    # 调整pod副本数
    545   replicaCount: 3
    # 自定义资源配额
    666   resources:
    # 调整每个pod的存储卷大小
    849   size: 10Gi
    # 开启web端访问端口,如不用可不修改
    865   type: NodePort
    # 自定义nodeport端口映射
    919   nodePorts:
  1. 安装:
    helm install -f rabbitmq/values.yaml  rabbitmq rabbitmq/
  1. 查看pod状态:
    kubectl get po |grep rabbitmq

image.png

  1. 查询集群状态:

    命令行:

    kubectl exec -it rabbitmq-0 bash
    rabbitmqctl cluster_status
    # 镜像集群单独增加策略,或从web添加
    #^hello 匹配hello开头的队列
    rabbitmqctl set_policy ha-all "^hello" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

页面:

image.png

2. rabbitmq operator cluster

  1. 获取chart地址: github.com/bitnami/cha…

  2. 部署local-path-provisioner - 掘金 (juejin.cn)

  3. 修改values配置文件

此处主要修改operator服务的配置,可直接启动。如有镜像,资源限制等需求自行修改即可
  1. 安装operator
helm install -f rabbitmq-cluster-operator/values.yaml rabbitmq-cluster-operator rabbitmq-cluster-operator/
  1. 查看operator pod状态
kubectl get po|grep rabbit

image.png

  1. 通过operator运行rabbitmq服务pod
# 写编排文件
# cat rabbitmq.yaml
apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
  name: production-ready
spec:
  replicas: 3
  rabbitmq:
    additionalConfig: |
      cluster_partition_handling = pause_minority
      vm_memory_high_watermark_paging_ratio = 0.99
      disk_free_limit.relative = 1.0
      collect_statistics_interval = 10000
      default_user=user
      default_pass=reny.123
  persistence:
    storageClassName: local-path
    storage: "10Gi"
  service:
    type: NodePort

也可直接使用官方提供的生产模板,地址:github.com/rabbitmq/cl…

  1. 部署并查看服务状态
# 可写好后单独手动运行,也可放在chart/templates中,通过安装operator时一同部署
kubectl apply -f rabbitmq.yaml -n default

image.png

  1. 查询集群状态 命令行:
  kubectl exec -it production-ready-server-0 bash
  rabbitmqctl cluster_status
  # 镜像集群单独增加策略,或从web添加
  #^hello 匹配hello开头的队列
  rabbitmqctl set_policy ha-all "^hello" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

页面:

image.png

rabbitmq账户权限及数据迁移

用户权限

  1. 查询vhost信息: image.png

  2. 新建普通用户: image.png

  3. 赋权:

点进 Users --> vhostTest 用户名

image.png

数据迁移

  1. 注:

    迁移时,仅迁移队列及队列内消息,其他账户相关信息请自行创建。

  2. 打开shovel插件

常用插件配置有:
- rabbitmq_federation_management
- rabbitmq_management,rabbitmq_mqtt
- rabbitmq_stomp
- rabbitmq_delayed_message_exchange
- rabbitmq_shovel
- rabbitmq_shovel_management
  1. 在shovel management配置双方信息:
# 前提:新集群与旧集群地址互通
URI配置规则:
    amqp://{username}:{password}@{hostIP}:{port}
    port为amqp端口,默认5672
# 效果如下

image.png

  1. 查看同步状态:

image.png

  1. 查看新旧队列消息:
迁移后效果为:新队列中存在所有消息,旧队列中消息为0

image.png

image.png