我现在在一台机器上搭好了环境,想把这个linux系统复制到其他机器上(几百台),机器的配置都是一样的,请问下有没有什么好的方法?
Windows: GhostCast
Linux: U 盘/网络启动, 从局域网下载磁盘镜像, 然后 dd 写入硬盘, 这个过程可以写个脚本
Linux 网络启动: http://www.cnblogs.com/hunterfu/archive/2010/03/15/1685957.html
系统安装完了可以用 puppet
http://puppetlabs.com/
https://linuxtoy.org/archives/puppet.html
http://www.chenshake.com/puppet-study-notes/
Kickstart 无人值守Linux系统批量部署 鸟哥的私房菜
看看ansible
直接 tar 过去呗。
使用自动化运维工具来部署和维护环境
使用puppet, chef来部署和维护测试、预发、生产环境,减少手工操作,减少未授权人士操作。既能提高部署效率,也能降低出错概率,保证环境一致性。
部署环境的代码也像Java代码一样执行项目管理流程
以puppet为例,部署一台php应用服务器,对应的就有一些php_app_server.pp, node_fe_php0402.pp这样的puppet代码文件,这些代码文件也要像淘宝交易中心的Java代码一样,纳入项目管理流程:
- puppet代码也要放在代码仓库中
- 改动和上线puppet代码也要走立项流程,在项目管理工具上创建日常/项目,代码仓库中建立分支
- 到生产环境去影响生产环境的nginx、php之前经过测试
- 资深的puppet开发者review代码,就像sql审核一样
puppet是什么
我不是建议一定要用puppet,chef之类的自动化运维工具也可以的,只不过我只会puppet,只做过puppet的开源项目和成功案例,所以这里就只讲puppet,chef的思想和功能与puppet是类似的。
puppet是一个自动化运维工具,它可以
自动化部署、初始化环境
除了装操作系统,其它的绝大部分事情它都可以做:
- 安装软件,支持yum, apt-get, port, rpm
- 操作文件/目录,读写文件,创建删除目录,改变文件内容
- 修改软件和系统配置文件,支持ini, shell var, /etc/sysconfig下的全部, php.ini, my.cnf等等,而且只修改你指定的项,没指定的项它不改
- 执行命令,如ping, grep, echo,一切可运行的命令都可以
- 配置系统选项,如ip、hosts表、chkconfig中的服务开机自启动
- 其它:如service, iptables, yum repo, crontab等等
- 更多puppet功能参见其官网文档:http://docs.puppetlabs.com/references/stable/type.html
如果你的环境不小心被搞得乱七八糟,它帮你整理清楚
puppet有一个agent,以daemon形式运行在你的操作系统中,它每隔一段时间就来检查系统是不是以你指定的状态在运行,如果不是,就把它恢复成你指定的样子。定时运行的时间间隔你可以设定。
打个比方,你本来只允许iptables放行80端口,有位同学临时用这台机器的时候,把8080,8000也开放了做了个测试,测试完他忘了给改回来就走了,puppet定时运行的时候就去检查并自动将iptables规则表改回只允许80端口。
如果这位同学还在他的Home目录(/home/tongxue)下创建了一些数据文件,而你没有指定过/home/tongxue这个目录应该怎么处置,puppet就不会去理会这个目录,同学下次来登录的时候还能正常使用他的数据文件。
puppet的本质
puppet发明了一个领域语言(DSL),让你按照它的语法规则,把所有他能支持的任务(安装软件、读写文件、service、iptables、crontab)写成类、语句,这些类可以继承,包含(import, include)、可以有条件地执行(if,else,case),系统部署和维护最终变成了编程工作。
--- 参考 ---
puppet官网
http://puppetlabs.com
电子书
puppet cookbook:http://www.puppetcookbook.com/
实体书
《精通Puppet配置管理工具》:http://item.jd.com/11003162.html
我做完puppet-example第一版并管理一个公司的所有服务器之后,深感水平不足,买了这本书,收获颇多,书评在此:http://club.jd.com/repay/11003162_039276dc-6a7c-421c-a35d-e367dfae36fb_1.html
我做的puppet开源项目
puppet-example:https://github.com/qinjx/puppet-example
一个puppet示范项目,兼作我的运维学习笔记,在现实世界运行着,有两个成功案例,各管理100多台服务器,都是小型B2C网站
Docker 是个不错的选择。