准备
- RabbitMQ安装机器建议采用16C*32G以上配置,千兆网卡,至少普通SAS硬盘,16以上剩余空间
- 创建rabbimt用户:useradd -m -d /home/rabbit -s /bin/bash rabbit并设置密码:passwd rabbit,设置.bashrc中export LANG=en_US,并source生效。
- 机器建议3台以上机器,2个磁盘节点,1个内存节点。
安装
安装erlang
- 要求erlang版本为15.0或更新版本。
- 通过yum安装可以查看版本:yum list | grep erlang ==> erlang.x86_64 R16B-03.18.el7 epel
- 执行yum install erlang进行安装
- 执行erl,确保进入erl shell界面,并有提示:Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
- 按CTRL+G然后q退出erl shell
安装RabbitMQ
- 上传软件包到rabbit用户下,当前稳定版本是3.6.10
- 解压tar -Jxvf rabbitmq-server-generic-unix-3.6.10.tar.xz
- 进入RabbitMQ目录:cd rabbitmq_server-3.6.10/sbin
- 后台启动RabbitMQ:./rabbitmq-server -detached
- 开启管理插件:./rabbitmq-plugins enable rabbitmq_management,可以在etc/rabbmitmq/enabled_plugins文件中查看已启用的插件
- 可以在etc/rabbmitmq/rabbitmq-env.conf中设置MNESIA_BASE=dir来将数据文件目录设置到高速磁盘当中,默认在var/lib/rabbitmq/mnesia/下
集群
- 要求consul集群已部署OK,本机consul agent已部署,准备3个RabbitMQ环境并安装完毕。
- 三个RabbitMQ环境的${HOME}/.erlang.cookie文件同步成完全一样(以任意一个为准即可),否则不能组成集群
- 下载autocluster版本:https://github.com/rabbitmq/rabbitmq-autocluster/releases
- 将autocluster-0.8.0.ez和rabbitmq_aws-0.8.0.ez上传到RabbitMQ的plugins目录
- 启用插件:./rabbitmq-plugins enable autocluster --offline
- 新增etc/rabbmitmq/rabbitmq.config文件(%%xx为注释,正式配置时删除):
[
{rabbit, []}, %%可以增加rabbit的其他配置
{autocluster, [
{backend, consul},
{node_type, disc}, %%节点类型,至少一个阶段是磁盘disc,其他可以是内存ram
{cluster_name, "rabbitmqcluster-1"}, %%集群名称
{consul_host, "localhost"},
{consul_port, 8500},
{consul_use_longname, true},
{consul_svc, "rabbitmq-1"}, %%服务名称
{consul_svc_addr_nic, "eth0"}, %%使用eth0网卡的ip地址注册服务,一般调测时使用为了区分环境,生产多agent部署,此条配置要删除,否则组成不了集群
{autocluster_log_level, info} %%可选有debug等
]}
]. - 在sbin目录下执行停止:./rabbitmqctl stop,然后后台启动:./rabbitmq-server -detached
- 执行./rabbitmqctl cluster_status查看机器状态
- 修改集群名称:./rabbitmqctl set_cluster_name rabbitmqcluster-1,因为autocluster的cluster_name配置可能会不生效,只影响consul上的KV路径
- 检查consul上的注册结果http://ip:8500/ui和http://ip:8500/v1/catalog/service/rabbitmq-1,查看ServiceAddress是否是正确的IP地址
- 在三个环境上都执行以上操作
配置
- 创建vhost:./rabbitmqctl add_vhost /svr
- 删除guest用户:./rabbitmqctl delete_user guest
- 增加admin用户
- 新增用户: ./rabbitmqctl add_user admin admin
- 设置角色: ./rabbitmqctl set_user_tags admin administrator
- 设置权限: ./rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
- 设置权限:./rabbitmqctl set_permissions -p /svr admin ".*" ".*" ".*"
- 增加service用户:
- 增加用户:./rabbitmqctl add_user service service
- 设置角色:./rabbitmqctl set_user_tags service none
- 设置权限:./rabbitmqctl set_permissions -p /svr service "^spring.*" ".*" ".*" spring.*表示SpringCloud可以配置自己的动态队列等
- 设置镜像模式:./rabbitmqctl set_policy -p /svr ha-all "^" '{"ha-mode":"all"}'
- 通过http://ip:15672使用admin/admin用户,查看集群情况
监控
对接open-falcon,可以使用rabbitmq-monitor插件进行监控,此插件是一个cron,需要修改配置后定时调用。
调优
RabbitMQ的默认配置一般可以很好的工作,处于性能考虑,可以根据实际测试结果进行调优。
调优分为操作系统、erlang和RabbitMQ三个部分。