最近花了几天搞了一下 Puppet 更新失败的问题,总结了一下遇到的问题,问题还挺多的,这就是开发有登陆机器权限的恶果,问题列表:
1.crontab 任务被注释(我们使用 crontab 来更新 Puppet);
2.证书问题,基本上都是证书已经存在,证书申请失败,此时需要到 Puppet ca 删掉原有证书,并清空本机证书,重新申请;
这种情况 Puppet Master 是拿不到更新信息的,所以 Puppet Dashboard 看不到这种机器。
一般是由改主机名引起,可以通过修改改名脚本彻底解决:
1). 改名之前去 Puppet ca 删除原主机名的证书;
2). 删除本机的证书文件;
3). 查看 Puppet ca 中是否已经存在新主机名的证书;
4). 如果存在,删除 Puppet ca 中的新主机名证书;
5). 真正改名。
3.Puppet 依赖的 ruby 环境被损坏;
4.升级 Python 导致 yum 不可用;
5.普通用户进程数达到上限导致 lighttpd(Nginx 七层检测用) 起不来;
6.升级 Python 导致 supervisor 启动不了;
7.一些自定义 rpm 包不支持 Centos7,启动失败;
8.mysql-libs 和 Percona-Server-server 冲突;
解决方法:
安装 Percona-Server-shared-compat 代替 mysql-libs 。
9.Puppet 忽略此节点,返回400;
通过修改 puppet_node_classifer.py 解决,忽略的节点也返回执行 Puppet 主任务的 crontab配置。
10.机器死机。
问题多多,所以安装 Puppet Dashboard 来观察哪些机器更新失败。
1.安装:
yum install rubygem-rake ruby-mysql mysql-server puppet-dashboard
2.修改 /etc/my.conf,在 [mysqld] 内加入
max_allowed_packet = 32M
然后 在 [mysqld] 和 [client ]内加入
defalut-character-set = utf8
3.创建mysql数据库和用户
create database dashboard;
grant all on dashboard.* to puppet@’10.%’ identified by ‘puppetdashboard’;
flush privileges;
4.修改 /usr/share/puppet-dashboard/config/database.yml
production:
database: dashboard
username: puppet
password: dashboard
encoding: utf8
adapter: mysql
5.导入表结构
cd /usr/share/puppet-dashboard
rake gems:refresh_specs
rake RAILS_ENV=production db:migrate
6.测试 puppet-dashboard 能否工作,端口起在 3000
/usr/share/puppet-dashboard/script/server -e production
7.启动
/usr/share/puppet-dashboard/script/server -e production -d
env RAILS_ENV=production /usr/share/puppet-dashboard/script/delayed_job -p dashboard -n 4 -m start
/etc/init.d/mysql.server start
8.访问。
通过 http://puppetdashboard:3000
额外要注意的几点:
1.Puppet client 更新 Puppet 的时候需要指定 report 参数,比如:
/usr/bin/puppet agent –onetime –no-daemonize –server=puppetlb.corp.nosa.me –ca_server=puppetca.corp.nosa.me report
2.要在 Puppet master 的 [main] 下面增加两行:
reports = http,store
reporturl = http://puppetdashboard:3000/reports/upload
3.默认是 UTC 时区,修改成北京时间,编辑文件 /usr/share/puppet-dashboard/config/settings.yml,修改 time_zone:
time_zone: ‘Beijing’
4.dashboard 的数据库文件增加很快,如果不清理,很快就会占满硬盘,最好每天清理一次,清理脚本可如下(保留一天):
cd /usr/share/puppet-dashboard
env RAILS_ENV=production rake reports:prune upto=1 unit=day
env rake RAILS_ENV=production db:raw:optimize
最后,要通过 api 获取更新失败的机器列表 和 通过 api 查询、删除 证书 可以参考 这里,查询和删除证书要认证,如果怕麻烦 可以修改 Puppet ca 的 /etc/puppet/auth.conf ,增加 allow *,只是不太安全。