Kolla部署(Ocata)——rabbitmq集群化部署

概念介绍

AMQP 当中有四个概念非常重要:虚拟主机( virtual host ),交换机( exchange ),队列(queue )和绑定( binding )。

虚拟主机( virtual host ):一个虚拟主机持有一组交换机、队列和绑定。为什么需要多个虚拟主机呢? RabbitMQ 当中,用户只能在虚拟主机的粒度进行权限控制。因此,如果需要禁止 A 组访问 B 组的交换机 / 队列 / 绑定,必须为 A 和 B 分别创建一个虚拟主机。每一个 RabbitMQ 服务器都有一个默认的虚拟主机 “/” 。

队列( Queue ):由消费者建立的,是 messages 的终点,可以理解成装消息的容器。消息一直存在队列里,直到有客户端或者称为 Consumer 消费者连接到这个队列并将 message 取走为止。队列可以有多个。

交换机( Exchange ):可以理解成具有路由表的路由程序。每个消息都有一个路由键( routing key ),就是一个简单的字符串。交换机中有一系列的绑定( binding ),即路由规则( routes )。交换机可以有多个。多个队列可以和同一个交换机绑定,同时多个交换机也可以和同一个队列绑定。(多对多的关系)

三种交换机:

  1. Fanout Exchange (不处理路由键):一个发送到交换机上的消息都会被转发到与该交换机绑定的所有队列上。 Fanout 交换机发消息是最快的。

  2. Direct Exchange (处理路由键):如果一个队列绑定到该交换机上,并且当前要求路由键为 X ,只有路由键是 X 的消息才会被这个队列转发。

  3. Topic Exchange (将路由键和某模式进行匹配,可以理解成模糊处理):路由键的词由 “.”隔开,符号 “#” 表示匹配 0 个或多个词,符号 “” 表示匹配不多不少一个词。因此 “ audit.# ” 能够匹配到 “ audit.irs.corporate ” ,但是 “ audit. ” 只会匹配到 “ audit.irs ”

几个概念说明:

  1. Broker:简单来说就是消息队列服务器实体。

  2. Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。

  3. Queue:消息队列载体,每个消息都会被投入到一个或多个队列。

  4. Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。

  5. Routing Key:路由关键字,exchange根据这个关键字进行消息投递。

  6. vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。

  7. producer:消息生产者,就是投递消息的程序。

  8. consumer:消息消费者,就是接受消息的程序。

  9. channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。

消息队列的使用过程大概如下:

  1. 客户端连接到消息队列服务器,打开一个channel。

  2. 客户端声明一个exchange,并设置相关属性。

  3. 客户端声明一个queue,并设置相关属性。

  4. 客户端使用routing key,在exchange和queue之间建立好绑定关系。

  5. 客户端投递消息到exchange。

  6. exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。

高可用配置

配置文件:rabbitmq.config

[
    # 集群(CLustering)监听地址配置。Port used for inter-node and CLI tool communition
    {kernel, [
    {inet_dist_use_interface, {192,168,102,15}},
    {inet_dist_listen_min, 25672},
    {inet_dist_listen_max, 25672}
  ]},
# rabbit的默认服务端口配置,监听AMQP connections
  {rabbit, [
    {tcp_listeners, [
      {"192.168.102.15", 5672}
    ]},
# rabbitmq cluster,不能在cluster内处理network partitions,因而不推荐在wan中使用,仅用于lan。
#对跨网段的节点异常处理,autoheal指如果在出现问题的场景下,除了竞争胜出的网段之外,其他网段的节点都会重启rabbitmq服务。
    {cluster_partition_handling, autoheal}  ]},
# rabbitmq管理插件,可以访问http://192.168.102.15:15672 访问web页面,
# 在haproxy对该组件做了高可用
  {rabbitmq_management, [
    {listener, [
      {ip, "192.168.102.15"},
      {port, 15672}
    ]},
    {load_definitions, "/etc/rabbitmq/definitions.json"}
  ]},
# rabbitmq集群化配置
  {rabbitmq_clusterer, [{config, "/etc/rabbitmq/rabbitmq-clusterer.config"}]}].
% EOF

文件enabled_plugins
#enabled的插件
[rabbitmq_clusterer,rabbitmq_management].

文件rabbitmq-env.conf ,环境变量
# The node name should be unique per erlang-node-and-machine combination. To run multiple nodes, see the clustering guide.
RABBITMQ_NODENAME=rabbit
RABBITMQ_BOOT_MODULE=rabbit_clusterer
# Additional parameters for the erlcommand used when invoking the RabbitMQ Server
RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.6/plugins/rabbitmq_clusterer-3.6.x.ez/rabbitmq_clusterer-3.6.x-667f92b0/ebin"
RABBITMQ_LOG_BASE=/var/log/kolla/rabbitmq
export ERL_EPMD_PORT=4369

文件rabbitmq-clusterer.config
[
# 这里的版本配置成了2,因为还有一个节点配成了1,不同相同
  {version, 2},
  {nodes, [
      {'rabbit@controller01', disc},      {'rabbit@compute01', disc}    ]},
  {gospel,
    {node, 'rabbit@controller01'}}

].

文件definitions.json
{
\# virtual host名称配置,和aparche的vhosts类似
  "vhosts": [
    {"name": "/"}
  ],
  "users": [
    {"name": "openstack", "password": "cYhhGc6Gj0XMmY1p4Spj83Ms7cafzYT4wdM6y6d9", "tags": "administrator"}
  ],
  "permissions": [
    {"user": "openstack", "vhost": "/", "configure": ".*", "write": ".*", "read": ".*"}
  ],
#queue 可以通过[ policy]对镜像功能进行控制。以下配置的意思通过建立policy来建立自动形成镜像队列
#该高可用集群配置部署是镜像模式,active/active的模式。
  "policies":[
    {"vhost": "/", "name": "ha-all", "pattern": ".*", "apply-to": "all", "definition": {"ha-mode":"all"}, "priority":0}
  ]
}

参考:** http://www.tuicool.com/articles/6BRzMji **

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 来源 RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。支持消息的持久化、事务、拥塞控...
    jiangmo阅读 10,335评论 2 34
  • AMQP大致内容就是,将消息和队列绑定起来,规定让进入到交换机中的具有某个路由键的消息进入到指定队列中去。 Rab...
    StevenMD阅读 1,829评论 0 3
  • RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。 消息...
    彩虹之梦阅读 1,081评论 2 1
  • 每天认真工作但依然避免不了每天加班的命运,一直想摆脱这种困境,却无力改变。舞蹈,吉他,阅读,电影,各种爱好搁置一边...
    sophia_cool阅读 234评论 0 0