zoukankan      html  css  js  c++  java
  • K8s搭建-kubernetes搭建RabbitMQ

    感谢分享原文-http://bjbsair.com/2020-04-03/tech-info/29908.html

    1、RabbitMQ简介

    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中获取消息并消费。

    K8s部署-kubernetes部署RabbitMQ

    2、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
    

    3、部署验证

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

    K8s部署-kubernetes部署RabbitMQ

    4、运行环境配置

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

    • 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
  • 相关阅读:
    Openrasp源码分析
    feifeicms后台任意文件读取
    python之迭代器和生成器
    java之导入excel
    jquery单击事件的写法
    java之高效操作文件
    多条件搜索优化sql
    java之代码复用
    java之接口文档规范
    eclipse之常用快捷键
  • 原文地址:https://www.cnblogs.com/lihanlin/p/12657669.html
Copyright © 2011-2022 走看看