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

如何自己开发一套服务器管理系统,第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管理系统还是可以排上的。

一、安装Windows部署服务(WDS)

1、选择“开始—程序—管理工具—服务器管理器”,打开“服务器管理器”控制台,选择“角色”选项,单击“添加角色”链接,运行“添加角色向导

2、在“选择服务器角色”对话框中,选中“windows 部署服务”复选框,如图1-1
3、在“选择角色服务”对话框中,选中“部署服务器”复选框如同3-1所示
4、 在“确认安装选择”对话框中,查看并确认将要安装的角色或功能,如图4-1所示
5、单击“安装”按钮开始安装。安装结束后,显示“安装结果”对话框,如图5-1所示,单击“关闭”按钮退去即可
二、到这windows 部署服务就安装完成了,下面讲如何运行windows 部署服务,要运行Windows 部署需要安装DHCP服务,下面安装DHCP服务。

6、在“选择服务器角色”对话框中添加“DHCP服务器”如图6-1所示
7、在“选择网络连接绑定”对话框中选择“17230515”如图7-1所示
8、在“添加或编辑DHCP作用域”对话框中,为当前DHCP服务器添加作用域,作用域的地址范围是17230515—172305199。如图8-1所示
9、在“配置DHCPv6无状态模式”对话框中,选择“对此服务器禁用DHCPv6无状态模式”单击按钮,如图9-1所示
10、安装DHCP服务器完成之后,在“服务器管理器”窗口中定位到”DHCP服务器”,删除其他作用域(只保留图8-1创建的作用域),然后打开 该作用域的“属性”对话框(如图10-1) 在“高级”选项卡中选择“两者”单选按钮,如图10-2所示
11、最后在“IPv4属性”对话框中,为DHCP服务器绑定17230515 的服务器地址如图11-1所示
三 到此DHCP也安装完成,下面介绍Windows部署服务的配置过程与步骤

12、打开“服务器管理器”定位到“角色—Windows部署服务”,开始启动Windows部署服务。

13、右击dcheinfolocal(如果你计算机名为win 2008-1 域名为acom那就右击win2008acom) ,从快捷菜单中选择“配置服务器”的命令,如图13-1所示,启动“Windows 部署服务配置向导”。

14、在“欢迎页面”对话框中列出了Windows 部署服务所需的条件,如图14-1所示
15、在“远程安装文件夹的位置”对话框中,选择一个可用空间最大的NTFS分区,作为Windows 部署服务保存 *** 作系统映像的位置,如图15-1所示
16、在”DHCP选项60”对话框中,配置DHCP服务器。如果网络中的DHCP 服务器与Windows 部署服务在同一台计算机上,请选中“不侦听端口67”和“将DHCP选项标记#60配置为PXECLIient复 选框,”如图16-1所示
17、在“PXP服务器初始设置”对话框中,选择“响应所有(已知和未知)客户端计算机”单选按钮,如图17-1所示
18、在“配置完成”对话框中,选择“立即在Windows 部署服务器上添加映像”复选框,如图18-1所示
19.在“Windows 映像文件位置”对话框中,选择将要添加的Windows *** 作系统的位置。在本例中,将 Windows 7(集成 SP1)的64位安装光盘放在光驱中,该光驱盘符为D。在本例中选择D:,如图19-1所示(在选择的 时候先把映像放在光驱中,然后选择光驱)
20.在“映像组”对话框,选择“创建新的映像组”单选按钮,在此命令映像组名称为“Windows 7 SP1”,如图20-1所示
21.在“复查设置”对话框中,显示了图19-1中要添加的映像数,分别为“启动映像数”与“安装映像数”,如图21-1所示
说明“启动映像”是用来安装计算机的 *** 作系统映像。从windows vista 开始,启动与安装映像分开。用高版本的启动映像启动计算机,可以安装“低版本”的 *** 作系统,但用低版本的启动映像启动计算机,将不能安装“高版本”的 *** 作系统。例如,可以用windows 7 SP1 的启动映像启动计算机,可以用来安装windows vista;windows server 2008;windows Server 2008 R2;windows 7;windows 7集成SP1包,但用windows vasta 的启动映像启动计算机,则不能安装windows 7;windows server 2008 R2 *** 作系统映像。

22 在“任务进度”对话框中,当 *** 作系统的启动映像与安装映像添加到windows部署服务器之后,显示“ *** 作完成”,单击“完成”按钮,如图22-1所示
23.返回到“服务器管理器”窗口,可以看到已经添加了4个windows 7的安装镜像,如图23-1所示
三.下面介绍添加其他 *** 作系统的安装镜像

24.定位到“服务器管理器—角色—windows 部署服务—服务器—(服务器计算机名)—安装映像”,在右侧空白窗格中央右击“添加映像组”,如图24-1所示
25、在“添加映像组”对话框中,输入要创建的组名,在本例中为“windows 7 sp1 x32”。

26、然后定位到新创建的映像组,在右侧空白窗口中右击,在d出的快捷菜单中选择“添加安装映像”命令,如图26-1所示。
27.然后在光驱中换上windows 7 集成sp1 的32位版本,在“映像文件”对话框中浏览选择windows 7 安装光盘根目录中的 \sources、installvim文件。

说明在Windows Vista 及其以后的 *** 作系统安装光盘的sources目录中,有两个映像文件,其中名为installwim的是安装映像,名为bootvim的是启动映像。

