中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RabbitMQ集群架構模式及搭建Rabbitmq-Mirror鏡像集群

發布時間:2020-04-17 14:49:54 來源:億速云 閱讀:5099 作者:三月 欄目:系統運維

下文給大家帶來RabbitMQ集群架構模式及搭建Rabbitmq-Mirror鏡像集群,希望能夠給大家在實際運用中帶來一定的幫助,負載均衡涉及的東西比較多,理論也不多,網上有很多書籍,今天我們就用億速云在行業內累計的經驗來做一個解答。

RabbitMQ集群架構模式

那么對于Rabbitmq是單點應用來說,如果rabbitmq整個消息mq都會攤掉,所有在mq的消息高可用部分,就顯得尤為重要了,那么在mq中提供了四種集群架構方案:

1、主備模式 (Warren)
2、鏡像模式 (Mirror)
3、遠程模式   (Shovel)
4、多活模式 (Federation)

(猜你喜歡:RabbitMQ集群的原理是什么)

RabbitMQ集群架構模式及搭建Rabbitmq-Mirror鏡像集群

在我們開發中最直接的模式就是主備模式:主要實現RabbitMQ的高可用集群,一般在并發和數據量不高的情況下,這種模型非常的好用且簡單,主備模式也稱為Warren模式

(猜你喜歡:rabbitmq 中鏡像與集群的區別)

也就是一主一備,對于集群來說至少有兩臺云服務器,那么這兩臺服務器一臺在工作,一臺在閑置,注意,這個的主備和我們之前的主從是不一樣的,主從的話是一臺作為主服務器,一臺作為從服務器,雖然這兩臺是數據同步,主負責讀寫,而從只負責只讀,而主備是一臺工作一臺閑著,如果一臺服務器宕機了,那么備服務器切換過來,可能的話,這種對于負載均衡的話一臺只忙著干活,一臺只閑著,這種的生產中用的也很少,這種會造成我們資源的一個浪費。

鏡像模式:集群模式非常經典的就是Mirror鏡像模式,保證100%數據不丟失,在實際工作中也是用的最多的,而且實現集群也非常簡單,一般互聯網大廠都會構建這種鏡像集群模式,原理主要是在主備的基礎上進行了擴展,集群中所有的節點設備都是同步的,每一個隊列,交換機里面的配置信息和我們的數據都是同步的,對于這些鏡像在底層同時進行工作,前面的話采用一個負載均衡器,采用nginx或者haproxy也好,進行負載均衡。

遠程模式:遠程模式可以實現雙活的一種模式,簡稱Shovel模式,所謂Shovel就是我們可以把消息進行不同數據中心的復制工作,我們可以跨地域的讓兩個MQ集群互聯,比如說一個集群,我們都會放在一個機房里面,那么如果北京的機房出現了一些事故停電,或者自然災害,那么這個集群都會宕機了,那么在我們對數據要求極高的大型應用我們需要設置多活或者雙活的模式,也就是要搭建多個數據中心,或者多套集群,那么這些集群可以一個會放在上海,一個放在北京,還有應放在廣州,三個集群數據都是同步的,中間有任何一個集群出現了問題,馬上靈活的切換,那么這三個集群都是可以訪問的話,我們可能會按照距離,或者訪問速度來進行優先選擇哪組集群,或者數據中心進行訪問,所有多活模式,在銀行開發的時候一般也叫做容災的機制,至少構建兩套集群放在不同的地域,一個有問題了,立馬進行切換,不至于整個系統宕機,這就是多活模式,在多活模式中MQ也提供了相應的實現方式,早期使用的Shovel模式,這個模式是mq自帶的一種模式,主要就是可以把消息在不同的數據中心進行負載分發,主要就是可以實現跨地域的讓兩個mq集群進行互聯。
那么這個shovel模式需要統一的版本,網絡達到一個什么樣的水平,配置的話也是有些復雜,這種的話目前已經淘汰了,在真正的數據復制的情況下,會使用多活模式。

