1、安装RabbitMQ

1)下载和安装erlang

下载erlang

wget http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el6.x86_64.rpm

安装erlang,root用户使用rpm安装

rpm -ihv erlang-18.1-.el6.x86_64.rpm

2)下载和安装RabbitMQ

下载RabbitMQ

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/rabbitmq_v3_6_12/rabbitmq-server-3.6.12-1.el6.noarch.rpm

安装RabbitMQ,root用户使用rpm安装

rpm -ihv rabbitmq-server-3.6.-.el6.noarch.rpm

一般来说不会有什么问题,如果安装RabbitMQ过程中遇到如下错误,清空rpmdb然后重试。

我遇到的问题如下是

[root@bigdata-arch-client11 yangfan]# rpm -ihv erlang-18.1-.el6.x86_64.rpm
rpmdb: Thread/process / failed: Thread died in Berkeley DB library
error: db3 error(-) from dbenv->failchk: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db3 - (-)
error: cannot open Packages database in /var/lib/rpm
rpmdb: Thread/process / failed: Thread died in Berkeley DB library
error: db3 error(-) from dbenv->failchk: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages database in /var/lib/rpm

百度了一下,请按顺序执行,然后重试安装。

rm -f /var/lib/rpm/__db*
rpm --rebuilddb
yum clean all

当安装完成之后,可以使用缺省配置启动一下,如果打印如下,那么安装就成功了。

[root@bigdata-arch-client11 yangfan]# rabbitmq-server 

              RabbitMQ 3.6.12. Copyright (C) 2007-2017 Pivotal Software, Inc.
## ## Licensed under the MPL. See http://www.rabbitmq.com/
## ##
########## Logs: /var/log/rabbitmq/rabbit@bigdata-arch-client11.log
###### ## /var/log/rabbitmq/rabbit@bigdata-arch-client11-sasl.log
##########
Starting broker...
completed with 0 plugins.

2、配置RabbitMQ

1)创建RabbitMQ账号

rabbitmqctl add_user admin bigdata123

[root@bigdata-arch-client11 yangfan]# rabbitmqctl add_user admin bigdata123
Creating user "admin"

 2)将admin账号赋予管理员权限

rabbitmqctl set_user_tags admin administrator

[root@bigdata-arch-client11 yangfan]#  rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator]

3)设置权限

rabbitmqctl  set_permissions  -p  '/'  admin '.' '.' '.'

[root@bigdata-arch-client09 ~]#  rabbitmqctl  set_permissions  -p  '/'  admin '.' '.' '.'
Setting permissions for user "admin" in vhost "/"

4)启用web管理插件

rabbitmq-plugins enable rabbitmq_management

[root@bigdata-arch-client11 yangfan]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
amqp_client
cowlib
cowboy
rabbitmq_web_dispatch
rabbitmq_management_agent
rabbitmq_management Applying plugin configuration to rabbit@bigdata-arch-client11... started 6 plugins.

这样你可以通过web页面观察rabbitmq的status,端口号是15672,例如http://ip:15672

3、配置RabbitMQ集群

我们这里会展示如何配置一个RabbitMQ集群,集群由以下节点组成。

要保证集群在同一个局域网,IP能通。

 1)安装好RabbitMQ

安装方法同上文。

2)保证相同的Erlang Cookie

我这里是把client09上的.erlang.cookie以scp的方式拷贝到另外两台机器。

[root@bigdata-arch-client09 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@10.93.18.34:/var/lib/rabbitmq
[root@bigdata-arch-client09 ~]# scp /var/lib/rabbitmq/.erlang.cookie rootr@10.93.21.21:/var/lib/rabbitmq

3)运行各个RabbitMQ节点

rabbitmqctl stop
rabbitmq-server -detached

运行成功后可以查看一下节点当前的集群状态,当然这个时候还没有组成集群。

[root@bigdata-arch-client09 ~]# rabbitmqctl cluster_status
[root@bigdata-arch-client10 ~]# rabbitmqctl cluster_status
[root@bigdata-arch-client11 ~]# rabbitmqctl cluster_status

