有做 Django+Celery 高可用的兄弟么?帮忙看看我想的这种架构

2020-04-11 12:25:59 +08:00
 zhoudaiyu
我们现在在一台机器上起了 Nginx Django CeleryBeat CeleryWorker,有单点风险,因此我想做成高可用的架构。在最前面挂一套 LVS 做负载均衡+高可用并提供虚 IP,每台 Web 服务器上启 Nginx+Django+CeleryBeat,再用两台以上的机器跑 CeleryWorker 。我们的 Redis (作为 Celery 的 broker )是 sentinel 方式部署,且 Mysql 用的是 percona 的 3 主方式部署,这样看来就没有单点了。请问这样的架构是否可行?有哪些潜在风险呢?谢谢大家
4159 次点击
所在节点    Python
15 条回复
Yeungsin
2020-04-11 12:38:56 +08:00
CeleryBeat 部署多个的话会导致重复执行任务, 其它的看起来我感觉没问题
zhoudaiyu
2020-04-11 12:42:11 +08:00
@Yeungsin 那么这么看 Web 这一坨只能部署成单点?因为只能有一个 beat ?
linnchord
2020-04-11 12:58:39 +08:00
CeleryBeat 为什么要跟着 web 启多台?应该用不着,独立一台 broker+beat,后面多台 worker 就行。
zhoudaiyu
2020-04-11 13:14:25 +08:00
@linnchord Broker 就是 redis 啊
Yeungsin
2020-04-11 13:23:41 +08:00
@zhoudaiyu web 和 beat 需要拆开,web 继续多个, 然后 beat 单独部署
hushao
2020-04-11 15:27:42 +08:00
多台 web 、单台 beat
black11black
2020-04-11 16:18:58 +08:00
我觉得你要做高可用,选用 django 这个时间点就已经出局了吧..
zhoudaiyu
2020-04-11 16:36:40 +08:00
@black11black 莫得办法 老项目
knktc
2020-04-11 16:46:44 +08:00
担心部署多个 beat 会有重复任务的话可以看下这个项目: https://github.com/ybrs/single-beat
或是用 uwsgi legion 来实现只启动一个 beat 的效果。
zhoudaiyu
2020-04-11 16:51:11 +08:00
@knktc 十分感谢,我还看了一个用分布式锁实现只有一个 beat 在工作的项目 https://github.com/sibson/redbeat
scriptB0y
2020-04-11 17:16:26 +08:00
https://github.com/sibson/redbeat 推荐直接用这个。我用了一年了,它用在 redis 里面加锁的方式,起 N 个 beat 进程但是只有一个在运行,其余的待命。一般的高可用是够了。

之前这个锁有个 bug,不过我帮他 fix 了 XD https://github.com/sibson/redbeat/pull/128
zhoudaiyu
2020-04-11 17:35:34 +08:00
@scriptB0y 大....大佬....请问这个支持 sentinel 吧,有啥坑么?谢谢
scriptB0y
2020-04-11 21:37:58 +08:00
@zhoudaiyu 就遇到这一个,其他的没了。sentinel 应该是支持的,但是我没用过

https://github.com/sibson/redbeat/blob/84743ca5272ceb74b165aa98875f250f877ac1e4/docs/config.rst#sentinel-support
Allianzcortex
2020-04-11 23:39:22 +08:00
@scriptB0y 厉害
yeyuqiu
2020-04-20 11:37:24 +08:00
我最近也在用 https://github.com/sibson/redbeat,遇到了 timezone 的 1 个坑,之前有人提交过 PR,但是还没被 merge

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/661409

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX