• 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.4

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

     修改配置文件

    vi /data/rabbitmq/etc/rabbitmq/rabbitmq-env.conf

     内容如下:

    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

    编辑配置文件

    mkdir -p /data/rabbitmq/data
    mkdir -p /data/rabbitmq/logs
    vi /data/rabbitmq/etc/rabbitmq/rabbitmq.config

    内容如下:

    [
     {rabbit,
       [
         {tcp_listeners, [5672]},
         {dump_log_write_threshold, [1000]},
         {vm_memory_high_watermark, 0.5},
         {disk_free_limit, "200MB"},
         {hipe_compile,true}
       ]
      }
    ].

    注意:[]. 后面有一个点

    说明:

    KeyDocumentation
    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 1020 -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 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文件是否存在

    注意:此文件必须存在

    ls .erlang.cookie

     查看端口,是否存在

    ss -tunlp|grep 5672

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

    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台服务器,修改属主和属组

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

    安装插件

    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: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

    nginx -t
    nginx

    测试访问

    http://rabbitmq.xx.com
    用户名:mqadmin
    密码:Nwvh3#vu@kqLP&FdHt

    效果如下:

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

  • 相关阅读:
    Hadoop的三大组件 内容
    常用的linux命令
    shell学习心得
    liunx学习心得。
    随机数
    HADOOP框架
    Shell学习心得
    linux学习心得
    jquery解决随机点餐系统重复问题
    在码云上git push时报错,出现error: failed to push some refs to 'https://gitee.com/lipengyangzuishuai/gitstudy.git'的解决办法
  • 原文地址:https://www.cnblogs.com/xiao987334176/p/11890041.html
Copyright © 2020-2023  润新知