如何通過kubernetes-部署RabbitMQ
RabbitMQ是實現了高階訊息佇列協議(AMQP)的開源訊息代理軟體(亦稱面向訊息的中介軟體)。RabbitMQ伺服器是用Erlang語言編寫的,而叢集和故障轉移是構建在開放電信平臺框架上的。AMQP:Advanced Message Queue,高階訊息佇列協議。它是應用層協議的一個開放標準,為面向訊息的中介軟體設計,基於此協議的客戶端與訊息中介軟體可傳遞訊息,並不受產品、開發語言燈條件的限制。 |
可靠性(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