首次使用Ansible(第9章:加速Ansible)
边阅读《首次学习Ansible》时的笔记记录
前文中包含了七个章节标题,分别是:
1. Ansible介绍
2. Playbook初探
3. 主机清单:描述服务器
4. 变量和事实
5. 高级Playbook
6. Ansible角色:扩展Playbook
SSH多路复用
-
- 同一ホストへの複数のSSHセッションで同じTCP接続を共有
ホストへのSSH接続の度に行うTCP接続のネゴシエーションを一度だけに
AnsibleはSSHプレキシングを デフォルトで有効化
激活多路复用时SSH的操作
-
- 在首次连接主机的SSH连接中,OpenSSH开始建立主连接。OpenSSH生成一个与远程主机关联的Unix域套接字(控制套接字)。
- 在下次连接到主机时,OpenSSH将使用控制套接字进行通信。
在Ansible中的多路复用选项
-
- ControlMaster: auto で SSHプレキシングを有効化
-
- ControlPath: ファイルシステム上のコントロールUnixドメインソケットファイルの置き場所
%h:ターゲットホスト名, %p:ポート番号, %r:リモートログインするユーザ名
ControlPathが長すぎる場合、OSによってUnixドメインソケットのパス最大長が設定されていないためにマルチプレキシングが効かないことがある
ControlPersist: マスター接続が維持される時間
管道
-
- タスク実行時Ansibleによって生成されたPythonスクリプトをホストにコピーするのではなく、SSHのセッションにパイプして実行
Ansibleによって使うセッションが2つではなく、1つになる
デフォルトではパイプラインは無効
有効化の設定はansible.cfgに以下のような記述をすればよい
[defaults]
pipelining = True
主机端的设置
-
- ホストの /etc/sudoers ファイルで requiretty が有効になっていないことを確認
requiretty が有効になっていると、playbookの実行時にエラーがはかれる
設定可以參考以下等相關資訊。
只允许root无需tty的sudo。
事实缓存
- Ansibleのファクト収集を各ホストにつき一度だけに設定することで、キャッシュの有効期限内であれば以降のplaybookの実行ではキャッシュ中のファクトを見てくれる
只需要在ansible.cfg中写入以下设置即可。
[defaults]
gathering = smart
fact_caching_timeout = 3600
# 以下のいずれか
# JSONファイル
fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_fact_cache
# Redis
fact_caching = redis
# Memcached
fact_caching = memcached
gathering = smart: 収集対象のファクトがキャッシュされていない場合、キャッシュの有効期限が切れている場合にのみファクトを収集する
fact_caching_timeout = 3600: キャッシュのタイムアウトを3600秒(=1時間)に設定
fact_caching: JSONファイル / Redis / Memcached のいずれかが利用可能
JSONファイル: fact_caching_connection でJSONファイルを書き込むディレクトリを指定
Redis: コントロールマシン上にPythonのRedisパッケージが必要
Memcached: コントロールマシン上にPythonのMemcachedパッケージが必要
并行处理
- Ansibleはホスト群に並列にSSH接続しタスクを実行するが、デフォルトではその並列度は 5 にとどまる
只需在ansible.cfg文件中写入以下设置即可。
[defaults]
forks = 10
forksオプションで並列に接続するホスト数を指定する