Chinaunix

标题: 开源一个基于python、zookeeper实现的分布式基础平台管理工具 [打印本页]

作者: lionfun    时间: 2014-07-06 11:30
标题: 开源一个基于python、zookeeper实现的分布式基础平台管理工具
本帖最后由 lionfun 于 2014-07-06 11:30 编辑

      swall架构类似salt,但是代码更加精炼,salt大概40000多行代码,swall只有3000多,很多基础功能都差不多。swall基于zookeeper实现的,可以用于管理特别是架构比较灵活的服务,你不用登陆到具体的服务器去操作,你指需要在一台机器上面就可以完成上千服务管理,比如获取服务器监控信息、执行shell命令等等,你还可以方便的实现自动化配置,一条命令实现所有应用的部署不再是难题。

      swall集群是本人奋战于webgame行业长达2年而开发的作品,在此之前使用过func、salt等管理工具,func这个东西速度效率比较差,发一个命令如果客户端很多要等很久,对func进行二次开发,但效果不明显,后面研究了salt,这个东西号称非常快速到你难以想象,确实非常快,不过我在使用的时候发现对目前的我们的业务不合适,当时webgame方面我们已经实现了在一台机器上面运行多个游戏区服了,但是salt目前只支持一台机器一个节点,不支持一个minion节点上面创建多个逻辑节点。而且salt越来越大,功能越来越多,但是凡事多必杂,杂必乱,我们往往更希望的是去繁求简

      swall是我研究了salt的源码以后编写的,刚开始也是用zeromq做消息传输,但是后面发现zeromq过多封装的它出问题以后很难调试,而且不同版本zmq数据传输不兼容,考虑到zookeeper的集群性能和watcher特性,后面尝试用zookeeper来编写,也就是现在的版本。swall目前已经我们的生产环境使用了,负责服务器环境初始化,游戏环境自动部署,游戏版本更新,游戏配置更新等任务。入手简单,使用不难,最主要的是架构清晰,代码简单,我已经在我的github上面发布了swall开源版本,这个开源版本去掉了一些和业务相关的代码,也进行了比较多的测试,如果大家喜欢,欢迎下载使用看看,说不定swall就是你要找的东西呢 不多说了,贴下架构图:




github上面有源码和非常详细的文档,你的鼓励是我的动力,但是我更乐于分享github地址:https://github.com/lufeng4828/swall
作者: qq5910225    时间: 2014-07-06 21:15
支持原创,拜读学习!
作者: badb0y    时间: 2014-07-08 17:49
感觉上很强呀,可以和salt之类的工具有一拼
作者: lionfun    时间: 2014-07-10 12:12
回复 3# badb0y

      salt的话功能比较花哨,学习成本比较高,现实中往往用不到那么多功能,而swall简单易用,简单是因为核心功能和func、salt都是一样的,用过func、salt,用swall没有什么压力的,易用是因为提供了很多内置方法让你很容易使用模块中的函数。
      swall比较原生态一些,更多的功能模块需要你自己用python实现,我不设计类似salt那种配置方式是因为我想让使用swall的人很快了解它的原理,实际用的时候可以修改swall以适应自己的环境,这样用起来顺手些。
作者: aa673    时间: 2014-07-10 16:21
感谢分享,很想学习
作者: rdcwayx    时间: 2014-07-18 18:42
回复 1# lionfun
大概看了一下,功能还有有些简单些了。

module.function 的选项有多少? 看介绍里,只有一下几个:
  1. sys.ping
  2. sys.copy
  3. sys.get
  4. sys.get_env  
  5. cmd.call  
  6. sys.funcs
  7. sys.rsync_module
  8. sys.exprs
复制代码
大部分的功能写个简单的ssh -c "命令" 就可以替代。

还有哪些功能,楼主能介绍一下吗?
作者: lionfun    时间: 2014-07-21 12:41
回复 6# rdcwayx

多谢版主关注

是的,功能少了些。如果需要,可以把func和salt的所有功能模块导入进来就可以了,目前我就只导了salt的一个ps.py模块(在module/common下面,提供cpu、内存、硬盘、进程等查看)可以通过:
  1. swall ctl server "*"  sys.funcs ps
复制代码
查看ps.py模块的所有功能。

作者: hyiner    时间: 2014-07-22 08:02
挺有意思的项目,有几个问题想问问楼主,不知道我理解的是不是正确,抱歉没有安装试用。


1. 需要以root身份来安装运行么?文档里的例子好像都是root。

2. 需要配置SSH么?这个没提,应该是不需要吧。



如果是十几台机器的环境,应该够用了,简单方便。但是更大的环境下,可能会有点问题。比如说,

1. 提交swall命令的时候,应该是异步且并行。没有看代码,不确定目前的实现是不是这样的。

2. 有timeout参数,但是如果提交一个long running job的话,我本地的swall process是不是一直都在等待,如果连接丢失的话,对于正在执行的任务和远端机器有影响吗?

3. rsync作文件拷贝可以,但仅仅限于小文件。大的文件,大的集群,rsync不好。而且还有个问题,rsync和swall是两个独立的daemon process吧,最好改成父子进程并且提供状态检查。


我觉得好的管理平台,应该能同时支持push/pull两种操作,支持os本地操作但又独立于特定os。


作者: lionfun    时间: 2014-07-22 09:43
本帖最后由 lionfun 于 2014-07-22 09:45 编辑

回复 8# hyiner
感谢你的关注和提问
  1. 1. swall支持普通账户运行的,通过设置swall.conf配置的user = xxxx 即可;
  2. 2. 不需要配置ssh,swall的数据传输是直接通过zookeeper客户端发送到zookeeper集群,而且数据都是进行对称加密的,对称加密的key可以在swall.conf设置token即可;
  3. 3. swall是异步并行的(目前已经在规模在2000节点以上的场景使用);
  4. 4. timeout参数是获取结果的超时,连接丢失不影响任务执行,任务的结果会保存到zookeeper的swall.conf的keep_job_time配置可以指定任务结果的保留时间,可以如果是long running job,都可以通过job id查看结果的;
  5. 5.swall的文件传输是设置成可配置的,目前支持ssh、ftp、rsync这三个协议,其实可以根据场景自己实现,可以参考swall/plugins/fservice下的组件,可以实现通过分布式系统来传输,甚至http协议都可以用来做swall文件传输。
复制代码

作者: szin2012    时间: 2014-11-08 17:47
本帖最后由 szin2012 于 2014-11-08 17:52 编辑

回复 1# lionfun


    哥们帮忙看下,编译zook的时候有错误,日志在附件里面谢谢哈

pip.rar

2.07 KB, 下载次数: 21


作者: lionfun    时间: 2014-11-08 20:06
回复 10# szin2012


    psutil/_psutil_linux.c:12:20: error: Python.h: No such file or directory
==========================
从这个看,缺少了python头文件,试试下面的方法:

ubuntu:

sudo apt-get install python-dev

centos:
sudo yum install python-devel
作者: szin2012    时间: 2014-11-10 09:08
回复 11# lionfun


    可以了 哈哈 可以加到安装文档说明里面哈。
作者: hailerer    时间: 2015-11-03 17:02
由于初学python的缘故,看源码有点儿吃力,像__new__、mixin都是不太常见的用法吧,构思确实巧妙!楼主是如何想到这样来写代码的?

作者: hailerer    时间: 2015-11-12 17:38
本帖最后由 hailerer 于 2015-11-12 17:47 编辑

非常佩服!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2