• linux下安装rabbitmq


    1.安装erlang虚拟机

      Rabbitmq基于erlang语言开发,所有需要安装erlang虚拟机。安装erlang有两种方式:

      第一种:使用yum安装:

    wget -O /etc/yum.repos.d/epel-erlang.repo  http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repo   # 把yum源安装到本地 
    yum install erlang

      第二种:下载源码编译安装:

    yum groupinstall "development tools"
    yum list  *curse*
    yum install ncurse-devel.xxxx  #安装所需的ncurse
    wget xxxx   #http://www.erlang.org/download/otp_src_R16B.tar.gz
    tar -xvf otp_src_xxx.tar.gz
    cd otp_src_xxxx
    ./configure --without-javac   #这个步骤的相关信息应该参考一下该目录下的README或INSTALL文件
    make&&make install

      安装完毕后,在shell下执行erl看是否能打开eshell,用‘halt().’退出。

    2.安装(rabbitmq-server-xxxx)

      使用rpm包安装 rpm -ivh rabbit-server-xxxx.rpm  (这样安装简单,不用配置path等)

      但是我在安装rabbitmq-server的过程中遇到了一个问题: 

      Error: Package: rabbitmq-server-3.0.2-1.noarch (/rabbitmq-server-3.0.2-1.noarch)
      Requires: erlang >= R12B-3
      You could try using --skip-broken to work around the problem
      You could try running: rpm -Va --nofiles --nodigest

      这是由于erlang的版本问题,其实是没有影响的,你可以使用rpm -ivh --nodeps rabbit-server-xxxx.rpm安装。

    3.rabbitmq常用命令

      rabbitmq-server start  或者   service rabbitmq-server start     #启动rabbitmq
      rabbitmq-server stop 或者rabbitmqctl stop    #停止rabbitmq
      rabbitmqctl list_exchanges   #查看服务器种所有的路由信息
      rabbitmqctl list_bindings    #查看服务器种所有的路由与消息队列绑定信息
      rabbitmqctl list_queues  #查看服务器中所有的消息队列信息
      rabbitmqctl status  #查看运行信息
     
      rabbitmq-plugins enable rabbitmq_management  
      #启动rabbitmq的图形管理界面,这个操作必须重启rabbitmq,然后在web中 http://10.109.18.226:15672 用户名和密码都是guest guest。如果局域网无法访问设置防火墙过滤规则或关闭防火墙。
      具体的显示效果如下图:
      
      
      
     

    4.rabbitmq可以搭建为集群

    rabbitmq是用erlang开发的,集群使用起来非常方便,因为erlang天生就是一门分布式语言。

    rabbitmq的集群包括内存节点、磁盘节点不过,如果再投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。

    rabbitmq的集群配置是依赖于/var/lib/rabbitmq/.erlang.cookie这个文件,该文件是集群节点进行通信的验证密钥,所有节点必须一致。

    具体的配置信息见:http://windwrite.com/archives/206

    5.rabbitmq的高可用性

    rabbitmq集群并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列的内容不会复制。

    在集群里创建队列时,队列内容并不会复制到集群的每个节点上。RabbitMQ会挑选一个节点创建队列(这个选择算法是随机、轮询、还是基于资源负载的,有待深究),只有该节点上存储队列的完整内容。其他节点拥有队列的元数据(metadata),以及指向队列存储节点的指针。只有该队列是非持久的,客户端才能重新连接到集群里的其他节点,并重新创建队列。假如该队列是持久化的,那么唯一办法是将故障节点恢复起来。为什么RabbitMQ不将队列复制到集群里每个节点呢?这与它的集群的设计本意相冲突,集群的设计目的就是增加更多节点时,能线性的增加性能(CPU、内存)和容量(内存、磁盘)。当然RabbitMQ集群也支持队列复制(有个选项可以配置)。比如在有五个节点的集群里,可以指定某个队列的内容在2个节点上进行存储,从而在性能与高可用性之间取得一个平衡。

    搭建架构:
    一个haproxy,反向代理rabbitmq服务节点,rabbitmq服务只代理内存节点,保证速度。
    web监控端代理磁盘节点,所有节点都是元数据都是同步的。
    基本上可以保证如果不是所有的机器都down了,rabbitmq服务就不会down。具体的搭建见:http://www.tuicool.com/articles/YbYvIj

      

      

  • 相关阅读:
    [转]Lucene 性能优化带数据
    Lucene Document getBoost(float) 和 setBoost(float)
    几种Lucene.Net打开IndexReader的方式
    JSON 省市数据包括港澳
    Lucene Boost 精度表
    Dot NET 内存泄漏
    对《LINQ能不能用系列(一)数组筛选效率对比》中测试的几个问题
    售前工程师的成长一个老员工的经验之谈(三)(转载)
    yum使用简介
    Hadoop源代码分析 HDFS(转载)
  • 原文地址:https://www.cnblogs.com/babybluevino/p/3650002.html
Copyright © 2020-2023  润新知