• RabbitMQ之单机多实例部署


    单机版安装前面介绍过了,不再介绍。

    此处在单机版基础上 ,也就是一台Linux虚拟机上启动多个RabbitMQ实例,部署集群。 

    1、在单个Linux虚拟机上运行多个RabbitMQ实例:

    • 多个RabbitMQ使用的端口号不能冲突
    • 多个RabbitMQ使用的磁盘存储路径不能冲突
    • 多个RabbitMQ的配置文件也不能冲突

            在单个Linux虚拟机上运行多个RabbitMQ实例,涉及到RabbitMQ虚拟主机的名称不能重复,每个RabbitMQ使用的端口不能重复。

            RABBITMQ_NODE_PORT 用于设置RabbitMQ的服务发现,对外发布的其他端口在这个端口基础上计算得来。

    端口号说明
    4369epmd,RabbitMQ节点和CLI工具使用的对等发现服务
    5672、5671分别为不带TLS和带TLS的AMQP 0-9-1和1.0客户端使用
    25672用于节点间和CLI工具通信(Erlang分发服务器端口),并从动态范围分配(默认情况下限制为单个端口,计算为AMQP端口+ 20000)。一般这些端口不应暴露出去。
    35672-35682由CLI工具(Erlang分发客户端端口)用于与节点进行通信,并从动态范围(计算为服务器分发端口+ 10000通过服务器分发端口+ 10010)分配。
    15672HTTP API客户端,管理UI和Rabbitmqadmin(仅在启用了管理插件的情况下)
    61613、61614不带TLS和带TLS的STOMP客户端(仅在启用STOMP插件的情况下)
    1883、8883如果启用了MQTT插件,则不带TLS和具有TLS的MQTT客户端
    15674STOMP-over-WebSockets客户端(仅在启用了Web STOMP插件的情况下)
    15675MQTT-over-WebSockets客户端(仅在启用Web MQTT插件的情况下)
    15692Prometheus指标(仅在启用Prometheus插件的情况下)

            RABBITMQ_NODENAME 用于设置RabbitMQ节点名称@ 前缀是用户名@ 后缀是RabbitMQ所在的Linux主机的hostname 。

    数据存储目录:

    日志数据存储目录: 

    RabbitMQ使用的环境变量: 

    参数说明
    RABBITMQ_NODE_IP_ADDRESS将RabbitMQ绑定到一个网络接口。 如果要绑定多个网络接口,可以在配置文件中配置。 默认值:空字串。表示绑定到所有的网络接口。
    RABBITMQ_NODE_PORT默认值:5672
    RABBITMQ_DIST_PORTRabbitMQ节点之间通信以及节点和CLI工具通信用到的端口。 如果在配置文件中配置了kernel.inet_dist_listen_min 或者kernel.inet_dist_listen_max,则忽略该配置。 默认值:
    $RABBITMQ_NODE_PORT + 20000
    ERL_EPMD_ADDRESSepmd 使用的网络接口, epmd 用于节点之间以及节点和CLI之间的通信。 默认值:所有网络接口,包括和IPv4。
    ERL_EPMD_PORTepmd 使用的端口。 默认值:4369。
    RABBITMQ_DISTRIBUTION_BUFFER_SIZE节点之间通信连接使用的发送数据缓冲区大小限制, 单位是KB。推荐使用小于64MB的值。 默认值:128000。
    RABBITMQ_IO_THREAD_POOL_SIZEErlang运行时的I/O 用到的线程数。不推荐小于32的值。 默认值:128(Linux),64(Windows)。
    RABBITMQ_NODENAMERabbitMQ的节点名称。对于Erlang节点和机器,此名称应该唯一。 通过设置此值,可以在一台机器上多个RabbitMQ节点。 默认值:rabbit@$HOSTNAME(Unix-like),rabbit@%COMPUTERNAME%(Windows)。
    RABBITMQ_CONFIG_FILERabbitMQ主要配置文件的路径。例如 /etc/rabbitmq/rabbitmq.conf或
    者 /data/configuration/rabbitmq.conf是新格式的配置文件。 如果是老格式的配置文件,扩展名是 .config或者不写。 默认值: 对于Unix: $RABBITMQ_HOME/etc/rabbitmq/rabbitmq Debian: /etc/rabbitmq/rabbitmq RPM: /etc/rabbitmq/rabbitmq MacOS(Homebrew):
    ${install_prefix}/etc/rabbitmq/rabbitmq, Homebrew的前缀通常是: /usr/local/ Windo%APPDATA%\RabbitMQ\rabbitmq
    RABBITMQ_ADVANCED_CONFIG_FILERabbitMQ带 .config的高级配置文件路径(基于Erlang配置)。例如, /data/rabbitmq/advanced.config。 
    默认值: 
    Unix: $RABBITMQ_HOME/etc/rabbitmq/advanced 
    Debian: /etc/rabbitmq/advanced 
    RPM: /etc/rabbitmq/advanced 
    MacOS(Homebrew): ${install_prefix}/etc/rabbitmq/advanced, 其中Homebrew前缀通常是 /etc/local/ 
    Windows: %APPDATA%\RabbitMQ\advanced。
    RABBITMQ_CONF_ENV_FILE包含了环境变量定义的文件的目录(不使用 RABBITMQ_前缀)。 Windows上的文件名称与其他操作系同。 默认值: UNIX: $RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf Ubuntu和Debian: /etc/rabbitmq/rabbitmq-env.conf RPM: /etc/rabbitmq/rabbitmq-env.conf Mac (Homebrew): ${install_prefix}/etc/rabbitmq/rabbitmq-env.conf,Homebrew的前缀一般是 /usr/local Windows: %APPDATA%\RabbitMQ\rabbitmq-env-conf.bat
    RABBITMQ_MNESIA_BASE包含了RabbitMQ服务器的节点数据库、消息存储以及 集群状态文件子目录的根目录。除非显式设置了RABBITMQ_MNESIA_DIR的值。需要确保RabbitMQ用户 在该目录拥有读、写和创建文件以及子目录的该变量一般不要覆盖。一般覆盖 RABBITMQ_MNESIA_DIR变量。 默认值: Unix:
    $RABBITMQ_HOME/var/lib/rabbitmq/mnesia Ubuntu和Debian: /var/lib/rabbitmq/mnesia/RPM: /var/lib/rabbitmq/plugins MacOS(Homebrew):
    ${install_prefix}/var/lib/rabbitmq/mnesia, 其中Homebrew的前缀一般是 /usr/local Windows: %APPDATA%\RabbitMQ
    RABBITMQ_MNESIA_DIRRabbitMQ节点存储数据的目录。该目录中包含了数据库、 消息存储、集群成员信息以及节点其他的持状态。 默认值: 通用UNIX包: $RABBITMQ_MNESIA_BASE/$RABBITMQ_NODENAME Ubuntu和Debia$RABBITMQ_MNESIA_BASE/$RABBITMQ_NODENAME RPM: $RABBITMQ_MNESIA_BASE/$RABBITMQ_NO MacOS (Homebrew): ${install_prefix}/var/lib/rabbitmq/mnesia/$RABBITMQ_NODENAME, Homebrew的前缀一般是 /usr/local Windows: %APPDATA%\RabbitMQ\$RABBITMQ_NODENAME
    RABBITMQ_PLUGINS_DIR存放插件压缩文件的目录。RabbitMQ从此目录解压插件。 跟PATH变量语法类似,多个路径之间使用统的分隔符分隔 (Unix是 :,Windows是';')。插件可以安装到该变量指定的任何目录。 路径不要有符。 默认值: 通用UNIX包: $RABBITMQ_HOME/plugins Ubuntu和Debian
    包: /var/lib/rabbitmq/plugins RPM: /var/lib/rabbitmq/plugins MacOS (Homebrew):${install_prefix}/Cellar/rabbitmq/${version}/plugins, Homebrew的前缀一般是 /usr/l Windows: %RABBITMQ_HOME%\plugins
    RABBITMQ_PLUGINS_EXPAND_DIR节点解压插件的目录,并将该目录添加到代码路径。该路径不要包含特殊字符。 默认值: UNIX:
    $RABBITMQ_MNESIA_BASE/$RABBITMQ_NODENAME-plugins-expand Ubuntu和Debian packages:$RABBITMQ_MNESIA_BASE/$RABBITMQ_NODENAME-plugins-expand RPM:
    $RABBITMQ_MNESIA_BASE/$RABBITMQ_NODENAME-plugins-expand MacOS (Homebrew):
    ${install_prefix}/var/lib/rabbitmq/mnesia/$RABBITMQ_NODENAME-plugins-expand Window%APPDATA%\RabbitMQ\$RABBITMQ_NODENAME-plugins-expand
    RABBITMQ_USE_LONGNAME当设置为 true的时候,RabbitMQ会使用全限定主机名标记节点。 在使用全限定域名的环境中使用。重置节点, 不能在全限定主机名和短名之间切换。 默认值: false。
    RABBITMQ_SERVER_CODE_PATH当启用运行时的时候指定的外部代码路径(目录)。 当节点启动的时候,这个是值传给 erl的命令行默认值:(none)
    RABBITMQ_CTL_ERL_ARGS当调用rabbitmqctl 的时候传给erl 的命令行参数。 可以给Erlang设置使用端口的范围: -kernel inet_dist_listen_min 35672 -kernel inet_dist_listen_max 35680 默认值:(none)
    RABBITMQ_SERVER_ERL_ARGS当调用RabbitMQ服务器的时候 erl的标准命令行参数。 仅用于测试目的。使用该环境变量会覆盖默认默认值: Unix*: +P 1048576 +t 5000000 + stbt db +zdbbl 128000 Windows:没有
    RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS调用RabbitMQ服务器的时候传递给 erl命令的额外参数。 该变量指定的变量追加到默认参数列表( RABBITMQ_SERVER_ERL_ARGS)。 默认值: Unix*: 没有 Windows: 没有
    RABBITMQ_SERVER_START_ARGS调用RabbitMQ服务器的时候传给 erl命令的额外参数。该变量不覆盖 RABBITMQ_SERVER_ERL_ARGS默认值:没有
    RABBITMQ_ENABLED_PLUGINS_FILE用于指定 enabled_plugins文件所在的位置。默认: /etc/rabbitmq/enabled_plugins

    方式一:

    1. export RABBITMQ_NODE_PORT=5672
    2. export RABBITMQ_NODENAME=rabbit2
    3. rabbitmq-server
    4. export RABBITMQ_NODE_PORT=5673
    5. export RABBITMQ_NODENAME=rabbit3
    6. rabbitmq-server
    7. export RABBITMQ_NODE_PORT=5674
    8. export RABBITMQ_NODENAME=rabbit4
    9. rabbitmq-server

    方式二:

    1. RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit2 rabbitmq-server
    2. RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit3 rabbitmq-server
    3. RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit4 rabbitmq-server

    以上命令的运行都在Linux命令行中运行。

    2、启动web控制台的管理插件

    rabbitmq-plugins enable rabbitmq_management

            rabbitmq从3.3.0开始禁止使用guest/guest权限通过除localhost外的访问。如果想使用guest/guest通过远程机器访问,需要在rabbitmq配置文件中设置loopback_users为[],当然也可以按我之前讲的命令自己创建用户。

    vim /etc/rabbitmq/rabbitmq.conf

    需要注意的是,如果要使用自定义位置的配置文件,需要目录属于rabbitmq 组。 

    默认配置文件的位置:/etc/rabbitmq/rabbitmq.conf

    我们在/opt/rabbitconf中创建三个配置文件:

            rabbit1.conf,rabbit2.conf,rabbit3.conf,其中注明三个RabbitMQ实例使用的rabbitmq_management插件使用的端口号,以及开通guest远程登录系统的权限:

    文件路径内容
    /opt/rabbitmqconf/rabbit1.confloopback_users.guest=false
    management.tcp.port=6001
    /opt/rabbitmqconf/rabbit2.confloopback_users.guest=false
    management.tcp.port=6002
    /opt/rabbitmqconf/rabbit2.confloopback_users.guest=false
    management.tcp.port=6003

    启动命令:

    节点名称命令
    rabbit1RABBITMQ_NODENAME=rabbit1 RABBITMQ_NODE_PORT=5001
    RABBITMQ_CONFIG_FILE=/opt/rabbitconf/rabbit1.conf rabbitmq-server
    rabbit2RABBITMQ_NODENAME=rabbit2 RABBITMQ_NODE_PORT=5002
    RABBITMQ_CONFIG_FILE=/opt/rabbitconf/rabbit2.conf rabbitmq-server
    rabbit3RABBITMQ_NODENAME=rabbit3 RABBITMQ_NODE_PORT=5003
    RABBITMQ_CONFIG_FILE=/opt/rabbitconf/rabbit3.conf rabbitmq-server

    停止命令:

    节点名称命令
    rabbit1rabbitmqctl -n rabbit1 stop
    rabbit2rabbitmqctl -n rabbit2 stop
    rabbit3rabbitmqctl -n rabbit3 stop
  • 相关阅读:
    [附源码]java毕业设计基于JavaEE的在线学习平台
    2006-2022年上市公司彭博ESG数据
    Windows下如何编译FFmpeg
    FPGA数字电子技术复习笔记(一)verilog语法规则补充
    复旦EMBA美东国际课程走进哈佛、耶鲁、麻省理工、哥大等顶尖名校
    zemax慧差与消慧差
    Spring以及SpringBoot/SpringCloud注解
    《HTML表单》
    antd框架——实现自定义菜单功能——技能提升
    json读写
  • 原文地址:https://blog.csdn.net/weixin_52851967/article/details/128150591