RabbitMQ集群搭建和使用

一.环境准备
1、选择RabbitMQ的版本
http://www.rabbitmq.com/changelog.html
注: 不同版本的Linux选择的RabbitMQ版本也不同,参照
http://www.rabbitmq.com/install-rpm.html
查看CentOS版本:more /etc/redhat-release

2、RabbitMQ依赖于Erlang,两者版本需匹配,版本对照表如下:
http://www.rabbitmq.com/which-erlang.html

2.1选择Erlang的版本
http://www.erlang.org/downloads

二.安装单机RabbtiMQ
2.1 安装Erlang
2.1.1 安装Erlang依赖
yum install gcc glibc-devel make ncurses-devel openssl-devel autoconf
2.1.2 下载解压缩
wget 复制的下载链接地址
wget http://erlang.org/download/otp_src_20.3.tar.gz
tar -xvf otp_src_20.3.tar.gz
2.1.3 安装Erlang
转到解压目录下 cd otp_src_20.3 挨个运行一下命令
./configure
make install
2.2 安装RabbitMQ
2.2.1 下载RabbitMQ
wget 复制的下载链接地址
wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.4/rabbitmq-server-3.7.4-1.el6.noarch.rpm
2.2.2 安装RabbitMQ
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
rpm -i --nodeps rabbitmq-server-3.7.4-1.el6.noarch.rpm
在/opt/rabbitmq文件夹下
查看安装包:rpm -qa | grep -i rabbitmq-server-3.7.4-1.el6.noarch

删除安装包:rpm -e rabbitmq-server-3.7.4-1.el6.noarch
2.2.3 新建文件,指定节点名
文件路径: /etc/rabbitmq/rabbitmq-env.conf
文件内容: NODENAME=rabbit@节点名
节点名设为机器名称即可

2.2.4 启动RabbitMQ
进入 /usr/lib/rabbitmq/bin/
运行 rabbitmq-server
按Ctrl+C,等一下就退出了
2.2.5 Web管理后台
加载插件:rabbitmq-plugins enable rabbitmq_management
再次运行 rabbitmq-server
页面访问:http://IP:15672/
三.RabbtiMQ用户管理
3.1 参考链接
https://www.cnblogs.com/java-zhao/p/5670476.html
3.2 添加一个用户
rabbitmqctl add_user 用户名 用户密码
3.3 给用户赋角色
rabbitmqctl set_user_tags 用户名 角色名
3.4 给用户赋权限
rabbitmqctl set_permissions -p "/" 用户名 ".*" ".*" ".*"
3.5 删除用户
rabbitmqctl delete_user 用户名
3.6查看用户
rabbitmqctl list_users
注: 默认用户为guest guest,可新建用户
给文件赋权限:
chmod 777 /文件夹名字/文件名字或者*
四.RabbitMQ集群搭建
4.1 环境准备
多台(3台)安装RabbitMQ Server的服务器,服务器IP分别为 ip1,ip2,ip3,以选择ip1服务器为主节点为例
4.2 保持.erlang.cookie一致
1)复制ip1服务器中的.erlang.cookie
(.erlang.cookie 存在于/var/lib/rabbitmq/.erlang.cookie 和~/.erlang.cookie中)
2)保持ip1,ip2,ip3服务器中的/var/lib/rabbitmq/.erlang.cookie和~/.erlang.cookie一致
4.3 后台启动各个节点
rabbitmq-server -detached

