IT技术博客大学习 共学习 共进步

自动化运维之企业实际案例分析

MySQLOPS 数据库与运维自动化技术分享 2013-05-19 23:35:21 浏览 4,621 次

随着IT行业的迅猛发展,传统的运维方式靠大量人力比较吃力,近几年自动化运维管理快速的发展,得到了很多IT运维人员的青睐,一个完整的自动化运维包括系统安装、配置管理、服务监控三个方面。那今天咱们大家一起来学习一下puppet实际运维中的案例。仅供参考,欢迎大家提更多的意见!

一、应用背景
某公司新到500台服务器,需要安装Linux系统,并部署上线以及后期的管理配置。对于系统安装,这个时候肯定得采用批量安装的,常见批量安装方式有大家熟知的Kickstart和Cobbler,具体配置方法,网上也有很多好文章,这里略过。
提示:如果采用自动安装的话,我们可以自动初始化系统、内核简单优化、及常见服务、软件客户端等安装。当然puppet客户端也可以放在kickstart中安装并配置完毕。
当系统稳定运行后,现在我们需要调整和管理部分服务器,例如要修改100台服务器的系统参数、远程执行命令等,这时候如何操作呢?我们可能会想到脚本,想法很好,如果让你手动去100台服务器执行同样的脚本、或者修改某一个配置,是不是也浪费时间呢,利用puppet可以在几分钟、甚至数秒内全部搞定。

二、实际案例配置
现在有一个需求,需要修改100台Linux服务器上的crontab ntp时间服务器地址,原服务器crontab NTP配置段为:
0 0 * * * /usr/sbin/ntpdate pool.ntp.org >>/data/logs/crontab/ntpdate.log 2>&1
现在需要调整为内部自建的服务器地址10.1.1.21,并且修改同步的时间,如下:
0 */5 * * * /usr/sbin/ntpdate 10.1.1.21 >>/data/logs/crontab/ntpdate.log 2>&1
编写puppet ntp模块:
Vi /etc/puppet/modules/ntp/manifests/init.pp
class ntp {
Exec { path =>”/bin:/sbin:/bin/sh:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin”}
exec {
“auto change crontab ntp config”:
command =>”sed -i -e ‘/ntpdate/s/0/*\/5 /2′ -e ‘s/pool.ntp.org/10.1.1.21/’ /var/spool/cron/root”,
}
}
这段代码的注解:创建ntp模块,利用exec资源远程执行一条命令,同样可以举一反三,其他的修改和配置都可以参考此方法。其中Exec path的意思是定义全局path。如果不定义的话,每一次exec资源都要定义一个path路径。

二、实际案例配置
当我们有大规模集群的时候,所有服务器要求要求数据一致,可以采用rsync同步,配置rsync服务器端,客户端执行脚本命令即可。同样可以使用puppet+脚本来同步,这样比较快捷,当然也可以使用puppet rsync模块。Rsync配置此处忽略,直接上puppet代码:
##定义www模块
class www {
##定义全局path
Exec { path =>”/bin:/sbin:/bin/sh:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin”}
##推送sh脚本到客户端,192-9-117-162-tdt.com为服务端
file {
“/data/sh/rsync_www_client.sh”:
source =>”puppet://192-9-117-162-tdt.com/files/www/rsync_www_client.sh”,
owner =>”root”,
group =>”root”,
mode =>”755″,
}
##推送密钥文件到客户端,权限设置为600
file {
“/etc/rsync.pas”:
source =>”puppet://192-9-117-162-tdt.com/files/www/rsync.pas”,
owner =>”root”,
group =>”root”,
mode =>”600″,
}
##远程执行命令,备份原有程序,并判断rsync客户端脚本是否有修改,如果有变化,则执行。
exec {
“auto backup www data”:
command =>”mkdir -p /data/backup/`date +%Y%m%d`;mv /data/index /data/backup/www/`date +%Y%m%d` ; /bin/sh /data/sh/rsync_www_client.sh “,
user =>”root”,
subscribe =>File["/data/sh/rsync_bus_client.sh"],
refreshonly =>”true”,
}
}

三、测试puppet
注*这里如果要使用puppetrun(puppet kick)推送功能的话,需要提前配置好客户端,并在客户端授权允许服务端发送信号,具体配置文章见:http://wgkgood.blog.51cto.com/1192594/869694
在服务器端执行:
puppet kick -d -host `cat puppet.txt`
Cat Puppet.txt内容为需要同步的客户端的主机名:
192-9-117-163-tdt.com
192-9-117-164-tdt.com
192-9-117-165-tdt.com

四、puppet总结
本文仅供参考,通过了解和学习,我们可以更加深入的去理解puppet工作原理以及深入配置,举一反三:
1、如何在master端对客户端进行分组?除了正则还可以用什么?
2、当服务器数量不断增加,一台puppe tmaster肯定很吃力,如何扩展?如何更好的维护和统一管理puppet node配置?
3、如何结合SVN直接提交代码?等等问题。

建议继续学习

  1. 使用Apache 和Passenger来运行puppetmaster (阅读 8,162)
  2. 自动化测试中Python与C/C++的混合使用 (阅读 5,100)
  3. puppet使用rsync来同步文件教程 (阅读 4,080)
  4. DevOps之Puppet (阅读 3,820)
  5. 如何有效运行puppet cron任务以及如何触发运行puppet (阅读 3,761)
  6. linux下搭建pxe自动化安装环境 (阅读 3,540)
  7. 自动化测试之惑 (阅读 3,501)
  8. Linux大棚版gtest官网教程译文 (阅读 3,480)
  9. puppet vagrant 管理VirtualBox 虚拟机 (阅读 3,440)
  10. 让前端工作更快、更智能:利用StaticPage自动化工作流 (阅读 3,440)