国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

消息中間件RabbitMQ

這篇具有很好參考價值的文章主要介紹了消息中間件RabbitMQ。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 消息隊列

1.1. MQ 的相關概念

1.1.1. 什么是MQ

  • MQ(message queue),從字面意思上看,本質是個隊列,F(xiàn)IFO 先入先出,只不過隊列中存放的內容是message 而已,還是一種跨進程的通信機制,用于上下游傳遞消息。在互聯(lián)網(wǎng)架構中,MQ 是一種非常常見的上下游“邏輯解耦+物理解耦”的消息通信服務。使用了 MQ 之后,消息發(fā)送上游只需要依賴 MQ,不用依賴其他服務。

1.1.2. 為什么要用 MQ

1. 流量消峰

  • 舉個例子,如果訂單系統(tǒng)最多能處理一萬次訂單,這個處理能力應付正常時段的下單時綽綽有余,正常時段我們下單一秒后就能返回結果。但是在高峰期,如果有兩萬次下單操作系統(tǒng)是處理不了的,只能限制訂單超過一萬后不允許用戶下單。使用消息隊列做緩沖,我們可以取消這個限制,把一秒內下的訂單分散成一段時間來處理,這時有些用戶可能在下單十幾秒后才能收到下單成功的操作,但是比不能下單的體驗要好。

2. 應用解耦

  • 以電商應用為例,應用中有訂單系統(tǒng)、庫存系統(tǒng)、物流系統(tǒng)、支付系統(tǒng)。用戶創(chuàng)建訂單后,如果耦合調用庫存系統(tǒng)、物流系統(tǒng)、支付系統(tǒng),任何一個子系統(tǒng)出了故障,都會造成下單操作異常。當轉變成基于消息隊列的方式后,系統(tǒng)間調用的問題會減少很多,比如物流系統(tǒng)因為發(fā)生故障,需要幾分鐘來修復。在這幾分鐘的時間里,物流系統(tǒng)要處理的內存被緩存在消息隊列中,用戶的下單操作可以正常完成。當物流系統(tǒng)恢復后,繼續(xù)處理訂單信息即可,中單用戶感受不到物流系統(tǒng)的故障,提升系統(tǒng)的可用性。

消息中間件RabbitMQ,rabbitmq,分布式,負載均衡

3. 異步處理

  • 有些服務間調用是異步的,例如 A 調用 B,B 需要花費很長時間執(zhí)行,但是 A 需要知道 B 什么時候可以執(zhí)行完,以前一般有兩種方式,A 過一段時間去調用 B 的查詢 api 查詢?;蛘?A 提供一個 callback api,B 執(zhí)行完之后調用 api 通知 A 服務。這兩種方式都不是很優(yōu)雅,使用消息總線,可以很方便解決這個問題,A 調用 B 服務后,只需要監(jiān)聽 B 處理完成的消息,當 B 處理完成后,會發(fā)送一條消息給 MQ,MQ 會將此消息轉發(fā)給 A 服務。這樣 A 服務既不用循環(huán)調用 B 的查詢 api,也不用提供 callback api。同樣 B 服務也不用做這些操作。A 服務還能及時的得到異步處理成功的消息。

消息中間件RabbitMQ,rabbitmq,分布式,負載均衡

1.1.3. MQ 的分類

1. ActiveMQ

  • 優(yōu)點:單機吞吐量萬級,時效性 ms 級,可用性高,基于主從架構實現(xiàn)高可用性,消息可靠性較低的概率丟失數(shù)據(jù)。
  • 缺點:官方社區(qū)現(xiàn)在對 ActiveMQ 5.x 維護越來越少,高吞吐量場景較少使用。

