[toc]
rabbimtq简介
rabbitmq是用erlang语言开发的,erlang语言最初用于交换机领域,这样就使得rabbitmq和broker(server)之间进行数据交互的性能是非常优秀的,erlang有着和原生socket一样的延迟,集群非常方便,因为erlang天生就是分布式语言,但其本身不支持负载均衡。
rabbitmq模式
rabbitmq模式大概分为以下三种:
- 单一模式
- 普通模式(默认的集群模式)
- 镜像模式(把需要的队列做成镜像队列,存在于多个节点。属于rabbitmq的HA方案,在对业务的可靠性要求较高的场合中比较适用)
rabbitmq特点
rabbitmq的集群节点包括内存节点和磁盘节点。rabbitmq支持消息的持久化也就是数据卸载磁盘上,最合适的方案就是既有磁盘节点,又有内存节点。
rabbitmq集群安装
环境规划
- 10.200.200.10 rabbitmq01 --disk
- 10.200.200.20 rabbitmq02 --ram
- 10.200.200.30 rabibtmq03 --ram
1、安装依赖包
yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz socat
2、下载erlang
wget www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm
3、下载rabbitmq
wget www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm
4、安装erlang和rabbitmq
rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
5、修改hosts,保证三台服务器直接都可以相互ping通
vim /etc/hosts
10.200.200.10 rabbitmq01
10.200.200.20 rabbitmq02
10.200.200.30 rabibtmq03
6、启动rabbitmq服务
systemcetl start rabbitmq-server
7、选择其中一台erlang.cookie为准,拷贝到其他节点,这里假设为第一台
cd /var/lib/rabbitmq/
scp .erlang.cookie root@rabbit02:/var/lib/rabbitmq/
scp .erlang.cookie root@rabbit03:/var/lib/rabbitmq/
8、拷贝完如果直接重启的话会导致服务起不来,因为文件的权限不对
cd /var/lib/rabbitmq/
chown -R rabbitmq. .erlang.cookie
chmod 400 .erlang.cookie
9、检查插件
/usr/lib/rabbitmq/bin/rabbitmq-plugins list //查看插件安装情况
/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management //启用rabbitmq_management服务
systemctl restrart rabbitmq-server
10、将rabbitmq02/rabbitmq03加入到集群节点
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
11、查看集群状态
rabbitmqctl cluster_status
12、添加全局镜像策略
admin->Policies->Add/update a policy
Name:ha_all
Pattern:^
Defiinition: ha-mode=all
Add policy
或者使用命令行工具
./rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' ./rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
在创建队列时,Arguments中设置ha-mode
= all
,创建完成之后,在Policy中要看到刚刚创建的queue,会显示+2(表示3个节点)。
当有节点故障时,服务恢复,显示粉色的+,需要在该节点手动执行 rabbitctl sync_quere
队列名称同步,就会恢复。
网友评论