目录
将rabbitmq-2、rabbitmq-3作为内存节点加入rabbitmq-1节点集群中(2、3服务器执行)
1、什么是消息中间件?
消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。
Rabbitmq
RabbitMQ 2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一
当下主流的消息中间件有RabbitMQ、Kafka、ActiveMQ、RocketMQ等。
特点:
可靠性、扩展性、高可用性、多种协议、多语言客户端、管理界面、插件机制
普通集群准备环境
准备工作:
关闭防火墙和selinux
rabbitmqrpm包(3.7.10版本):链接:https://pan.baidu.com/s/1I8YQddCiJXzzcXkpeW03jQ
提取码:tcht
rabbitmq 和erlang兼容版本
https://www.rabbitmq.com/which-erlang.htmlhttps://www.rabbitmq.com/which-erlang.html
erlang 版本选择
https://packagecloud.io/rabbitmq/erlanghttps://packagecloud.io/rabbitmq/erlang
rabbitmq 版本选择
https://www.rabbitmq.com/news.htmlhttps://www.rabbitmq.com/news.html
三台服务器:
均安装rabbitmq,安装相关依赖
yum install -y epel-release gcc-c++ unixODBC unixODBC-devel openssl-devel ncurses-devel lrzsz net-tools
主机名 | IP地址 |
rabbitmq-1 | 192.168.50.137 |
rabbitmq-2 | 192.168.50.141 |
rabbitmq-3 | 192.168.50.142 |
2、安装rabbitmq
上传rabbitmq包
[root@rabbitmq-1 ~]# rz
[root@rabbitmq-2 ~]# rz
[root@rabbitmq-3 ~]# rz
[root@rabbitmq-1 ~]# ll
三台服务器均安装
[root@rabbitmq-1 ~]# yum -y install rabbitmq-server-3.7.10-1.el7.noarch.rpm
yum -y install rabbitmq-server-3.7.10-1.el7.noarch.rpm
[root@rabbitmq-1 ~]# yum -y install erlang-21.3.8.21-1.el7.x86_64.rpm
yum -y install erlang-21.3.8.21-1.el7.x86_64.rpm
启动rabbitmq服务
[root@rabbitmq-1 ~]# systemctl daemon-reload
[root@rabbitmq-1 ~]# systemctl start rabbitmq-server
[root@rabbitmq-2 ~]# systemctl daemon-reload
[root@rabbitmq-2 ~]# systemctl start rabbitmq-server
[root@rabbitmq-3 ~]# systemctl daemon-reload
[root@rabbitmq-3 ~]# systemctl start rabbitmq-server
systemctl daemon-reload
systemctl start rabbitmq-server
开启rabbitmq的web访问界面(三台都操作)
[root@rabbitmq-1 ~]# rabbitmq-plugins enable rabbitmq_management
[root@rabbitmq-2 ~]# rabbitmq-plugins enable rabbitmq_management
[root@rabbitmq-3 ~]# rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins enable rabbitmq_management
开启用户远程登录(三台都操作)
#修改rabbitmq的配置文件
[root@rabbitmq-1 ~]# cp /usr/share/doc/rabbitmq-server-3.7.10/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
cp /usr/share/doc/rabbitmq-server-3.7.10/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
[root@rabbitmq-1 ~]# vim /etc/rabbitmq/rabbitmq.config
vim /etc/rabbitmq/rabbitmq.config
重启rabbitmq服务(三台都操作)
[root@rabbitmq-1 ~]# systemctl restart rabbitmq-server
[root@rabbitmq-2 ~]# systemctl restart rabbitmq-server
[root@rabbitmq-3 ~]# systemctl restart rabbitmq-server
systemctl restart rabbitmq-server
查看端口是否启动成功
[root@rabbitmq-1 ~]# netstat -lntp
[root@rabbitmq-2 ~]# netstat -lntp
[root@rabbitmq-3 ~]# netstat -lntp
netstat -lntp
浏览器测试能否正常访问
访问15672端口
3、部署rabbitmq集群
添加域名解析(三台都执行)
[root@rabbitmq-1 ~]# vim /etc/hosts
vim /etc/hosts
192.168.50.137 rabbitmq-1
192.168.50.141 rabbitmq-2
192.168.50.142 rabbitmq-3
创建数据存放目录和日志存放目录(三台服务器都执行)
[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/data
[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/logs
[root@rabbitmq-1 ~]# chmod 777 -R /data/rabbitmq
[root@rabbitmq-1 ~]# chown rabbitmq.rabbitmq /data/ -R
mkdir -p /data/rabbitmq/data
mkdir -p /data/rabbitmq/logs
chmod 777 -R /data/rabbitmq
chown rabbitmq.rabbitmq /data/ -R
创建配置文件(三台都执行)
[root@rabbitmq-1 ~]# vim /etc/rabbitmq/rabbitmq-env.conf
vim /etc/rabbitmq/rabbitmq-env.conf
插入以下内容:
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/logs
重启rabbitmq
[root@rabbitmq-1 ~]# systemctl restart rabbitmq-server
systemctl restart rabbitmq-server
构建erlang集群镜像
集群文档存放位置:
使用解压缩方式安装部署的rabbitmq位置:home/.erlang.cookie
使用rpm等安装包方式进行安装的rabbitmq位置:/var/lib/rabbitmq
cat /var/lib/rabbitmq/.erlang.cookie
远程拷贝到其他两个节点
[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie 192.168.50.141:/var/lib/rabbitmq/
[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie 192.168.50.142:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie 192.168.50.141:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie 192.168.50.142:/var/lib/rabbitmq/
重启rabbitmq服务
[root@rabbitmq-2 ~]# systemctl restart rabbitmq-server
[root@rabbitmq-3 ~]# systemctl restart rabbitmq-server
systemctl restart rabbitmq-server
将rabbitmq-2、rabbitmq-3作为内存节点加入rabbitmq-1节点集群中(2、3服务器执行)
[root@rabbitmq-2 ~]# rabbitmqctl stop_app
[root@rabbitmq-3 ~]# rabbitmqctl stop_app
rabbitmqctl stop_app
若停止节点命令报错执行
[root@rabbitmq-2 ~]# chmod 400 /var/lib/rabbitmq/.erlang.cookie
[root@rabbitmq-2 ~]# chown rabbitmq.rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie
chown rabbitmq.rabbitmq /var/lib/rabbitmq/.erlang.cookie
重新执行停止节点命令
数据重置
[root@rabbitmq-2 ~]# rabbitmqctl reset
rabbitmqctl reset
添加内存节点
[root@rabbitmq-2 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq-1
rabbitmqctl join_cluster --ram rabbit@rabbitmq-1
现在rabbitmq-2、rabbitmq-3是内存节点,默认启动是rabbitmq-1磁盘节点
启动节点
[root@rabbitmq-2 ~]# rabbitmqctl start_app
rabbitmqctl start_app
扩展:
在RabbitMQ集群集群中,必须⾄少有⼀个磁盘节点,否则队列元数据⽆法写⼊到集群中,当磁盘节点宕掉时,集群将⽆法写⼊新的队列元数据信息。
<1>更改节点类型
必须停掉rabbit服务:rabbitmqctl stop_app
可以使⽤命令 rabbitmqctl change_cluster_node_type disc(ram),前提是
<2>使用磁盘节点加入集群
rabbitmqctl join_cluster rabbit@rabbitmq-1
查看集群状态(任意一台服务器执行)
[root@rabbitmq-1 ~]# rabbitmqctl cluster_status
rabbitmqctl cluster_status
浏览器测试集群是否部署完成
访问15672端口
创建一条队列
创建成功
4、配置镜像集群
创建镜像集群(三台服务器都执行)
[root@rabbitmq-1 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
[root@rabbitmq-2 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
[root@rabbitmq-3 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
参数解释:
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
-p Vhost :vhost名称, "^"匹配所有的队列, ha-all 策略名称为ha-all, '{"ha-mode":"all"}' 策略模式为 all 即复制到所有节点,包含新增节点。
策略说明:
Pattern: queue的匹配模式(正则表达式)
Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
all:表示在集群中所有的节点上进行镜像
exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
ha-params:ha-mode模式需要用到的参数
ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
priority:可选参数,policy的优先级
再次在浏览器中查看是否配置成功
实验
创建一个vhost(虚拟主机),并给用户权限添加主队列
添加完成