問題: 私の環境で puppet エージェントを実行しているサーバーは、Hiera ドキュメントに格納されている予期されるパラメーターではなく、空の [クラス] (パラメーターなし) を受け取ります。これにより、puppet モジュールが null パラメーターで実行され、実際の期待値ではなくデフォルト値で正常に実行されます (これは明らかに望ましくない破壊的な動作です)。
問題が発生する原因は何ですか? 私たちの Hiera は CouchDB ドキュメント データベースに基づいています (後で詳しく説明します)。CouchDB サービスがダウンすると、パペット エージェントは (パペット マスターに新しいカタログを要求すると)、Hiera ドキュメントに格納されていると予想されるパラメーターではなく、空の [クラス] (パラメーターなし) を受け取ります。
私の環境アーキテクチャ:
- NetworkLoadBalancer (Cisco Ace) の下にある 4 つの Puppet マスター サーバー
- 1 パペット CA サーバー
- NetworkLoadBalancer (Cisco Ace) の背後にある 2 つの Hiera サーバー (couchDB 1.6.0)
- すべてのサーバー OS は RedHat 6.3 です
- パペット バージョン 3.7.4
- パペット マスターは、Http_Backend v1.0.1 を使用して hiera サーバーと通信します。
- postgress sql で puppetDB を使用してサーバーのインベントリを節約する
問題をどのようにシミュレートできますか?
Hiera サーバー hiera01 (2 つのうちの 1 つ) で CouchDB サービスを停止することにより、問題を引き起こすことができます。
puppet-masters のログに、hiera01 サーバーに対して 20 分以上開いていたセッションの「接続が拒否されました ...」というエラーが表示される
couchdb サービスが停止しているときにセッションが閉じられない。
新しいリクエストは hiera02 にルーティングされます。
セッションがhiera01を介してマスターからカタログを取得するクライアントサーバー-クラスのデフォルトパラメーターを取得しました!!!
パペットマスターのメイン設定ファイル
[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
ノート
- 環境は本番環境であり、バージョンの更新はほとんど不可能です。
- hieradata ディレクトリが空です (yaml バックエンドを使用していません)
ありがとうございました !
PS: インターネットから切り離された機密環境を実行しているため、ログ ファイルのアップロードは非常に複雑なプロセスです。