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

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

安全的原因如下:
服务器GUI和不带GUI指的是有没有图形界面,因为服务器主要任务是启动特定服务进程,不是桌面,因此大部分的服务器是没有启动图形界面的,也就是煤油桌面、窗口、鼠标等 *** 作,而是文本 *** 作界面TUI,终端机和光标 *** 作,在控制台下,或者远程登录后控制。

运维人员的工作每天基本上都是在检查问题,枯燥但又重要, 要是你的某一个环节出现问题并没有及时发现问题,对于企业来说损失可能非常大,基本上运维人每天的工作我罗列了下,有这几种:

1、负责服务器的硬件配置、软件安装、机房上下架等技术维护工作

2、负责虚拟化技术产品物理机配置、管理和日常运行监控和维护

3、负责独立主机或虚拟应用产品的开通使用、日常维护、故障诊断和排除

4、提供独立主机或虚拟应用客户产品 *** 作和应用方面的技术支持

5、监视分管的服务器,及时发现问题,并积极解决问题

现在信息化数字时代,单靠人工去检查出现错误几率会很大,而且有的运维人还不只管理两台服务器,像我们公司的运维每人至少要管理30台服务器,这样子单靠人工运维耗费的人工成本和时间是非常大的,所以还是推荐你用运维工具吧,比如云帮手()

1支持跨云商批量管理服务器

2兼容性强大,兼容市面基本所有的云商云主机,兼容 *** 作系统;

3 *** 作简单,可视化界面预览资源、一键修复、一键部署;

4 可以远程登录云主机FTP桌面,处理云主机上的文件;

5监控和资源还有告警功能,这个是挺好的,不用盯着看;

6系统修复功能,这个是挺实用也比较必须的;

7免费使用。总得来说功能还是挺全的,不存在需要又要另外找软件的尴尬。

你好,很高兴回答你这个问题。从运维的角度来讲,服务器的数量少并不意味着我们的运维工作就非常轻松,相反我们更应该重视此阶段的工作。

我们可以从以下几方面来开展我们的运维工作:

1应用服务器

我们可以从当前服务器中找出 至少2个节点装Vsphere虚拟化,建立一个数据中心、集群 ;如果你的服务器有多网卡和SCSI,还可以做一些更高级的应用,如vmotion、负载均衡、高可用等。当虚拟机或服务器故障,可以 实现故障自动转移,有效的避免了单节点的故障,提供服务器的容错率

我们可以在新建的虚拟机部署Web、API等各种应用,而且 虚拟机可以在vCenter图形化界面下统一管理 。这一般是中小公司的在服务器方面的解决方案。

当然,我们对docker比较熟悉,可以使用一套docker解决方案,这比Vsphere更能节省一部分资源。当然这个需要的技能要求也比较高,需要我们不断积累。


2数据库服务器

数据库服务器在此我们单独拿出来,是因为数据库对服务器性能、磁盘IO要求比较高,不太建议使用虚拟机,当然这需要根据业务的实际情况来做选择。 数据库我们需要通过一主一从、一主二从的方式实现高可用,来避免数据库单点问 题,我们还可以选择合适的proxy来进行读写分离、读负载均衡等。另外还要考虑数据的本地备份、异地备份,来确保数据可恢复。


3系统监控

当我们在应用服务器和数据库服务器上线一套系统后, 我们需要通过监控掌握从服务器硬件、基础状态、应用、数据库等从下到上的运行状态 ,以便我们能够对告警及时做出响应。考虑到报警的及时性,我们需要监控接入多种报警渠道,如微信、钉钉、邮件、短信等。监控的目的是发现问题、解决访问,因此我们需要踏实的做好这一步,才能为我们的业务保驾护航。


好了,其实不管服务器多少,我们都需要扎实的把基础打好,这样才能以不变应万变面对各种情形。希望我的回答能够帮到你。



题主没有详细说明具体应用系统的功能,比如是否单一的Web服务?有没有微服务、分布式、集群化扩展的潜在需求?

通常来说,建议使用云服务自动化运维。云服务已经成为IT技术的核心基础设施,充分利用云服务带来的d性和分布式优势,赋能自动化运维。

一,自动构建系统

如果需要构建应用,那么就建议配置使用CI/CD持续化集成和自动化部署,比如常用的Jenkins,配置Git代码提交时触发构建,然后自动部署。

二,日志收集处理系统

1,ELK是常见的日志收集管理系统,包括ElasticSearch, LogStash, Kibana三个服务,架构示意图如下:

