一、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.

三、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..tar.xz -C /data/
mv /data/rabbitmq_server-3.7. /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=
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, []},
{dump_log_write_threshold, []},
{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  -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 modules in 302s
## ##
## ## RabbitMQ 3.7.. Copyright (C) - 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 plugins.

注意:出现completed with,表示启动成功

查看cookie文件是否存在

注意:此文件必须存在

ls .erlang.cookie

查看端口,是否存在

ss -tunlp|grep 

拷贝cookie

拷贝第一台服务器rabbitmq的家目录下.erlang.cookie文件到另外2台服务器rabbitmq的家目录下

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

登录另外2台服务器,修改属主和属组

chown -R rabbitmq.rabbitmq /home/rabbitmq/.erlang.cookie
chmod /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 *: *:* users:(("beam.smp",pid=,fd=))

安装插件

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: max_fails= fail_timeout=;
server 192.168.31.186: max_fails= fail_timeout=;
server 192.168.31.238: max_fails= fail_timeout=;
}
server {
listen ;
server_name rabbitmq.xx.com;
charset utf-;
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 /.html;
location = /40x.html {
}
error_page /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

CentOS7安装rabbitmq集群(二进制)的更多相关文章

  1. CentOS7安装RabbitMQ集群

    实验环境 RabbitMQ 集群 server1.example.com    IP: 10.10.10.11    Node: diskserver2.example.com    IP: 10.1 ...

  2. 集群架构和CentOS7安装RabbitMQ集群(单机版)

    1. 集群架构 1.1 四种内部元数据 队列元数据.交换器元数据.绑定元数据.vhost元数据. 单一节点中:会将数据存储到内存,同时将持久化元数据保存到硬盘. 集群中: 存储到磁盘上.内存中. 集群 ...

  3. CentOS7环境RabbitMQ集群配置管理(转载)

    CentOS7环境RabbitMQ集群配置管理(转载)   CentOS7系统内核版本:3.10.0-514.26.2.el7.x86_64 一.对应主机host地址(三台主机host文件要保持一致) ...

  4. docker-compose安装rabbitmq集群(主从集群---》镜像集群)

    docker-compose安装rabbitmq集群(主从集群--->镜像集群) yls 2020/5/11 创建docker-compose.yml 文件 version: '3' servi ...

  5. k8s中安装rabbitmq集群

    官方文档地址:https://www.rabbitmq.com/kubernetes/operator/quickstart-operator.html 要求 1.k8s版本要1.18及其以上 2.能 ...

  6. Springboot 1.5.x 集成基于Centos7的RabbitMQ集群安装及配置

    RabbitMQ简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件). RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一 ...

  7. CentOS7 搭建RabbitMQ集群 后台管理 历史消费记录查看

    简介 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接 ...

  8. kubernets安装rabbitmq集群.

    RabbitMQ集群的两种模式 1)普通模式:默认的集群模式,队列消息只存在单个节点上 2)镜像模式:队列为镜像队列,队列消息存在每个节点上 配置同步: 配置同步: 1.Ha mode 同步模式,以下 ...

  9. CentOS7 安装Hbase集群

    继续接上一章,已安装好Hadoop集群环境 http://www.cnblogs.com/dopeter/p/4612232.html 在此基础上继续安装Hbase集群 Hbase版本为1.0.1.1 ...

随机推荐

  1. 字符串Hash学习笔记

    [toc] # 以下内容作废,太多错误了,等我有时间重写 说一下什么是Hash,说白了就是把一大坨字符用一些神奇的数来表示,可以说是把字符加密了. 简单一点就是一个像函数一样的东西,你放进去一个值,它 ...

  2. 利用python爬虫爬取图片并且制作马赛克拼图

    想在妹子生日送妹子一张用零食(或者食物类好看的图片)拼成的马赛克拼图,因此探索了一番= =. 首先需要一个软件来制作马赛克拼图,这里使用Foto-Mosaik-Edda(网上也有在线制作的网站,但是我 ...

  3. Linux后台运行和关闭程序、查看后台任务

    fg.bg.jobs.&.ctrl+z   1.&    (最经常被用到)     这个用在一个命令的最后,可以把这个命令放到后台执行   2.ctrl + z     可以将一个正在 ...

  4. 【CSP膜你赛】柠檬的密码(manacher 二分 单调性 st表)

    题目描述 Lemon觉得他需要一个复杂的密码来保证他的帐号的安全.他经过多日思考,决定使用一个长度为奇数的回文串来作为他的密码.  但是这个回文串太长了,Lemon记不住,于是Lemon决定把它记在本 ...

  5. Xshell远程登录

    1.xshell由一台服务器a登录另一台服务器b sftp -oPort = root@ip 2.下载git /上传pull git b服务器想下载的目标文件目录 a服务器上的文件下载目录

  6. 第08组 Beta冲刺(2/4)

    队名 八组评分了吗 组长博客链接(2分) 组员1李昕晖(组长) 过去两天完成了哪些任务 文字/口头描述 12月9号了解各个小组的进度与难以攻破的地方,晚上安排开会,安排新的冲刺任务. 重新分配小组及个 ...

  7. pdf怎么转换成word

    在线转换:https://app.xunjiepdf.com/pdf2word

  8. docker swarm 集群搭建

    创建一个集群 [vagrant@node1 ~]$ docker swarm init --advertise-addr 192.168.9.101 Swarm initialized: curren ...

  9. H5+js调用相机

    在机缘巧合之下,了解到用HTML5和javascript调用摄像头来实现拍照功能,今天就把大致原理写下来.页面布局很简单,就是一个input标签,两个HTML5元素video.canvas和一个but ...

  10. (转)2019年 React 新手学习指南 – 从 React 学习线路图说开去

    原文:https://www.html.cn/archives/10111 注:本文根据 React 开发者学习线路图(2018) 结构编写了很多新手如何学习 React 的建议.2019 年有标题党 ...