如何自己开发一套服务器管理系统
转载表面上看,是一套基于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管理系统还是可以排上的。
问题一:如何做好一个服务器管理员?有哪些管理技巧 总体来说,服务器系统的管理是整个网络管理工作中的重中之重,特别是在小型单位网络中,单位的网络规模比较小,网络设备比较简单,基本上是属于傻瓜式的。
这里的服务器系统包括网络服务器和应用服务器系统两个方面。服务器系统的管理是整个网络管理工作中最重要的部分,因为它是整个网络的核心所在,无论是网络操作系统本身,还是各种网络服务器和应用服务器。
具体来说,服务器系统管理主要是安装、配置和管理网络操作系统、文件服务器、DNS、WINS、DHCP等网络服务器,以及像Web、FTP、E-mail、RAS、NAT等应用服务器。服务器系统管理的最终目标,就是要确保服务器各种协议和服务工作正常,确保服务器的各项性能指标正常发挥。另外,还需要及时地更新服务器系统的版本或补丁程序,这不仅关系到服务器的性能发挥,而且还关系到整个网络系统的安全性,因为现在的操作系统不断有新的安全漏洞被发现,及时安装补丁可以有效地阻止、填补这些安全漏洞。
目前在服务器系统管理方面的重点与难点当然是各种网络操作系统的管理了。在这其中又包括各种不同版本的主流Windows、Linux和UNIX网络操作系统的管理了。而每个系统中所包括的具体管理工作又非常多,非常复杂,但这些又是网络管理员所必须掌握的。至少,在大多数中小型企业中,网络管理员应该掌握主流的Windows和Linux网络操作系统的管理了。在一些较大企业,或者一些特殊行业(如金融、证券和保险等)中,UNIX、Linux系统又是最普遍采用的,所以UNIX和Linux系统管理对于专业网络管理员来说,又是必须要掌握的。当然,像其他应用服务器的管理也是非常重要,而且必须掌握。
2.关键设备的维护与管理
这也是整个网络管理中的重点之一,同时也是非常重要的工作,特别是在网络规模比较大,网络设备比较高档的单位网络中。因为单位网络系统更依赖这些关键设备的正常工作。
计算机网络的关键设备一般包括网络的核心交换机、核心路由器和服务器,它们是网络中的“节点”。对这些节点的维护和管理,除了需要经验积累外,还可以通过一些专门的网络管理系统来监视其工作状态,以便及时发现问题,及时进行维护和故障排除。
另外,为了提高网络的可用性,对一些关键设备进行冗余配置也是必不可少的。冗余包括两层含义,一是从端口角度进行,如对关键设备(如服务器、核心交换机)采取冗余链路连接,这样当其中一个端口出现故障时,另一个冗余链路就可以接替故障链路继续保持正常工作状态;另一层含义是对配置双份的设备或部件,如服务器中的电源、风扇、网卡,甚至内存等,核心交换机和路由器也可以配置两个。在正常工作时,这些冗余设备或部件起到负载均衡的作用,而在某部分出现故障时,则又起备份的作用。
在关键设备维护与管理中,服务器和网络总体性能的监控与管理是个技术重点和难点。要用到各种监控和管理工具,如流量监控工具MRTG、网络性能和通信监控的Sniffer类工具,带宽性能监控的Qcheck和IxChariot工具等。服务器性能方面的监控与管理还可利用操作系统自带的性能和监控管理工具进行。
当然,网络设备的配置与管理是整个关键设备维护与管理的重点与难点,这一点几乎是所有从事网络管理,甚至网络工程技术人员的共识。目前在关键设备方面,主要是以Cisco、华为3等品牌为主,掌握这两个主要品牌设备的配置与管理方法是网络管理员所必需的。
3 用户管理
用户管理是网络管理中的一个重点和难点,所涉及到的方面非常多,如用户账户、密码、文件和网络访问权限、用户权利、用户配置文件及用户安全策略等。既要保证各用户的正常工作不受影响,同时又>>
问题二:win7服务器管理器怎么下载 如果之前在 控制面板 - 程序 - 打开或关闭Windows功能 里没有这个选项勾栏
到官网去下载一下AD的补丁
microsoft/d=7887
然后你再去看 控制面板 - 程序 - 打开或关闭Windows功能 就有如图的东西
希望能帮助你
问题三:如何打开服务管理器 这两个完全可以去掉一个,并不会影响你的计算机安全的,
打开控制面板---管理工具--服务
问题四:什么是服务器的管理ip?有什么作用?怎么配置? 有的服务器限制不同地区的IP登录,因为不同地区的IP不同。也就是限制不同地区的IP段。
问题五:新手站长如何轻松管理服务器安全? 在服务器上安装安全狗软件,并把服务器加入服云。
这样不仅可以为服务器提供防护功能,而且可以登陆服云管理服务器。
服云客户端有web版、pc版、手机端的,可以随时随地了解服务器实时情况并进行调整服务器安全策略来应对攻击。让服务器更安全。
请采纳,谢谢
问题六:如何控制服务器 你的电脑登陆的时候是要登陆到域服务器上吗 如果是的话 那就没办法了 除非你的电脑脱离了域控制器的管理了 也就是说你不登陆到域控制器上 而是登陆本地的账号 比如administrator 你如果登陆到域上 那就只能遵循域管理员设定的规则 除非域管理员给你解除了那些限制 否则你是无法摆脱的 要解除 让管理员给你更高的权限 或者破解你的局域网里的域服务器 给你的登陆账号提权 只有这几种办法 其他的都不行
问题七:系统服务管理器怎么打开 1XP 在 开始---->运行------>输入servicesmsc而win 7 直接在开始,然后--->输入 servicesmsc
如图所示:
2然后就可以打开服务管理器了。
可以点击名称,按照字母进行排序
3选择一个服务后,可以右击,进行开启/关闭 等操作。
问题八:电脑的系统服务管理怎么进入 一、打开电脑的系统服务界面方法:
1、点击开始菜单点击运行(或在键盘上按WIN+R快捷键),打开运行界面,输入servicesmsc指令,按确定。
2、直接在我的电脑图标上右键在弹出的菜单中选择管理,弹出的计算机管理界面,点击服务和应用程序,就能看到服务选项,双击即可打开服务界面。
3、点击开始菜单,选择控制面板,在管理工具界面,找到服务并双击,即可打开服务界面。
二、启动系统服务
第1步:使用本文中的任何一种方法打开系统服务程序。
第2步:在系统服务窗口中找盯自己需要启动的系统服务,并双击此服务。如打开(DHCP Client)系统服务。
第3步:在打开的系统服务窗口中,单击“启动”按扭即可启动相关的系统服务了。
问题九:如何快速打开服务器管理器 常用方法 服务器管理器,右键,发送到桌面,建立快捷方式
问题十:如何管理服务器上的多个数据库 虽然这将减少托管所有这些数据库的成本,但是,这增加了管理这些系统的复杂性,因为你现在要处理多个服务级协议和维护窗口。当你决定在同一台服务器上托管多个数据库的时候,你要考虑的第一件事是这些系统是否有互补的维护窗口。如果一个系统不能在夜间放慢速度或者离线,另一个系统不能在白天放慢速度或者离线,这些系统就不适合共享一个服务器,因为你在需要为系统使用补丁或者处于其它原因要让系统离线的时候,你没有有效的维护时间窗。 你需要考察的下一个决定因素是这些系统的服务级协议。需要99%的开机时间的系统能够安排在一起,因为你可能会为这些系统(也许是集群解决方案)建立一个比非重要任务系统更强大的环境。这可以为你节省额外的成本,因为你现在不需要采购任何高端系统。具有更高的服务级协议的系统也可能会有同样的维护时间窗。因此,这些系统在一开始就是互补的。 承担工作量 对托管多个数据库的SQL服务器进行维护的最大难题是时机。 当然,当把多个数据库集中在一个SQL服务器的时候需要考虑的最重要的问题是,是否有足够的CPU和内存资源处理这些客户程序添加到这个数据库服务器的工作量。如果单个服务器不能提供需要的CPU和内存资源,那么,把这些数据库都集中在那台服务器上就不是一个好的选择。 当你经过这个整个决策过程并且把这些数据库都放在同一台服务器上之后,你如何保持这些系统的健康和在高峰期仍能运行与其它任何数据库解决方案一样,你仍需要处理自己的备份、索引碎片整理和重建、以及为操作系统和SQL服务器使用补丁。 处理托管多个数据库的SQL服务器的维护的最大难题是时机。你需要保证你的维护任务能够在这个SQL服务器托管的全部数据库计划的维护时间窗内完成。在任何数据库的维护时间窗之外进行维护工作都将引起数据库运行缓慢,因为硬盘和CPU资源现在被维护活动占用了,而不是处理正常的数据库查询。 重新索引工作 已经证明是有用的一个技术是比正常运行重新索引指令更频繁地对你的索引进行碎片整理。整理碎片的指令比重新索引指令有更多的好处。第一,索引碎片整理指令是一种在线操作,而重建索引是一种离线工作(除非你运行SQL服务器2005企业版或者更新的版本)。第二,如果你频繁地运行索引碎片整理指令,每一次运行这个指令的时候工作量都比较少。 例如,你每个星期检查一次索引碎片,它显示碎片是70%。这样,你就可以运行一个索引重建指令清除这些索引。 然而,你在第二天再检查索引碎片的时候会发生什么情况呢它可能是大约8%至10%的碎片。因此,如果你每天运行一个索引碎片整理指令而不是每个星期运行一次索引碎片整理指令,每一天要做的工作就很少,这个工作就能够更快地完成,可能在每天的维护时间窗内完成。 即使你在时间窗内不能让这个系统离线,由于碎片整理操作是一种在线操作,这个系统在整理碎片操作的时间将继续发挥作用,只是反应速度比正常情况下稍微慢一点。 数据库备份 备份是在一台服务器上托管多个数据库的时候需要解决的另一个关键问题。 每一个数据库都有自己的备份要求。备份数据库也许是能够在SQL服务器运行时执行的最繁重的任务。并不是因为这种备份需要占用大量的CPU和内存资源(这个任务占用的资源一般是很低的,除非你在备份的时候对数据库进行压缩),而是因为备份一个大型数据库需要占用大量的硬盘资源。 当进行全面备份的时候,整个数据库必须从硬盘读取。如果你的硬盘系统非常繁忙,这个备份会引起性能严重下降。这种备份的最佳解决方案是选择合适的时机。你还可以寻找能够在备份的同时允许对数据库备份进行压缩的第三方工具。由于这将增加SQL服务器上的CPU的工作量,它通>>
内网服务器地址:17218111
外网服务器地址:2187583250
http://wwwxsxxxxcn/Soft/ShowSoftaspSoftID=1014
0条评论