前言
- 本次Rabbit集群部署所使用的的软件版本
erlang:erlang-23.3.3-1.el7.x86_64.rpm ,rabbitmq:rabbitmq-server-3.8.23-1.el7.noarch.rpm
- 本次Rabbit集群部署需要安装在两台CentOS服务器
分别为svr-app-rabbitmq01、svr-app-rabbitmq02,以下安装步骤(1-4)分别在两台服务器执行
1.Rabbit MQ CentOS环境下安装
1.1RabbitMQ版本 和 Erlang 版本兼容性关系
https://www.rabbitmq.com/which-erlang.html
1.2安装包下载地址
1.2.1 erlang下载地址
https://github.com/rabbitmq/erlang-rpm/releases (国外)
https://gitcode.net/mirrors/rabbitmq/erlang-rpm (国内)
1.2.2 socat下载地址
http://www.rpmfind.net/linux/rpm2html/search.php?query=socat(x86-64)
1.2.3 rabbitmq下载地址
https://github.com/rabbitmq/rabbitmq-server/releases (国外)
https://gitcode.net/mirrors/rabbitmq/rabbitmq-server(国内)
1.2.4 安装包目录(参考)
cd /usr/local
mkdir rabbitmq
cd rabbitmq
此时安装包放置目录为:cd /usr/local/rabbitmq
下载安装包并上传至安装目录(当服务器无法直接通过wget下载时)
2 安装依赖包
2.1 yum安装依赖包
使用root用户执行如下命令安装依赖
yum install libtool;
yum install libtool-ltdl;
yum install libtool-ltdl-devel;
yum install lua;
yum install ncurses-devel;
yum install openssl-devel;
2.2 yum安装socat组件
yum -y install socat
3 安装erlang
cd /usr/local/rabbitmq
rpm -ivh erlang-23.3.3-1.el7.x86_64.rpm
4 安装rabbitmq
cd /usr/local/rabbitmq
rpm -ivh rabbitmq-server-3.8.23-1.el7.noarch.rpm
安装web插件
rabbitmq-plugins enable rabbitmq_management
添加用户并分配权限
rabbitmqctl add_user admin admin
给admin分配权限
rabbitmqctl set_user_tags admin administrator
5 RabbitMQ服务管理
设置开机自启
systemctl enable rabbitmq-server
启动rabbitmq
systemctl start rabbitmq-server
后台启动
rabbitmq-server -deched &
查看服务状态
systemctl status rabbitmq-server
是active则代表启动成功
停止服务
systemctl stop rabbitmq-server
重启服务
systemctl restart rabbitmq-server
防火墙端口放通
####firewalld防火墙
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload
####iptables防火墙
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 5672 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 15672 -j ACCEPT
systemctl restart iptables
5 RabbitMQ配置集群策略
5.1 配置HOST
使用root用户修改主机的hosts文件,两台服务器均需要执行该操作:
vim/etc/hosts
#(输入 i 进入编辑模式)
输入
10.10.1.10 svr-app-rabbitmq01
10.10.1.11 svr-app-rabbitmq02
#svr-app-rabbitmq01 为master节点机器名
#退出编辑保存
5.2 配置策略
登录RabbitMQ
RabbitMQ管理控制台访问:http://rabbitmq服务器IP地址:15672
用户名密码默认admin/admin,登录rabbitmq控制台后点击admin,在用户列表中选择admin用户配置权限,如下:
配置集群策略
给用户配置集群策略:点击admin,点击右侧的Policies添加策略:
name配置ha-all
Pattern配置^
Apply to配置Exchangesand queues
配置ha-mode=all、ha-sync-mode=automatic
配置完成点击Add policy按钮保存。
如网页无法正常操作,可在服务器上执行如下命令:
rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
5.3 配置集群节点
根据上述步骤安装启动RabbitMQ,选择一个节点作为master节点
在另外1台服务器节点机器上,使用root用户执行如下命令。
scp -r root@10.10.1.10:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq
#重启RabbitMQ服务:
ps -ef |grep rabbit |grep -v grep |cut -c 9-15 | xargs kill -s 9
nohup rabbitmq-server -deched &
#将该机器上RabbitMQ节点加入集群:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@svr-app-rabbitmq01
rabbitmqctl start_app
5.4 查看集群状态
输入命令查看
rabbitmqctl cluster_status
登录RabbitMQ管理控制台查看节点信息:
访问主节点rabbitmq的服务器:http://10.10.1.10:15672在节点列表中可以看到刚刚添加的集群节点信息。
6 RabbitMQ常用命令
6.2用户管理
# 添加用户
rabbitmqctl add_user <username> <password>
# 删除用户
rabbitmqctl delete_user <username>
# 修改用户密码
rabbitmqctl change_password <username> <newpassword>
# 清除用户密码(该用户将不能使用密码登陆,但是可以通过SASL登陆如果配置了SASL认证)
rabbitmqctl clear_password <username>
# 设置用户tags(相当于角色,包含administrator,monitoring,policymaker,management)
rabbitmqctl set_user_tags <username> <tag>
# 列出所有用户
rabbitmqctl list_users
# 删除用户
rabbitmqctl delete_user {username}
# 清除用户密码
rabbitmqctl clear_password {username}
# 修改密码
rabbitmqctl change_password {username} {newPassword}
# 验证用户
rabbitmqctl authentiçate_user {username} {passWord}
# 新增用户
rabbitmqctl add_user {username} {password}
# 给用户授权
rabbitmqctl set_user_tags {username} {roles}
# 清楚用户对某个虚拟机的权限。
rabbitmqctl clear_permissions [-p vhostName] {username}
# 用来显示虚拟主机上的权限。
rabbitmqctl list_permissions [-p vhost]
# 用来显示用户在已分配虚拟机上的权限。
rabbitmqctl list_user_permissions {username}
6.2插件管理
# rabbitmq-plugins [-n node] {command} [command options ...]
# 启动插件
# rabbitmq-plugins enable [--offline] [--online] {plugin ...}
rabbitmq-plugins enable rabbitmq_management
# 禁用插件
# rabbitmq-plugins disable [--offline] [--online] {plugin ...}
rabbitmq-plugins disable rabbitmq_management
# 表示启用参数指定的插件,并且禁用其他所有插件
# 没有参数表示禁用所有的插件
rabbitmq-plugin set rabbitmq_management
# 显示所有的插件,每一行一个
rabbitmq-plugins list
# 显示所有的插件,并且显示插件的版本号和描述信息
rabbitmq-plugins list -v
# 显示所有名称含有 "management" 的插件
rabbitmq-plugins list -v management
# 显示所有显示或者隐式启动的插件
rabbitmq-plugins list -e rabbit
6.2集群管理
# 显示集群的状态
rabbitmqctl cluster_status
# 将节点加入指定集群中。在这个命令执行前需要停止 RabbitMQ应用井重置节点。
rabbitmqctl joio_cluster {cluster_node} [--ram]
# 修改集群节点的类型。在这个命令执行前需要停止 RabbitMQ应用。
rabbitmqctl change_cluster_node_type {disclram}
# 将节点从集群中删除,允许离线执行。
rabbitmqctl forget_cluster_node [--offiine]
# 来查看那些slaves已经完成同步:
rabbitmqctl list_queues {queue_name} {slave_pids} synchronised_slave_pids
# 手动的方式同步一个queue:
rabbitmqctl sync_queue {queue_name}
# 取消某个queue的同步功能:
rabbitmqctl cancel_sync_queue {queue_name}
6.2节点管理
# 查询节点状态
rabbitmqctl status
# 停止RabbitMQ应用,但是Erlang虚拟机还是处于运行状态。此命令的执行优先于其他管理操作,比如rabbitmqctl reset。
rabbitmqctl stop_ app
# 启动RabbitMQ应用。在执行了其他管理操作之后,重新启动之前停止的RabbitMQ应用,比rabbitmqctl reset。
rabbitmqctl start_app
# 重置RabbitMQ节点,将RabbitMQ节点重置还原到最初状态。包括从原来所在的集群中删除此节点,从管理数据库 中删除所有的配置数据,如己配置的用户、 vhost 等,以及删除所有的持久化消息。执行 rabbi tmqctl reset 命令前必须停止RabbitMQ 应用。
rabbitmqctl reset
# 强制将 RabbitMQ 节点重置还原到最初状态。不同于 rabbitmqctl reset 命令, rabbitmqctl force_reset 命令不论当前管理数据库的状态和集群配置是什么,都会无条件地重直节点。它只能在数据库或集群配置己损坏的情况下使用。与 rabbitmqctl reset 命令一样,执行 rabbitmqctl force_reset 命令前必须先停止 RabbitMQ 应用。
rabbitmqctl force_reset
# 指示RabbitMQ节点轮换日志文件。RabbitMQ节点会将原来的日志文件中的内容追加到"原 始名称+后缀"的日志文件中,然后再将新的日志内容记录到新创建的日志中(与原日志文件同名)。当目标文件不存在时,会重新创建。如果不指定后缀suffix. 则日志文件只是重新打开而不会进行轮换。
rabbitmqctl rotate_logs {suffix}
# 停止运行RabbitMQ的Erlang虚拟机和RabbitMQ应用。如果RabbitMQ没有成功关闭,则会返回一个非零值。这个命令和rabbitmqctl stop 不同的是,它不需要指定pid_file而可以阻塞等待指定进程的关闭。
rabbitmqctl shutdown
# 停止运行RabbitMQ的Erlang虚拟机和RabbitMQ服务应用,其中pid_file是通过rabbitmq-server命令启动RabbitMQ 服务时创建的,默认情况下存放于mnesia目录中。注意rabbitmq-server -detach 这个带有 -detach后缀的命令来启动 RabbitMQ 服务则不会生成 pid_file 文件。指定pid_file会等待指定进程的结束。
rabbitmqctl stop [pid_file]
6.2对象管理
# name:罗列出所有虚拟机,tracing:表示是否使用了 RabbitMQ 的 trace 功能
rabbitmqctl list_vhosts [name,tracing]
# 查看交换器
rabbitmqctl list_exchanges [-p vhost] [exchangeinfoitem ...]
# 查看绑定关系的细节
rabbitmqctl list_bindings [-p vhost] [bindinginfoitem ...]
# 查看已声明的队列
rabbitmqctl list_queues [-p vhost] [queueinfoitem ...]
# 返回 TCP!IP连接的统计信息。
rabbìtmqctl lìst_connectìons [connectìonìnfoìtem ...]
# 返回当前所有信道的信息。
rabbitmqctl list_channels [channelinfoitem ...]
# 列举消费者信息 每行将显示由制表符分隔的己订阅队列的名称、相关信道的进程标识、consumerTag、是否需要消费端确认 prefetch_count 及参数列表这些信息。
rabbitmqctl list_consumers [-p vhost]
# 创建一个新的 vhost ,大括号里的参 数表示 vhost 的名称。
rabbitmqctl add vhost {vhostName}
# 删除一个vhost,同时也会删除其下所有的队列、交换器、绑定关系、 用户权限、参数和策略等信息。
rabbitmqctl delete_vhost {vhostName}
# RabbitMQ 中的授予权限是指在 vhost 级别对用户而言的权限授予。
rabbitmqctl set permissions [-p vhostName] {userName} {conf} {write} {read}
# 对RabbitMQ 节点进行健康检查,确认应用是否正常运行、list_queues list_channels 是否能够正常返回等。
rabbitmqctl node_health_check
# 显示每个运行程序环境中每个变量的名称和值。
rabbitmqctl environment
# 为所有服务器状态生成一个服务器状态报告,井将输出重定向到一个文件:rabbitmqctl report > report.txt
rabbitmqctl report
# 显示 Broker 的状态,比如当前 Erlang 节点上运行的应用程序、RabbitMQ/Erlang的版本信息、os 的名称、内 存及文件描述符等统计信息。
rabbitmqctl status
# 策略管理
# 策略查看
rabbitmqctl list_policies [-p <vhost>]
# 策略设置
rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern> <definition>
# 策略清除
rabbitmqctl clear_policy [-p <vhost>] <name>