消息中间件 Rabbitmq

目录

1、什么是消息中间件?

Rabbitmq

普通集群准备环境

2、安装rabbitmq

上传rabbitmq包

三台服务器均安装

启动rabbitmq服务

开启rabbitmq的web访问界面(三台都操作)

​编辑

开启用户远程登录(三台都操作)

重启rabbitmq服务(三台都操作)

查看端口是否启动成功

浏览器测试能否正常访问

3、部署rabbitmq集群

添加域名解析(三台都执行)

创建数据存放目录和日志存放目录(三台服务器都执行)

创建配置文件(三台都执行)

构建erlang集群镜像

将rabbitmq-2、rabbitmq-3作为内存节点加入rabbitmq-1节点集群中(2、3服务器执行)

查看集群状态(任意一台服务器执行)

浏览器测试集群是否部署完成

4、配置镜像集群

创建镜像集群(三台服务器都执行)

再次在浏览器中查看是否配置成功

实验


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.htmlicon-default.png?t=N7T8https://www.rabbitmq.com/which-erlang.html
erlang 版本选择
https://packagecloud.io/rabbitmq/erlangicon-default.png?t=N7T8https://packagecloud.io/rabbitmq/erlang
rabbitmq 版本选择
https://www.rabbitmq.com/news.htmlicon-default.png?t=N7T8https://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-2192.168.50.141
rabbitmq-3192.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(虚拟主机),并给用户权限添加主队列

添加完成

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值