前言

puppet使用了有一段时间了,之前写的手顺书一直未发布到blog上来,今天正好有空,写下一点笔记。公司在用的服务器有500多台,基本都为CentOS,版本有5和6两种,管理起来很不方便,尤其是部署监控,其中有大量重复性工作,使用puppet可以方便很多。

简介

安装前,简介当然是一定要有的啦,简单介绍下吧。puppet是基于客户端和服务器端的C/S架构,基于ruby开发。所以,你要明白,安装puppet,就需要安装配置ruby。web管理界面类似于redmine的安装,使用apache的passenger模块整合。

服务器端部署

1、Download and install packages
URL:http://yum.puppetlabs.com/el/5/products/i386/
Packages:
puppetlabs-release-5-6.noarch.rpm(puppet repo)
puppet-dashboard-1.2.23-1.el5.noarch.rpm(puppet-dashboard)
  1. rpm ivh puppetlabs-release--.noarch.rpm
  2. rpm ivh puppet-dashboard-1.2.-.el5.noarch.rpm
  3.  
  4. yum install puppet-server puppetdb puppetdb-termius(后面两个可以不装)

2、Install ruby、mysql、apache_passenger module

参见安装redmine文档

 
3、 Server configuration
对于puppet.conf 来说,里面分成3部分[main], [master], [agent], 外面的文档,有些是把参数添加到[main], 有些是添加到[agent], 用初学者比较困惑,到底那个是正确。对于agent来说,你就在agent里修改就可以。如果你的设置和[main]冲突,就会保留[agent]设置。所以你基本就不需要管[main]设置就可以。
/etc/sysconfig/puppetmaster  不用修改
/etc/sysconfig/puppet        不用修改
/etc/puppet/puppet.conf     不用修改
执行:/etc/init.d/puppetmaster start
 
4、Client configuration

  1. rpm ivh puppetlabs-release--.noarch.rpm
  2. yum install puppet
  3. /etc/puppet/puppet.conf 修改如下内容,值为puppet服务器的hostname
  4. PUPPET_SERVER=server.example.com
  5. 执行 /etc/init.d/puppet start

或者不修改配置文件,直接puppet agent –server=server.example.com

 
5、Commands
查看服务端证书

  1. puppet cert list all

查看模块位置

  1. puppet config print modulepath

查看报告

  1. Puppet agent t summarize

6、Certificate Register

客户端agent启动时候会给服务器发送证书申请
在服务器上有上述命令查看证书,然后签名

  1. puppet cert sign station3.example.com

7、 Certificate Cancle

(1)注销证书

  1. puppet cert revoke station3.example.com(只是让证书失效)
  2. puppet cert clean station3.example.com (删除证书)

重启puppetmaster

此时,station3.exmaple.com不能连接到puppet server
(2)重新注册证书
在客户端

  1. rm -f /var/lib/puppet/ssl/certs/station3.example.com.pem
  2. rm -f /var/lib/puppet/ssl/certificate_requests/station3.example.com.pem

然后重启puppet,在服务器端执行puppet cert list就能看见重新申请证书。

(3)自动注册证书
可以设置master自动签发所有的证书,我们只需要在/etc/puppet 目录下创建 autosign.conf 文件。(不需要修改 /etc/puppet/puppet.conf文件,因为我默认的autosign.conf 文件的位置没有修改)

  1. vim /etc/puppet/autosign.conf
  2. *.exmaple.com

这样所有来自example.com域上的所有客户端就自动注册了。

8、 puppet dashboard

这个主要是方便看的,看报告能快速知道那台服务器puppet应用更新失败。
(1) 修改my.cnf
在[mysqld]模块下添加max_allowed_packet = 32M
(2)创建数据库

  1. CREATE DATABASE dashboard_production CHARACTER SET utf8;
  2. CREATE USER 'dashboard'@'localhost' IDENTIFIED BY 'password';
  3. GRANT ALL PRIVILEGES ON dashboard.* TO 'dashboard'@'localhost';
  4. FLUSH PRIVILEGES;

(3)编辑 /usr/share/puppet-dashboard/config/database.yml

(4)修改时区 /usr/share/puppet-dashboard/config/environment.rb
#config.time_zone = 'UTC'
       config.time_zone = 'Beijing'
(5) 配置apache

  1. vim /etc/httpd/conf.d/puppet.conf
  2.  
  3. LoadModule passenger_module /usr/local/ruby/lib/ruby/gems/1.8/gems/passenger-3.0./ext/apache2/mod_passenger.so
  4. PassengerRoot /usr/local/ruby/lib/ruby/gems/1.8/gems/passenger-3.0.
  5. PassengerRuby /usr/local/ruby/bin/ruby
  6.  
  7. Listen
  8. <VirtualHost *:>
  9. ServerName server.example.com
  10. # !!! Be sure to point DocumentRoot to 'public'!
  11. DocumentRoot /usr/share/puppet-dashboard/public
  12. <Directory /usr/share/puppet-dashboard/public >
  13. # This relaxes Apache security settings.
  14. AllowOverride all
  15. # MultiViews must be turned off.
  16. Options -MultiViews
  17. </Directory>
  18. </VirtualHost>

