CentOS7安裝rabbitmq集群(二進位)

一、RabbiMQ簡介

RabbiMQ是用Erang開發的,集群非常方便,因為Erlang天生就是一門分散式語言,但其本身並不支援負載均衡。

RabbiMQ模式

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

RabbiMQ特點

RabbitMQ的集群節點包括記憶體節點、磁碟節點。RabbitMQ支援消息的持久化 也就是數據寫在磁碟上,最合適的方案就是既有記憶體節點,又有磁碟節點。

環境

使用3台伺服器進行搭建,採用rabbitmq鏡像模式

作業系統

主機名

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集群節點必須在同一網段里,如果是跨廣域網,效果會變差。

整體架構

修改主機名

如果主機名正確,請忽略此步驟

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

 添加hosts

vi /etc/hosts

內容如下:

192.168.31.149 centos7_01  192.168.31.186 centos7_02  192.168.31.238 centos7_03

二、安裝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檢查

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

三、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

四、配置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

五、基於鏡像隊列的集群

登錄到第一台主機,啟動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 [email protected]:/home/rabbitmq/  scp -P 22 /home/rabbitmq/.erlang.cookie [email protected]:/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台節點資訊

六、前端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

效果如下:

本文參考鏈接: https://www.cnblogs.com/shihaiming/p/11014257.html