28在“可用映像列表”对话框中,显示了可用的映像列表及描述信息。如果采用默认的名称和描述,请选中“使用每个选定映像的默认名称和说明”复选框的选择。如图28-1
29、如上图中取消了“使用每个选定映像的默认名称和说明”复选框的选择,则会d出“映像元数据”对话框,并依次显示每个映像的名称和说明,可以根据需要修改,如图29-1和29-2
30、在“摘要”对话框中显示要添加的映像,如图30-1所示
31、添加映像完成后,单击“完成”按钮如图31-1
32、如果要添加其他 *** 作系统的映像,强参照前面的步骤,创建映像组并添加映像,这些就不一一介绍了
四.在添加完映像后,需要添加启动映像。需要注意的是,并不是每次添加安装映像都要添加启动映像 如果已经有“同版本”的启动映像,则不用添加。Windows 启动映像与安装映像的关 系是:
(1)windows 7 SP1与windows server 2008 R2 SP1的启动映像相同,是同一版本。目前该版本的启动映像可以启动并安装包括windows 7 SP1,windows server 2008 SP1 极其以前的 *** 作 系统。例如windows vista, windows server 2008 windows server 2008 R2等
(2)windows启动映像也分为32位和64位。32位启动映像可以装32位和64位 *** 作系统,而64位只能安装64位 *** 作系统。如果windows 部署服务中同时有32位和64位启动映像,则在使 用windows部署的时候,会自动侦测客户端的类型,如果符合64位要求,则会出现64位和32位启动映像的选择,让用户选择;如不符合64位要求,则会默认安装32位启动映像。
(3)在添加更新版本的启动映像之后,可以删除以前版本的启动映像

接下来介绍添加启动映像的方法,以添加64位的Windows 7SP1的启动映像为例,步骤如下

33、在“Windows 部署服务”中,定位到“启动映像”,在右侧空白窗格中右击“添加启动映像”如图33-1所示
34、在“映像文件”对话框中,从Windows 7 安装光盘中选择浏览选择名为bootwimd的启动映像,如图34-1所示
35、在“添加元数据”对话框中显示了添加的映像名称和说明,用户也可以根据自己的需求或习惯进行定制。如图35-1
36、在“摘要”对话框中显示了要添加的影响的名称和位数(x64表示64位)如图36-1所示
37、添加完成后,单击“完成”按钮,完成镜像的添加。如图37-1所示
38、添加启动映像完成之后,返回到“Windows 部署服务”,在“启动映像”页显示了添加的映像,如图38-1所示
39、如果要删除不再使用的映像,可以右击该映像,在d出的快捷菜单中选择“删除”命令根据提示进行 *** 作即可,如图39-1
下面介绍配置Windows部署服务

五、在添加完安装映像与启动映像后,右击服务器名,从快捷菜单中选择“属性”命令(见图39-2),可以用来配置Windows部署服务器
40、选择“PXE响应设置”选项卡,选中“响应所有(已知和未知)客户端计算”单选按钮,如图40-1所示
41、选择“目录服务”选项卡。在“新建客户端命令策略”选项区域中设置客户端计算机的命名原则,在“客户端账户位置”选项区域中设置将使用Windows部署服务远程安装 *** 作系统的计算机存放的位置。如图41-1所示
说明在以前的RIS服务器中,使用RIS部署的计算机只能保存在AD的computers容器中,而在Windows部署服务中,可以将使用windows部署服务安装 *** 作系统的计算机统一保存在一个容器 中。

42、在“启动”选项卡中,设置“默认启动映像”和“默认启动程序”通常选择默认的就可以,如图42- 1所示
43、在“高级”选项卡中,将选择Windows 部署服务使用AD服务器和是否对DHCP中授权,请选中“在DHCP中授权此windows部署服务服务器”单选按钮,如下图
44、在DHCP选项卡中设置DHCP服务,如果当前服务器上没有DHCP服务器,请选择两项。如图44-1所示
45、在“客户端”选项卡中,设置是否启用无人参与安装,如图45-1所示
设置完成后,单击“确定”按钮。完成Windows 部署服务器的设置,接下来创建一个windows 7虚拟机,在虚拟机中,通过网络安装windows 7 *** 作系统,主要步骤如下:

46.创建Windows 7虚拟机后,启动虚拟机,当出现Press F12 for networkserver boot时,按F12键,如图46-1所示

在Windows服务器2012上安装完 *** 作系统后,由于没有安装共享服务,所以在网络上看不到电脑共享盘。为了解决这个问题,需要按照以下步骤 *** 作:
1、在Windows服务器2012上打开“服务器管理器”,点击“服务”,找到“共享服务”,右键点击“安装”;
2、在“共享服务”安装向导中,选择“文件和打印共享”,点击“下一步”;
3、在“文件和打印共享”设置页面中,勾选“共享此文件夹”,点击“下一步”;
4、在“文件和打印共享”设置页面中,设置文件夹的共享名称,点击“下一步”;
5、在“共享权限”设置页面中,设置文件夹的共享权限,点击“完成”;
6、在“服务器管理器”中,点击“服务”,找到“网络连接服务”,右键点击“启动服务”;
7、在“网络连接服务”中,点击“网络发现”,右键点击“启动服务”;
8、最后,在网络上就可以看到电脑共享盘了。


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

原文地址: http://outofmemory.cn/zz/12941446.html

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

发表评论

登录后才能评论

评论列表(0条)

保存