一、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. SQL进阶-行转列&列转行

    一.行转列 1.建表 CREATE TABLE score( student_id ) NOT NULL COMMENT '学生编号' DEFAULT '', student_name ) NOT N ...

  2. python 脚本接受参数

    import os import sys print(sys.argv) bogon:Desktop macname$ python3 test2.py deesws.json dede.json s ...

  3. [算法模板]ST表

    [算法模板]ST表 ST表和线段树一样,都能解决RMQ问题(范围最值查询-Range Minimum Query). 我们开一个数组数组\(f[maxn][maxn\log_2]\)来储存数据. 定义 ...

  4. springboot框架在容器加载完成之后执行某个方法

    问题描述: 想在websocket实现的Handler中执行一些初始化操作,但是初始化操作使用到了@Autowired自动注入的变量,而且是保护类型.第一个想法是放到Handler构造函数中执行,但是 ...

  5. Salt-Formulas的使用

    Saltstack自0.17.x版本开始引进Formulas的概念,旨在通过简化State和集成数据来实现State的友好管理.根据SALT FORMULAS的官方文档,在完成手动添加formula目 ...

  6. Matlab Script to pre-process UAV123 tracking dataset

    Matlab Script to pre-process UAV123 tracking dataset 2019-11-08 09:43:11 Official project page: http ...

  7. Learning to Learn and Predict: A Meta-Learning Approach for Multi-Label Classification

    Learning to Learn and Predict: A Meta-Learning Approach for Multi-Label Classification 2019-10-01 11 ...

  8. 避免git clone和push时每次都需要输入用户名和密码

    有三种方式解决git clone时每次都需要输入用户名和密码, 1. SSH免密方式 使用git bash ssh-keygen或puttygen.exe生成公钥. 2. 配置全局开机存储认证信息 下 ...

  9. CobaltStrike3.14破解

    原文发布在:https://bithack.io/forum/310 8月6日已更新 之前发的是5月2号破解的,并且官方作者的exit暗桩没有去掉.看到很多人用此版本遇到问题,抽空修复了下bug.此版 ...

  10. IfcCircle

    An IfcCircle is a curve consisting of a set of points having equal distance from the center. NOTE  A ...