Aldebaran

人生最棒的感觉,就是你做到别人说你做不到的事。

0%

搭建RabbitMQ集群

指原莉乃

前面讲述了RabbitMQ的架构,下面是来实战演练一下。

RabbitMQ 安装

  1. 准备工作

    • 准备3台机器,系统为centos7(其他版本也OK)。

      192.168.99.63 rabbit1
      192.168.99.65 rabbit2
      192.168.99.67 rabbit3
    • 修改hostname(每台都需要)

      $ hostname rabbit1
      $ hostname rabbit2
      $ hostname rabbit3

      centos7永久更改hostname的命令为:

      $ hostnamectl --static set-hostname [主机名]
    • 修改host file(每台都需要修改)

      $ vim /etc/hosts
      192.168.99.63 rabbit1
      192.168.99.65 rabbit2
      192.168.99.67 rabbit3

根据操作系统不同, 官网提供了相应的安装说明:Windows、Debian / Ubuntu、RPM-based Linux、Mac

这里是Redhat的安装方式

  1. 通过yum安装依赖包

    $ yum install epel-release
    $ yum makecache
    $ yum -y install socat compat-readline5
  2. 安装erlang

    安装 RabbitMQ 之前要安装 Erlang ,可以去Erlang官网下载。

    各个erlang的版本:https://github.com/rabbitmq/erlang-rpm/releases

    centos6: https://github.com/rabbitmq/erlang-rpm/releases/download/v21.1.1/erlang-21.1.1-1.el6.x86_64.rpm
    centos7: https://github.com/rabbitmq/erlang-rpm/releases/download/v21.1.1/erlang-21.1.1-1.el7.centos.x86_64.rpm

    直接wget下来,安装就完事了

  3. 安装rabbitmq

    接着去RabbitMQ官网下载安装包。

    安装文档: https://www.rabbitmq.com/install-rpm.html

    各个版本的安装包: https://github.com/rabbitmq/rabbitmq-server/releases

    centos6: https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.8/rabbitmq-server-3.7.8-1.el6.noarch.rpm
    centos7: https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.8/rabbitmq-server-3.7.8-1.el7.noarch.rpm

    直接wget下来,安装就完事了(需要先安装socat)

    修改最大连接数

    • With systemd (Recent Linux Distributions)

      在使用systemd的发行版上,操作系统限制通过/etc/systemd/system/rabbitmq-server.service.d/limits.conf中的配置文件进行控制

      [Service]
      LimitNOFILE=300000
    • Without systemd (Older Linux Distributions)

      在不使用systemd的发行版上调整RabbitMQ的每用户限制的最直接方法是编辑rabbitmq-env.conf并在服务启动之前调用ulimit

      $ ulimit -S -n 4096

    开机自启动

    $ chkconfig rabbitmq-server on

    启动

    $ /sbin/service rabbitmq-server start
  4. 安装插件

    常用的插件:http://www.rabbitmq.com/community-plugins.html

    进入插件安装目录{rabbitmq-server}/plugins/(可以查看一下当前已存在的插件)

    $ cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.8/plugins
    • rabbitmq_delayed_message_exchange

      $ wget https://dl.bintray.com/rabbitmq/community-plugins/3.7.x/rabbitmq_delayed_message_exchange/rabbitmq_delayed_message_exchange-20171201-3.7.x.zip -O rabbitmq_delayed_message_exchange-20171201-3.7.x.zip
      $ unzip rabbitmq_delayed_message_exchange-20171201-3.7.x.zip
      $ rabbitmq-plugins enable rabbitmq_delayed_message_exchange
    • rabbitmq_management

      $ rabbitmq-plugins enable rabbitmq_management
      $ rabbitmq-plugins list

      默认的用户名为:guest 默认的密码为:guest, rabbitmq从3.3.0开始禁止使用guest/guest权限通过除localhost外的访问添加一个用户,用来访问

      这里要提一下, RabbitMQ的用户角色分类:

      none、management、policymaker、monitoring、administrator

      $ rabbitmqctl add_user admin admin
      $ rabbitmqctl set_user_tags admin administrator

      rabbitmq更多的权限信息可以参考: RabbitMQ用户角色及权限控制

      访问web控制台

      $ curl http://server-name:15672
  5. 复制配置文件

    RabbitMQ等数据服务通常具有许多可调参数。有些配置对开发很有意义,但并不适合生产。没有一种配置适合每个用例。因此,在投入生产之前评估系统配置非常重要。

    默认配置文件路径:/etc/rabbitmq/ 为空,需要复制模板进去修改

    $ cp -rpv /usr/share/doc/rabbitmq-server-3.7.8/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

    如果elang版本支持HIPE,那么可以把hipe_compile开启

    $ vim /etc/rabbitmq/rabbitmq.config
    {hipe_compile, true}

    注意: HiPE代表高性能Erlang。启用HiPE后,Erlang应用程序在执行之前会预编译为机器代码。我们的基准测试显示,这使RabbitMQ的性能提升高达30%。(如果您遇到这种情况,可以在此处找到基准测试详细信息,结果在此处。)

    以这种方式执行操作的缺点是,在编译Erlang应用程序时,应用程序初始启动时间会显着增加。使用HiPE,第一个RabbitMQ启动大约需要2分钟。

    另一个微妙的缺点是,如果启用了HiPE,调试RabbitMQ可能会很困难,因为HiPE可以破坏错误回溯,使其无法读取。

    若日志出现erlang vm segfaults,应关掉。

  6. 默认的MQ使用端口情况

    4369 (epmd), 25672 (Erlang distribution)
    5672, 5671 (AMQP 0-9-1 without and with TLS)
    n15672 (if management plugin is enabled)
    61613, 61614 (if STOMP is enabled)
    1883, 8883 (if MQTT is enabled)

