CentOS7安裝rabbitmq集羣(二進制)

 

1、RabbiMQ簡介

RabbiMQ是用Erang開發的,集羣很是方便,由於Erlang天生就是一門分佈式語言,但其自己並不支持負載均衡。html

RabbiMQ模式

RabbitMQ模式大概分爲如下三種:
(1)單一模式。
(2)普通模式(默認的集羣模式)。
(3) 鏡像模式(把須要的隊列作成鏡像隊列,存在於多個節點,屬於RabbiMQ的HA方案,在對業務可靠性要求較高的場合中比較適用)。
要實現鏡像模式,須要先搭建一個普通集羣模式,在這個模式的基礎上再配置鏡像模式以實現高可用。前端

RabbiMQ特色

RabbitMQ的集羣節點包括內存節點、磁盤節點。RabbitMQ支持消息的持久化
也就是數據寫在磁盤上,最合適的方案就是既有內存節點,又有磁盤節點。node

環境

使用3臺服務器進行搭建,採用rabbitmq鏡像模式linux

操做系統 主機名 ip地址 用途
centos7.4 centos7_01 192.168.31.149 rabbitmq001(磁盤節點)
centos7.4 centos7_02 192.168.31.186 rabbitmq002(內存節點)
centos7.4 centos7_02 192.168.31.238 rabbitmq003(內存節點)

 

 

 

 

 

注意,這裏三臺服務器都鏈接上互聯網,另外RabbitMQ集羣節點必須在同一網段裏,若是是跨廣域網,效果會變差。nginx

總體架構

 

修改主機名

若是主機名正確,請忽略此步驟centos

hostnamectl set-hostname centos7_01 hostnamectl set-hostname centos7_02 hostnamectl set-hostname centos7_03

 

 添加hostsbash

vi /etc/hosts

內容以下:服務器

192.168.31.149 centos7_01 192.168.31.186 centos7_02 192.168.31.238 centos7_03

 

2、安裝erlang

mkdir -p /data/software yum install -y wget epel-release cd /data/software wget http://download.51yuki.cn/esl-erlang_21.3.6-1_centos_7_amd64.rpm
yum -y install esl-erlang_21.3.6-1_centos_7_amd64.rpm yum clean all

 

erlang檢查cookie

#  erl -version Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 10.3.4

 

3、rabbitmq安裝

cd /data/software wget http://download.51yuki.cn/rabbitmq-server-generic-unix-3.7.15.tar.xz
tar xvf rabbitmq-server-generic-unix-3.7.15.tar.xz -C /data/
mv /data/rabbitmq_server-3.7.15 /data/rabbitmq echo 'export PATH=/data/rabbitmq/sbin:$PATH'>> /etc/profile source /etc/profile which rabbitmqctl

 

4、配置rabbitmq

 修改配置文件網絡

vi /data/rabbitmq/etc/rabbitmq/rabbitmq-env.conf

 

 內容以下:

RABBITMQ_NODENAME=rabbitmq001@centos7_01 RABBITMQ_NODE_IP_ADDRESS=192.168.31.149 RABBITMQ_NODE_PORT=5672 RABBITMQ_MNESIA_BASE=/data/rabbitmq/data RABBITMQ_LOG_BASE=/data/rabbitmq/logs

 

說明:

 

屬性 描述 默認值
RABBITMQ_NODENAME rabbitmq節點名稱,集羣中要注意節點名稱惟一 linux 默認節點名爲 rabbit@$hostname
RABBITMQ_NODE_IP_ADDRESS 綁定的網絡接口 默認爲空字符串表示綁定本機全部的網絡接口
RABBITMQ_NODE_PORT 端口 默認爲5672
RABBITMQ_MNESIA_BASE mnesia所在路徑 $RABBITMQ_HOME/var/lib/rabbitmq/mnesia
RABBITMQ_LOG_BASE 日誌所在路徑 $RABBITMQ_HOME/var/log/rabbitmq

 

 

 

 

 

更多屬性,請參考官網連接:
http://www.rabbitmq.com/man/rabbitmq-env.conf.5.html

 

編輯配置文件

mkdir -p /data/rabbitmq/data mkdir -p /data/rabbitmq/logs vi /data/rabbitmq/etc/rabbitmq/rabbitmq.config

內容以下:

[ {rabbit, [ {tcp_listeners, [5672]}, {dump_log_write_threshold, [1000]}, {vm_memory_high_watermark, 0.5}, {disk_free_limit, "200MB"}, {hipe_compile,true} ] } ].

注意:[]. 後面有一個點

 

說明:

Key Documentation
tcp_listeners 用於監聽 AMQP鏈接的端口列表(無SSL). 能夠包含整數 (即」監聽全部接口」)或者元組如 {「127.0.0.1」, 5672} 用於監聽一個或多個接口.Default: [5672]
dump_log_write_threshold 更改mnesia的轉儲日誌寫入閾值 Default: [100]
vm_memory_high_watermark 流程控制觸發的內存閥值.相看memory-based flow control 文檔.Default: 0.4
disk_free_limit RabbitMQ存儲數據分區的可用磁盤空間限制.當可用空間值低於閥值時,流程控制將被觸發.此值可根據RAM的總大小來相對設置 (如.{mem_relative, 1.0}).此值也能夠設爲整數(單位爲bytes)或者使用數字單位(如.」50MB」).默認狀況下,可用磁盤空間必須超過50MB.參考 Disk Alarms 文檔.Default: 50000000
hipe_compile 將此選項設置爲true,將會使用HiPE預編譯部分RabbitMQ,Erlang的即時編譯器.這能夠增長服務器吞吐量,但會增長服務器的啓動時間.

 

 

