集群单例管理器

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文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
c#Java Tcp服务器和。Net Tcp客户端的发送和接收问题   安卓应用程序上的java标记地理位置,其位置位于我周围5Km半径范围内。   向java添加对话框并检索html文件   当eclipse甚至无法打开时,java会在eclipse中更改不兼容的JVM   java中同一jframe中的jlabel和paintComponent   基于另一数组排序的java排序   java AADSTS7000012:该补助金是为另一个租户获得的   java在JSF中使用foreach循环   java如何通过maven为运行junit测试创建运行配置?   java Selenium webDriver不稳定错误堆栈跟踪   java有没有办法创建以键为大写的JSON对象?