2. Kafka

  • 大數(shù)據(jù)的殺手锏,談到大數(shù)據(jù)領域內的消息傳輸,則繞不開 Kafka,這款為大數(shù)據(jù)而生的消息中間件,以其百萬級 TPS 的吞吐量名聲大噪,迅速成為大數(shù)據(jù)領域的寵兒,在數(shù)據(jù)采集、傳輸、存儲的過程中發(fā)揮著舉足輕重的作用。目前已經(jīng)被 LinkedIn,Uber, Twitter, Netflix 等大公司所采納。
  • 優(yōu)點: 性能卓越,單機寫入 TPS 約在百萬條/秒,最大的優(yōu)點,就是吞吐量高。時效性 ms 級可用性非常高,kafka 是分布式的,一個數(shù)據(jù)多個副本,少數(shù)機器宕機,不會丟失數(shù)據(jù),不會導致不可用,消費者采用 Pull 方式獲取消息, 消息有序, 通過控制能夠保證所有消息被消費且僅被消費一次;有優(yōu)秀的第三方Kafka Web 管理界面 Kafka-Manager;在日志領域比較成熟,被多家公司和多個開源項目使用;功能支持:功能較為簡單,主要支持簡單的 MQ 功能,在大數(shù)據(jù)領域的實時計算以及日志采集被大規(guī)模使用
  • 缺點:Kafka 單機超過 64 個隊列/分區(qū),Load 會發(fā)生明顯的飆高現(xiàn)象,隊列越多,load 越高,發(fā)送消息響應時間變長,使用短輪詢方式,實時性取決于輪詢間隔時間,消費失敗不支持重試;支持消息順序,但是一臺代理宕機后,就會產(chǎn)生消息亂序,社區(qū)更新較慢;

3. RocketMQ

  • RocketMQ 出自阿里巴巴的開源產(chǎn)品,用 Java 語言實現(xiàn),在設計時參考了 Kafka,并做出了自己的一些改進。被阿里巴巴廣泛應用在訂單,交易,充值,流計算,消息推送,日志流式處理,binglog 分發(fā)等場景。

  • 優(yōu)點:單機吞吐量十萬級,可用性非常高,分布式架構,消息可以做到 0 丟失,MQ 功能較為完善,還是分布式的,擴展性好,支持 10 億級別的消息堆積,不會因為堆積導致性能下降,源碼是 java 我們可以自己閱讀源碼,定制自己公司的 MQ。

  • 缺點:支持的客戶端語言不多,目前是 java 及 c++,其中 c++不成熟;社區(qū)活躍度一般,沒有在 MQ核心中去實現(xiàn) JMS 等接口,有些系統(tǒng)要遷移需要修改大量代碼。

4. RabbitMQ

  • 2007 年發(fā)布,是一個在 AMQP(高級消息隊列協(xié)議)基礎上完成的,可復用的企業(yè)消息系統(tǒng),是當前最主流的消息中間件之一。

  • 優(yōu)點:由于 erlang 語言的高并發(fā)特性,性能較好;吞吐量到萬級,MQ 功能比較完備,健壯、穩(wěn)定、易用、跨平臺、支持多種語言 如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持 AJAX 文檔齊全;開源提供的管理界面非常棒,用起來很好用,社區(qū)活躍度高;更新頻率相當高

  • https://www.rabbitmq.com/news.html。

  • 缺點:商業(yè)版需要收費,學習成本較高。

1.1.4. MQ 的選擇

1. Kafka

  • Kafka 主要特點是基于 Pull 的模式來處理消息消費,追求高吞吐量,一開始的目的就是用于日志收集和傳輸,適合產(chǎn)生大量數(shù)據(jù)的互聯(lián)網(wǎng)服務的數(shù)據(jù)收集業(yè)務。大型公司建議可以選用,如果有日志采集功能,肯定是首選 kafka 了。

2. RocketMQ

  • 天生為金融互聯(lián)網(wǎng)領域而生,對于可靠性要求很高的場景,尤其是電商里面的訂單扣款,以及業(yè)務削峰,在大量交易涌入時,后端可能無法及時處理的情況。RoketMQ 在穩(wěn)定性上可能更值得信賴,這些業(yè)務場景在阿里雙 11 已經(jīng)經(jīng)歷了多次考驗,如果你的業(yè)務有上述并發(fā)場景,建議可以選擇 RocketMQ。

