如何自己开发一套服务器管理系统

如何自己开发一套服务器管理系统,第1张

转载表面上看,是一套基于B/S方式实现的分布式管理系统,但其实背后的架构是基于C/S完成的。你以为他是一只鞋吗?其实他是一个吹风机。作为界面化的系统,浏览器框架是不可或缺的,但更加重要的东西在Socket上面。

一、需要解决中央控制端到各节点服务器之间的通信。

这个其实牵扯到一个通信协议的问题,各语言都有自己的socket,thread的库,直接调用即可。但是这个通信协议就需要自己来完成了。既不能太简单,太简单了,明码传输,如果别人获知了这个接口,就很容易执行一些令人讨厌的 *** 作。也不能太复杂,太复杂了等于是给自己找麻烦,所以简单的数据包编解码的工作或者用token验证的方式是需要的。通信协议起码要两种,一种是传输命令执行的协议,一种是传输文件的协议。

二、跨语言的socket通信

为什么要跨语言,主控端和代理端通信,用什么语言开发其实无所谓。但是为了给自己省事,尽可能使用服务器上已经有了的默认语言,Ambari前期采用phppuppet的方式管理集群,这不是不可以,puppet自己解决了socket通信协议和文件传输的问题,可你需要为了puppet在每台服务器上都安装ruby。我是个有点服务器和代码洁癖的人。光是为了一个puppet就装个ruby,我觉得心里特对不起服务器的资源。所以我自己写了一个python的代理端。python是不管哪个linux系统在安装的时候就都会有了。然后主控端的通信,可以用python实现,也可以用php实现,但是考虑到对于更多的使用者来说,改php可能要比改tornado简单许多,所以就没用python开发。hadoop分支版本众多,发布出去,用户要自己修改成安装适合自己的hadoop发行版,就势必要改源码,会php的明显比会python的多。php里面的model封装了所有的 *** 作,而python只是个 *** 作代理人的角色而已。

所以也延伸出一个问题,什么语言用来做这种分布式管理系统的代理端比较合适,我自己觉得,也就是python比较合适了, *** 作系统自带,原生的package功能基本够用。用java和php也可以写agent,但是你势必在各节点预先就铺设好jre或者php运行环境。这就跟为什么用python和java写mapred的人最多是一样的。没人拦着你用nodejs写mapred,也可以写,就是你得在每个节点都装v8的解释引擎,不嫌麻烦完全可以这样干。原理参看map/rece论文,不解释。perl也是 *** 作系统原生带的,但是perl的可维护性太差了,还是算了吧。

所以这就牵扯到一个跨语言的socket问题,理论上来说,这不存在什么问题。但这是理论上的,实际开发过程中确实存在问题,比如socket长连接,通信数据包在底层的封装方式不同。我没有使用xml-rpc的原因之一就是我听说php的xmlrpc跟其他语言的xmlrpc有不同的地方,需要修改才能用,我就没有用这种办法。最早是自己定义的 *** 作协议,这时就遇到了这些问题,所以后来直接采用了thrift方式。就基本不存在跨语言的socket通信问题了。

三、代理端执行结果的获取

无论命令还是文件是否在代理端执行成功,都需要获取到执行结果返回给中央端。所以这里也涉及一个读取节点上的stdout和stderr的问题。这个总体来说不是很难,都有现成的包。当然这个时候你需要的是阻塞执行,而不能搞异步回调。

还有个问题是,我要尽可能使用python默认就带的包,而尽量不让服务器去访问internet下载第三方的包。

还有代理端最重要的一点,就是python的版本兼容性。centos5用python24,centos6用python26,ubuntu基本默认都是27。所以一定要最大限度的保证语言的跨版本兼容性,要是每个 *** 作系统和每一个版本我都写一个代理,我一个人就累死了。

四、浏览器端的model,view,controller

这里面你要封装好所有的通信协议,以及需要在节点上面执行的脚本。发送文件的 *** 作和数据库 *** 作也要在model里面完成。

