前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS7安装rabbitmq集群(二进制)

CentOS7安装rabbitmq集群(二进制)

作者头像
py3study
发布2020-03-09 10:31:01
1.8K0
发布2020-03-09 10:31:01
举报
文章被收录于专栏:python3

一、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集群节点必须在同一网段里,如果是跨广域网,效果会变差。

整体架构

1.png
1.png

修改主机名

如果主机名正确,请忽略此步骤

代码语言:javascript
复制
hostnamectl set-hostname centos7_01
hostnamectl set-hostname centos7_02
hostnamectl set-hostname centos7_03

 添加hosts

代码语言:javascript
复制
vi /etc/hosts

内容如下:

代码语言:javascript
复制
192.168.31.149 centos7_01
192.168.31.186 centos7_02
192.168.31.238 centos7_03

二、安装erlang

代码语言:javascript
复制
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检查

代码语言:javascript
复制
#  erl -version
Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 10.3.4

三、rabbitmq安装

代码语言:javascript
复制
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

 修改配置文件

代码语言:javascript
复制
vi /data/rabbitmq/etc/rabbitmq/rabbitmq-env.conf

 内容如下:

代码语言:javascript
复制
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

编辑配置文件

代码语言:javascript
复制
mkdir -p /data/rabbitmq/data
mkdir -p /data/rabbitmq/logs
vi /data/rabbitmq/etc/rabbitmq/rabbitmq.config

内容如下:

代码语言:javascript
复制
[
 {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

修改权限

代码语言:javascript
复制
useradd -u 1020 -s /sbin/nologin rabbitmq
chown -R rabbitmq:rabbitmq -R /data/rabbitmq

另外2台服务器,按以上方式安装rabbitmq和erlang

五、基于镜像队列的集群

登录到第一台主机,启动rabbitmq服务 注意:必须要切换到普通用户

代码语言:javascript
复制
su -s /bin/bash - rabbitmq
nohup /data/rabbitmq/sbin/rabbitmq-server start &

查看输出信息

代码语言:javascript
复制
tail -f nohup.out

输出如下:

复制代码
复制代码
代码语言:javascript
复制
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文件是否存在

注意:此文件必须存在

代码语言:javascript
复制
ls .erlang.cookie

 查看端口,是否存在

代码语言:javascript
复制
ss -tunlp|grep 5672

拷贝cookie

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

代码语言:javascript
复制
scp -P 22 /home/rabbitmq/.erlang.cookie root@192.168.31.186:/home/rabbitmq/
scp -P 22 /home/rabbitmq/.erlang.cookie root@192.168.31.238:/home/rabbitmq/

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

代码语言:javascript
复制
chown -R rabbitmq.rabbitmq /home/rabbitmq/.erlang.cookie
chmod 600 /home/rabbitmq/.erlang.cookie

 启动另外2台rabbitmq服务器

代码语言:javascript
复制
su -s /bin/bash - rabbitmq
nohup /data/rabbitmq/sbin/rabbitmq-server start &

等待几分钟,查看nohup.out输出,确保正常启动了。

查看端口

代码语言:javascript
复制
# ss -tunlp|grep 5672
tcp    LISTEN     0      128       *:25672                 *:*                   users:(("beam.smp",pid=11461,fd=66))

安装插件

3台都安装一下

代码语言:javascript
复制
rabbitmq-plugins enable rabbitmq_management

创建用户及授权

登录第一台服务器执行

代码语言:javascript
复制
rabbitmqctl add_user mqadmin "Nwvh3#vu@kqLP&FdHt"
rabbitmqctl set_permissions -p / mqadmin . . .
rabbitmqctl set_user_tags mqadmin administrator

加入集群

登录第一台服务器,查看集群状态

复制代码
复制代码
代码语言:javascript
复制
# 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

代码语言:javascript
复制
rabbitmqctl stop_app

再加入

代码语言:javascript
复制
rabbitmqctl join_cluster --ram rabbitmq001@centos7_01

最后启动app

代码语言:javascript
复制
rabbitmqctl start_app

查看集群状态 登录到任意节点查询

代码语言:javascript
复制
rabbitmqctl cluster_status

输出如下:

复制代码
复制代码
代码语言:javascript
复制
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反向代理

代码语言:javascript
复制
yum install -y nginx
vi /etc/nginx/nginx.conf

增加一行

代码语言:javascript
复制
include /etc/nginx/conf.d/vhosts/*.conf;

创建目录

代码语言:javascript
复制
mkdir /etc/nginx/conf.d/vhosts/
mkdir -p /data/log/nginx/

编辑配置文件

代码语言:javascript
复制
vi /etc/nginx/conf.d/vhosts/rabbitmq.xx.com.conf

内容如下:

代码语言:javascript
复制
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

代码语言:javascript
复制
nginx -t
nginx

测试访问

代码语言:javascript
复制
http://rabbitmq.xx.com
用户名:mqadmin
密码:Nwvh3#vu@kqLP&FdHt
1.png
1.png

效果如下:

1.png
1.png

本文参考链接: https://www.cnblogs.com/shihaiming/p/11014257.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、RabbiMQ简介
    • RabbiMQ模式
      • RabbiMQ特点
        • 环境
          • 整体架构
            • 修改主机名
            • 二、安装erlang
            • 三、rabbitmq安装
            • 四、配置rabbitmq
              • 修改权限
              • 五、基于镜像队列的集群
                • 拷贝cookie
                  • 安装插件
                    • 创建用户及授权
                      • 加入集群
                      • 六、前端nginx反向代理
                        • 测试访问
                        相关产品与服务
                        负载均衡
                        负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档