Linux 部署 rabbitMQ集群
1. 部署Erlang
1.1 RabbitMQ依赖于Erlang,版本对应请查看
https://www.rabbitmq.com/which-erlang.html
1.2 下载安装Erlang
# 添加epel扩展源
yum install epel-release
# 先删除可能存在的erlang(非必须)
yum list erlang
yum remove erl*
# 清空和更新安装源(非必须)
yum clean
yum update
# 参考 https://github.com/rabbitmq/erlang-rpm -> Erlang 21.x -> o use Erlang 21.x on CentOS 6
# 配置安装源
vim /etc/yum.repos.d/rabbitmq-erlang.repo
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/21/el/6
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=0
# 安装
yum install erlang
# 如果出现https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/21/el/6/repodata/repomd.xml: [Errno 14] problem making ssl connection 悲伤,仓库过期了
# 到https://github.com/rabbitmq/erlang-rpm/releases下载(电脑龟速,夸克下载飞速)
1.3 测试Erlang
# 查看版本
erl -v
# 退出Erlang 注意尾部的 .
halt().
2. 安装RabbitMQ
2.1 下载 npm 安装包:
rabbitmq-server-3.8.0-1.el6.noarch.rpm
2.3 创建rabbitmq目录并上传npm安装包
cd /usr/local
mkdir rabbitmq
chmod 777 -R rabbitmq
2.4 上传安装包至rabbitmq文件夹内
2.5 进入rabbitmq文件夹 下载签名并安装
cd rabbitmq
# 已有安装包时下载签名
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
# 安装
yum install rabbitmq-server-3.8.0-1.el6.noarch.rpm
2.5 启动mq
# 添加开机启动RabbitMQ服务
chkconfig rabbitmq-server on
# 手动启动服务
service rabbitmq-server start
2.6 配置MQ
# 查看当前所有用户
rabbitmqctl list_users
# 查看默认guest用户的权限
rabbitmqctl list_user_permissions guest
# 由于RabbitMQ默认的账号用户名和密码都是guest。为了安全起见, 先删掉默认用户
rabbitmqctl delete_user guest
# 添加新用户
rabbitmqctl add_user username password
# 设置用户tag
rabbitmqctl set_user_tags username administrator
# 赋予用户默认vhost的全部操作权限
rabbitmqctl set_permissions -p / username ".*" ".*" ".*"
# 查看用户的权限
rabbitmqctl list_user_permissions username
2.7 添加插件
# 添加web管理插件
rabbitmq-plugins enable rabbitmq_management
# 添加移除异常消息的插件
rabbitmq-plugins enable rabbitmq_shovel rabbitmq_shovel_management
# 下载延迟队列插件rabbitmq_delayed_message_exchange,得到ez文件
# mq插件位置/usr/lib/rabbitmq/lib/rabbitmq_server/plugins
# 下载网站 https://www.rabbitmq.com/community-plugins.html
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
# 添加成功后访问 http://ip地址:15672
2.8 编辑远程连接权限
vim /etc/rabbitmq/rabbitmq.config
2.9 追加以下内容,lucky为允许远程连接的用户
[
{rabbit, [{tcp_listeners, [5672]}, {loopback_users, ["username"]}]}].
2.10 重启rabbitMQ
rabbitmqctl stop
rabbitmq-server restart
# 排查错误指令
systemctl status rabbitmq-server.service
2.11 访问http://IP地址:15672 进行管理
3.集群配置
3.1 Erlang通过erlang.cookie进行集群配置,配置RabbitMQ集群模式时需要各节点erlang.cookie内容一致
# 修改服务器配置 (.erlang.cookie只读)
vim /var/lib/rabbitmq/.erlang.cookie
# 复制到其他节点
scp /var/lib/rabbitmq/.erlang.cookie root@10.104.132.37:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@10.104.132.209:/var/lib/rabbitmq/.erlang.cookie
# 未获取root密码情况下 需要更改权限,记得改回来
chmod 777 /var/lib/rabbitmq/.erlang.cookie
vim /var/lib/rabbitmq/.erlang.cookie
# 将两文件修改成一致后,改回原权限
chmod 400 /var/lib/rabbitmq/.erlang.cookie
3.2 使用 -detached 参数运行各节点
rabbitmqctl stop
rabbitmq-server -detached
3.3 修改主机的hostname和hosts
# 将HOSTNAME=ttt6-node35 确保两个服务器不一致
vim /etc/sysconfig/network
# 修改hosts
vim /etc/hosts
hosts内容需要和hostname保持一致 :举例
10.104.132.35 ttt6-node35
10.104.114.116 ttt6-node116
3.4 重启时配置生效,大约需要两分钟
reboot
3.5 在从服务器上执行下列语句加入集群
# 停止程序
rabbitmqctl stop_app
# 加入到集群,默认为磁盘节点
# 加入为内存节点 加-ram参数 如:rabbitmqctl join_cluster --ram rabbit@ttt6-node35
rabbitmqctl join_cluster rabbit@ttt6-node35
rabbitmqctl start_app
若出现 rabbitmqctl 指令执行不成功
检查Erlang cookie hash值是否一致,不一致重复3.1,注意空行
若一致,则可能是插件或者rabbitmq本身未启动
service rabbitmq-server start
rabbitmqctl start_app
3.6 查看集群搭建结果
rabbitmqctl cluster_status
3.7 配置镜像队列模式,即队列会被复制到各个节点,各个节点状态保持一致,高可用
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
原文地址:https://www.cnblogs.com/hyry/p/11927566.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 手把手教你搭建一个灰度发布环境
- Kibana: 如何使用 Search Bar
- 「PHP」以nginx、php-cgi为例,把nginx、php-cgi安装为Windows系统服务
- 聊聊dubbo-go的GenericFilter
- 知新 | koa框架入门到熟练第二章
- JVM学习二
- 微信小程序对接云开发录音文件识别nodejs sdk
- 利用python读取WORD文档中的创建者信息
- LeetCode-2.两数相加 使用链表加法实现
- Spring学习(2):Spring Bean管理(上)
- 聊聊dubbo-go的TpsLimitFilter
- spring,springBoot事件
- LeetCode-3.无重复字符的最长子串 利用一个整形数组+ASCII码实现滑动窗口
- 算法不想学(二): 堆排序和top k
- 利用python读取EXCEL文档中的创建者信息