2,在ELK系统中,Kibana是一个图形化展示工具,配置查询条件,运维人员随时可以搜索指定日志信息,分析处理故障。

三,服务监控

1,云监控CloudMonitor

主流云服务商都将监控功能集成到了基础架构中,以阿里云为例,云监控提供了多种配置,多维度全方位监控。


比如配置CPU使用率到达80%时,自动触发动作,增加服务器实例,同时邮件通知运维人员。

2,应用监控

以监控宝为例,配置服务地址,选择分布在不同地区和运营商的监测点。当监测点不能正常调用配置的服务地址时,将收到警告信息,可以选择邮件、短信、电话等通知方式。


四,潜在的系统扩展需求

1,是否集群化部署?需要AutoScaling自动伸缩吗?

小型化和集群化并不冲突。如果采用集群化部署,可以配置触发条件,满足时自动增加或者释放服务器资源。比如当CPU使用率达到75%或者内存占用率达到75%时,根据配置好的服务器和数量,自动触发。

2,是否使用Docker容器技术?

Docker将应用以及依赖打包到一个可移植的镜像中,可以实现虚拟化,有助于快捷高效的交付应用,结合Docker-compose资源编排,快速实现自动部署更新,不再需要常用的Jenkins构建服务器。

机器数比较小的话,你可以用云的服务器,这样可以节省好多钱。找一个专门的运维,还不如让开发自己来搞,因为机器少运维他也应付得过来。现在都在搞云计算了,把你的机器放上阿里云或者腾讯云,你自己维护好很多,包括网络贷款都很容易扩容。上面这个我说到的只是说建议你如果你已经是自己的机器了。我建议你从我下面所说的来搞。

认为的整个过程的话一般分为三个阶段,第一的话是手工阶段,什么东西都是手工搞。

第2个阶段就是脚本阶段了,本来手工搞的东西全部脚本化。

第3个阶段就是平台化了,平台化了之后,所有东西都在页面上完成系统完成,不需要人工来干预,甚至不用运维来搞。

有一些人说既然认为就是最后的一个阶段,但是这个很不成熟。所以我就不说了。

针对你这个机器数少的,你可以手工认为,或者说用脚本认为都没问题。

在合适的阶段做合适的事情就是最好的。所以我建议你手工运维或者脚本运维。

我们项目用的 wgcloud运维监控系统 ,它前身是开源项目,后来推出的商业版,也有免费版

wgcloud运行很稳定,性能很好,部署和上手容易

wgcloud支持主机各种指标监控(cpu状态/温度,内存状态,磁盘容量/IO,硬盘smart监控,系统负载,网卡流量,硬件系统信息等),数据可视化,进程应用监控,大屏可视化,服务接口检测,DOCKER监控,自动生成网络拓扑图,端口监控,日志文件监控,web SSH(堡垒机),指令下发执行,告警信息推送(邮件钉钉微信短信等)





可以装虚拟机代替,在同一个局域网情况下

找服务商外包服务,或者网上托管也不贵收费

服务器数量比较少,比如10台服务器,基本可以不设置运维岗位了,后端开发人员 或者架构师就能搞定。

我就是那种曾经在创业的小公司待过的开发人员,开发,运维我都干了。

但是想想如何更科学更高效的运维还是很有必要的。


运维的目的

软件系统的运行时环境:即公司的业务产线,靠它创造业务价值,这个是最核心的功能诉求。


实时监控系统: 任何时候都要对当前公司的产线的压力一清二楚,有问题功能随时解决,有性能问题及时扩容或者回收资源


降低服务器成本:在业务萎缩的情况下,准确评估哪些资源可以回收,降低服务器的支出


这个是当时我认为的运维的三个主要目的。

运维方案

开发半路出家,当时采用的是shell+python+ansible+jekins+elk的方式

首先,我会及时的更新业务产线的物理架构图,根据架构图来规划服务器的资源使用。

比如多少个web服务,数据库多少,zk,kafka,redis集群怎么分布。

集群部署一般是放在多个服务器上的,这个时候ansible就派上用场了。

jekins主要用来自动发布更新程序已经做定时回收磁盘的任务。

elk主要用来做应用的日志系统和监控告警; 可以通过看板随时知道产线的请求数量和并发数量;


以上的运维方案适用于小公司。运维工程师看到了可以补充

搞个zabbix刷

数量少。如果配置好可以虚拟化。然后跑容器


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存