更多參考,請參考連接:
https://blog.csdn.net/Super_RD/article/details/70327712

 

修改權限

useradd -u 1020 -s /sbin/nologin rabbitmq chown -R rabbitmq:rabbitmq -R /data/rabbitmq

另外2臺服務器,按以上方式安裝rabbitmq和erlang

 

5、基於鏡像隊列的集羣

登陸到第一臺主機,啓動rabbitmq服務
注意:必需要切換到普通用戶

su -s /bin/bash - rabbitmq nohup /data/rabbitmq/sbin/rabbitmq-server start &

 

查看輸出信息

tail -f nohup.out

 

輸出以下:

HiPE compiling:  |---------------------------------------------------------|
                 |#########################################################| Compiled 57 modules in 302s ## ## ## ## RabbitMQ 3.7.15. Copyright (C) 2007-2019 Pivotal Software, Inc. ########## Licensed under the MPL. See https://www.rabbitmq.com/
 ###### ## ########## Logs: /data/rabbitmq/logs/centos7_01.log /data/rabbitmq/logs/centos7_01_upgrade.log Starting broker... completed with 0 plugins.

 注意:出現completed with,表示啓動成功

 

查看cookie文件是否存在

注意:此文件必須存在

ls .erlang.cookie

 

 查看端口,是否存在

ss -tunlp|grep 5672

 

拷貝cookie

拷貝第一臺服務器rabbitmq的家目錄下.erlang.cookie文件到另外2臺服務器rabbitmq的家目錄下

scp -P 22 /home/rabbitmq/.erlang.cookie root@192.168.31.186:/home/rabbitmq/
scp -P 22 /home/rabbitmq/.erlang.cookie root@192.168.31.238:/home/rabbitmq/

 

登陸另外2臺服務器,修改屬主和屬組

chown -R rabbitmq.rabbitmq /home/rabbitmq/.erlang.cookie chmod 600 /home/rabbitmq/.erlang.cookie

 

 啓動另外2臺rabbitmq服務器

su -s /bin/bash - rabbitmq nohup /data/rabbitmq/sbin/rabbitmq-server start &

 

等待幾分鐘,查看nohup.out輸出,確保正常啓動了。

查看端口

# ss -tunlp|grep 5672 tcp LISTEN 0      128       *:25672                 *:*                   users:(("beam.smp",pid=11461,fd=66))

 

安裝插件

3臺都安裝一下

rabbitmq-plugins enable rabbitmq_management

 

建立用戶及受權

登陸第一臺服務器執行

rabbitmqctl add_user mqadmin "Nwvh3#vu@kqLP&FdHt" rabbitmqctl set_permissions -p / mqadmin . . . rabbitmqctl set_user_tags mqadmin administrator

 

加入集羣

登陸第一臺服務器,查看集羣狀態

# rabbitmqctl cluster_status Cluster status of node centos7_01@centos7_01 ... [{nodes,[{disc,[centos7_01@centos7_01]}]}, {running_nodes,[centos7_01@centos7_01]}, {cluster_name,<<"centos7_01@centos7_01">>}, {partitions,[]}, {alarms,[{centos7_01@centos7_01,[]}]}]

 

登陸rabbitmq002rabbitmq003,加入集羣
必須先關閉app

rabbitmqctl stop_app

 

再加入

rabbitmqctl join_cluster --ram rabbitmq001@centos7_01

 

最後啓動app

rabbitmqctl start_app

 

查看集羣狀態
登陸到任意節點查詢

rabbitmqctl cluster_status

 

輸出以下:

Cluster status of node rabbitmq001@centos7_01 ... [{nodes,[{disc,[rabbitmq001@centos7_01]}, {ram,[rabbitmq003@centos7_03,rabbitmq002@centos7_02]}]}, {running_nodes,[rabbitmq002@centos7_02,rabbitmq003@centos7_03, rabbitmq001@centos7_01]}, {cluster_name,<<"rabbitmq001@centos7_01">>}, {partitions,[]}, {alarms,[{rabbitmq002@centos7_02,[]}, {rabbitmq003@centos7_03,[]}, {rabbitmq001@centos7_01,[]}]}]

注意:確保nodes,running_nodes,alarms有3臺節點信息

 

6、前端nginx反向代理

yum install -y nginx vi /etc/nginx/nginx.conf

 

增長一行

include /etc/nginx/conf.d/vhosts/*.conf;

 

建立目錄

mkdir /etc/nginx/conf.d/vhosts/
mkdir -p /data/log/nginx/

 

編輯配置文件

vi /etc/nginx/conf.d/vhosts/rabbitmq.xx.com.conf

 

內容以下:

upstream rabbitmq { server 192.168.31.149:15672  max_fails=2 fail_timeout=1; server 192.168.31.186:15672  max_fails=2 fail_timeout=1; server 192.168.31.238:15672  max_fails=2 fail_timeout=1; } server { listen 80; server_name rabbitmq.xx.com; charset utf-8; access_log /data/log/nginx/rabbitmq.xx.com.access.log main; error_log /data/log/nginx/rabbitmq.xx.com.error.log; location / { root html; index index.html index.htm; proxy_pass http://rabbitmq;
 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }

 

啓動nginx

nginx -t nginx

 

測試訪問

http://rabbitmq.xx.com
用戶名:mqadmin 密碼:Nwvh3#vu@kqLP&FdHt

 

效果以下:

 

本文參考連接:
http://www.javashuo.com/article/p-dqmaxnbn-mw.html

相關文章
相關標籤/搜索