问题: 在我的环境中运行puppet代理的服务器正在接收空[classes](没有参数),而不是存储在他们的Hiera文档中的预期参数。这会导致puppet模块使用null参数运行,这反过来会导致成功运行默认值而不是实际预期值(这显然是不需要的和破坏性的行为)。
导致问题触发的原因是什么? 我们的Hiera基于CouchDB文档数据库(我将在后面进一步扩展)。当CouchDB服务停止时,木偶代理(在询问木偶大师的新目录时)会收到空的[类](没有参数),而不是存储在他们的Hiera文档中的预期参数。
我的环境架构:
我们如何模拟问题?
通过停止Hiera服务器上的CouchDB服务 - hiera01(只是其中之一),我们可以触发问题。
puppet-masters日志显示已经对hiera01服务器开放的会话超过20分钟的“连接被拒绝...”错误
当couchdb服务停止时,会话未被关闭。
新请求将路由到hiera02。
客户端服务器,他们的会话从master通过hiera01获取目录 - 获得了类的默认参数!!!
Puppet master的主要配置文件
[main]
logdir = /var/log/puppet
rundir = /var/run/puppet
ssldir = %vardir/ssl {group = service, mode = 640}
ca = false
certname = master_server_01.domain
dns_alt_names = puppet-master-ace.domain, puppet-master-ace
use_srv_records = true
pluginsource = puppet:///plugins
pluginfactsource = puppet:///pluginfacts
reports = log, foreman
enviromentpath = $confdir/enviroments
basemodulepath = $confdir/modules
[agent]
classfile = $vardir/classes.txt
localconfig = $vardir/localconfig
[master]
storeconfigs = true
storeconfigs_backend = puppetdb
always_cache_features = true
Hiera.yaml(主服务器)
---
:backends:
- http
- yaml
:hierarchy:
- "%{fqdn}"
- "%{enviroment}"
- common
:http:
:host: hieraserverace.domain
:use_auth: true
:auth_user: admin
:auth_pass: Passowrd
:api_user: apiUser
:api_pass: apipassword
:merge_behavior: deeper
:port: 5984
:output: json
:failure: graceful
:path:
- "/%{environment}/%{fqdn}"
- "/%{environment}/%{osfamily}"
- "/%{environment}/%{enviroment}"
- "/%{environment}/common"
:yaml:
:datadir: /etc/puppet/hieradata
备注
谢谢!
PS:由于我们正在运行与互联网断开连接的分类环境,因此上传日志文件是一个非常复杂的过程。