3. RabbitMQ

  • 結合 erlang 語言本身的并發(fā)優(yōu)勢,性能好時效性微秒級,社區(qū)活躍度也比較高,管理界面用起來十分方便,如果你的數(shù)據(jù)量沒有那么大,中小型公司優(yōu)先選擇功能比較完備的 RabbitMQ。

1.2. RabbitMQ

1.2.1. RabbitMQ 的概念

  • RabbitMQ 是一個消息中間件:它接受并轉發(fā)消息。你可以把它當做一個快遞站點,當你要發(fā)送一個包裹時,你把你的包裹放到快遞站,快遞員最終會把你的快遞送到收件人那里,按照這種邏輯 RabbitMQ 是一個快遞站,一個快遞員幫你傳遞快件。RabbitMQ 與快遞站的主要區(qū)別在于,它不處理快件而是接收,存儲和轉發(fā)消息數(shù)據(jù)。

1.2.2. 四大核心概念

  • 生產(chǎn)者

    • 產(chǎn)生數(shù)據(jù)發(fā)送消息的程序是生產(chǎn)者
  • 交換機

    • 交換機是 RabbitMQ 非常重要的一個部件,一方面它接收來自生產(chǎn)者的消息,另一方面它將消息推送到隊列中。交換機必須確切知道如何處理它接收到的消息,是將這些消息推送到特定隊列還是推送到多個隊列,亦或者是把消息丟棄,這個得有交換機類型決定。
  • 隊列

    • 隊列是 RabbitMQ 內部使用的一種數(shù)據(jù)結構,盡管消息流經(jīng) RabbitMQ 和應用程序,但它們只能存儲在隊列中。隊列僅受主機的內存和磁盤限制的約束,本質上是一個大的消息緩沖區(qū)。許多生產(chǎn)者可以將消息發(fā)送到一個隊列,許多消費者可以嘗試從一個隊列接收數(shù)據(jù)。這就是我們使用隊列的方式。
  • 消費者

    • 消費與接收具有相似的含義。消費者大多時候是一個等待接收消息的程序。請注意生產(chǎn)者,消費者和消息中間件很多時候并不在同一機器上。同一個應用程序既可以是生產(chǎn)者又是可以是消費者。

1.2.3. RabbitMQ 核心部分

消息中間件RabbitMQ,rabbitmq,分布式,負載均衡

1.2.4. 各個名詞介紹

消息中間件RabbitMQ,rabbitmq,分布式,負載均衡

  • Broker:接收和分發(fā)消息的應用,RabbitMQ Server 就是 Message Broker。

  • Virtual host:出于多租戶和安全因素設計的,把 AMQP 的基本組件劃分到一個虛擬的分組中,類似于網(wǎng)絡中的 namespace 概念。當多個不同的用戶使用同一個 RabbitMQ server 提供的服務時,可以劃分出多個 vhost,每個用戶在自己的 vhost 創(chuàng)建 exchange/queue 等。

  • Connection:publisher/consumer 和 broker 之間的 TCP 連接。

  • Channel:如果每一次訪問 RabbitMQ 都建立一個 Connection,在消息量大的時候建立 TCP Connection 的開銷將是巨大的,效率也較低。Channel 是在 connection 內部建立的邏輯連接,如果應用程序支持多線程,通常每個 thread 創(chuàng)建單獨的 channel 進行通訊,AMQP method 包含了 channel id 幫助客戶端和 message broker 識別 channel,所以 channel 之間是完全隔離的。Channel 作為輕量級的Connection 極大減少了操作系統(tǒng)建立 TCP connection 的開銷。

  • Exchange:message 到達 broker 的第一站,根據(jù)分發(fā)規(guī)則,匹配查詢表中的 routing key,分發(fā)消息到 queue 中去。常用的類型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)。

  • Queue:消息最終被送到這里等待 consumer 取走。

  • Binding:exchange 和 queue 之間的虛擬連接,binding 中可以包含 routing key,Binding 信息被保存到 exchange 中的查詢表中,用于 message 的分發(fā)依據(jù)。