4)将节点连接成集群

client10:加入到集群rabbit@bigdata-arch-client09

[root@bigdata-arch-client10 ~]#rabbitmqctl stop_app 
[root@bigdata-arch-client10 ~]#rabbitmqctl join_cluster rabbit@bigdata-arch-client09
[root@bigdata-arch-client10 ~]#rabbitmqctl start_app

client11:加入到集群rabbit@bigdata-arch-client09

[root@bigdata-arch-client11 ~]#rabbitmqctl stop_app
[root@bigdata-arch-client11 ~]#rabbitmqctl join_cluster rabbit@bigdata-arch-client09
[root@bigdata-arch-client11 ~]#rabbitmqctl start_app

client09:不用加入自己

查看集群状态,我们可以在任意一台机器上查看,我们选择在client09上看。

[root@bigdata-arch-client09 ~]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@bigdata-arch-client09'
[{nodes,[{disc,['rabbit@bigdata-arch-client09',
'rabbit@bigdata-arch-client11',
'rabbit@bigdata-arch-client10']}]},
{running_nodes,['rabbit@bigdata-arch-client10',
'rabbit@bigdata-arch-client11',
'rabbit@bigdata-arch-client09']},
{cluster_name,<<"rabbit@bigdata-arch-client09.xg01">>},
{partitions,[]},
{alarms,[{'rabbit@bigdata-arch-client10',[]},
{'rabbit@bigdata-arch-client09',[]},
{'rabbit@bigdata-arch-client11', []}]}]

可以看到,3个实例已经组成了集群。

5)试一下容错

我们关掉client10上的实例

[root@bigdata-arch-client10 ~]# rabbitmqctl stop

然后我们再看集群情况

[root@bigdata-arch-client09 ~]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@bigdata-arch-client09'
[{nodes,[{disc,['rabbit@bigdata-arch-client09',
'rabbit@bigdata-arch-client11']}]},
{running_nodes,['rabbit@bigdata-arch-client11',
'rabbit@bigdata-arch-client09']},
{cluster_name,<<"rabbit@bigdata-arch-client11.xg01">>},
{partitions,[]},
{alarms,[{'rabbit@bigdata-arch-client11',[]},
{'rabbit@bigdata-arch-client09',[]}]}]

可以发现client10已经成功摘除。

4、HA配置

我们使用haproxy来代理配置高可用。

haproxy可以用来做代理,进行负载均衡和backend探活。支持TCP和HTTP模式。

关于haproxy的内容就不展开说了。

这里仅仅给出配置。

########tcp配置#################
listen rabbitmq
bind 10.93.21.21:
mode tcp
option tcplog #日志类别,采用tcplog
maxconn
#log 127.0.0.1 local0 debug
server rabbit1 10.93.18.34: maxconn weight check inter rise fall
server rabbit2 10.93.18.35: maxconn weight check inter rise fall
server rabbit3 10.93.21.21: maxconn weight check inter rise fall

实验一下,下面是实验验证的程序,你可以挂掉一个实例试试。

send.py

