Rabbitmq 运维
一、安装:
- 安装ncurses
wget http://ftp.gnu.org/gnu/ncurses/ncurses-6.1.tar.gz
tar zxf ncurses-6.1.tar.gz
cd ncurses-6.1
./configure
make
make install
- 安装openssl
wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2p.tar.gz
mkdir /usr/local/openssl
tar zxf openssl-1.0.2p.tar.gz
cd openssl-1.0.2p/
./config --prefix=/usr/local/openssl
#新版本openssl默认编译出来的libcrypto.a是没有加-fPIC参数的,当重定位被引用的代码段数据对象时出错。
#修改openssl源码的Makefile
#参考:https://blog.csdn.net/erlib/article/details/20995947
#在CFLAG= 添加 -fPIC
make
sudo make install
- 安装erlang环境
#下载erlang:http://www.erlang.org/downloads/19.3
#安装指南:http://erlang.org/doc/installation_guide/INSTALL.html
wget http://erlang.org/download/otp_src_19.3.tar.gz
tar zxf otp_src_19.3.tar.gz
cd otp_src_19.3/
sudo mkdir /usr/local/erlang
./configure --prefix=/usr/local/erlang/ --with-ssl=/usr/local/openssl
make
sudo make install
- 安装rabbitmq
# rabbitmq下载地址:http://www.rabbitmq.com/releases/rabbitmq-server/
# 下载需要安装的版本:
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.12/rabbitmq-server-generic-unix-3.6.12.tar.xz
tar xJf rabbitmq-server-generic-unix-3.6.12.tar.xz
sudo mv rabbitmq_server-3.6.12 /usr/local/
sudo ln -s /usr/local/rabbitmq_server-3.6.12 /usr/local/rabbitmq
配置环境变量:
$ cat /etc/profile
export ERLANG_HOME=/usr/local/erlang
export PATH=$ERLANG_HOME/bin:$PATH
export RABBITMQ_HOME=/usr/local/rabbitmq
export PATH=$RABBITMQ_HOME/sbin:$PATH
二、管理
1. 虚拟主机管理
- 查看现有的虚拟主机
# 查看现有的虚拟主机
$ rabbitmqctl list_vhosts
# 查看是否使用了trace功能
$ rabbitmqctl list_vhosts name tracing
- 添加一个虚拟主机
$ rabbitmqctl add_vhost myvhost
- 删除一个虚拟主机
$ rabbitmqctl delete_vhost myvhost
- 查看虚拟机权限
$ rabbitmqctl list_permissions -p myvhost
- 虚拟机权限授予
rabbitmqctl set_permissions -p vhost root ".*" ".*" ".*"
格式:rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}
vhost:授予用户访问权限的vhost的名称
user:可以访问指定vhost的用户名
conf:用于匹配用户在哪些资源是拥有可配置权限的正则表达式(队列和交换机的创建及删除之类)
write:用于匹配用户在哪些资源是拥有可写权限的正则表达式(发布消息)
read:用于匹配用户在哪些资源是拥有可读权限的正则表达式(读取消息和清空队列)
2.用户权限管理
- 查看用户的权限
$ rabbitmqctl list_user_permissions root
- 创建用户并设置密码
$ rabbitmqctl add_user root root
- 更改密码
$ rabbitmqctl change_password root 123456
- 清除密码
$ rabbitmqctl clear_password root
- 查看现有用户
$ rabbitmqctl list_users
- 设置用户角色
$ rabbitmqctl set_user_tags root administrator
用户角色类型:
none: 无任何角色,新创建的用户角色默认为none
management:可以访问web管理界面
policymaker:包含management的所有权限,并可可以管理策略和参数
monitoring:包含management的所有权限,可以看到所有连接、信道及节点相关信息
administrator: 最高权限
- 验证用户是否能登陆成功
$ rabbitmqctl authenticate_user root 123456
- 删除用户
$ rabbitmqctl delete_user root
3. WEB端管理
- 查看可用插件:
$ rabbitmq-plugins list
- 启用web管理插件
$ rabbitmq-plugins enable rabbitmq_management
- 创建一个具有管理员身份的用户
$ rabbitmqctl add_user monitor monitor
$ rabbitmqctl set_user_tags monitor administrator
登陆管理界面
关闭插件
$ rabbitmq-plugins disable rabbitmq_management
4. 应用管理
- 启动
$ rabbitmq-server -detached
- 停止服务
# 停止运行Rabbitmq Erlang虚拟机和Rabbitmq服务应用
$ rabbitmqctl stop
# 停止运行Rabbitmq Erlang虚拟机和Rabbitmq服务应用(阻塞直达Erlang虚拟机进程退出)
$ rabbitmqctl shutdown
- 停止Rabbitmq应用(Erlang虚拟机处于运行状态)
$ rabbitmqctl stop_app
- 启动Rabbitmq应用
$ rabbitmqctl start_app
- 重置节点,还原到最初状态
$ rabbitmqctl reset
5. 服务状态:
- 队列状态
格式:rabbitmqctl list_queues [-p vhost] [queueinfoitem ...]
$ rabbitmqctl list_queues -p myvhost
- 交换机状态
格式:rabbitmqctl list_exchange [-p vhost] [exchangeinfoitem ...]
$ rabbitmqctl list_exchanges -p myvhost name type durable auto_delete internal arguments policy
- bind状态
格式:rabbitmqctl list bindings [-p vhost] [bindinginfoitem ...]
$ rabbitmqctl list_bindings -p myvhost -q
- 连接状态
格式:rabbitmqctllist_connections [connectioninfoitem ...]
$ rabbitmqctl list_connections
- 信道状态
格式: rabbitmqctl list_channels [channelinfoitem ...]
$ rabbitmqctl list_channels
- 消费者状态
格式:rabbitmqctl list_consumers [-p vhost]
$ rabbitmqctl list_consumers -p myvhost
- 服务状态
# Broker 状态
$ rabbitmqctl status
# 节点健康检测
$ rabbitmqctl node_health_check
# 环境变量名称和值
$ rabbitmqctl environment
# 生成服务状态报告
$ rabbitmqctl report > report.txt
三、配置
保持默认配置,基本不需要更改:
服务端口的更改。
$ cat etc/rabbitmq/rabbitmq.config
[
{
rabbit,[
{tcp_listeners,[
{"172.16.10.101",5673}
]
}
]
}
].
四、集群
Rabbitmq集群中的所有节点都会备份所有元数据信息,包括:
- 队列元数据:队列的名称及属性
- 交换器:交换器的名称及属性
- 绑定关系元数据:交换器与队列或者交换器与交换器之间的绑定关系;
- vhost数据:为vhost内的队列、交换器和绑定提供命名空间及安全属性。
消息不会备份:只会在单节点创建队列并包含完整的队列信息(元数据、状态和内容 )
1. 集群搭建
- 配置DNS解析
cat /etc/hosts
172.16.10.101 node1
172.16.10.102 node2
- 在node2上安装erlang和rabbitmq
直接把node1上编译好的拷贝到node2
ubuntu@node1:~$ scp -r /usr/local/erlang ubuntu@node2:~/
ubuntu@node1:~$ scp -r /usr/local/rabbitmq ubuntu@node2:~/
ubuntu@node2:~$ sudo mv erlang /usr/local/
ubuntu@node2:~$ sudo mv rabbitmq /usr/local/
- 配置环境变量
$ cat /etc/profile
export ERLANG_HOME=/usr/local/erlang
export PATH=$ERLANG_HOME/bin:$PATH
export RABBITMQ_HOME=/usr/local/rabbitmq
export PATH=$RABBITMQ_HOME/sbin:$PATH
- 拷贝node1的cookie文件到node2
编译安装的cookie文件在 $HOME/.erlang.cookie
ubuntu@node1:~$ scp $HOME/.erlang.cookie ubuntu@node2:~/
- 启动node2rabbitmq
ubuntu@node2:~$ rabbitmq-server -detached
ubuntu@node2:~$ rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node2
ubuntu@node2:~$ rabbitmqctl reset
Resetting node rabbit@node2
ubuntu@node2:~$ rabbitmqctl join_cluster rabbit@node1
Clustering node rabbit@node2 with rabbit@node1
ubuntu@node2:~$ rabbitmqctl start_app
Starting node rabbit@node2
2. 集群管理
- 查看集群状态
$ rabbitmqctl cluster_status
- 修改集群节点类型
# 需要现停止rabbitmq应用:rabbitmqctl stop_app
$ rabbitmqctl change_cluster_node_type disc
- 将节点从集群中删除
$ rabbitmqctl forget_cluster_node rabbit@node2
- 断电后重启
$ rabbitmqctl force_boot
3. 队列镜像
rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all","ha-sync-mode":"automatic"}'