引入

近期使用 celery 作为任务平台处理大量任务,在 Redis 和 RabbitMQ 中进行选择,于是选择了后者。一则由于看到文档中 broker 的默认值为 ampq:// ,二则由于 RabbitMQ 的监控以及 celery flower 进行任务监控界面都十分友好。

安装 Erlang

centos 环境上使用 yum 安装

1
vim /etc/yum.repos.d/erlang-sulutions.repo
1
2
3
4
5
6
[erlang-solutions]
name=Centos $releasever - $basearch - Erlang Solutions
baseurl=http://binaries.erlang-solutions.com/rpm/centos/$releasever/$basearch
gpgcheck=1
gpgkey=http://binaries.erlang-solutions.com/debian/erlang_solutions.asc
enabled=1
1
2
3
4
5
6
rpm --import http://binaries.erlang-solutions.com/debian/erlang_solutions.asc

指定源安装
yum install erlang --enablerepo=erlang-solutions
不指定源安装
yum install erlang

也可以使用清华镜像源直接下载某一版本的所有的安装包 https://mirrors.tuna.tsinghua.edu.cn/erlang-solutions/centos/6/

1
yum install *.rpm

安装 RabbitMQ 及简单配置

正常安装即可

1
2
3
wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el6.noarch.rpm

yum install **

配置 rabbitmq

1
vim /etc/rabbitmq/rabbitmq-env.conf

开启网页监控

1
rabbitmq-plugins enable rabbitmq_management

用户操作

1
2
3
4
5
rabbitmqctl  add_user  Username  Password 新建用户
rabbitmqctl  delete_user  Username 删除用户
rabbitmqctl  change_password  Username  Newpassword 修改用户密码
rabbitmqctl  list_users 查看用户列表
rabbitmqctl  set_user_tags  User  Tag 设置用户类

RabbitMQ 路径配置

1
2
3
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/log
RABBITMQ_PLUGINS_DIR=/data/rabbitmq/plugins

RabbitMQ 集群配置

之后工作时提升了任务量,导致部分 celery 的 worker 连接 RabbitMQ 时出现失败,于是希望搭建 RabbitMQ 镜像集群,同时使用 HaProxy 进行负载均衡

首先将 .erlang.cookie 拷贝到各台机器中

修改 .erlang.cookie 权限

1
2
3
chmod 400 /var/lib/rabbitmq/.erlang.cookie
chown rabbitmq /var/lib/rabbitmq/.erlang.cookie
chgrp rabbitmq /var/lib/rabbitmq/.erlang.cookie

添加 node 组成集群

首先要在执行这条语句的服务器的 /etc/hosts 中添加另一条服务器的域名解析,同时保证此解析为对方的 hostname,使用 hostname 查看

1
2
rabbitmqctl join_cluster rabbit@server-hostname
rabbitmqctl join_cluster --ram rabbit@server-hostname

镜像队列策略

1
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

均衡器安装及配置

1
yum install haproxy
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
listen rabbitmq_cluster 0.0.0.0:5672

mode tcp
balance roundrobin

server   node1 node1-ip:5672 check inter 2000 rise 2 fall 3
server   node2 node2-ip:5672 check inter 2000 rise 2 fall 3
server   node3 node3-ip:5672 check inter 2000 rise 2 fall 3

# 监控地址 0.0.0.0:8100/rabbitmq

listen private_monitoring :8100
       mode    http
       option  httplog
       stats   enable
       stats   uri  /rabbitmq
       stats   refresh 5s