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.
三、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,[]}]}]
登录rabbitmq002
和rabbitmq003
,加入集群
必须先关闭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集群(二进制)的更多相关文章
- CentOS7安装RabbitMQ集群
实验环境 RabbitMQ 集群 server1.example.com IP: 10.10.10.11 Node: diskserver2.example.com IP: 10.1 ...
- 集群架构和CentOS7安装RabbitMQ集群(单机版)
1. 集群架构 1.1 四种内部元数据 队列元数据.交换器元数据.绑定元数据.vhost元数据. 单一节点中:会将数据存储到内存,同时将持久化元数据保存到硬盘. 集群中: 存储到磁盘上.内存中. 集群 ...
- CentOS7环境RabbitMQ集群配置管理(转载)
CentOS7环境RabbitMQ集群配置管理(转载) CentOS7系统内核版本:3.10.0-514.26.2.el7.x86_64 一.对应主机host地址(三台主机host文件要保持一致) ...
- docker-compose安装rabbitmq集群(主从集群---》镜像集群)
docker-compose安装rabbitmq集群(主从集群--->镜像集群) yls 2020/5/11 创建docker-compose.yml 文件 version: '3' servi ...
- k8s中安装rabbitmq集群
官方文档地址:https://www.rabbitmq.com/kubernetes/operator/quickstart-operator.html 要求 1.k8s版本要1.18及其以上 2.能 ...
- Springboot 1.5.x 集成基于Centos7的RabbitMQ集群安装及配置
RabbitMQ简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件). RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一 ...
- CentOS7 搭建RabbitMQ集群 后台管理 历史消费记录查看
简介 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接 ...
- kubernets安装rabbitmq集群.
RabbitMQ集群的两种模式 1)普通模式:默认的集群模式,队列消息只存在单个节点上 2)镜像模式:队列为镜像队列,队列消息存在每个节点上 配置同步: 配置同步: 1.Ha mode 同步模式,以下 ...
- CentOS7 安装Hbase集群
继续接上一章,已安装好Hadoop集群环境 http://www.cnblogs.com/dopeter/p/4612232.html 在此基础上继续安装Hbase集群 Hbase版本为1.0.1.1 ...
随机推荐
- SQL进阶-行转列&列转行
一.行转列 1.建表 CREATE TABLE score( student_id ) NOT NULL COMMENT '学生编号' DEFAULT '', student_name ) NOT N ...
- python 脚本接受参数
import os import sys print(sys.argv) bogon:Desktop macname$ python3 test2.py deesws.json dede.json s ...
- [算法模板]ST表
[算法模板]ST表 ST表和线段树一样,都能解决RMQ问题(范围最值查询-Range Minimum Query). 我们开一个数组数组\(f[maxn][maxn\log_2]\)来储存数据. 定义 ...
- springboot框架在容器加载完成之后执行某个方法
问题描述: 想在websocket实现的Handler中执行一些初始化操作,但是初始化操作使用到了@Autowired自动注入的变量,而且是保护类型.第一个想法是放到Handler构造函数中执行,但是 ...
- Salt-Formulas的使用
Saltstack自0.17.x版本开始引进Formulas的概念,旨在通过简化State和集成数据来实现State的友好管理.根据SALT FORMULAS的官方文档,在完成手动添加formula目 ...
- 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 ...
- 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 ...
- 避免git clone和push时每次都需要输入用户名和密码
有三种方式解决git clone时每次都需要输入用户名和密码, 1. SSH免密方式 使用git bash ssh-keygen或puttygen.exe生成公钥. 2. 配置全局开机存储认证信息 下 ...
- CobaltStrike3.14破解
原文发布在:https://bithack.io/forum/310 8月6日已更新 之前发的是5月2号破解的,并且官方作者的exit暗桩没有去掉.看到很多人用此版本遇到问题,抽空修复了下bug.此版 ...
- IfcCircle
An IfcCircle is a curve consisting of a set of points having equal distance from the center. NOTE A ...