Help us understand the problem. What is going on with this article?

Ansibleパフォーマンスチューニング

More than 5 years have passed since last update.

Ansileシンプルで好きで使ってますが、たまにパフォーマンスが気になってました。
つい先日Ansibleの公式ブログにパフォーマンスチューニングのtipsが書かれてたので自分が知らなかったところを中心に紹介します。
常識的なものも多いかもですがご容赦ください。

パッケージインストールを効率化する

  • yumとかでパッケージインストールとかするならローカルのMirrorレポジトリを使おう。
  • reposyncとか使うと簡単にMirrorが作れて良い。
  • 複数パッケージのインストールはwith_itemsを使って一つのトランザクションにしよう。

forksで並列度を設定する

  • 同時にAnsibleのタスクが走るのはforksで決まる。
  • デフォルトは5だけど保守的なので増やした方が良い。50とかでも良いし、500以上にしてるケースもある。
  • Ansible1.3からはどんなに増やしても設定対象ノード数を超えることはない。
  • local_actionとかがあると詰まるから別のplaybookにする等しよう。
  • ちなみにforksの設定は以下のどこかに書く。
    • ANSIBLE_CONFIG (環境変数)
    • ansible.cfg (カレントディレクトリ)
    • .ansible.cfg (ホームディレクトリ)
    • /etc/ansible/ansible.cfg
  • forksを絞るケースはローリングアップデートするときとかがある

sshを速くしよう

OpenSSH

  • デフォルトだとネイティブなOpenSSHでControlPersistを使って接続する。
    • ControlPersistはこの辺が参考になります。
    • ControlPersistソケットはファイルシステム上にソケットファイルが書かれるけど、ホスト名とかが長いとLinuxのファイルパスの長さの制約(大体108文字)に引っ掛かるのでcontrol_path変数で変える。
  • 設定可能なタイムアウト値でAnsibleのコネクションを開きっぱなしにできる。
    • デフォルトは60秒だけど、増やした方が良い。30分くらいが適切。
    • ただし1コネクションあたり1MBくらいメモリ使うから気をつけよう。
  • pipeliningを有効にすると倍速くらいにはなるので有効にしょう。
    • デフォルトで有効になってないのは、全ての設定対象ノード上で/etc/sudoerのrequirettyをオフにしないとsudo操作するときに問題になるから。

paramiko

  • EL6以前のOSからAnsibleを実行するとOpenSSHじゃなくてpure-pythonのSSHクライアントであるparamiko使う。
  • paramiko使うときはアクションのたびに各ホストに再接続してしまう。
  • これを防ぐにはaccelerated modeを使うと良いって書いてあるけどリンク先見るとpipelining使った方がよさ気なことが書かれてる。

pull mode

  • ここまでのことをやっておけばいらないと思うけど、ansible-pullを使うのも良い。
  • ansbile-pullはgitレポジトリのファイルを各ノードが定期的に読みに行って処理を実行するモードで、通常のpush型からpull型のアーキテクチャになるのでいくらでもスケールできる。
  • ただし、ログの集約ができなくなるので、そんなときはAnsibleTowerを使おう。

こんな感じです。間違ってたらご指摘いただければと思います。
実際に試して計測したらどれくらい変わったか数字載せるかもです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away