RabbitMQ单机部署
windows部署RabbitMQ
工具包
需要先下载:
校内FTP ftp://10.0.112.195
otp_win64_17.3.exe
rabbitmq-server-3.4.1
安装Erlan
安装RabbitMQ
RabbitMQ安装完成,如果需要启动停止或者是重新安装,请使用下面方法
启用管理工具
- 1、打开RabbitMQ的命令窗口
- 2、输入命令安装RabbitMQ的插件
rabbitmq-plugins enable rabbitmq_management
- 3、访问测试是否安装成功。http://127.0.0.1:15672
- 4、访问成功
默认账号密码:guest/guest
Linux部署RabbitMQ
环境
-
关闭防火墙,关闭selinux
-
配置yum源头 ,配置elel扩展源
-
192.168.88.120 设置主机名和域名解析 hostnamectl set-hostname rabbitmq1
-
192.168.88.121 设置主机名和域名解析 ....rabbitmq2
-
192.168.88.122 设置主机名和域名解析 ....rabbitmq3
-
vim /etc/hosts
192.168.88.120 rabbitmq1
192.168.88.121 rabbitmq2
192.168.88.122 rabbitmq3
安装Erlang
-
[root@localhost ~]# yum -y install erlang -y
安装RabbitMQ
-
[root@localhost ~]# yum install -y rabbitmq-server
修改配置文件
cp /usr/share/doc/rabbitmq-server-3.3.5/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
- vim /etc/rabbitmq/rabbitmq.config
-
//打开配置文件,53行 去掉注释%%和逗号
{loopback_users, []}
-
loopback_users
:这是一个配置选项,用于定义哪些用户只允许通过本地环回接口(loopback interface)连接,即只能从本地机器进行连接,通常是通过 IP 地址127.0.0.1
。 -
[]
:表示一个空列表。从用户名到用户组的所有用户都不在这个列表中,因此表示不限制任何用户必须从本地连接。这意味着任何用户可以从远程位置连接到 RabbitMQ 实例,而不仅仅是从本地。
安装插件并启动服务
-
rabbitmq-plugins enable rabbitmq_management
-
web管理界面工具
-
-
为了使这些更改生效,需要重新启动 RabbitMQ 服务
-
systemctl restart rabbitmq-server
-
-
rabbitmqctl cluster_status
-
查看节点状态。(下图是node1节点)
-
[root@rabbitmq1 ~]# rabbitmqctl cluster_status
访问测试
-
-
地址为rabbitMQ所在服务器的地址
-
端口号:15672
-
客户端介绍
-
1、界面介绍
- 2、设置虚拟主机与添加用户
-
添加用户
-
- 3、命令行添加用户,设置tags
-
(开发者)查看所有的队列:rabbitmqctl list_queues
-
(开发者)清除所有的队列:rabbitmqctl reset
-
添加用户:rabbitmqctl add_user username password
-
username 换掉 passwd 换掉 谢谢
-
-
分配角色:rabbitmqctl set_user_tags username administrato
-
[root@rabbitmq1 ~]# rabbitmqctl add_user mxl1 1234
[root@rabbitmq1 ~]# rabbitmqctl set_user_tags chenfuguo administrator
-
删除用户命令
-
rabbitmqctl delete_user testuser
-
-
新增虚拟主机:rabbitmqctl add_vhost vhost_name
[root@rabbitmq1 ~]# rabbitmqctl add_vhost iphone
-
将新虚拟主机授权给新用户:rabbitmqctl set_permissions -p vhost_name username ".*" ".*" ".*"(后面三个”*”代表用户拥有配置、写、读全部权限)
[root@rabbitmq1 ~]# rabbitmqctl set_permissions -p iphone chenfuguo ".*" ".*" ".*"
注释
-
用户角色
-
虚拟主机
-
关于虚拟主机(Virtual Host)其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,但是权限控制的最小粒度是Virtual Host
-
-
用户角色有下面几种:
-
\1. 超级管理员administrator:可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
-
\2. 监控者monitoring:可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
-
\3. 策略制定者policymaker:可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
-
\4. 普通管理者management:仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。无法登陆管理控制台,通常就是普通的生产者和消费者。
-
\5. 其他
-
RabbitMQ集群部署
消息中间件RabbitMQ,一般以集群方式部署, 主要提供消息的接受和发送,实现各微服务之间的消息异步。 以下将介绍RabbitMQ+HA方式进行部署。
原理介绍
-
cookie
-
RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以获得认证来实现分布式,所以部署Rabbitmq分布式集群时要先安装Erlang,并把其中一个服务的cookie复制到另外的节点。
-
-
内存节点和磁盘节点
-
RabbitMQ集群中,各个RabbitMQ为对等节点,即每个节点均提供给客户端连接,进行消息的接收和发送。节点分为内存节点和磁盘节点,一般都建立为磁盘节点,为了防止机器重启后的消息消失;
-
-
普通模式和镜像模式
-
RabbitMQ的Cluster集群模式一般分为两种,普通模式和镜像模式。消息队列通过RabbitMQ HA镜像队列进行消息队列实体复制。
-
普通模式
-
普通模式下,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。
-
-
镜像模式
-
镜像模式下,将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。
-
-
环境要求
-
1、所有节点需要再同一个局域网内;
-
2、所有节点需要有相同的 erlang cookie,否则不能正常通信,为了实现cookie内容一致,采用scp的方式进行。
-
3、准备三台虚拟机,配置相同
-
192.168.88.120 设置主机名和域名解析 hostnamectl set-hostname rabbitmq1
-
192.168.88.121 设置主机名和域名解析 ....rabbitmq2
-
192.168.88.122 设置主机名和域名解析 ....rabbitmq3
-
操作系统:centos7.2以上
-
-
4、集群中所有节点都需要hosts文件解析
部署过程(每个节点都配置)
-
1、所有节点配置 vim /etc/hosts
192.168.88.120 rabbitmq1
192.168.88.121 rabbitmq2
192.168.88.122 rabbitmq3 -
2、所有节点安装erLang和rabbitmq
-
见linux系统中单机部署rabbitmq
-
yum -y install erlang -y
yum install -y rabbitmq-server
cp /usr/share/doc/rabbitmq-server-3.3.5/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
vim /etc/rabbitmq/rabbitmq.config
53行解注释
{loopback_users, []}
vim显示行号
:set nu
:53
-
3、导入rabbitmq 的管理界面
-
rabbitmq-plugins enable rabbitmq_management
-
systemctl restart rabbitmq-server
-
-
4、设置erlang运行节点
-
一定要保证三台机器的cookie内容一致
-
找到erlang cookie文件的位置,
-
源码包部署一般会存在.erlang.cookie文件;
-
rpm包部署一般是在/var/lib/rabbitmq/.erlang.cookie。
-
将 rabbitmq1 的该文件使用rsync或者是scp复制到 rabbitmq2、rabbitmq3,文件权限需要是400。
-
-
-
[root@rabbitmq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie rabbitmq3:/var/lib/rabbitmq/.erlang.cookie
[root@rabbitmq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie rabbitmq2:/var/lib/rabbitmq/.erlang.cookie
-
-
cat /var/lib/rabbitmq/.erlang.cookie
-
-
(rabitmq2和rabbitmq3):重复服务
-
systemctl restart rabbitmq-server
-
rabbitmq2和rabbitmq3
-
#rabbitmqctl stop
-
关闭rabbitmq2和rabbitmq3的服务(不要关rabbitmq1) 如果2,3节点没有启动服务,会提示关闭错误。
-
也就是,确保所有的活动任务和连接都被正常处理和关闭
-
一直 exit 退出
-
-
-
rabbitmq2和rabbitmq3
-
#rabbitmq-server -detached
-
2、3 独立运行节点,warning提示不用理会
-
Warning: PID file not written; -detached was passed.
-
-
-
rabbitmqctl cluster_status
-
查看各个节点状态。
-
-
-
Cluster status of node rabbit@rabbitmq1
-
-
每台主机看到的只有一个的server信息。目前尚未组合成集群
-
5、添加用户并设置密码
-
由于guest这个用户,只能在本地访问,所以我们要在每个节点上,新增一个用户并赋予对/的所有权限,然后添加到管理员组中,让此用户能够远程访问
-
三个主机都操作
-
rabbitmqctl add_user admin admin
-
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
-
rabbitmqctl set_user_tags admin administrator
-
-
6、访问测试
-
账号:admin
-
密码:admin
-
此时每个节点是单独的一台RabbitMQ,下面来将他们组成集群。
组成集群
-
简介
-
rabbitmq-server 启动时,会一起启动:节点和应用,它预先设置RabbitMQ应用为standalone(脱机)模式。要将一个节点加入到现有的集群中,你需要停止这个应用,并将节点设置为原始状态。如果使用rabbitmqctl stop,应用和节点都将被关闭。所以使用rabbitmqctl stop_app仅仅关闭应用。(停应用,不停止节点)
-
-
1、将node2、node3加入到node1中组成集群
-
磁盘节点
-
第二台节点
-
node2# rabbitmqctl stop_app
-
仅停止应用,不关闭节点(注意是节点2)
-
-
node2# rabbitmqctl join_cluster rabbit@rabbitmq1
-
集群名字一定不要写错(查看rabbitmq1 的节点状态)
-
-
node2# rabbitmqctl start_app
-
如果此时查看节点1,会发现集群节点信息增加
-
-
-
-
第三台节点
-
node3# rabbitmqctl stop_app
-
node3# rabbitmqctl join_cluster rabbit@rabbitmq1 ##集群名字一定不要写错
-
node3# rabbitmqctl start_app
-
如果此时查看节点1,会发现集群节点信息增加
-
-
-
内存节点(了解)
-
#使用内存节点加入集群
-
node2 # rabbitmqctl join_cluster --ram rabbit@rabbitmq1
-
-
-
2、在任意节点上查看集群状态
-
node3# rabbitmqctl cluster_status
-
输出信息
-
-
3、在任意节点上设置镜像队列策略
-
在web界面登陆,点击“Admin--Virtual Hosts(页面右侧)”,在打开的页面上的下方的“Add a new virtual host”处增加一个虚拟主机,同时给用户“admin”和“guest”均加上权限(在页面直接设置、点点点即可);
-
图示
-
点击mxl
-
观察第二台主机:
- 观察第三台主机:
然后在linux中
设置镜像队列策略
-
语法介绍
-
rabbitmqctl set_policy -p vhost1 ha-all "^" '{"ha-mode":"all"}'
-
-
案例中的命令
-
rabbitmqctl set_policy -p jinlongyu ha-all "^" '{"ha-mode":"all"}'
-
-
注释
-
"coresystem"
-
vhost名称,此处应该填写“jinlongyu”
-
-
ha-all
-
策略名称
-
-
"^"
-
queue的匹配模式为匹配所有的队列
-
-
{ }
-
为镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
-
ha-mode
-
指明镜像队列的模式,有效值为 all/exactly/nodes
-
all
-
表示在集群中所有的节点上进行镜像,包含新增节点
-
-
exactly
-
(可选)表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
-
-
nodes
-
(可选)表示在指定的节点上进行镜像,节点名称通过ha-params指定
-
-
-
ha-sync-mode
-
(可选)进行队列中消息的同步方式,有效值为automatic和manual
-
-
-
提示
-
此时镜像队列设置成功。队列会被复制到各个节点,各个节点状态保持一致(这里的虚拟主机vhost1 。是代码中需要用到的虚拟主机,虚拟主机的作用是做一个消息队列进行隔离,本质上可认为是一个rabbitmq-server,是否增加虚拟主机,增加几个,这是由开发中的业务决定,即有哪几类服务,哪些服务用哪一个虚拟主机,这是一个规划)。
-
-
Rabbitmq+HAproxy
1、在独立服务器上安装HAProxy
-
192.168.0.113
-
yum -y install haproxy
2、修改配置文件
-
vim /etc/haproxy/haproxy.cfg
-
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats defaults log global mode tcp option tcplog option dontlognull retries 3 option redispatch maxconn 2000 contimeout 5s clitimeout 120s srvtimeout 120s listen rabbitmq_cluster 0.0.0.0:80#作为代理的服务器的IP和端口 mode tcp balance roundrobin server rabbit1 192.168.229.11:15672 check inter 5000 rise 2 fall 2 server rabbit2 192.168.229.12:15672 check inter 5000 rise 2 fall 2 server rabbit3 192.168.229.13:15672 check inter 2000 rise 2 fall 3 listen monitor bind 0.0.0.0:8100#监控页面的访问端口 mode http option httplog stats enable stats uri /rabbitmqstats stats refresh 30s stats auth admin:admin
-
修改三个服务器地址即可
-
3、重启HAProxy
-
systemctl restart haproxy
4、登录浏览器输入地址
-
http://192.168.0.113/:8100/rabbitmqstats
-
查看HAProxy的状态
-
-
高可用使用rabbitmq。