# -*- coding:utf-8 -*-
import pika
credentials = pika.PlainCredentials('admin','bigdata123')
connection = pika.BlockingConnection(pika.ConnectionParameters(
'10.93.21.21',5077, '/', credentials))
channel = connection.channel()
# 声明queue
channel.queue_declare(queue='balance')
# n RabbitMQ a message can never be sent directly to the queue, it always needs to go through an exchange.
channel.basic_publish(exchange='',
routing_key='balance',
body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()

receive.py

# _*_coding:utf-8_*_
import pika credentials = pika.PlainCredentials('admin','bigdata123')
connection = pika.BlockingConnection(pika.ConnectionParameters(
'10.93.21.21',5077,'/',credentials))
channel = connection.channel() # You may ask why we declare the queue again ‒ we have already declared it in our previous code.
# We could avoid that if we were sure that the queue already exists. For example if send.py program
# was run before. But we're not yet sure which program to run first. In such cases it's a good
# practice to repeat declaring the queue in both programs.
channel.queue_declare(queue='balance') def callback(ch, method, properties, body):
print(" [x] Received %r" % body) channel.basic_consume(callback,
queue='balance',
no_ack=True) print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()

RabbitMQ高可用集群配置的更多相关文章

  1. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  2. Linux源码安装RabbitMQ高可用集群

    1.环境说明 linux版本:CentOS Linux release 7.9.2009 erlang版本:erlang-24.0 rabbitmq版本:rabbitmq_server-3.9.13 ...

  3. MongoDB高可用集群配置的方案

    >>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...

  4. SpringCloud-day04-Eureka高可用集群配置

    5.4Eureka高可用集群配置 在高并发的情况下一个注册中心难以满足,因此一般需要集群配置多台. 我们再新建两个module  microservice-eureka-server-2002,  m ...

  5. Eureka注册中心高可用集群配置

    Eureka高可用集群配置 当注册中心扛不住高并发的时候,这时候 要用集群来扛: 我们再新建两个module  microservice-eureka-server-2002  microservic ...

  6. MongoDB高可用集群配置方案

    原文链接:https://www.jianshu.com/p/e7e70ca7c7e5 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非 ...

  7. Hadoop入门学习笔记-第三天(Yarn高可用集群配置及计算案例)

    什么是mapreduce 首先让我们来重温一下 hadoop 的四大组件:HDFS:分布式存储系统MapReduce:分布式计算系统YARN: hadoop 的资源调度系统Common: 以上三大组件 ...

  8. RabbitMQ学习系列(六): RabbitMQ 高可用集群

    前面讲过一些RabbitMQ的安装和用法,也说了说RabbitMQ在一般的业务场景下如何使用.不知道的可以看我前面的博客,http://www.cnblogs.com/zhangweizhong/ca ...

  9. RHCS高可用集群配置(luci+ricci+fence)

    一.什么是RHCS    RHCS是Red Hat Cluster Suite的缩写,也就是红帽集群套件,RHCS是一个能够提供高可用性.高可靠性.负载均衡.存储共享且经济廉价的集群工具集合,它将集群 ...

随机推荐

  1. 201521123121 《JAVA程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...

  2. 201521123056 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 1.1 instanceof 测试一个对象是否是某个类的实例,即使左边是右边类的子类的实例对 ...

  3. 201521123097《Java程序设计》第一周学习总结

    1.本周学习总结 知道了JAVA语言的发展历史和目前使用的版本,还有什么是JDK(Java Development Kit).JRE (Java Runtime Environment).JVM(Ja ...

  4. 201521123087《Java程序设计》第14周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名)在自己建立的数据库上执行常见SQL语句(截图)-参考 ...

  5. Mysql中的in和find_in_set的区别?

    在mysql中in的使用情况如下: select * from article where 列名 in(值1,值2,值3.....): select * from article where 值1 i ...

  6. Linux下安全证书申请以及配置到Nginx

    wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.shchmod +x l ...

  7. 【Spring源码深度解析系列 】Spring整体架构

    一.Spring的整体架构和模块 二.模块分类: 1.Core Container Core Container包含有Core .Beans.Context.和Expression  Language ...

  8. cocos2dx 播放gif

    起因 或许有人会说,cocos2dx中直接帧动画就行了用什么GIF. 起因是为游戏内部要用到第三方平台的头像,而第三方平台的头像大多都是用到Gif,所以才会有了这个需求 过程 查了各种文档都没找到.但 ...

  9. PuTsangTo-单撸游戏开发02 测试场景与单轴移动

    且不说立项与设计阶段的工作量,一个完整的游戏在开发阶段设计的职责范围也是很广,还有个大问题就是PuTsangTo项目也是本人在边学边做,截止目前还是满满的无从下手的感觉,一方面是技能与经验不足,另一方 ...

  10. 多年iOS开发经验总结

    总结了几个月的东西终于能和大家分享了,不多说,直接看东西! 1.禁止手机睡眠 1 [UIApplication sharedApplication].idleTimerDisabled = YES; ...