这样puppet就跟redmine一样用apache的方式启动了。

(6)初始化数据库

  1. cd /usr/share/puppet-dashboard/
  2. rake RAILS_ENV=production db:migrate

(7) 导入reports(默认在/var/lib/puppet/reports目录下)

  1. cd /usr/share/puppet-dashboard/
  2. rake RAILS_ENV=production reports:import REPORT_DIR= /var/lib/puppet/reports

(8)Delayed Job Workers

  1. cd /usr/share/puppet-dashboard/
  2. env RAILS_ENV=production script/delayed_job -p dashboard -n -m start(开始分析reports
  3. ps -ef|grep delayed_job|grep -v grep(查看delayed_job 进程)
  4. env RAILS_ENV=production script/delayed_job -p dashboard -n -m stop(停止分析)

注意这个进程不要停掉,要一直存在,所以么,有时候重启服务器会忘记,干脆写入到/etc/rc.local中

 以上就是puppet server端的安装过程了,还有一些技巧随后补充,如客户端批量部署、排错等。
 

客户端部署

既然puppet是C/S架构的,所以还得在每台服务器上部署客户端,但是500多台服务器,不可能手工的一台一台去部署,自然通过脚本的方式。

部署前提

(1)免认证

对于500台及以上的服务器集群,应用之间的耦合度非常高,而且为了管理方便,一般都有操作系统层级的互信,也就是ssh免认证。

当然,有人会说这样会有内网安全的隐患,如果控制了一台服务器,那么整个内网都将沦陷。是的,一点没错。安全跟便利本身就是相互矛盾的,我认为对于IDC服务器集群架构的安全防护主要还是从防火墙访问限制和权限控制上着手,要既能保证业务正常运作也能保证服务器本身的安全。

(2)hosts文件

由于是服务器集群,所有服务器之间的信任一般都是通过/etc/hosts文件记录其他服务器hostname跟IP的映射关系。

部署过程

基于内网中服务器之间的免认证,我们可以使用脚本将安装脚本推送到所有服务器上,然后再执行安装脚本,这样就是实现了puppet客户端的自动安装。

安装脚本,install_puppet.sh

  1. #!/bin/bash
  2. version5=
  3. version6=
  4. [ -f /etc/init.d/puppet ]&& /etc/init.d/puppet restart
  5. [ -f /etc/sysconfig/puppet ]&& exit
  6.  
  7. version5=`/bin/cat /etc/issue|head -|grep '5.'|wc -l`
  8. if [ $version5 = ];then
  9. rpm -ivh http://yum.puppetlabs.com/el/5/products/i386/puppetlabs-release-5-6.noarch.rpm
  10. yum -y install puppet
  11. puppet agent --server server.example.com
  12. [ -f /sbin/chkconfig ]&&`chkconfig puppet on`
  13. #echo "centos 5"
  14. else
  15. version6=`/bin/cat /etc/issue|head -|grep '6.'|wc -l`
  16. if [ $version6 = ];then
  17. rpm -ivh http://yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-6.noarch.rpm
  18. yum -y install puppet
  19. puppet agent --server server.example.com
  20. [ -f /sbin/chkconfig ]&&`chkconfig puppet on`
  21. #echo "centos 6"
  22. fi
  23. fi

推送脚本push.pl,基于/etc/hosts文件中的记录。

  1. #!/usr/bin/perl -w
  2.  
  3. if (@ARGV)
  4. {
  5. foreach (@ARGV)
  6. {
  7. if ($ARGV[] =~ "all")
  8. {
  9. open(FILE,"</etc/hosts")||die"cannot open the file: $!\n";
  10. while (<FILE>)
  11. {
  12. if ($_ =~ /^/)
  13. {
  14. my @host=split;
  15. print "########It's coping file to $host[1]########\n";
  16. system("/usr/bin/rsync install_puppet.sh $host[0]:/");
  17. system("/usr/bin/ssh $host[0] /install_puppet.sh");
  18. }
  19. }
  20. close FILE;
  21. }
  22. else
  23. {
  24. print "########It's coping file to $_########\n";
  25. system("/usr/bin/rsync install_puppet.sh $_:/");
  26.      system("/usr/bin/ssh $_ /install_puppet.sh");
  27. }
  28. }
  29. }
  30. else
  31. {
  32. print "1.Usage: $0 hostname1 hostname2 ... \n";
  33. print "2.Usage: $0 all\n";
  34. }

这样执行将两个脚本放在同一目录,然后执行./push.pl all,然后就不用管了,所有服务器都自动部署对应版本的puppet客户端了。

puppet批量管理500多台服务器的更多相关文章

  1. Facebook 运维内幕曝光:一人管理2万台服务器

    Facebook 运维内幕曝光:一人管理2万台服务器 oschina 发布于: 2013年11月23日 (29评) 分享到  新浪微博腾讯微博 收藏+32 11月30日 珠海 源创会,送U盘,先到先得 ...

  2. 并发批量管理500台以上服务器脚本分享(shell版)

    转载于运维笔记 Categories:Shell 也许很多人认为shell不能并发任务,其实可通过其它一些方式来实现.下面的脚本是我批量快速管理500+服务器脚本,阅读该脚本前建议先看<自动执行 ...

  3. 搭建jumperserver堡垒机管理万台服务器-1

    搭建jumperserver堡垒机管理万台服务器-1 1  Jumpserver堡垒机概述-部署Jumpserver运行环境 2  安装Coco组件 3  安装Web-Terminal前端-Luna组 ...

  4. 搭建jumperserver堡垒机管理万台服务器-2

    搭建jumperserver堡垒机管理万台服务器-2 1  Jumpserver堡垒机概述-部署Jumpserver运行环境 2  安装Coco组件 3  安装Web-Terminal前端-Luna组 ...

  5. windows下运行的linux服务器批量管理工具(带UI界面)

    产生背景: 由于做服务器运维方面的工作,需要一人对近千台LINUX服务器进行统一集中的管理,如同时批量对LINUX服务器执行相关的指令.同时批量对LINUX服务器upload程序包.同时批量对LINU ...

  6. SHELL实现同时操作多个服务器:服务器批量管理

    引言:     1.如果你想知道你所管理的几万台服务器的/home分区使用率是多少.     2.如果你想为你所管理的几万台服务器添加同一个计划任务你该怎么办?     3.如果你想让你所管理的几万台 ...

  7. saltstack 服务器批量管理

    学习saltstack 服务器批量管理 1.saltstack 简介 SaltStack是一个开源的.新的基础平台管理工具,使用Python语言开发,同时提供Rest API方便二次开发以及和其他运维 ...

  8. 批量实现多台服务器之间ssh无密码登录的相互信任关系

    最近IDC上架了一批hadoop大数据业务服务器,由于集群环境需要在这些服务器之间实现ssh无密码登录的相互信任关系.具体的实现思路:在其中的任一台服务器上通过"ssh-keygen -t ...

  9. Ansible实现批量管理服务器

    Ansible介绍: a. ansible是一个基于Python开发的自动化运维工具b. ansible是一个基于ssh协议实现远程管理的工具c. ansible软件可以实现多种批量管理操作(批量系统 ...

随机推荐

  1. unity的一些重要技巧(转)【整理他人的东西】

    刚开始学习Unity3D时间不长,在看各种资料.除了官方的手册以外,其他人的经验也是非常有益的.偶尔看到老外这篇文章,觉得还不错,于是翻译过来和大家共享.原文地址: http://devmag.org ...

  2. Python中深拷贝与浅拷贝区别

    浅拷贝, list值是可变的,str值不可变,只能重新赋值 a=b=c='wjx'print(a,b,c)c= 'jmy'#重新赋值了,所以内存分配了新的地址print(a,b,c)print(id( ...

  3. gradle_学习_00_资源贴

    一.官方资料 1.Gradle User Guide 中文版 二.精选资料 1.Gradle学习系列之一——Gradle快速入门 2.Gradle教程

  4. codeforces 653A A. Bear and Three Balls(水题)

    题目链接: A. Bear and Three Balls time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  5. linux命令学习笔记(56):netstat命令

    netstat命令用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况. netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UD ...

  6. Android: 利用SurfaceView绘制股票滑动直线解决延迟问题

    1.背景介绍 最近项目要绘制股票走势图,并绘制能够跟随手指滑动的指示线(Indicator)来精确查看股票价格和日期.如下图所示: 上图中的那条白色直线就是股票的指示线,用来跟随手指精确确定股票的时间 ...

  7. gulp之压缩css

    /** * css压缩 * npm install --save-dev gulp-minify-css * npm install --save-dev gulp-rename * * * 可参考: ...

  8. 洛谷【P1104】生日(插入排序版)

    题目传送门:https://www.luogu.org/problemnew/show/P1104 题目很简单,我主要是来讲插入排序的. 所谓插入排序,就是从待排序数组不断将数据插入答案数组里. 假设 ...

  9. 串口编程3:使用串口读取GPS信息

    关于GPS的使用,参考. 本文主要参考的博客,在此表示感谢!!! 主函数 主函数gps_main.c,这里便涉及到了串口的打开,读操作,以及调用了串口设置函数: #include <stdio. ...

  10. yum软件包管理器

    Yum (Yellow dog Updater, Modified) 黄狗升级器是一个在 Fedora 中的字符前端软件包管理器.基于 RPM 包管理(介绍见RPM包及其管理),能够从指定的服务器自动 ...