集群单例管理器
BeatCop的Python项目详细描述
beatcop是一个简单的集群单例管理器。它确保 进程一次只能在群集中的一个节点上运行,不再,不再 更少(假设至少还有一个节点处于活动状态)。
它是为管理Celery beat而创建的 在一个由芹菜工人组成的自动缩放池中,但被写成了普通的 流程管理器,因此可以用于几乎任何事情。它 使用Redis进行通信。
机制
beatcop使用一个即将过期的redis密钥(SET EX NX)作为锁,它会不断地 在受控进程运行时刷新。如果是披头士或者 整个节点因任何原因死亡、断开网络或丢失 连接到redis,锁过期,另一个锁上有一个等待的beatcop 节点将获取锁并启动新进程。
获取锁(通过set nx)并刷新(通过一个简短的lua脚本) 原子的,所以不应该有种族条件。
比阿特普也非常努力地确保如果出了什么问题, 监视的进程已停止。
先决条件
- 运行Redis 2.6.12或更高版本的服务器,所有节点都可以 连接。
安装
# Make a virtualenv if you like first pip install -r requirements.txt ./beatcop.py /path/to/beatcop.ini
一般来说,让beatcop在 如果它死了就重新启动,比如 daemon-tools或者恐惧者 暴发户。
配置
请参阅示例beatcop.ini。
注意事项
Beatcop依赖于Redis连接。如果redis更新失败,beatcop 将停止控制过程并退出,希望至少有一个 其他节点仍然可以与redis对话并生成一个新进程。如果所有节点 失去redis连接,这显然会失败。Beatcop现在支持 redis集群(参见示例beatcop.ini),这意味着redis不再 必须是唯一的失败点。
beatcop当前不通过nutcracker (twemproxy)工作。
许可证
mit-请参阅LICENSE文件。