2. Rabbitmq單機安裝部署

  • 官網(wǎng)地址:https://www.rabbitmq.com/download.html
#準備gpgkey密鑰
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
rpm --import https://packagecloud.io/rabbitmq/erlang/gpgkey
rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey

#配置yum倉庫
vim  /etc/yum.repos.d/rabbitmq.repo

[rabbitmq_erlang]
name=rabbitmq_erlang
baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch
repo_gpgcheck=1
gpgcheck=1
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
       https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[rabbitmq_erlang-source]
name=rabbitmq_erlang-source
baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
       https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

##
## RabbitMQ server
##

[rabbitmq_server]
name=rabbitmq_server
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
       https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[rabbitmq_server-source]
name=rabbitmq_server-source
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300


#安裝rabbitmq和erlang
 yum -y  install erlang rabbitmq-server-3.9.15
 systemctl start  rabbitmq-server.service
 systemctl enable  rabbitmq-server.service

 #安裝 RabbitMQ Web 插件
 rabbitmq-plugins enable rabbitmq_management
 systemctl restart rabbitmq-server
 
 #創(chuàng)建賬號密碼并設置用戶的權限
 rabbitmqctl add_user  ys ys1234
 rabbitmqctl set_permissions -p /  ys ".*" ".*" ".*"

#創(chuàng)建web管理用戶
rabbitmqctl add_user admin admin1234
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" 

2.1. 訪問rabbitmq管理界面

消息中間件RabbitMQ,rabbitmq,分布式,負載均衡

3. RabbitMQ 集群

3.1. 使用集群的原因:

  • 前面介紹了如何安裝及運行 RabbitMQ 服務,不過這些是單機版的,無法滿足目前真實應用的要求。如果 RabbitMQ 服務器遇到內存崩潰、機器掉電或者主板故障等情況,該怎么辦?單臺 RabbitMQ服務器可以滿足每秒 1000 條消息的吞吐量,那么如果應用需要 RabbitMQ 服務滿足每秒 10 萬條消息的吞吐量呢?購買昂貴的服務器來增強單機 RabbitMQ 務的性能顯得捉襟見肘,搭建一個 RabbitMQ 集群才是解決實際問題的關鍵。

3.2. Rabbitmq集群安裝部署

  • RabbitMQ支持高可用性和可擴展性的集群部署。在RabbitMQ集群中,至少需要3個節(jié)點來確保高可用性和數(shù)據(jù)冗余。
  • 主機
主機名 IP地址
node1 192.168.10.10
node2 192.168.10.20
node3 192.168.10.30

3.2.1. 修改主機名

#3臺主機操作一樣
#添加hosts解析
vim  /etc/hosts
192.168.10.10   node1
192.168.10.20   node2
192.168.10.30   node3
#修改主機名
#每個節(jié)點執(zhí)行這條命令即可,注意這條命令網(wǎng)卡名需要根據(jù)實際情況填寫
hostname `cat /etc/hosts|grep $(ifconfig ens33|grep broadcast|awk '{print $2}')|awk '{print $2}'`;su

3.2.2. 以確保各個節(jié)點的 cookie 文件使用的是同一個值

  • 在 node1 上執(zhí)行遠程操作命令
scp -r /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/.erlang.cookie

3.2.3. 在node2、node3啟動服務

systemctl  start  rabbitmq-server.service

3.2.4. 在node2節(jié)點執(zhí)行以下操作

#rabbitmqctl stop 會將 Erlang 虛擬機關閉,rabbitmqctl stop_app 只關閉 RabbitMQ 服務
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app