这样就成功了,网页访问一下能成功就行
切记:启动后不要关闭,否则会出现错误
4.4 查看各节点状态
rabbitmqctl status
4.5 配置各节点的hosts文件
文件路径:vi /etc/hosts
文件内容:(注:名称为2.2.3中的节点名)
10.170.1.22 linux02
10.170.1.23 linux03
4.6 建立集群
*以ip1服务器为主节点为例,在ip2,ip3上执行相同的如下操作
ip1服务器要启动着(在/usr/lib/rabbitmq/bin下运行rabbitmq-server),然后在ip2和ip3上做以下操作
rabbitmqctl stop_app
rabbitmqctl reset //可以不做
rabbitmqctl join_cluster rabbit@名称1
rabbitmqctl start_app
4.7 查看集群的状态信息
rabbitmqctl cluster_status
4.8 镜像队列
1).登录web后台管理页面
2).Admin -> Policies -> Add/update a policy
3).填写内容(例如:
Name:Mirror_RabbitMQ
Pattern:^ //"^"表示所有,最好手动输入,不要粘贴
Definition:HAmode=exactly
HAprarms=2
HAsyncmode=automatic)

4).Add policy
添加一个,其他的也都会有该策略
以下不用做
4.9 退出集群
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
4.10 移除节点
1)关闭要移除的节点A
rabbitmqctl stop_app
2)在其他节点B移除节点A
rabbitmqctl forget_cluster_node rabbit@rabbitName
五.负载均衡-HAProxy
5.1 安装epel
rpm -ivh https://mirrors.tongji.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm
5.2 安装HAProxy
yum -y install haproxy
5.1/5.2每台服务器都安装
5.3 修改配置文件
1) 配置文件路径:vi /etc/haproxy/haproxy.cfg
注:此配置需要在每台服务器上做一下,里面标红的IP必须和该配置文件所在的服务器IP一致
2)在配置文件中追加如下内容:
#---------------------------------------------------------------------
# RabbitMQ集群负载均衡
#---------------------------------------------------------------------
# 1.HAProxy统计页面配置
# 通过访问http://10.170.1.18:1080/haproxy/stats 账号密码admin:admin查看统计信息
listen haproxy_front 10.170.1.18:1080
mode http
stats refresh 30s
stats uri /haproxy/stats
stats realm Haproxy Manager
stats auth admin:admin
# 2.rabbitmq集群负载均衡配置
# 通过10.170.1.18:5678接入rabbitmq
listen rabbitmq_cluster 10.170.1.18:5678
option tcplog
mode tcp
timeout client 3h
timeout server 3h
balance roundrobin
server node1 10.170.1.18:5672 check inter 5s rise 2 fall 3
server node2 10.170.1.16:5672 check inter 5s rise 2 fall 3
# 3.rabbitmq集群web管理页面均衡配置
# 访问http://10.170.1.18:15678/ 接入rabbitmq web管理页面
listen rabbitmq_admin 10.170.1.18:15678
balance roundrobin
server node1 10.170.1.18:15672
server node2 10.170.1.16:15672
5.4 重启HAproxy
service haproxy restart
然后网页访问http://10.170.1.23:15678
六.主备-Keepalived
6.1 安装Keepalived
yum install keepalived
6.2 创建监控脚本
脚本路径:vi /etc/keepalived/check_haproxy.sh
脚本内容:
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
service keepalived stop
fi
6.1/6.2主备机都需要做
6.3 修改主机Keepalived配置文件
文件路径:vi /etc/keepalived/keepalived.conf (这个文件先删除,然后在新建即可)
文件内容:
#Keepalived配置文件
global_defs {
router_id NodeA #路由ID, 主备的ID不能相同
}
#自定义监控脚本
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 5
weight 2
}
vrrp_instance VI_1 {
state MASTER #Keepalived的角色。Master表示主服务器,从服务器设置为BACKUP
interface eth0 #指定监测网卡
virtual_router_id 1
priority 100 #优先级,BACKUP机器上的优先级要小于这个值
advert_int 1 #设置主备之间的检查时间,单位为s
authentication { #定义验证类型和密码
auth_type PASS
auth_pass root123
}
track_script {
chk_haproxy
}
virtual_ipaddress { #虚拟地址(可以随便设,主备保持一致即可),可以设置多个
192.1.170.180
}
}
6.4 修配备机Keepalived配置文件
文件路径:vi /etc/keepalived/keepalived.conf (这个文件先删除,然后在新建即可)
#Keepalived配置文件
global_defs {
router_id NodeB #路由ID, 主备的ID不能相同
}
#自定义监控脚本
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 5
weight 2
}
vrrp_instance VI_1 {
state BACKUP #Keepalived的角色。Master表示主服务器,从服务器设置为BACKUP
interface eth0 #指定监测网卡
virtual_router_id 1
priority 50 #优先级,BACKUP机器上的优先级要小于这个值
advert_int 1 #设置主备之间的检查时间,单位为s
authentication { #定义验证类型和密码
auth_type PASS
auth_pass root123
}
track_script {
chk_haproxy
}
virtual_ipaddress { #虚拟地址,可以设置多个
192.1.170.180
}
}
6.5 启动Keepalived
service keepalived start
6.6 查看Keepalived运行情况(可不看)
1)查看Keepalived日志输出
tail -f /var/log/messages -n 200
2)查看添加的虚拟IP
ip add show
3)MASTER模拟异常关闭
service keepalived stop
对应的MASTER上的虚拟IP也会消失
MASTER关闭后,BACKUP成为新的MASTER
6.7 代码访问RabbitMQ
1) IP 为Keepalived中配置的虚拟IP
2) PORT 为RabbitMQ的PORT 默认为5672
3) 账号密码同RabbitMQ
七.运行在内存或者硬盘中
注意:集群搭建完毕后,测试中是只在备机上修改成功了,主机上修改不成功
在/usr/lib/rabbitmq/bin下运行,rabbitmq默认安装在这里
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
注:disc-硬盘,ram-内存
八、springboot连接rabbitMQ集群配置
spring:
# 消息队列配置
rabbitmq:
host: 192.1.170.180 #虚拟地址
port: 5672
username: ****
password: ****
listener:
simple:
acknowledge-mode: AUTO
参考链接
[ 1 ] http://www.rabbitmq.com/tutorials/tutorial-one-java.html
RabbitMQ队列模式介绍
[ 2 ] https://www.cnblogs.com/xmzJava/p/8036591.html
Springboot Rabbitmq 整合
[ 3 ] https://www.cnblogs.com/lylife/p/5584019.html
Rabbitmq+haproxy+keepalived实现高可用集群搭建
[ 4 ] http://blog.csdn.net/woogeyu/article/details/51119101
RabbitMQ分布式集群架构
[ 5 ] https://www.cnblogs.com/lion.net/p/5725474.html
RabbitMQ3.6.3集群搭建+HAProxy1.6做负载均衡
[ 6 ] http://blog.csdn.net/u013256816/article/details/77171017
RabbitMQ负载均衡(3)——Keepalived+HAProxy实现高可用的负载均衡
[ 7 ] http://blog.csdn.net/u014308482/article/details/52947492
RabbitMQ常用命令
RabbitMQ集群搭建和使用的更多相关文章
- RabbitMq 集群搭建
实验环境: 操作系统为 Centos 7.2 IP hostName 192.168.190.132 node132 192.168.190.139 node139 192.168.190.1 ...
- centos7 rabbitmq集群搭建+高可用
环境 [root@node1 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@node1 ~]# uname -r -.el ...
- CentOS 7 下 RabbitMQ 集群搭建
环境 10.0.0.20 node1 10.0.0.21 node2 10.0.0.22 node3 搭建(在所有节点执行) 添加EPEL源 [root@node1 ~]# rpm -Uvh http ...
- rabbitmq集群搭建方法简介(测试机linux centos)【转】
本文将介绍四台机器搭建rabbitmq集群: rabbitmq IP和主机名(每台机器已安装RabbitMQ 3.5.6, Erlang 18.1) 192.168.87.73 localhost73 ...
- rabbitmq集群搭建,镜像队列搭建
原文地址:https://www.jianshu.com/p/11963564dd3d 教你如何从0开始搭建rabbitmq集群 一.准备工作 1.三台centos虚拟机 2.三台虚拟机都安装了doc ...
- RabbitMQ集群搭建
准备三个节点,系统为CentOS7 Node IP rabbitmq01 172.50.0.64 rabbitmq02 172.50.0.65 rabbitmq03 172.50.0.66 这里把no ...
- rabbitmq+haproxy+keepalived实现高可用集群搭建
项目需要搭建rabbitmq的高可用集群,最近在学习搭建过程,在这里记录下可以跟大家一起互相交流(这里只是记录了学习之后自己的搭建过程,许多原理的东西没有细说). 搭建环境 CentOS7 64位 R ...
- RabbitMQ的安装及集群搭建方法
RabbitMQ安装 1 安装erlang 下载地址:http://www.erlang.org/downloads 博主这里采用的是otp_src_19.1.tar.gz (200MB+) [roo ...
- 搭建rabbitmq集群
查看rabbitmq日志文件 开启web管理工具 [root@controller rabbitmq]# rabbitmq-plugins list [root@controller rabbitmq ...
随机推荐
- java代码之美(7)---guava之Bimap
guava之Bimap bimap的作用很清晰:它是一个一一映射,可以通过key得到value,也可以通过value得到key. 一.概述 1.bimap和普通HashMap区别 (1)在Java集合 ...
- 进程,线程,协程,异步IO知识点
进程: qq 要以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用,内存的管理,网络接口的调用等...对各种资源管理的集合 就可以成为 进程 线程: 是操作系统最小的调度单位, 是一串指令 ...
- 从锅炉工到AI专家(6)
欠拟合和过拟合 几乎所有的复杂方程都存在结果跟预期差异的情况,越复杂的方程,这种情况就越严重.这里面通常都是算法造成的,当然也存在数据集的个体差异问题. 所以"欠拟合"和" ...
- Shiro中的授权问题(二)
上篇博客(Shiro中的授权问题 )我们介绍了Shiro中最最基本的授权问题,以及常见的权限字符的匹配问题.但是这里边还有许多细节需要我们继续介绍,本节我们就来看看Shiro中授权的一些细节问题. 验 ...
- NTP服务器搭建
NTP服务器搭建 :http://www.jbxue.com/LINUXjishu/22352.html 客户端配置: vim /etc/ntp.conf #server 0.centos.pool. ...
- SpringMVC集成rabbitmq:优化秒杀下单环节
前言 上一篇在springboot中基于自动配置集成了rabbitmq.那么回到最初的话题中就是想在秒杀下单环节增加排队机制,从而达到限流的目的. 优化秒杀下单流程 之前是在控制器里拿到客户端请求后直 ...
- 全网Star最多(近20k)的Spring Boot开源教程 2019 年要继续更新了!
从2016年1月开始写博客,默默地更新<Spring Boot系列教程>,从无人问津到千万访问,作为一个独立站点(http://blog.didispace.com),相信只有那些跟我一样 ...
- WPF TextBox/TextBlock 文本超出显示时,文本靠右显示
文本框显示 文本框正常显示: 文本框超出区域显示: 实现方案 判断文本框是否超出区域 请见<TextBlock IsTextTrimmed 判断文本是否超出> 设置文本布局显示 1. Fl ...
- 原生js及H5模拟鼠标点击拖拽
一.原生js 1.拖拽的流程动作 鼠标按下 触发onmousedown事件 鼠标移动 触发onmousemove事件 鼠标松开 触发onmouseup事件 2.注意事项: 要防止div移出可视框,要限 ...
- 深入理解JavaScript作用域和作用域链
前言 JavaScript 中有一个被称为作用域(Scope)的特性.虽然对于许多新手开发者来说,作用域的概念并不是很容易理解,本文我会尽我所能用最简单的方式来解释作用域和作用域链,希望大家有所收获! ...