注意: 将上述的步骤在每一台rabbitmq server上执行


RabbitMQ集群设置

  1. 设置 Erlang Cookie

    需要有相同的Erlang Cookie,否则不能进行通信,为保证cookie的完全一致,采用从一个节点copy的方式,

    注意:

    官方在介绍集群的文档中提到过.erlang.cookie一般会存在这两个地址:第一个是$home/.erlang.cookie也就是/root 目录下,第二个地方就是/var/lib/rabbitmq/.erlang.cookie。如果我们使用解压缩方式安装部署的rabbitmq,那么这个文件会在${home}目录下,也就是$home/.erlang.cookie。如果我们使用rpm等安装包方式进行安装的,那么这个文件会在/var/lib/rabbitmq目录下。这个文件权限是 400!

    $ chmod 400 /var/lib/rabbitmq/.erlang.cookie
    $ chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
  2. 修改rabbitmq-env.conf(RABBITMQ_NODENAME值需要根据/etc/hosts修改)

    $ mkdir -pv /data/rabbitmq/{mnesia,logs}
    $ chown -R rabbitmq:rabbitmq /data/rabbitmq
    $ chmod 750 /data/rabbitmq/mnesia
    $ chmod 755 /data/rabbitmq/logs
    $ vim /etc/rabbitmq/rabbitmq-env.conf
    [email protected]
    RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia
    RABBITMQ_LOG_BASE=/data/rabbitmq/logs
  3. 启动/重启各节点

    $ systemctl daemon-reload
    $ systemctl start rabbitmq-server
    $ systemctl stop rabbitmq-server
    $ systemctl restart rabbitmq-server
    # 开机启动
    $ systemctl enable rabbitmq-server
  4. 加入集群

    $ rabbitmqctl stop_app
    $ rabbitmqctl reset
    
    # 默认都是磁盘节点,如果要使自己成为内存节点,则加上--ram参数
    # **在RabbitMQ集群里,必须至少有一个磁盘节点存在。**
    $ rabbitmqctl join_cluster [email protected]
    $ rabbitmqctl start_app
    
    # 查看集群状态
    $ sudo rabbitmqctl cluster_status
  5. 配置策略: 镜像模式(可选)

    在任一集群节点上运行

    $ sudo rabbitmqctl set_policy -p / ha-allqueue "^" '{"ha-mode":"all"}'

    备注:这行命令在名称为”/“的vhost上创建了一个策略,策略名称为 ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为“^”表示所有匹配所有队列名称

    在高可用模式(镜像模式)下,每个镜像队列包含一个 master 和若干 slaver,他们之间存在着复制的关系,当 master 因为各种原因突然消失(挂掉),最老的 slaver 会自动变成新的 master

    set_policy01

    set_policy02

    或者如果只是想匹配以ha开头的队列名称,则:

    $ rabbitmqctl set_policy ha-all "^ha\." "{""ha-mode"":""all""}"
  6. 配置调整(会另起一个章节来写)

    $ sudo vim /etc/rabbitmq/rabbitmq.config
    
    [
        {
            rabbit, [
                {tcp_listeners, [{"127.0.0.1", 5672}, {"192.168.99.63", 5672}]},
                {cluster_partition_handling, pause_minority},
                {log_levels, [{connection, info}, {channel, info}]},
    
                {vm_memory_high_watermark, 0.5},
                {vm_memory_high_watermark_paging_ratio, 0.5},
                {memory_monitor_interval, 2500},
    
                {hipe_compile, true},
                {disk_free_limit, "300MB"},
                %% Set the default AMQP heartbeat delay (in seconds).
                %%
                {heartbeat, 60},
    
                %% Set the max permissible size of an AMQP frame (in bytes).
                %%
                {frame_max, 131072},
    
                %% Set the max frame size the server will accept before connection
                %% tuning occurs
                %%
                {initial_frame_max, 4096},
    
                %% Set the max permissible number of channels per connection.
                %% 0 means "no limit".
                %%
                {channel_max, 512}
            ]
        }
    ].

参考链接

https://www.rabbitmq.com/configure.html

https://www.rabbitmq.com/production-checklist.html

RabbitMQ运维

CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务与使用

rabbitmq集群搭建(多机)

rabbitmq安装配置与基本操作