多活模式:這種模式也是實現異地數據復制的主流模式,這種模式是依賴rabbimq的fedrtation插件的模式
本身不是mq自帶的東西,是在mq上進行了擴展,而這種擴展是實現的可靠的AMQP的數據通信,因此配置起來也比較容易,相當于配置簡單化之后的shovel

RabbitMQ集群架構模式及搭建Rabbitmq-Mirror鏡像集群

一、搭建Rabbitmq-Mirror鏡像集群HA實現

配置
mq和erlang版本
RabbitMQ使用Erlang開發
Erlang(['?:l??])是一種通用的面向并發的編程語言, Erlang是一個結構化,動態類型編程語言,內建并行計算支持。
使用Erlang來編寫分布式應用要簡單的多,Erlang運行時環境是一個虛擬機,有點像Java虛擬機,這樣代碼一經編譯,同樣可以隨處運行。
下載地址:https://www.rabbitmq.com/download.html
直接下載最新的rabbitmq到本地

rabbitmq還需要依賴erlang的運行環境
https://www.erlang-solutions.com/resources/download.html
選擇centos,找到22.2.5最新的版本下載到本地

[root@m2 mq-soft]# ls
esl-erlang_22.2.8-1~centos~7_amd64.rpm  rabbitmq-server-3.8.3-1.el7.noarch.rpm

關閉防火墻:

#systemctl stop firewalld
#systemctl disable firewalld

關閉selinux:

#sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
#setenforce 0  # 臨時

2臺安裝好Rabbitmq的Centos環境,啟動的時候使用后臺啟動
后臺啟動mq命令:rabbitmq-server -detached
這里我是提前部署好的MQ,如果想知道怎么部署MQ可以看上一篇文章

修改hostnamectl set-hostname m1/m2
加入主機列表 vim /etc/hosts

[root@localhost ~]# more /etc/hosts
192.168.30.27 m1
192.168.30.29 m2

mq對主機名非常的敏感,即使使用hostnamectl set-hostname m1主機名之后不重啟的話也是造成集群的不通信的問題
reboot重啟

二、復制.erlang.cookie
.erlang.cookie是erlang分布式的token文件,集群內所有設備要
持有相同的.erlang.cookie文件才允許彼此通信。
也就是相當于你有學生證它也有學生證,你們就是學生,那么就可以一起上學,也就是一個token文件
找到這個.cookie結尾的文件,里面看到的是一個字符串,也就是兩個主機需要持有相同的erlang的cookie文件才能進行彼此通信

[root@m1 ~]# find / -name *.cookie
/var/lib/rabbitmq/.erlang.cookie
[root@m1 ~]# more /var/lib/rabbitmq/.erlang.cookie
ZCSNJQYQPNPPLIYWOVBJ

進行拷貝,將cookie文件拷貝過去

m1 # scp /var/lib/rabbitmq/.erlang.cookie root@192.168.30.24:/var/lib/rabbitmq/
root@192.168.30.24's password: 

在兩臺電腦上執行chmod進行授權,400對擁有者才能讀取

m1          chmod 400 /var/lib/rabbitmq/.erlang.cookie 
m2          chmod 400 /var/lib/rabbitmq/.erlang.cookie 

三、配置鏡像集群
在m2服務器上執行下面的命令將與m1服務器進行復制
– rabbitmqctl stop_app 暫停服務
– rabbitmqctl join_cluster rabbit@m1 加入到m1的集群
– rabbitmqctl start_app 啟動服務
– rabbitmqctl cluster_status 驗證集群結果

終止與啟動應用
rabbitmqctl start_app 啟動應用
rabbitmqctl stop_app 終止應用

在mq2上操作

[root@m2 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@m2 ...
[root@m2 ~]# rabbitmqctl join_cluster rabbit@m1
Clustering node rabbit@m2 with rabbit@m1
[root@m2 ~]# rabbitmqctl start_app
Starting node rabbit@m2 ...
[root@m2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@m2 ...
Basics

Cluster name: rabbit@m1

Disk Nodes

rabbit@m1
rabbit@m2

Running Nodes

rabbit@m1
rabbit@m2

Versions

rabbit@m1: RabbitMQ 3.8.3 on Erlang 22.2.8
rabbit@m2: RabbitMQ 3.8.3 on Erlang 22.2.8

查看已經注冊進來,一般生產中的話,要不就是禁用這個guest用戶,要不就是跟它修改一個比較復雜的密碼

RabbitMQ集群架構模式及搭建Rabbitmq-Mirror鏡像集群

創建test查看m2也會同步進來

RabbitMQ集群架構模式及搭建Rabbitmq-Mirror鏡像集群

一般在程序中我們需要連接一個IP地址,那么這個地方就需要這么一個負載均衡去實現,這里我們使用HAproxy去實現

四、鏡像模式遇到的問題

RabbitMQ集群架構模式及搭建Rabbitmq-Mirror鏡像集群

當配好兩個mq的時候,對于客戶端也就是java當我們去連接的時候就需要一個統一的入口來進行系統或者消息直接的調用,也就是需要連接哪臺服務器進行數據的處理,如果是這種情況的話,當m1掛的話,我們就需要手動的去修改Java客戶端的地址了,另外還有有一個問題就是m1猛干活,m2閑著沒事做,而對我們的資源利用也是不合理的,那么負載均衡器就應運而生了。

而當有haproxy的時候它會將這個請求進行具體的轉發到m1或者m2上進行分工,比如安裝簡單的算法輪詢模式,將任務進行均攤,這樣資源就會被合理的利用了,對于Java客戶端直接可以配置proxy的地址了,而haproxy可以通過心跳的感知哪些服務器是可以發送消息的,比如遇到m2的機器宕機了,它就會自動的將我們的服務退出,來使用其他的節點也進行提供服務

HAProxy 代理服務器
HAProxy 是一款提供高可用性、負載均衡以及基于TCP(第四層)
和HTTP(第七層)應用的代理軟件,支持虛擬主機,它是免費、
快速并且可靠的一種解決方案。
RabbitMQ集群鏡像模式中,HAProxy用于做Tcp,提供節點負載
均衡(LB-LoadBalance)與故障發現。

安裝haproxy
yum -y install haproxy
配置文件的地址

[root@haproxy ~]# find / -name haproxy.cfg
/etc/haproxy/haproxy.cfg

編譯配置文件

#---------------------------------------------------------------------
#common defaults that all the 'listen' and 'backend' sections will
#use if not designated in their block
#---------------------------------------------------------------------
下面的不要了,然后配置以下內容
#對MQ集群進行監聽

對MQ的集群的監聽HAproxy配置地址我放在了倉庫中,有需要的需要將公鑰發給我

git clone git@gitee.com:zhaocheng172/rabbitmq-haproxy.git

生效配置文件
[root@haproxy ~]# haproxy -f /etc/haproxy/haproxy.cfg

連接haproxy訪問地址是上面設置的連接密碼rabbitmq,這里在配置文件中去登錄的密碼,和url地址
登錄進來可以看到我們的MQ進行監控到了,如果使用JAVA發送系統調用的消息之后那么就會進行消息的提供與消費。

RabbitMQ集群架構模式及搭建Rabbitmq-Mirror鏡像集群

看了以上關于RabbitMQ集群架構模式及搭建Rabbitmq-Mirror鏡像集群,如果大家還有什么地方需要了解的可以在億速云行業資訊里查找自己感興趣的或者找我們的專業技術工程師解答的,億速云技術工程師在行業內擁有十幾年的經驗了。

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大安市| 石阡县| 潢川县| 太白县| 昭平县| 上饶市| 陕西省| 繁峙县| 颍上县| 瓮安县| 永仁县| 景谷| 循化| 年辖:市辖区| 江阴市| 巧家县| 房产| 彭阳县| 龙胜| 教育| 元阳县| 桑植县| 南昌县| 安平县| 沿河| 东兴市| 湖北省| 诏安县| 偏关县| 雅安市| 定陶县| 泾川县| 芜湖市| 高台县| 阿拉善盟| 商南县| 介休市| 齐河县| 福泉市| 渭南市| 邮箱|