afredlyj / mynote

idea and note
1 stars 0 forks source link

RabbitMQ使用 #15

Open afredlyj opened 8 years ago

afredlyj commented 8 years ago

RabbitMQ

文档

  1. RabbitMQ 简介
  2. Spring AMQP
  3. 持久化机制
  4. 关于持久化的官方文档
  5. RabbitMQ安装文档
  6. elang安装文档
  7. python升级
  8. 高可用rabbitmq集群服务部署步骤
  9. RabbitMQ集群

    安装

  10. 下载安装包
wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-generic-unix-3.6.1.tar.xz
  1. tar.xz 文件需要经过两次解压:
xz -d rabbitmq-server-generic-unix-3.6.1.tar.xz
tar xvf rabbitmq-server-generic-unix-3.6.1.tar
  1. 升级python,参考上述文档
  2. 安装elang,参考文档
  3. 编辑sbin/rabbitmq-defaults,指定配置文件路径:
CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf
  1. rabbitmq-env.conf和rabbitmq.config两个配置文件需要手动创建:
# rabbitmq-env.conf
# rabbitmq.config不能添加文件后缀,否则无法识别
RABBITMQ_NODE_PORT=6672
CONFIG_FILE=/usr/local/rabbitmq_server-3.6.1/etc/rabbitmq/rabbitmq
#rabbitmq.config
  1. 启动web端管理插件
./rabbitmq-plugins enable rabbitmq_management

访问控制

rabbitmq默认会创建guest/guest帐号,但是该帐号只具有本地访问权限,如果要远程访问,有两种方案:

  1. 创建新的帐号,操作命令如下:
./rabbitmqctl add_user root root
./rabbitmqctl set_user_tags root administrator
./rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
  1. 修改rabbitmq.config配置文件 默认情况下访问控制的配置如下:
{loopback_users, [<<"guest">>]}

需要改为:

{loopback_users, []}

配置文件

通过rabbitmq-env.conf设置配置文件路径:

CONFIG_FILE=/usr/local/rabbitmq_server-3.6.1/etc/rabbitmq/rabbitmq
RABBITMQ_NODE_PORT=8672
RABBITMQ_NODENAME=rabbit8672@dev1

注意,文件名不包含文件名后缀。如果在一台服务器上部署多个节点,需要设置RABBITMQ_NODE_PORTRABBITMQ_NODENAME,注意配置的格式。

消息持久化

JMS vs AMQP

http://www.wmrichards.com/amqp.pdf

主流MQ的压测报告

http://blog.x-aeon.com/2013/04/10/a-quick-message-queue-benchmark-activemq-rabbitmq-hornetq-qpid-apollo/

集群

Rabbitmq集群会将所有的数据和状态复制到集群中的所有节点,除了Queue以外,如果需要复制Queue到所有节点,需要使用HA。

集群节点之间是如何相互认证的? 通过Erlang Cookie,相当于共享秘钥的概念,长度任意,只要所有节点都一致即可。 rabbitmq server在启动的时候,erlang VM会自动创建一个随机的cookie文件。 cookie文件的位置: /var/lib/rabbitmq/.erlang.cookie 或者/root/.erlang.cookie 为保证cookie的完全一致,采用从一个节点copy的方式。

RabbitMQ的高可用方案是在版本2.6.0引入的,需要注意的是,RabbitMQ HA并不是万能的,部分功能HA方案并不支持:

  1. 维持到broker或者节点的连接 需要自己设置负载均衡器,比如HAProxy或者动态DNS方案,以此来保证客户端和broker或者节点之间的连接。
  2. 失败恢复 消费端需要自己处理重复消息。
  3. 处理网络分区的自愈能力

从上面三点可以看出,RabbitMQ 的HA方案是为了优化Queue单点的问题,利用HA搭建Queue的master-slave模型,避免节点异常导致的不可用。 官网文档相关说明

如果多个节点都部署在同一台硬件服务器上,则需要修改相关的端口,比如http和tcp的监听端口。