如果对tcl/tk很熟,也可以写基于 *** 作系统界面方式的管理,不用浏览器就是了。

view对我来说是最痛苦的事,都是现学的jQuery怎么用,前端的工作太可怕了。关于这方面,没有太多可描述的,html和js带给我的只有痛苦的回忆,万恶的undefined。

五、跨 *** 作系统的安装文件封装。

要适应不同的 *** 作系统也是个很麻烦的事情,需要用agent提前获知 *** 作系统的发行分支,版本号。然后去找到对应的安装文件去执行。你不能保证一个分布式系统的集群中所有的节点都可以访问internet,更多的情况是这些节点都存在在一个安全的内网中。只有个别几个节点是可以访问外网的。所以,我势必要把所有的安装文件以及他们的依赖尽可能集中起来。我不确定安装 *** 作系统的lzo,yum或者apt-get会去下什么鬼东西,甚至无论是yum还是apt-get,里面都没有hadoop-lzo的库文件。所以,最好的办法是自己编译打包rpm和deb包。直接安装就好了,别去找repo下载什么。

这就是第五步工作,把需要的依赖的东西自己编译打包成rpm和deb。

deb包很好解决,但是rpm就没那么好办了,需要学习rpm的编译文件如何编写,这块是挺麻烦的,但是这玩意用好了还是挺不错的。现在我自制的安装包里面就已经包含了自己编译的lzo和snappy两种压缩库,以及hadoop-gpl-packaging的rpm和deb。下一个发布的easyhadoop将直接支持centos5,6,suse,以及ubuntu/debian的系统上安装hadoop。已经自带了lzo和snappy以及lzop和snzip。

六、把这些所有东西,整合到一个系统里面。

关联这些所有事情间的联系,整合到一个浏览器界面里面去。写一个分布式的管理脚本不难,写一个界面也不难,但是也许是我的水平不行,这两件事结合起来让他们协同工作还是有点难度的。对我来说,写界面的工作可能更难一点。

Cloudera可能是十来个人在写Manager的东西,ambari也是放到github和apachesvn上面,apache基金会的各种committer在写。easyhadoop没他们功能那么强大,一年来只有我一个人设计架构,功能,各种语言的编码,测试,发布。Fortheloveofgod,WhathaveIdone(英文部分请站在山顶仰天长啸)T_T。从前台到后台,到hadoop和生态系统以及他们的依赖软件的单独patch、编译打包。(系统yum或者apt-get的包不如自己打的好使。)

从时间上来看,全球第一款开源的hadoop部署管理系统应该还是属于ambari,2011年8月开始写的,2012年9月底进入apache的incubator。我是大概2012年8月开始写的easyhadoop,全球第一没赶上,估计国内第一个开源的hadoop管理系统还是可以排上的。

