美文网首页
如何通过kubernetes-部署RabbitMQ

如何通过kubernetes-部署RabbitMQ

作者: 易霂 | 来源:发表于2020-11-28 23:54 被阅读0次

    RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。AMQP:Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言灯条件的限制。

    AMQP具有如下的特性

    可靠性(Reliablity):使用了一些机制来保证可靠性,比如持久化、传输确认、发布确认。

    灵活的路由(Flexible Routing):在消息进入队列之前,通过Exchange来路由消息。对于典型的路由功能,Rabbit已经提供了一些内置的Exchange来实现。针对更复杂的路由功能,可以将多个Exchange绑定在一起,也通过插件机制实现自己的Exchange。

    消息集群(Clustering):多个RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。

    高可用(Highly Avaliable Queues):队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。

    多种协议(Multi-protocol):支持多种消息队列协议,如STOMP、MQTT等。

    多种语言客户端(Many Clients):几乎支持所有常用语言,比如Java、.NET、Ruby等。

    管理界面(Management UI):提供了易用的用户界面,使得用户可以监控和管理消息Broker的许多方面。

    跟踪机制(Tracing):如果消息异常,RabbitMQ提供了消息的跟踪机制,使用者可以找出发生了什么。

    插件机制(Plugin System):提供了许多插件,来从多方面进行扩展,也可以编辑自己的插件。

    RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费。

    RabbitMQ部署

    下面是RabbitMQ部署的定义代码,此代码由两部分组成,即RabbitMQ部署的部署以及其代理服务。镜像使用的是bitnami/rabbitmq:latest。通过NodePort模式对外暴露了15672和5672端口,并通过nfs文件系统对RabbitMQ的数据进行持久化。

    #-------------定义RabbitMQ部署-----------------
    apiVersion: apps/v1beta2
    kind: Deployment
    metadata:
     name: rabbit
    spec:
     replicas: 1
     selector:
       matchLabels:
         app: rabbit
     strategy:
       rollingUpdate:
         maxSurge: 25%
         maxUnavailable: 25%
       type: RollingUpdate
     template:
       metadata:
         labels:
           app: rabbit
       spec:
         containers:
         - image: bitnami/rabbitmq:latest
           imagePullPolicy: IfNotPresent
           name: rabbit
           ports:
           - containerPort: 15672
             name: rabbit15672
             protocol: TCP
           - containerPort: 5672 
             name: rabbit5672 
             protocol: TCP
           resources: {}
           volumeMounts:
           - mountPath: /bitnami
             name: rabbit-persistent-storage
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          volumes:
          - name: rabbit-persistent-storage
            nfs:
             path: /home/nfs-share/rabbit
             server: 10.0.33.201
    
    #-----------------定义rabbit的代理服务--------------
    apiVersion: v1
    kind: Service
    metadata:
     name: rabbit-service
    spec:
     ports:
     - name: rabbit15672
       nodePort: 31199
       port: 15672
       protocol: TCP
       targetPort: 15672
     - name: rabbit15672 
       nodePort: 305672 
       port: 5672 
       protocol: TCP 
       targetPort: 5672
     selector:
       app: rabbit
     type: NodePort
    

    通过kubectl,执行下面的命令在Kubernetes集群中部署Oracle数据库。

    $ kubectl create -f rabbitmq.yaml --namespace=kube-public
    

    在部署完成后,通过下面的命令可以查看RabbitMQ暴露的端口:

    $ kubectl get svc --namespace=kube-public
    

    部署验证

    在浏览器中输入:http://10.0.33.203:31199/,访问部署好的RabbitMQ。在登录页面输入用户名和密码(此处初始user/bitnami),系统将会进入RabbitMQ的主页。

    运行环境配置

    在部署时,可以通过设置下面的环境变量来改变容器的运行时:

    RABBITMQ_USERNAME: 用户名,默认值为user

    RABBITMQ_PASSWORD: 密码,默认值为bitnami

    RABBITMQ_HASHED_PASSWORD: 哈希密码

    RABBITMQ_VHOST: 安装后启动创建的虚拟主机,默认值为 /

    RABBITMQ_ERL_COOKIE: Erlang cookie用于确定不同的节点之间是否允许行互相通信。

    RABBITMQ_NODE_TYPE: 节点类型,有限制: stats, queue-ram or queue-disc。 默认值为stats

    RABBITMQ_NODE_NAME: 节点名称和主机,例如: node@hostname或node 。默认值为rabbit@localhost。

    RABBITMQ_NODE_PORT_NUMBER: 节点端口,默认值为5672

    RABBITMQ_CLUSTER_NODE_NAME: 集群名称,例如:clusternode@hostname

    RABBITMQ_CLUSTER_PARTITION_HANDLING: 集群分区恢复机制,默认值为: ignore

    RABBITMQ_MANAGER_PORT_NUMBER: 管理端口,默认值为15672

    RABBITMQ_DISK_FREE_LIMIT: Rabbitmq存储数据的可用空间限制,当低于该值的时候,将触发流量限制。默认值为 {mem_relative, 1.0}

    RABBITMQ_ULIMIT_NOFILES: 资源限制, 打开文件描述符的最大数目,默认值为65536

    相关文章

      网友评论

          本文标题:如何通过kubernetes-部署RabbitMQ

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