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. 波涛1202wm8833 lihomme/历织造 2013秋装全新男装夹克 整身年龄外套潮流立领男士休闲外套薄_9才号

    波涛1202wm8833 lihomme/历织造 2013秋装全新男装夹克 整身年龄外套潮流立领男士休闲外套薄_9才号 波涛1202wm8833lihomme/历织造2013秋装全新男装夹克整身年龄外 ...

  2. mysql中int(10)与int(11)有什么区别吗?

    先来看下面的图片 声明字段是int类型的那一刻起,int就是占四个字节,一个字节8位,也就是4*8=32,可以表示的数字个数是2的32次方(2^32 = 4 294 967 296个数字). 4 29 ...

  3. 个人作业3——个人总结(Alpha阶段)。

    一:个人总结: 陆续几周以及加上上上一周的Alpha冲刺阶段,完成了实验室故障报修系统的基础框架以及内容.这个过程苦中有乐,或许苦中寻乐更加恰当,以一个小组团队的形式来完成这个项目,我们大家就变成了一 ...

  4. 第06周-接口、内部类与Swing

    1. 本周作业简评与建议 作业简评 Q1.覆盖clone需要:a.要implements标记接口 Cloneable接口.b.要区分浅拷贝与深拷贝.c.一般来说要调用super.clone,然后在此基 ...

  5. 201521123054 《Java程序设计》 第十周学习总结

    1. 本周学习总结 2. 书面作业 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 无论是否抛出异常,也无论从什么地方返回,finally语句 ...

  6. 201521123075 《Java程序设计》第12周学习总结

    1. 本周学习总结 2. 书面作业 将Student对象(属性:int id, String name,int age,double grade)写入文件student.data.从文件读出显示. 1 ...

  7. mybatis-mapper文件介绍

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...

  8. 在eclipse上使用github,向github中提交项目

    1.下载egit插件 打开Eclipse,git需要eclipse授权,通过网页是无法下载egit的安装包的.在菜单栏依次打开eclipse→help→install new software→add ...

  9. Routing in ASP.NET Core

    .NET-Core Series Server in ASP.NET-Core DI in ASP.NET-Core Routing in ASP.NET-Core Error Handling in ...

  10. day14<常见对象+>

    常见对象(正则表达式的概述和简单使用) 常见对象(字符类演示) 常见对象(预定义字符类演示) 常见对象(数量词) 常见对象(正则表达式的分割功能) 常见对象(把给定字符串中的数字排序) 常见对象(正则 ...