zoukankan      html  css  js  c++  java
  • Rabbitmq安装、集群与高可用配置

    历史:

    RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。

    应用场景:

        RabbitMQ是由RabbitMQ Technologies Ltd开发并且提供商业支持的。该公司在2010年4月被SpringSource(VMWare的一个部门)收购。在2013年5月被并入Pivotal。其实VMWare,Pivotal和EMC本质上是一家的。不同的是VMWare是独立上市子公司,而Pivotal是整合了EMC的某些资源,现在并没有上市。

    对于一个大型的软件系统来说,它会有很多的组件或者说模块或者说子系统或者(subsystem or Component or submodule)。那么这些模块的如何通信?这和传统的IPC有很大的区别。传统的IPC很多都是在单一系统上的,模块耦合性很大,不适合扩展 (Scalability);如果使用socket那么不同的模块的确可以部署到不同的机器上,但是还是有很多问题需要解决。比如:

     1)信息的发送者和接收者如何维持这个连接,如果一方的连接中断,这期间的数据如何方式丢失?

     2)如何降低发送者和接收者的耦合度?

     3)如何让Priority高的接收者先接到数据?

     4)如何做到load balance?有效均衡接收者的负载?

     5)如何有效的将数据发送到相关的接收者?也就是说将接收者subscribe 不同的数据,如何做有效的filter。

     6)如何做到可扩展,甚至将这个通信模块发到cluster上?

     7)如何保证接收者接收到了完整,正确的数据?

     AMDQ协议解决了以上的问题,而RabbitMQ实现了AMQP

    Rabbitmq安装:

    1. 安装系统编译环境所需的软件包
    yum install gcc glibc-devel make ncurses-devel openssl-devel autoconf
    yum install unixODBC unixODBC-devil

    2.Rabbitmq基于erlang语言开发,因此需要安装erlang虚拟机
    wget -O /etc/yum.repos.d/epel-erlang.repo http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repo
    yum install erlang
    3.OTP是Erlang库和设计原则的集合,提供了开发各种系统的中间件。它包含了自己的分布式数据库、面向其它编程语言的接口、调试和发布处理工具等。
    wget http://www.erlang.org/download/otp_src_18.0.tar.gz
    tar zxvf otp_src_18.0.tar.gz
    ./configure --prefix=/usr/local/erlang_18.0 --enable-halfword-emulator --enable-m64-build
    make
    make install

    4.安装rabbitm-server
    rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
    rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
    yum install rabbitmq-server-3.5.6-1.noarch.rpm

    5.安装官方web管理工具(rabbitmq_management)
    安装rabbitmq后,默认安装了该管理工具,执行命令即可启动
    rabbitmq-plugins enable rabbitmq_management

    6.启动rabbitmq
    /etc/init.d/rabbitmq-server start
    http://192.168.12.22:15672/   
    注:直接用ip访问是访问不了的,默认支持127.0.0.1:15672,
    要想远程访问,需要进行下面的操作,
    参考官方文档:
        http://www.rabbitmq.com/access-control.html
    网上找到的文档:
        http://www.cnblogs.com/rollenholt/p/4098089.html
    6.1添加账号密码
    rabbitmqctl add_user admin 123qwe
    rabbitmqctl set_user_tags root administrator
    rabbitmqctl set_permissions -p / root ".*" ".*" ".*"

    6.2在rabbitmq.config.example最后一行添加
    vim /usr/share/doc/rabbitmq-server-3.5.6/rabbitmq.config.example

    import com.rabbitmq.client.Channel;
    import com.rabbitmq.client.Connection;
    import com.rabbitmq.client.ConnectionFactory;

    public class Send {
        private final static String QUEUE_NAME = "hello";

        public static void main(String[] argv) throws Exception {
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("192.168.12.22");
            factory.setUsername("admin");
            factory.setPassword("123qwe");
            factory.setPort(5672);
            Connection connection = factory.newConnection();
            Channel channel = connection.createChannel();
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            String message = "Hello!";
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" [x] Sent '" + message + "'");
            channel.close();
            connection.close();
        }
    }


    ls /usr/lib/rabbitmq/bin
    rabbitmqctl            管理工具
    rabbitmq-defaults    默认参数设置
    rabbitmq-env        环境配置
    rabbitmq-plugins    插件管理工具
    rabbitmq-server        rabbitmq服务
    /usr/share/doc/rabbitmq-server-3.5.6/rabbitmq.config.example rabbitmq配置文件

    RabbitMQ 集群与高可用配置

    7.在22、25上开启 RabbitMQ 监控插件:
    rabbitmq-plugins enable rabbitmq_management

    7.1 192.168.12.22操作
    scp /var/lib/rabbitmq/.erlang.cookie root@192.168.12.25:/cacti/

    7.2 192.168.12.25操作
    然后将192.168.12.22中的该文件拷贝到192.168.12.25,最后将权限和所属用户/组修改回来:,最后将权限和所属用户/组修改回来:
    mv .erlang.cookie /var/lib/rabbitmq/.erlang.cookie
    chown rabbitmq.rabbitmq /var/lib/rabbitmq/.erlang.cookie
    chmod 400 /var/lib/rabbitmq/.erlang.cookie
    使用 -detached 参数运行各节点
    rabbitmqctl stop
    rabbitmq-server -detached
    8.组成集群
    将192.168.12.22与192.168.12.25组成集群,如果有多个节点就在每个节点上都运行一下命令
    rabbitmqctl stop_app
    rabbitmqctl join_cluster rabbit@lvs-web2
    rabbitmqctl start_app
    9.查看集群是否配置成功
    rabbitmqctl cluster_status

    Cluster status of node 'rabbit@lvs-web2' ...
    [{nodes,[{disc,['rabbit@lvs-web1','rabbit@lvs-web2']}]},
     {running_nodes,['rabbit@lvs-web1','rabbit@lvs-web2']},
     {cluster_name,<<"rabbit@lvs-web2">>},
     {partitions,[]}]
    10.设置镜像队列策略
    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

  • 相关阅读:
    利用Flot作基于时间段的曲线图
    Linux Apache使用CGI
    Windows node.js安装运行npm显示类似"ENOENT, stat 'C:UsersXXXXAppDataRoaming pm'错误
    JavaWeb返回Json格式数据JQuery Ajax无法解析的问题
    C++ 14 auto
    [原创] Jenkins slave agent 分布式构建
    [原创] Jenkins 邮件配置 (使用 Jenkins Email Extension Plugin)
    Linux 域名服务器配置
    证书管理
    Ubuntu 安装 Kubernetes
  • 原文地址:https://www.cnblogs.com/zclzhao/p/5028682.html
Copyright © 2011-2022 走看看