3.2.5. 在node3節(jié)點執(zhí)行以下操作

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node2
rabbitmqctl start_app

3.2.6. 查看集群狀態(tài):

rabbitmqctl cluster_status

3.2.7. 解除集群節(jié)點(node2 和 node3 機器分別執(zhí)行)

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status
rabbitmqctl forget_cluster_node rabbit@node2(node1 機器上執(zhí)行)

3.3. 鏡像隊列

3.3.1. 使用鏡像的原因

  • 如果 RabbitMQ 集群中只有一個 Broker 節(jié)點,那么該節(jié)點的失效將導致整體服務的臨時性不可用,并且也可能會導致消息的丟失??梢詫⑺邢⒍荚O置為持久化,并且對應隊列的durable屬性也設置為true,但是這樣仍然無法避免由于緩存導致的問題:因為消息在發(fā)送之后和被寫入磁盤井執(zhí)行刷盤動作之間存在一個短暫卻會產(chǎn)生問題的時間窗。通過 publisherconfirm 機制能夠確??蛻舳酥滥男┫⒓航?jīng)存入磁盤,盡管如此,一般不希望遇到因單點故障導致的服務不可用。
  • 引入鏡像隊列(Mirror Queue)的機制,可以將隊列鏡像到集群中的其他 Broker 節(jié)點之上,如果集群中的一個節(jié)點失效了,隊列能自動地切換到鏡像中的另一個節(jié)點上以保證服務的可用性。

3.3.2. 搭建步驟

  • 登錄rabbitmq管理界面
    消息中間件RabbitMQ,rabbitmq,分布式,負載均衡

  • 點擊admin–>Policies添加以下內容:
    消息中間件RabbitMQ,rabbitmq,分布式,負載均衡文章來源地址http://www.zghlxwxcb.cn/news/detail-798564.html

4. Haproxy+Keepalive 實現(xiàn)高可用負載均衡

  • 整體架構圖
    消息中間件RabbitMQ,rabbitmq,分布式,負載均衡

4.1. Haproxy 實現(xiàn)負載均衡

  • HAProxy 提供高可用性、負載均衡及基于 TCPHTTP 應用的代理,支持虛擬主機,它是免費、快速并且可靠的一種解決方案,包括 Twitter,Reddit,StackOverflow,GitHub 在內的多家知名互聯(lián)網(wǎng)公司在使用。HAProxy 實現(xiàn)了一種事件驅動、單一進程模型,此模型支持非常大的井發(fā)連接數(shù)。

4.2. 搭建步驟

# 10.40、10.50安裝軟件
yum -y install haproxy  keepalived
#修改 10.40、10.50 的 haproxy.cfg
vim /etc/haproxy/haproxy.cfg
global
#定義了haproxy的日志輸出方式,這里使用了local0和local1兩個facility,其中l(wèi)ocal0表示輸出到syslog的local0日志文件中
#local1表示輸出到syslog的local1日志文件中,級別為notice。
    log /dev/log    local0
    log /dev/log    local1 notice
    pidfile     /var/run/haproxy.pid   #定義了haproxy進程的pid文件路徑
    chroot /var/lib/haproxy   #定義了haproxy要使用的chroot目錄,這里使用了/var/lib/haproxy
#定義了haproxy的統(tǒng)計信息socket文件路徑和權限,這里指定了/var/run/haproxy-admin.sock,權限為660,級別為admin
    stats socket /var/run/haproxy-admin.sock mode 660 level admin
    stats timeout 30s  #定義了haproxy統(tǒng)計信息的超時時間,這里設置為30秒
#定義了haproxy進程要使用的用戶和組,這里使用了haproxy用戶和haproxy組
    user haproxy
    group haproxy
    daemon        #定義了haproxy以守護進程方式運行
    nbproc 1      #定義了haproxy的工作進程數(shù),這里設置為1
