k8s部署rabbitmq以及数据迁移

docker pull rabbitmq:3.9.28-management
1.部署模板

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
spec:
  ports:
    - name: amqp
      port: 5672
      targetPort: 5672
    - name: management
      port: 15672
      targetPort: 15672
  selector:
    app: rabbitmq

---

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rabbitmq
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rabbitmq
  template:
    metadata:
      labels:
        app: rabbitmq
    spec:
      imagePullSecrets:
        - name: harbor
      containers:
        - name: rabbitmq
          image: rabbitmq:3.9.28-management
          ports:
            - containerPort: 5672
            - containerPort: 15672
          resources:
            limits:
              cpu: 1024m
              memory: 2048Mi
            requests:
              cpu: 100m
              memory: 200Mi
          livenessProbe:
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 3
            tcpSocket:
              port: 5672
          readinessProbe:
            initialDelaySeconds: 10
            periodSeconds: 10
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 3
            tcpSocket:
              port: 5672
          env:
            - name: RABBITMQ_DEFAULT_USER
              value: "guest"
            - name: RABBITMQ_DEFAULT_PASS
              value: "guest"
          volumeMounts:
            - name: data
              mountPath: /var/lib/rabbitmq/
            - name: localtime
              readOnly: true
              mountPath: /etc/localtime
      volumes:
        - name: data
          hostPath:
            type: DirectoryOrCreate 
            path: /data/znst/rabbitmq
        - name: localtime
          hostPath:
            type: File
            path: /etc/localtime
      nodeName: gem-yxyw-t-c02

暴露端口的service

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
spec:
  type: NodePort
  ports:
    - name: rabbitmq
      port: 5672
      targetPort: 5672
      nodePort: 30004
    - name: management
      port: 15672
      targetPort: 15672
      nodePort: 30005
  selector:
    app: rabbitmq

实际部署

apiVersion: v1
kind: Service
metadata:
  name: znst-rabbitmq-test
spec:
  type: NodePort
  ports:
    - name: rabbitmq
      port: 5672
      targetPort: 5672
      nodePort: 30004
    - name: management
      port: 15672
      targetPort: 15672
      nodePort: 30005
  selector:
    app: znst-rabbitmq-test

---

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: znst-rabbitmq-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: znst-rabbitmq-test
  template:
    metadata:
      labels:
        app: znst-rabbitmq-test
    spec:
      imagePullSecrets:
        - name: harbor
      containers:
        - name: rabbitmq
          image: rabbitmq:3.9.28-management
          ports:
            - containerPort: 5672
            - containerPort: 15672
          env:
            - name: RABBITMQ_DEFAULT_USER
              value: "guest"
            - name: RABBITMQ_DEFAULT_PASS
              value: "Gd*(53#SALEMQ"
          resources:
            limits:
              cpu: 1024m
              memory: 2048Mi
            requests:
              cpu: 100m
              memory: 200Mi
          livenessProbe:
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 3
            tcpSocket:
              port: 5672
          readinessProbe:
            initialDelaySeconds: 10
            periodSeconds: 10
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 3
            tcpSocket:
              port: 5672
          volumeMounts:
            - name: data
              mountPath: /var/lib/rabbitmq/
            - name: localtime
              readOnly: true
              mountPath: /etc/localtime
      volumes:
        - name: data
          hostPath:
            type: DirectoryOrCreate 
            path: /data/znst/rabbitmq
        - name: localtime
          hostPath:
            type: File
            path: /etc/localtime
      nodeName: cn-shenzhen.10.0.21.33

2.服务连接
http://10.0.21.33:30005/ web登录地址
http://10.0.21.33:30004 服务实际调用地址

host: 10.0.21.33
port: 30004
username: guest
password: Gd*(53#SALEMQ

3.rabbitmq新增用户:进入容器或者pod操作

如果想要跨机器登录RabbtiMQ的web管理平台,就需要新建用户,而不能用默认的用户guest。

下面记录一下新增用户的步骤:

1).添加新用户,用户名为root,密码为123456

rabbitmqctl add_user root 123456
2).为该用户分配所有权限

rabbitmqctl set_permissions -p / root “." ".” “.*”
3).设置该用户为管理员角色