.服务器管理
在这项管理工作中,主要是配置和管理服务器属性,安装和设置TCP/IP协议和远程访问服务协议,安装、配置和管理域控制器、文件服务器、DNS、WINS、DHCP、Web、FTP 服务器和各种远程访问服务器。
对服务器的关键点工作状态(如温度、电源、风扇和UPS的运行等)进行必要的监控,以确保服务器正常工作。如果网络中存在多个域控制器,则还需对各服务器的配置信息进行实时更新;更新Web服务器页面信息、向数据库服务器注入新的数据、管理邮件服务器的用户信箱等。
最后还有一点非常重要,就是要及时地更新服务器系统的版本或补丁程序,这不仅关系到服务器的性能发挥,而且还关系到整个网络系统的安全性,因为现在的 *** 作系统不断有新的安全漏洞被发现,及时安装补丁可以有效地阻止填补这些安全漏洞。
2.用户管理
网络管理员在保证网络安全可靠运行的前提条件下,根据单位人员的工作职权和人员变动情况,为每个用户设置账户、密码和分配不同的网络访问权限;设置Web服务器、*** 等远程访问服务器中用户的访问权限等;限制Web服务器可登录的账号数量,及时注销过期用户和己挂断的拨号用户,关闭不用的网络服务等。既要保证各用户的正常工作不受影响,同时又要避免分配过高权限而给网络安全和管理带来不必要的安全隐患。
在本书中,针对用户管理方面在第2章、第5章、第6章做了较为详细的介绍。
3.文件和文件夹的管理
网络中的文件和文件夹管理是整个网络管理中最重要的部件之一,它不仅涉及到各用√ 的正常工作和网络应用,同时还关系到整个网络系统的安全性能。对于网络管理员来说,j 文件和文件夹管理中我们所做的工作主要有以下几个方面:
证每一台工作站的一致性。如果要在工作站上安装新软件,应该先做一个安装测试,并记录下每一个步骤。测试新的安装在典型的工作站上是否会出现问题。如果认为满意,就在每一个用户的计算机上都重复安装过程,保证一致性。如果在每一台工作站上都使用相同的硬件和 *** 作系统,一致性的安装应用程序非常简单。如果网络上用户过多,可以考虑使用某些特殊的工具来生成软件自动安装过程。如Windows系统的“无人值守安装"和“远程安装"功能就可大大减轻网络管理员软件安装的负担。
软件永远不可能完美,总会有这样或那样的问题,所以无论是 *** 作系统还是设备的驱动程序,都应该至少每个季度检查一次有无升级的提示,在服务器和工作站上都要进行这一工作。有时,补丁程序本身比要解决的问题更加可怕, *** 作系统的补丁导致的严重事故比比皆是。比如2003年1月25日爆发的Slammer病毒就是利用了SQL Server 2000早就发现的一个漏洞进行攻击的蠕虫病毒。早在2002年7月,微软就针对SQL Server 2000中l 434端口的漏洞,公布了安全补丁程序,对于微软服务器软件的用户来说,只要下载了补丁程序,就可以避免这次灾难。但遗憾的是,太多用户忽视了微软的建议。从上面的例子不难看出,安全意识的树立在某种意义上比安全技术本身更重要。
另外,在软件管理方面还应对服务器中专门存放源程序的文件夹的访问权限进行严格限制,通常只允许系统管理员有权限访问和使用,否则一些不自觉的用户会在他们的计算机上安装一些本来他们不需要的软件。
8.硬件资源的维护与管理
在企业网络中,网络管理员通常需要负担起管理服务器和全部共享网络资源的责任,包括打印机、处理器、内存、硬盘等。在这种条件下,网络管理员的责任是相当直接的。保持所有资源连接、运转正常。在对这些网络硬件资源的管理中,其中一项重要任务就是实施常规检查。虽然现在复杂的网络 *** 作系统可以承受一定程度的问题而不至于停工,但是网络管理员在这些非关键性的错误堆积起来并变得严重之前,需要周期性地检测服务器并纠正这些错误。计算机系统也带有诊断的工具,但是可能需要使用比它们更复杂的专业工具,比方说 Intel公司的LANDesk Management Suite或者Novell的ManageWise,可以进行更细致的测试,并有更好的联机帮助。网络就是网络管理员的阵地,网络管理员还应对网络内的各台微机或各个工作站进行定期巡检,了解每台计算机的状态,并定期保养。
在出现了硬件故障后,网络管理员还必须承担起故障排除和基本硬件维修的责任。这是最体现网络管理员的技术水平、冷静心态和逻辑思考能力的时候。随着经验的增长,解决问题的能力也会逐步提高。网络管理员要了解各处可能发生的问题:时刻不忘在笔记本电脑中记下调查结果和建议;利用书籍、期刊和自学培训等方式尽可能地积累常见问题的解决方法;当然还应该采取措施预防网络故障的发生。网络管理员应尽可能多地搜集信息,并记录在网络文档中。你会惊奇地发现以前的积累常常可以帮助查明某个事件的原因。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13240880.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-25
下一篇 2023-06-25

发表评论

登录后才能评论

评论列表(0条)

保存