CentOS7-RabbitMQ集群搭建
目标
在CentOS7中快速安装RabbitMQ
此次安装的RabbitMQ版本为:3.8.3,erlang版本为:22.3.2
下载erlang时需要注意版本兼容性问题:https://www.rabbitmq.com/which-erlang.html
ip | 备注 |
---|---|
10.80.210.67 | hostname:ns1 |
10.80.210.68 | hostname:ns2 |
10.80.210.69 | hostname:ns3 |
前提
1.时间同步(检查时间)
2.设置selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
3.设置firewalld策略(关闭防火墙)
systemctl stop firewalld
systemctl disable firewalld
4.设置hostname
,及其hosts
设置hostname目的是为了防止启动管理界面时候出现的错误,和加入集群也会出错,这是避坑第一步
#每台服务器设置hostname
hostnamectl set-hostname ns1
hostnamectl set-hostname ns2
hostnamectl set-hostname ns3
# 设置 /etc/hosts
echo 10.80.210.67 ns1 >> /etc/hosts
echo 10.80.210.68 ns2 >> /etc/hosts
echo 10.80.210.69 ns3 >> /etc/hosts
安装及配置RabbitMQ
安装依赖环境
yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
根据官方文档说明建议也要先安装socat
和logrotate
:yum install socat logrotate
安装erlang
rpm包下载:https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-22.3.2-1.el7.x86_64.rpm
安装:rpm -Uvh erlang-22.3.2-1.el7.x86_64.rpm
安装RabbitMQ
rpm包下载:https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.3/rabbitmq-server-3.8.3-1.el7.noarch.rpm
or:https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.8.3-1.el7.noarch.rpm
安装:rpm -ivh rabbitmq-server-3.8.3-1.el7.noarch.rpm
安装路径默认在:/usr/lib/rabbitmq/lib/rabbitmq_server-3.8.3/ebin
开启管理界面及配置
# 开启rabbitmq management及远程登录
rabbitmq-plugins enable rabbitmq_management
# 开启 mqtt (如果需要mqtt则需要开启,3.8.x开启默认内置)
rabbitmq-plugins enable rabbitmq_mqtt
启动停止服务
systemctl start rabbitmq-server # 启动服务
systemctl stop rabbitmq-server # 停止服务
systemctl restart rabbitmq-server # 重启服务
命令行方式初始化管理员账号
默认存在一个guest
账号,但是guest
账号只能在本机登录(centos本机)
解决办法:新建一个新的管理员账号
# 创建用户
rabbitmqctl add_user xinsec DB.xinsec
#设置超级管理员
rabbitmqctl set_user_tags xinsec administrator
#授权远程访问(也可以登录后,可视化配置)
rabbitmqctl set_permissions -p / xinsec "." "." ".*"
#---以下命令可忽略---
#查看用户列表
rabbitmqctl list_users
#修改对应用户密码
rabbitmqctl change_password username 'newpasswd'
访问界面
http://IP:15672
添加用户 出现以下错误,请检查 /etc/hosts 是否加入!!
Error: unable to perform an operation on node 'rabbit@ns'. Please see diagnostics information and suggestions below.
RabbitMQ普通集群搭建
接下来我们开始集群的配置。
ns2/ns3服务器中先执行:systemctl stop rabbitmq-server
ns1服务器执行把.erlang.cookie
复制到ns2/ns3
scp .erlang.cookie ns2:/var/lib/rabbitmq/.erlang.cookie
scp .erlang.cookie ns3:/var/lib/rabbitmq/.erlang.cookie
然后分别执行如下命令将 ns2/ns3
加入ns1集群中:
systemctl restart rabbitmq-server
# 加入ns1集群
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@ns1
rabbitmqctl start_app
#---以下命令可忽略---
# 查看集群的状态
rabbitmqctl cluster_status
进入界面,可以看到,此时集群中已经有三个节点了
搭建镜像集群-普通集群转镜像集群
因为普通集群无法实现高可用
但所谓的``镜像集群模式`并不需要额外搭建,只需要我们将队列配置为镜像队列即可。
这个配置可以通过网页配置
,也可以通过命令行配置
在任意一个节点上面执行即可。
默认是将所有的队列都设置为镜像队列,在消息会在不同节点之间复制,各节点的状态保持一致。
网页配置
先来看看网页上如何配置镜像队列。
点击 Admin 选项卡,然后点击右边的 Policies,再点击 Add/update a policy
,如下图:
接下来添加一个策略,如下图:
各参数含义如下:
- Name: policy 的名称。
- 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 的优先级。
配置完成后,点击下面的 add/update policy
按钮,完成策略的添加
命令行配置
命令行的配置格式如下:
rabbitmqctl set_policy [-p vhost] [--priority priority] [--apply-to apply-to] {name} {pattern} {definition}
配置案例:
rabbitmqctl set_policy -p / --apply-to queues my_queue_mirror "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'