rabbitmqctl set_user_tags root administrator
现在就可以用root用户在其他机器上登录RabbitMQ的web管理平台了。
番外篇数据迁移
cd /data/znst/
tar -zcvf rabbitmq.tar.gz rabbitmq
登陆目标主机拷贝过去数据目录执行
tar -xvf rabbitmq.tar.gz 覆盖原有的数据目录,重启服务

4.RabbitMQ数据迁移
rabbitmq日志及存储数据磁盘空间在使用过程中如果不及时消费或者数据量过多,会导致磁盘空间使用率日益增高,严重时可能会发生rabbitmq服务器宕机。一旦发现rabbitmq磁盘空间不够用,或者发生服务器宕机,重启服务失败,此时就需要更大的磁盘来存储rabbitmq数据,才能保证服务正常启动。为了保证数据不丢失,如何迁移数据显得尤为重要,以下为数据迁移步骤,请按顺序执行。
一、 rabbitMq管理界面监控数据
二、 默认存储路径
MNESIA_BASE 后端存储目录,默认为/var/lib/rabbitmq/mnesia
LOG_BASE 日志目录,默认为/var/log/rabbitmq/
注意:如果部署服务器时修改过rabbitmq服务,需要到对应的目录下拷贝存储数据和日志

三、拷贝原有的存储数据和日志文件
拷贝数据文件,通过文件传输工具,把文件下载下来备用

cd /var/lib/rabbitmq/mnesia
拷贝日志文件,通过文件传输工具,把文件下载下来备用

cd /var/log/rabbitmq/
四、新建日志和文件存储位置,并将原数据上传到新建的文件目录内
#进入数据存储路径
cd /data/rabbitmq/data
#上传数据文件
#进入日志存储路径
cd /data/rabbitmq/data
#上传日志存储文件
文件上传后,需要对目录的权限进行修改,如果不进行修改,会导致服务重启失败

chown -R rabbitmq:rabbitmq /data/rabbitmq
五、修改rabbitmq配置文件中日志文件和数据文件的存储路径
#进入目录
cd /etc/rabbitmq
#打开文件
vim rabbitmq-env.conf
#添加以下内容
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/log
六、重启rabbitmq服务
systemctl restart rabbitmq-server.service
七、登录管理界面,查看数据是否正常
原账号能够登录成功,说明数据迁移成功,因为如果数据迁移失败,用户数据会丢失,原账号是登录不成功的

通过图形界面导如导出队列,相当于导出导入表结构
Overview》Export definitions 导出
Overview》Import definitions 导入
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes部署RabbitMQ单机版,可以使用以下详细的YAML文件: ``` apiVersion: v1 kind: Service metadata: name: rabbitmq-service spec: selector: app: rabbitmq type: LoadBalancer ports: - name: amqp port: 5672 targetPort: 5672 - name: management port: 15672 targetPort: 15672 --- apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq-deployment spec: replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: containers: - name: rabbitmq image: rabbitmq:latest ports: - containerPort: 5672 - containerPort: 15672 env: - name: RABBITMQ_DEFAULT_USER value: myuser - name: RABBITMQ_DEFAULT_PASS value: mypass volumeMounts: - name: rabbitmq-data mountPath: /var/lib/rabbitmq volumes: - name: rabbitmq-data emptyDir: {} ``` 上述YAML文件定义了一个Service和一个Deployment。Service负责将流量导入到RabbitMQ Pod,Deployment用于定义RabbitMQ容器的部署细节。在Service中,我们指定了两个端口:5672用于AMQP协议,15672用于RabbitMQ管理界面。Deployment中的容器定义使用了RabbitMQ官方镜像,设置了容器端口和环境变量。此外,还创建了一个名为rabbitmq-data的空目录用于存储RabbitMQ数据。 将以上YAML文件保存为rabbitmq.yaml,然后使用kubectl apply命令部署RabbitMQKubernetes集群: ``` kubectl apply -f rabbitmq.yaml ``` 等待一段时间,可以通过kubect get pods命令查看RabbitMQ Pod的运行状态,以及通过kubectl get services命令获取RabbitMQ服务的外部IP地址。然后就可以使用该IP地址访问RabbitMQ管理界面并进行相关操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值