defaults
    log     global   #定義了默認的日志輸出方式,這里使用了global,表示使用全局日志配置
    timeout connect 5000  #定義了連接超時時間,這里設置為5000毫秒
    timeout client  10m   #定義了客戶端超時時間,這里設置為10分鐘
    timeout server  10m   #定義了服務器超時時間,這里設置為10分鐘
listen  admin_stats
    bind 0.0.0.0:10080   #定義了監(jiān)聽地址和端口,這里使用了0.0.0.0:10080,表示監(jiān)聽所有IP地址的10080端口
    mode http    #定義了監(jiān)聽模式,這里使用了http模式
    log 127.0.0.1 local0 err    #定義了日志輸出方式,這里將日志輸出到127.0.0.1的local0設備,級別為err
    stats refresh 30s    #定義了統(tǒng)計信息刷新時間,這里設置為30秒
    stats uri /status    #定義了統(tǒng)計信息頁面的URI,這里設置為/status
    stats realm welcome login\ Haproxy   #定義了統(tǒng)計信息頁面的realm,這里設置為"welcome login Haproxy"
    stats auth admin:123456  #定義了統(tǒng)計信息頁面的用戶名和密碼,這里設置為admin和123456
    stats hide-version   #定義了是否隱藏haproxy的版本信息,這里設置為隱藏
    stats admin if TRUE  #定義了是否啟用統(tǒng)計信息頁面的管理功能,這里設置為啟用
listen rabbitmq
    bind 0.0.0.0:5672  #定義了監(jiān)聽地址和端口,這里使用了0.0.0.0:8443,表示監(jiān)聽所有IP地址的8443端口
    mode tcp           #定義了監(jiān)聽模式,這里使用了tcp模式
    option tcplog      #定義了是否啟用TCP日志記錄,這里設置為啟用
    balance source     #定義了負載均衡算法,這里使用了source算法
#定義了后端服務器,這里定義了三個服務器,分別是master1、master2和master3
#它們的IP地址和端口分別為192.168.2.10:5672、192.168.2.20:5672和192.168.2.30:5672
#check表示啟用健康檢查,inter 2000表示每2秒進行一次健康檢查
#fall 2表示檢查失敗的閾值為2,rise 2表示檢查成功的閾值為2,weight 1表示權重為1
    server node1 192.168.10.10:5672 check inter 2000 fall 2 rise 2 weight 1
    server node2 192.168.10.20:5672 check inter 2000 fall 2 rise 2 weight 1
    server node3 192.168.10.30:5672 check inter 2000 fall 2 rise 2 weight 1

listen rabbitmq_web
    bind 0.0.0.0:15672  #定義了監(jiān)聽地址和端口,這里使用了0.0.0.0:8443,表示監(jiān)聽所有IP地址的8443端口
    mode tcp           #定義了監(jiān)聽模式,這里使用了tcp模式
    option tcplog      #定義了是否啟用TCP日志記錄,這里設置為啟用
    balance source     #定義了負載均衡算法,這里使用了source算法

    server node1 192.168.10.10:15672 check inter 2000 fall 2 rise 2 weight 1
    server node2 192.168.10.20:15672 check inter 2000 fall 2 rise 2 weight 1
    server node3 192.168.10.30:15672 check inter 2000 fall 2 rise 2 weight 1

  • 啟動haproxy
systemctl  start haproxy.service
systemctl  enable  haproxy.service

4.3. 配置keepalived

#10.40修改配置文件keepalived.conf
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {                 #全局定義部分,用于設置全局參數(shù)
   notification_email {      #設置通知郵件的收件人郵箱
      yangshuangsxy@163.com   
   }
   notification_email_from root@localhost   #設置通知郵件的發(fā)件人郵箱
   smtp_server 127.0.0.1    #設置 SMTP 服務器的地址
   smtp_connect_timeout 30   #設置 SMTP 連接超時時間
   router_id LVS_DEVEL      #設置路由器的標識符
}
vrrp_script chk_haproxy {     #定義一個 VRRP 腳本,用于檢查 HAProxy 的狀態(tài)
    script  "/data/sh/check_haproxy.sh"    #指定要執(zhí)行的腳本路徑
    interval 2    #設置腳本執(zhí)行的間隔時間
    weight 2      #設置腳本的權重
 }
