Rabbitmq安装、集群与高可用配置

mac2022-06-30  80

历史:

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-devil2.Rabbitmq基于erlang语言开发,因此需要安装erlang虚拟机wget -O /etc/yum.repos.d/epel-erlang.repo http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repoyum install erlang3.OTP是Erlang库和设计原则的集合,提供了开发各种系统的中间件。它包含了自己的分布式数据库、面向其它编程语言的接口、调试和发布处理工具等。wget http://www.erlang.org/download/otp_src_18.0.tar.gztar zxvf otp_src_18.0.tar.gz./configure --prefix=/usr/local/erlang_18.0 --enable-halfword-emulator --enable-m64-buildmakemake install4.安装rabbitm-serverrpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpmrpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.ascyum install rabbitmq-server-3.5.6-1.noarch.rpm5.安装官方web管理工具(rabbitmq_management)安装rabbitmq后,默认安装了该管理工具,执行命令即可启动rabbitmq-plugins enable rabbitmq_management6.启动rabbitmq/etc/init.d/rabbitmq-server starthttp://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.html6.1添加账号密码rabbitmqctl add_user admin 123qwerabbitmqctl set_user_tags root administratorrabbitmqctl set_permissions -p / root ".*" ".*" ".*"6.2在rabbitmq.config.example最后一行添加vim /usr/share/doc/rabbitmq-server-3.5.6/rabbitmq.config.exampleimport 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/binrabbitmqctl            管理工具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_management7.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.cookiechown rabbitmq.rabbitmq /var/lib/rabbitmq/.erlang.cookiechmod 400 /var/lib/rabbitmq/.erlang.cookie使用 -detached 参数运行各节点rabbitmqctl stoprabbitmq-server -detached8.组成集群将192.168.12.22与192.168.12.25组成集群,如果有多个节点就在每个节点上都运行一下命令rabbitmqctl stop_apprabbitmqctl join_cluster rabbit@lvs-web2rabbitmqctl start_app9.查看集群是否配置成功rabbitmqctl cluster_statusCluster 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"}'

转载于:https://www.cnblogs.com/zclzhao/p/5028682.html

相关资源:rabbitmq nginx keepalived高可用一键安装部署脚本
最新回复(0)