rabbitmq介紹
rabbitmq: 是一個消息中間件,主要提供消息的接受和發送,實現各微服務之間的消息 異步
一般以集羣方式部署
rabbitmq是依據erlang的分佈式特性來實現分佈式集羣
部署rabbitmq分佈式集羣時要先安裝erlang, 並把其中-個服務的cookie複製到另外的 節點
rabbitmq集羣中,各個rabbitmq爲對等節點,即每個節點均提供給客戶端連接,進行 消息的接收和發送。節點分爲內存節點和磁盤節點,一般的,均應建立爲磁盤節點,爲 了防止機器重啓後的消息消失
Rabbitmq的cluster集羣模式一般分爲兩種
普通模式
鏡像模式
普通模式下 以兩個節點(rabbit01、rabbit02) 爲例
消息實體只存在於其中一個節點rabbit01 (或者rabbit02)
rabbit01和rabbit02兩個節點僅有相同的元數據,即隊列的結構
consumer應儘量連接每一個節點,從中取消息(否則無論consumer連rabbit01或rabbit02, 出口總在rabbit01,會產生瓶頸)
鏡像模式
消息隊列通過rabbitmq HA鏡像隊列進行消息隊列實體複製
將需要消費的隊列變爲鏡像隊列,存在於多個節點,以實現RabbitMQ的HA高可用性
消息實體會主動在鏡像節點之間實現同步
缺點就是,集羣內部的同步通訊會佔用大量的網絡帶寬
環境要求
多個節點需要在同一個局域網內
需要有相同的erlang cookie 否則不能正常通信
(cookie內容一致性 可採用scp的方式進行拷貝複製)
環境介紹
node1 192.168.12.10
node2 192.168.12.11
node3 192.168.12.12
三臺機子的基礎配置
RabbitNode1固定IP配置
RabbitNode2固定IP配置 拷貝壓縮包文件
RabbitNode3固定IP配置 拷貝壓縮包文件
配置/etc/hosts文件
配置hostname
配置yum
安裝erlang依賴包
編譯安裝
讓環境變量立即生效 退出當前終端後失效
驗證是否成功
安裝rabbitmq(3個主機)
編譯安裝
導入rabbitmq的管理界面(3個機子)
設置erlang(保證集羣內的cookie內容一致)
編譯安裝:$HOME/.erlang.cookie
rpm安裝:/var/lib/rabbitmq/.erlang.cookie
將 node1 的“.erlang.cookie”文件複製到 node2、node3 文件的權限爲 400
使用-detached參數運行各節點(3個機子)
建立管理用戶
添加用戶並設置密碼(guest用戶 只能在本地訪問)
添加權限(使admin用戶對虛擬主機”/”具有權限)
修改用戶角色(加入administrator用戶組)
遠程訪問 用戶名admin 密碼123456
組成集羣
將node2、node3 與node1組成集羣
1 停止應用 並將節點設置爲原始狀態(勿使用./rabbitmqctl stop)
2 重複上述操作 加入node1的集羣
3 node2 與node3自動建立連接 集羣配置完畢
4 查看羣集節點狀態(在任意節點上執行)
在web頁面上查看(node3爲黃色 由於該節點上web管理插件還未啓用)
在node3上啓動
設置鏡像隊列策略(在任意節點上執行)
web頁方式
命令方式
rabbitmqctl set_policy -p coresystem ha-all “^” '{"ha-mode":"all"}’
coresystem 虛擬主機名稱
ha-all 策略名稱
"^"匹配所有的隊列
‘{“ha-mode”:“all”}’策略模式 all (即複製到所有節點,包含新增節點)
虛擬主機的作用
做一個消息的隔離
本質是一個rabbitmq-server
是否增加虛擬主機,增加幾個,這是由開發中的業務決定(即有哪幾類服務,哪些 服務用哪一個虛擬主機,這是一個規劃)
配置Rabbitmq的負載均衡功能(通過Haproxy軟件實現負載均衡功能)
安裝、配置Haproxy
建立配置文件haproxy.cfg
創建啓動腳本
啓動腳本權限不夠 增加權限
重新啓動報錯 沒有用戶和組 添加用戶haproxy 其餘報錯是因爲少打了個空格
再次啓動還是失敗 由於haproxy沒有得到VIP,但是配置文件又綁定了VIP地址
修改內核參數 增加一條語句 啓動haproxy的時候,允許忽視VIP的存在
保存結果使結果生效
再次啓動又報錯 丟失/var/lib/haproxy/stats
創建文件
重啓腳本 終於成功
測試羣集負載均衡功能
停止node3的網卡