# VIP1
vrrp_instance VI_1 {     #定義一個 VRRP 實例
    state   MASTER       #設置實例的狀態(tài),可以是 MASTER 或 BACKUP
    interface  ens33      #指定 VRRP 實例綁定的網(wǎng)絡接口
    virtual_router_id 51  #設置虛擬路由器的 ID
    priority 100     #設置實例的優(yōu)先級
    advert_int 5     #設置 VRRP 廣告間隔時間
    nopreempt        #禁止搶占模式,即不允許備用節(jié)點搶占主節(jié)點
    authentication {   #設置認證參數(shù)
        auth_type PASS   #設置認證類型,可以是 PASS 或 AH
        auth_pass 1111   #設置認證密碼
    }
    virtual_ipaddress {  #設置虛擬 IP 地址
        192.168.10.100
    }
   track_script {   #設置要跟蹤的腳本
     chk_haproxy
    }
}

#10.50修改配置文件keepalived.conf如下:
state   BACKUP
priority 90
#其他的配置文件內容和上面的一樣

4.4. 創(chuàng)建檢測腳本,10.40和10.50都執(zhí)行以下操作

# 檢測是否安裝psmisc,如果沒有安裝,需要安裝
rpm -qa | grep psmisc
psmisc-22.20-17.el7.x86_64

vim  /data/sh/check_haproxy.sh
#!/bin/bash
#auto  check  nginx  process
#2024年1月16日15:16:29
#by  author  XiaoYuEr
killall  -0   haproxy
if  [[ $? -ne 0 ]];then
service keepalived stop
fi
#添加執(zhí)行權限
chmod +x /data/sh/check_haproxy.sh

4.5. 啟動服務,并驗證

systemctl  restart haproxy.service
systemctl  enable haproxy.service
systemctl  restart keepalived.service
systemctl  enable keepalived.service

#在10.40主機上驗證:
ip add

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:de:b6:0a brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.40/16 brd 192.168.255.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::3cd3:afe6:494b:44e6/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

