但凡服务器上了必定规模(百台以上),普通的ssh登陆管理的模式就愈来愈举步维艰。试想Linux发布了一个高危漏洞的补丁,你要把手下成百上千台机器都更新该补丁,若是没有一种自动化方式,那么至少要耗上大半天时间。虽然你编写了大量的shell(或python,perl)脚原本实现各类自动化场景,但最后会发现你又陷入了脚本的汪洋大海之中,管理和维护这么多的脚本的成本也不小。你须要一款基础设施自动化工具,但愿它能具备如下功能。node
1批量执行python
这个很少说了吧,试想要为每一台机器打补丁的情形吧。linux
2任务编排git
如今稍微复杂点的应用都须要N台服务器来部署,而部署的过程当中确定有个前后的依赖顺序。那么由此看来任务编排确定必不可少。github
3对业务场景的抽象,也就是DSL化shell
之因此抛弃本身用shell(或其它语言的)脚原本实现各类自动化的缘由之一就是这些脚本很难懂,除了你之外其余人几乎没法修改。而做为一个成熟的工具,天然对我们复杂的应用场景要作抽象,好比对服务器节点、角色的抽象,对服务器上的各类安装、配置操做的抽象,对不一样环境的抽象等。经过抽象出来的DSL,你们很容易达成一致,协同工做。bootstrap
4安全机制ubuntu
既然是基础设施自动化工具,免不了包含各类敏感信息,如何去敏也是挺重要的。并且既然能控制整个服务器集群,控制方式也要绝对安全。windows
除了这几个基本功能之外,固然咱们还但愿有更多功能,好比脚本重用、审计功能、完善的文档等。这里就很少说了。安全
相似的工具确定已经有了,如今市场上比较流行的开源软件有Puppet、Chef、Ansible、SaltStack等。关于它们的优劣不是这篇文章的重点。
而谈起集群管理,你们彷佛默认的都是对Linux系统集群的管理,对于Windows集群则不多涉及。我想这大抵有两方面的缘由,一方面是大部分公司中机器集群类型大都是Linux系统,另外一方面是Windows机器在批量化管理方面自然有缺陷,好比缺少各类方便的脚本命令、很难对机器配置彻底脚本化等。但对Windows集群的管理问题没法回避,由于在企业中Windows集群的确存在。微软也在致力改善这些问题,好比Window PowerShell就是为了解决校本化的问题。
而笔者的上一个项目就涉及对数百台Windows和Linux集群的管理。Windows集群的主要操做系统是Windows Server 2008,Linux集群的主要操做系统是Ubuntu 12.04。要实现对这样的集群的自动化配置和管理,笔者积累了一些经验,特地分享给你们。
自动化工具的选型
凡是牵扯到工具选型的时候,若是你发现你处于一个很是纠结的地位,那多是由于竞品工具没有一个能突出重围,致使你在它们各自的优缺点之间难以取舍。我也理解,工具选型要考虑的因素太多。这个项目的选型其实没通过太大波折,很快就决定使用Chef。缘由我能够简单说一下,Puppet的API太不友好,ansible和salt对windows的支持程度未知,而根据我之前的经验,Chef对windows的支持仍是比较成熟的。因此咱们就快刀斩乱麻选择了Chef。
搭建Chef生态环境
既然决定了Chef,那么接下来不少问题都不得不考虑。
使用自建的Chef Server
缘由很简单,由于客户不会把本身的node暴露在公共的chef server之上。因此咱们在企业内网搭建了一个Chef server,放置在一台ubuntu机器上。
workstation选择windows机器(windows 7)
考虑到咱们要同时管理Linux集群和Windows集群,因此workstation的选择也很重要。在bootstrap一个node的时候,workstation和linux node的通信方式是ssh,而和windows node的通信方式是经过WinRM。若是使用Linux经过WinRM和Windows系统通信,理论上是可行的,咱们能够借助一些第三方工具实现,但过程确定比较曲折。而若是使用Windows机器和Linux及Windows系统通信,则没有太大问题。
搭建本身的软件仓库
对于Linux系统而言有不少成熟的包管理工具,想要安装什么软件基本上一条命令便可。而对于Windows系统而言,虽然有chocolatey之类的工具,但在分发一些企业内部的软件方面仍捉襟见肘。因此咱们选择搭建本身的软件仓库。刚开始为了简便起见就搭建了一个ftp服务器做为软件仓库。后期会考虑迁移到Sonatype Nexus之类能提供更多功能的包管理服务器上去。
建立Chef repo并归入源代码管理之类的事情因为没有太多特殊性,因此这里就不展开了。
应用Chef管理windows集群
使用Chef来管理windows集群确定没有像管理Linux集群那么容易,如下是几个须要注意的点。
配置Windows node开启WinRM服务
WinRM服务是微软提供的用于进行远程通信的服务(Windows 7及之后的系统内置支持),你能够简单理解为Windows版的SSH。在Windows server 2008 R2操做系统中,WinRM服务默认是关闭的,咱们须要启用它。首先须要修改两个组策略。在组策略的计算机配置->策略->Windows组件->Windows远程管理(WinRM)->WinRM服务中,选择“容许自动配置监-听-器”,把该策略选为启用,并修改IPv4和IPv6过滤器为*。而后在控制面板中选择windows防火墙,单击例外选项卡,选择Windows 远程管理复选框。若是看不到该复选框,请单击添加程序以添加 Windows 远程管理。
这两项的配置也能够经过PowerShell脚原本实现。
而后就能够启用和配置WinRM了。只须要在PowerShell终端输入winrm quickconfig -q便可。另外Chef还推荐对WinRM进行一些进阶配置。
使用windows cookbook
windows cookbook是Chef专为windows平台写的cookbook。里面包含了很是多的针对windows平台特性的功能,是操纵windows平台不可或缺的利器。好比解压缩文件、执行batch(PowerShell)命令、安装认证、安装卸载windows包、配置执行计划任务……
使用方式也很简单,安装能够经过chef的supermarket执行。若是在其它cookbook须要使用该cookbook的模块,只需在其它cookbook的metadata.rb中加入depends ‘windows’便可。
升级Windows node上的PowerShell版本
PowerShell之于Windows就至关于shell之于Linux。Windows Server 2008 R2上的PowerShell默认版本是3.0,最好可以升级到高级版本。而github.com/opscode-cookbooks/powershell中的cookbook则能够方便的对Windows node的PowerShell进行升级和配置,以及安装各类PowerShell module,执行PowerShell脚本等。
实现对软件的静默安装
Linux上的每种软件基本都有经过命令行静默安装的方式。而Windows下的软件却不尽然。若是软件是以.msi方式打包的,那么可使用Windows Installer来实现静默安装。若是是以.exe的方式来打包的,倒也不被惊慌,能够仔细分析其是不是以inno、NSIS、installshield等方式打包的,而后根据各自方式的静默方式实现自动化安装。若是以上皆不适用,则能够分析该软件是否为绿色软件,尝试把安装后的整个文件夹打包放置于软件仓库之上,之后安装只须要解压缩便可。若是软件既没有规范的打包方式,也不是绿色软件,那么就比较麻烦了,须要分析安装后建立了那些文件,以及执行了那些脚本,而后尝试把这些操做命令行化(不过这样的软件很是少,没必要过于担忧)。
使用push jobs功能
一般咱们须要对节点进行批量化操做,而经过chef-client的方式功能有限。chef提供了push jobs这样的扩展功能,容许咱们对节点进行为所欲为的批量操做。
熟练使用PowerShell脚本
以前我说过,PowerShell在Windows上的地位就如同Shell在Linux上的地位。Windows PowerShell提供了对COM组建和WMI组件的彻底访问,并且能够轻松调用.net framework框架中的功能,并且也包含强大的文档。若是你想配置一个DHCP服务器,或者配置一个IIS网站服务,抑或修改注册表,使用PowerShell能轻松让你达到目标,完全摆脱图形化界面。
整体来讲,Chef对于Windows平台的支持力度仍是至关完善的,若是你想实现对Windows集群的自动化管理,那么Chef不失为一种可行的方案。至于其它几种自动化工具,笔者有时间也会进行深刻调研,再出具报告。
免费领取兄弟连IT教育原创linux运维工程师视频/细说linux教程,详情咨询官网客服:http://www.lampbrother.net/linux/
或者勾搭Q2430675018
欢迎加入linux交流群 478068715