一、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. bzoj4868 期末考试 题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4868 显然我们只关注最后出分的学科. 刚开始想的是dp,然而不知道如何记录状态. 突然就想到了正解 ...

  2. [Beta阶段]第十一次Scrum Meeting

    Scrum Meeting博客目录 [Beta阶段]第十一次Scrum Meeting 基本信息 名称 时间 地点 时长 第十一次Scrum Meeting 19/05/20 大运村寝室6楼 15mi ...

  3. JVM探究之 —— 类加载过程

    1. 类加载是什么 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 与那些在编译时需要进行连 ...

  4. File checksum

    File checksum https://golang.org/pkg/io/#Copy https://blog.iphpo.com/blog/2017/03/golang-產生檔案的md5-ha ...

  5. arcpy地理处理工具案例教程-将细碎图斑按相同属性或相近属性合并相邻图斑

    arcpy地理处理工具案例教程-将细碎图斑按相同属性或相近属性合并到相邻图斑 商务合作,科技咨询,版权转让:向日葵,135-4855_4328,xiexiaokui#qq.com 目的:针对存在的细碎 ...

  6. Android: NDK中的Android.mk和Application.mk

    1. 简介 Android.mk  可用来描述要编译的某个具体模块的相关信息.比如:指定编译该模块时所需要的源文件.编译该模块时要链接的库文件.该模块编译完成后生成的库的名字等等.Applicatio ...

  7. 019 spring social

    1.原理 2. 3. 4.

  8. vue---父子组件之间的通信【props,$refs、$emit】

    在用vue进行项目开发的时候,父子组件之间的通信是经常被用到的,下面就来具体说说父子组件通信的三种方式: 父组件: <template> <div> <h1>我是父 ...

  9. 增量ETL (长周期指标) 优化方案

    在日常数据处理过程中避免不了要计算跨长周期数据指标统计需求,类似于如下: 1.  统计每个城市(过去30天)用户浏览次数: 统计每个城市(本年)用户浏览次数: 统计每个城市(历史至今)用户浏览次数: ...

  10. 如何将业务代码写得像诗一样(使用注解+单例+工厂去掉一大波if和else判断)

    1.订单控制器,提供一个根据商品id和银行渠道id计算商品折后价格的接口: import org.springframework.web.bind.annotation.GetMapping; imp ...