到了這里,關于消息中間件RabbitMQ的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 分布式消息中間件概念

    分布式消息中間件概念

    ? ? 對于分布式消息中間件,首先要了解兩個基礎的概念,即什么是分布式系統(tǒng),什么又是中間件。 ? ? ? 分布式系統(tǒng) ? “A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messasges.”——《Distributed Systems Concepts and Desig

    2023年04月27日
    瀏覽(22)
  • 中間件RabbitMQ消息隊列介紹

    中間件RabbitMQ消息隊列介紹

    1.1 什么是 MQ MQ ( message queue ),從字面意思上看,本質是個隊列, FIFO 先入先出,只不過隊列中存放的內容是 message 而已,還是一種跨進程的通信機制,用于上下游傳遞消息。在互聯(lián)網(wǎng)架構中, MQ 是一種非常常 見的上下游 邏輯解耦+物理解耦 的消息通信服務。使用了 MQ 之

    2024年02月13日
    瀏覽(118)
  • RabbitMQ:可靠消息傳遞的強大消息中間件

    RabbitMQ:可靠消息傳遞的強大消息中間件

    ?消息中間件在現(xiàn)代分布式系統(tǒng)中起著關鍵作用,它們提供了一種可靠且高效的方法來進行異步通信和解耦。在這篇博客中,我們將重點介紹 RabbitMQ,一個廣泛使用的開源消息中間件。我們將深入探討 RabbitMQ 的特性、工作原理以及如何在應用程序中使用它來實現(xiàn)可靠的消息傳

    2024年02月12日
    瀏覽(26)
  • 消息隊列中間件(二)- RabbitMQ(一)

    消息隊列中間件(二)- RabbitMQ(一)

    接收,存儲,轉發(fā)消息 生產(chǎn)者 交換機 隊列 消費者 簡單模式 工作模式 發(fā)布 路由模式 主題模式 發(fā)布訂閱模式 Broker 接收和分發(fā)消息的應用 Virtual host 虛擬分組 Connection: TCP連接 Channel: 節(jié)省連接,每次訪問建立一次Connection消耗太大,所以使用信道代替連接 交換機 隊列 www.r

    2024年02月11日
    瀏覽(94)
  • 高性能消息中間件 RabbitMQ

    高性能消息中間件 RabbitMQ

    消息隊列 MQ全稱Message Queue(消息隊列),是在消息的傳輸過程中保存消息的容器。多用于系統(tǒng)之間的 異步通信 。 同步通信相當于兩個人當面對話,你一言我一語。必須及時回復: 異步通信相當于通過第三方轉述對話,可能有消息的延遲,但不需要二人時刻保持聯(lián)系。 消息

    2024年02月11日
    瀏覽(32)
  • Springboot整合RabbitMQ消息中間件

    spring-boot-rabbitmq–消息中間件整合 前言:RabbitMQ的各種交換機說明 1、直連交換機 生產(chǎn)者發(fā)布消息時必須帶著routing-key,隊列綁定到交換機時必須指定binding-key ,且routing-key和binding-key必須完全相同,如此才能將消息路由到隊列中 直連交換機通常用來循環(huán)分發(fā)任務給多個workers,

    2024年02月11日
    瀏覽(32)
  • 中間件_RabbitMQ五種消息模型

    中間件_RabbitMQ五種消息模型

    RabbitMQ官方文檔 RabbitMQ 提供了5種常用消息模型。但是其實3、4、5這三種都屬于訂閱模型,只不過進行路由的方式不同。 簡單消息隊列官方文檔 1、創(chuàng)建簡單消息隊列 2、導入依賴 3、編寫生產(chǎn)者測試類SpringAmqpTest,并利用 RabbitTemplate 實現(xiàn)消息發(fā)送 4、編寫消費者,監(jiān)聽隊列消息

    2024年02月06日
    瀏覽(23)
  • Python學習(3)- 消息中間件rabbitmq

    Python學習(3)- 消息中間件rabbitmq

    消息隊列中間件是分布式系統(tǒng)中重要的組件,主要解決 應用解耦 , 異步消息 , 流量削鋒 等問題,實現(xiàn)高性能,高可用,可伸縮和最終一致性架構 rabbitmq 簡單模式 生產(chǎn)者: 鏈接rabbitmq 創(chuàng)建隊列 向指定的隊列中插入數(shù)據(jù) 交換機模式 發(fā)布訂閱模式 模式 模糊匹配模式

    2024年02月22日
    瀏覽(21)
  • 「中間件」rabbitmq 消息隊列基礎知識

    RabbitMQ是一個消息隊列軟件,用于在應用程序之間轉發(fā)消息。以下是RabbitMQ的基本概念: 消息:RabbitMQ中的消息是傳遞的基本單位,它由消息頭和消息體組成。 隊列(Queue):隊列是消息的緩沖區(qū),用于存儲待處理的消息。 交換器(Exchange):交換器是接收生產(chǎn)者發(fā)送的消息并

    2024年02月07日
    瀏覽(97)
  • RabbitMQ系列教程消息中間件技術精講

    作者:禪與計算機程序設計藝術 消息中間件(Message Queue,MQ)是一種分布式應用間通信的組件。它可以在不同的系統(tǒng)之間傳遞消息、數(shù)據(jù)或指令。在現(xiàn)代IT架構中,越來越多的應用需要相互通信,所以出現(xiàn)了消息隊列的概念。RabbitMQ是一個開源的AMQP實現(xiàn),是一個可靠、可擴展

    2024年02月06日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包