为生产服务器选择合适的Linux发行版
抛出这个问题,是因为之前与同事的争论以及最近与同事的争论——我可保持沉默,但不可以停止思考。
我想大多数有经验的Linux用户,会觉得这个问题不是问题,那么请不要急,待会儿我会让你知道这个问题为什么是个问题。
首先,在讨论这个问题之前, 我们一定要先了解自己的自身的条件:即我们自身的技术能力——假如我们有能力像RedHat、Google一样,自己跟踪Linux以及开源社区,那么,我们完成可以搞个自己用的发行出来。
必须承认,每个人都是有局限性的。开源社区充斥着技术狂热分子,俨然一副无所不能的架式——恐怕我的论调会遭受攻击。
对于“选择发行版”这个问题,下面的局限性会成为“一叶障目”的那片树叶。
1. 做为一名Sa,只熟悉某一种Linux发行版。把自己不熟悉当成“不好用”,以自己的喜好为准。
2. 做为一名Sa,管理的设备数量有限。数量有限,不会思考“效率”的问题。你管理几十台,和管理几百台、几千台、几万台甚至更多,所要面对的主要问题,会发生转变。
3. 做为一名Sa,管理的设备比较低端。设备低端,通常不需要思考“第三方支持”的问题。
4. 公司只有你一名Sa。不用与他人沟通、合作,不会思考和别人“统一习惯”、乃至“培训新人”的问题。
5. 做为一名程序员,根本不会从Sa的角度思考问题。“都一样”等于没有观点。
6. 做为一名程序员或者一名熟悉各个发行版而没有没有管理过大规模、高端设备的Sa,口气大,一副无所不能、牛B哄哄的样子。不实事求是地面对问题,不是解决问题之道。
7. 你只是一位桌面用户。完全不知道我们在讨论什么!
首先要驳斥的,是说“所有发行版都一样”的人。通常这类人是“程序员”——要么是根本不会从Sa的角度思考问题,要么是牛B哄哄;或者是熟悉各种Linux发行版的Sa,但是却只管理着为数不多的服务器,而且这些服务器还比较普通,极有可能还是自己攒的兼容机,并且极有可能公司只有一个Sa。
之所以会这样,正是因为局限性。程序员所要表达的是“我不关心底层是什么Linux发行版”,或者是“什么版本我都能应付”。而Sa表达的是“什么版本我都会用”,“我不在乎你让我部署什么版本”。
持“都一样”观点的人的依据是什么呢?
第一,因为Linux内核是开源的,Linux发行版里集成的软件绝大多数也都是开源的,并且必须是开源的。源材料是一样的,所以完全可以“都一样”。
发行商做的事情,从外面看就像是打包商,将散落在各处的开源软件、GNU工具集合到一起。可我们忽略了,即使如此,发行版里的集成组合也仍然是不尽相同的。当然,你可以自己搞得相同,因为大家都是开源的,但是那超出来了我们所说的“发行版”的范畴。认为Linux各发行版都一样的前提是,自己有时间、有精力、有能力处理所有的问题,自己有能力和时间来做发行商的事情,让他们变得一样或者来解决掉自己所有可能遇到的的问题。时间、精力和能力,缺一不可。
举几个例子。在RedHat 9的时代,内核还是2.4的时候,LVS还只是内核的一个补丁,要想使用它需要自己重新编译内核,并且客户机上,也需要额外的打一个可以用来关闭arp影响的补丁,而当时的SuSE发行版,已经将LVS功能集成到了自己的发行里,不需要自己动手来做这个事情。另一个是reiserfs 文件系统的支持,记得RedHat 9同样需要自已来编译内核才能支持,而当时的SuSE已经集成了。 技术狂热者,会因为这样的挑战而欣喜若狂,初学者也会在鼓动之下跃跃欲试……但是不要忘了,不要在生产环境里做实验,并且要注意考虑风险。
另一件案例是因为某种原因将原来的系统换成另一个,更糟的是换到另一个不同的体系,比如从RedHat换到Debian或者从Debian换到RedHat。我们知道Debian沿用的是BSD风格,RedHat沿用的是System V风格,虽然发展到今天,已经互相融合了许多特性,但是还是有一定差别的。后果就是,Sa没有反对,因为Sa曾经“玩”过N个不同的版本,相信即使遇到问题,也可以自己解决。可实际上,这已经提高了成本,Sa有可能需要查资料才能完成之前能很熟练完成的工作,另外极有可能将习惯带过来,想当然,并引发事故。而对系统不是特别熟悉、精通的开发人员,就更郁闷了,可能连如何启动服务都不知道……(开发需不需要有权力登录服务器,该不该有权力重启服务,在这里不讨论)。
这些例子都说明了,发行版还是有差别的。而差别的本质是由于 时间、和技术能力的限制——因为Linux是开源的,大家的源材料是一样的,并且由于GPL的保护,即使是某发行商做了修改,做了优化,那么发行之后,也仍然是要公开源代码的——这就是CentOS存在的原因,所以还是有机会“都一样”的,只是时间问题罢了。
第二,不关心OS层面,只关心应用,比如Apache、MySQL等。
不关心OS层面,有掩耳盗铃的嫌疑。主要还是因为不了解“Linux发行版的发行商在发行的过程中做了哪些工作”。不然,你就不会认为OS层面不需要关心。当然,也就不会抱怨为什么企业发行版不用最新的软件(可能是由于严谨的态度,也可能是因为运营策略,也可能是因商业目的,可以肯定的是,追赶的太急,发行商的工作负何就会很大。与桌面版不同,安全稳定必须被放在第一位。),不会疑问为什么发行版会有跨大版本升级的问题。也会理解为什么有的版本在装服务器的时候偶尔会驱动不了RAID或者SCSI控制器从而发现不了磁盘无法安装,或者偶尔会进入系统后发现识别不到网卡。这样的烦恼,在使用企业版的时候,遇到的可能性会小很多。
所谓“都一样”,跟没回答一样,不是诚恳的讨论、解决问题的态度 。
正确的态度应该是什么样的呢?“实事求是”、“务实”的做事态度。
Linus 本人在 《Linux系统管理手册》中提出了选择Linux发行版的意义以及几个问题,觉得很客观,很实事求是,很有道理:
“当用户采用了一种发行版本之后,就是在某个特定发行商的做事方式上进行了投资。不要只看到软件安装以后的功能,而是要明智地考虑到,自己的单位和那家发行商在未来的数年里共事。”因此要取得一些重要问题的答案。
- 该发行版本能够在今后5年内继续存在吗?
- 该发行版会有最新的安全补丁吗?
- 该发行版会迅速发布更新软件吗?
- 如果我有问题,发行商会帮助我吗?
而根据我的经验,还有另个的两个问题值得思考:
该发行版的第三方支持怎么样?
- 比如服务器制造商的驱动支持是基于哪个发行版的?这个对于生产、管理通常很有用。
- 但是这些支持,通常不是必须的。就是说,没有这些支持,系统也可以运行良好,只是可能会没有办法使用某些“高级”功能。服务器的功能不能极致发挥。
- 虽然这些支持往往也能被其他版本解决,或者被其他人解决,但仍然会是一件相当头痛的事情。而且需要一个相对水平较高的Sa。并不是每个公司都具条这样的条件。
- 通常服务器制造商只提供两种Linux的支持,那就是RHEL和SUSE企业版。相信不久的将来,Ubuntu也将被支持。
假如是大型企业,那么必然要考虑:该发行版有没有“批量部署”解决方案?(这个问题,貌似有第三方软件可以解决,但是不知道效果如何,据说SystemImager很可靠。)
- RedHat 有 Anaconda/kickstart
- SuSE 有 AutoYaST
- Debain、Ubuntu 有 debian-installer
- 还有第三方解决方案 SystemImager:http://wenku.baidu.com/view/a6c3a98583d049649b6658d7.html
- 以及 Clonezilla : http://www.clonezilla.org/
思考了上面的问题,还要立足于自己的实际情况,下面的问题,都可能会遇到。
1. 这个发行版,熟悉的人多么?你需要一个能被广泛接受的发行版本,而不是鲜为人知的版本,这样便不会遇到招不到Sa的尴尬。当然,与其他同事沟通、合作起来,也会少很多麻烦。
2. 你需要厂家提供技术支持么?技术支持,可以不用,但是用的时候需要有的可用。当然,只要肯付费,没人官方支持的,也有第三方支持。
3. 部署方便么?假如只有很少量的设备,那这个问题不关键。但是假如设备数量很多,特别是增长很快,那这个问题就会凸现。你需要一个可以“无人执守”自动部署的发行。当然通过第三方的解决方案,似乎所有的部署都可以无人执守。
4. 是企业级的么?不建议使用一个没有经过严格测试的发行,也不鼓励一味的追求最新。生产需要的是保证性能的同时保证安全和稳定。
5. 你使用的是高端的设备么?高端设备通常比较少见,因此也不像PC那样被普遍兼容。一定要选择硬件厂家支持的 Linux发生版,通常是 RedHat 和 SuSE,这两个发行版是全球最大的两家 企业Linux 发行商。可以确信,在未来不久的日子里,Ubuntu/Debian会成为第三个众多硬件制造商支持的 企业Linux 发行版。但是在没有支持之前,有待考虑。 假如不,那么你选择的Linux发行版,有可难会发挥不了你的硬件的功能,甚至有可能会驱动不了某些硬件(内核是一样的,但是发行版定制的内核却是有差异的,甚至内核版本也是有差异的)。此时,假如非要使用其他发行版,将会花费自己额外的时间去解决这些问题,而此时,自身的技术水平将起到关键性作用。
6. 你自己可以承担风险吗?系统出错导致的问题,你可以解决吗?后果你可以承担吗?假如不,那么建议使用企业版。
对系统使用的越深,越细,越会觉是“发行版”是不一样的,尽管你可以把他们“整”得一样,但他们确实是不一样的,要把他们“整”一样,几乎等于“整”一个发行出来。
致此,我也有些疑惑了。不能说谁对谁错。应该说“从宏观上讲(应用层面),Linux发行都差不多,越宏观,越相似;从微观来讲(系统构架层面),他们又是不一样的,越微观,越不一样。但是到了代码级别以后,似乎又开始“一样”了。”
举几个现实中“选择”的例子,阿里集团(b2b、阿里云、淘宝网)使得的是 RHEL,腾讯使用则是 SuSE。河南网通使用的是SuSE以及RHEL,blogbus 使用的是CentOS(应该归于 RHEL 的范畴)。
“豆瓣”使用的是Gentoo Linux。这种使用源代码编译的系统曾经在Sa中风靡一时。不否认Gentoo是一个相当“好玩儿”和“磨练技术”的版本,但是要用好,就得有技术力量,并且Leader愿意将在“这件事儿”上花费精力才行,或者已经有一个相当熟悉Gentoo的Sa。
当然,当企业发展到一定时期,会自己定制发行版,也不是不可能。不过,很难让人相信,哪个发行版是“纯正”的。几乎都是Debian、RedHat、Slackware三大分支中的一员。
下面是一份网站使用Linux发行版的统计数据:http://w3techs.com/technologies/details/os-linux/all/all
CentOS |
|
||
---|---|---|---|
Debian |
|
||
Red Hat |
|
||
Ubuntu |
|
||
Fedora |
|
||
SuSE |
|
||
Gentoo |
|
||
Mandriva |
|
||
Turbolinux |
|
Debian的用户这么多,是出乎我的意料的。使用Debian,第三方支持的问题比较鸡肋(最近发现HP、Dell的都开始支持Debian了,还是一直都有我没有注意到?)。
说说第三方支持吧,我最近一直在做这方面的相关的工作。比如,你需要调整服务器的BIOS,你怎么做?假如你不想去现场,不想插显示视,或者你有很多设备需要改BIOS,怎么办?
这时,我们会要求第三方支持,支持可以在OS层面设置BIOS的工具(实际上,硬件提供商的网站上就有这样的工具提供)。不要是以为这个问题很极端,肯定不止我们一家公司遇到过这个问题。
同样的问题,假如你需要调整远程管理卡怎么办?同样的需要第三方软件支持。不需要到现场,不需要重启系统。
而这种支持,官方通常只提供 RedHat和SuSE的,我个人认为Ubuntu很快也会被支持。好在这些需求,普通的用户可能会遇不到,或者根本就不知道有这些功能可以使用。(当然你问厂家要源代码,自己编译,应该也是可以的。但是又要花费自己的时间了,而且假如版本不一样,编译是否顺利,也会是一个问题。)
当然,我们讨论的论题是“为生产环境选Linux发行,而不是桌面”,假如是你自己PC或者笔记本上用的,那么请参考下面的两篇文章:
选择Linux需要考虑的十件事:http://article.pchome.net/content-615746.html
如何选择最适合你的Linux发行版:http://www.kuqin.com/shuoit/20090507/50077.html
相关 [生产 服务器 选择] 推荐:
Tomcat 生产服务器性能优化
- - ITeye博客移动互联网创业公司的服务器选择
- - 五四陈科学院-坚信科学,分享技术如何选择服务器操作系统(Linux/Unix)
- - 标点符服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS?
- - 知乎每日精选百万级运维经验四:服务器的选择和部署
- - CSDN博客系统运维推荐文章MySQL数据库开源软件版本 生产环境GA版本如何选择
- - MySQLOPS 数据库与运维自动化技术分享转载 选择
- bravusliu - caowumao的博客CSS4 选择器
- iVane - 幸福收藏夹JQuery 选择器
- - CSDN博客Web前端推荐文章点击我
. 像上面这样把JavaSript代码和HTML代码混杂在一起的做法同样也非常不妥,因为它并没有将网页内容和行为分离,所以才有JQuery选择器的学习.点击我
. //给class为demo的元素添加行为.