rabbitmq☞简要安装

阅读量: zyh 2020-01-01 15:10:58
Categories: > Tags:

docker方式

mkdir -p /export/docker-data-rabbitmq/{data,log,conf.d}
chown -R 999:999 /export/docker-data-rabbitmq/{data,log,conf.d}

999是rabbitmq官方镜像里的rabbitmquid

添加额外的日志配置

/export/docker-data-rabbitmq/conf.d/log.conf

#log.file = rabbit.log
log.dir = /var/log/rabbitmq
log.file.level = info

# rotate every night at midnight
log.file.rotation.date = $D0
# keep up to 5 archived log files in addition to the current one
log.file.rotation.count = 5
# https://hub.docker.com/_/rabbitmq, 然后搜索 management 版本 [docker pull rabbitmq:management]
pwd=`cat /proc/sys/kernel/random/uuid | cut -d'-' -f1`
echo mq@${pwd};
container_name=rabbitmq
network=cms
docker run --name ${container_name} \
--hostname ${container_name} \
--network ${network} \
--restart always \
-p 5672:5672 -p 15672:15672 -p 15692:15692 \
--cpus=1 \
--memory=1G --memory-swap=1G \
--ulimit nofile=204800 \
--mount "type=bind,src=/export/docker-data-rabbitmq/data,dst=/var/lib/rabbitmq" \
--mount "type=bind,src=/export/docker-data-rabbitmq/conf.d,dst=/etc/rabbitmq/conf.d" \
--mount "type=bind,src=/export/docker-data-rabbitmq/log,dst=/var/log/rabbitmq" \
-e RABBITMQ_DEFAULT_VHOST=rabbitmq \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=mq@${pwd} \
-e RABBITMQ_LOGS=rabbitmq.log \
-d rabbitmq:3.8.13-management

需要注意的是,docker方式,RABBITMQ_LOGS默认值是-也就是输出到stdout, 这里我改成了具体文件

💥任何配置,环境变量的优先级大于文本配置

安装logrotate,rabbitmq的日志轮转依托它

docker exec -it rabbitmq /bin/bash
apt update
apt install logrotate
exit

重启 rabbitmq

docker restart rabbitmq

rpm方式(过时)

# 安装 erlang 的 rabbitmq 兼容版方式 (卸载命令 yum erase erlang-*)
yum install -y https://github.com/rabbitmq/erlang-rpm/releases/download/v22.0.7/erlang-22.0.7-1.el6.x86_64.rpm

# 安装 rabbitmq-server
yum install -y https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.15/rabbitmq-server-3.7.15-1.el6.noarch.rpm;

## 开启管理
rabbitmq-plugins enable rabbitmq_management;

# 修改一些小配置
vim /etc/rabbitmq/rabbitmq.conf
log.file.level = warning
log.file = rabbitmq.log

vim /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_LOG_BASE=/export/rabbitmq/logs
NODENAME=rabbit@<当前的hostname>

mkdir -p /export/rabbitmq/logs && chown rabbitmq:rabbitmq /export/rabbitmq/logs
chown rabbitmq.rabbitmq /var/lib/rabbitmq/.erlang.cookie;

echo '* soft nofile 202400' >> /etc/security/limits.conf
echo '* hard nofile 202400' >> /etc/security/limits.conf

#/etc/init.d/rabbitmq-server restart;
systemctl restart rabbitmq-server

Prometheus 监控

15692 端口是 prometheus 采集器的暴露端口,docker方式默认采集插件已经开启。

若 prometheus 采集器插件没有启动,可以进容器里通过 rabbitmq-plugins enable rabbitmq_prometheus 启动

宿主机里执行 curl -s localhost:15692/metrics | head -n 3确保可以返回采集器数据。

prometheus的告警规则,可以访问 Awesome Prometheus alerts | Collection of alerting rules (grep.to) 获取

grafana的模板,可以访问 RabbitMQ-Overview dashboard for Grafana | Grafana Labs

一些基本命令

添加用户和虚拟主机

#输入http://ip:15672可以登录管理界面,
# rpm 安装后,只有默认账户guest/guest.
# docker 安装后,有 admin/admin 用户

# 添加一个 vhost
pro_vhost=
rabbitmqctl add_vhost ${pro_vhost}

# 添加一个新用户
user_name=
pwd=`cat /proc/sys/kernel/random/uuid | cut -d'-' -f1`
rabbitmqctl add_user ${user_name} mq@${pwd};
echo "${user_name}用户密码是:mq@${pwd}"

#该命令使用户 user_name 具有 pro_vhost 中所有资源的配置、写、读权限以便管理其中的资源
# rabbitmqctl set_permissions -p vhost User ConfP WriteP ReadP
rabbitmqctl set_permissions -p ${pro_vhost} ${user_name} ".*" ".*" ".*"; 

# 用户绑定 tags
# tags决定了用户更高级的权限,
## 超级管理员(administrator):可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
## 监控者(monitoring):可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
## 策略制定者(policymaker):可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)
## 普通管理者(management):仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
## 其他(other):无法登陆管理控制台,通常就是普通的生产者和消费者。

user_tag=administrator
rabbitmqctl set_user_tags ${user_name} ${user_tag};

#查看所有用户
rabbitmqctl list_users;

👙超管用户如果不添加对某个vhost的权限,则无法直接对这个vhost下的队列进行删除。

状态

rabbitmqctl status
rabbitmqctl list_queues -p <vhost_name>

队列

rabbitmqctl list_queues --vhost <>

客户端调用

php

wget https://github.com/alanxz/rabbitmq-c/releases/download/v0.7.1/rabbitmq-c-0.7.1.tar.gz;
tar xf rabbitmq-c-0.7.1.tar.gz;
cd rabbitmq-c-0.7.1;
./configure --prefix=/usr/local/rabbitmq-c-0.7.1;
make && make install;
cd ..;
wget https://pecl.php.net/get/amqp-1.9.3.tgz;
tar xf amqp-1.9.3.tgz;
cd amqp-1.9.3;
/usr/local/php/bin/phpize;
./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c-0.7.1;
make && make install;

php.ini里添加生成的amqp.so的路径信息
extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/amqp.so