Ansible

AnsibleでコピーするときはSynchronizeモジュール使ったほうが幸せになれる

背景 Ansibleでターゲットホストに何かをコピーするとき copyモジュールを使ってる人はとても多いと思います。 しかし恐ろしいぐらい遅いため、ansible copy slow何かで調べると 色々対策が書かれている記事があると思います。 まあそれを試しても劇的な改善はなく、結果として意味のないものです。   Synchronizeモジュールを使う Ansible – synchronize Copyモジュールと同等のことをやってみます。 1. ターゲットホストにファイルを配置する [crayon-5b4eff05755e0555345241/]   2. パーミッションを変更する [crayon-5b4eff05755ee133192249/] Synchronizeモジュールにもownerやgroupオプションはあるんですが これは Ansible 実行マシンに存在するユーザー、グループで且つ、 ターゲットホストにも存在しないといけないという制約があるので、 別タスクでパーミッション等を変更する必要があります。   比較 全部で350行ぐらいある Playbook の中のcopyモジュール版と Synchronizeモジュール版で比べた結果です。 Copy real 4m25.575s Synchronize real 2m12.755s 圧倒的

Ansibleのs3モジュールを使ってディレクトリごとアップロードする

梅雨の季節がやって参りました。 Ansibleのs3モジュールを使ってディレクトリごとアップロードする方法を覚え書きとして。   認証情報を環境変数に入れておく Ansibleで使うAWSの認証情報はPlaybookに書き込むか 環境変数を使うかで選べます。 万が一のことを考えて環境変数で管理したほうが良いと思います。 [crayon-5b4eff05758fb127395700/]   ファイルのアップロード [crayon-5b4eff0575907990971480/]   ディレクトリごとアップロード(Ansible 2.3以降) [crayon-5b4eff057590a291035893/] key_prefixがないとバケット直下にファイルが展開されちゃうので key_prefixを設定しておきます。 こうすると BUCKET_NAME/source/<sourcecodeの中身> ってなる。   boto required for this module Ansibleを実行するホストでAWSの操作をする場合、 botoとかいうPythonのモジュールをインストールします。 加えてdelegate_to: 127.0.0.1をタスクに追加しないとリモート先で実行されてしまって エラーが消えないのでご注意を。 逆にリモート先で行うならリモート先で実行します。 [crayon-5b4eff057590f572989659/]   それでも解決できない場合 引数にansible_python_interpreterをつけて実行する ansible-playbook -i production/hosts api.yml --extra-vars "ansible_python_interpreter=`(which python)" --user root --ask-pass hostsファイルにansible_python_interpreterをつける [crayon-5b4eff0575911442512550/]  

AnsibleとMySQL 5.7で準同期レプリケーションを張る

覚書。 初めてAnsibleを触ってて少し躓いたところがあったので。   環境 ・Ansible 2.3.0 ・Percona server 5.7 (MySQL 5.7_     my.cnfを配置 Master用とSlave用のmy.cnfをリモート先へ送る。 [crayon-5b4eff0575ad4797837165/]       rootパスワードを取得 MySQL 5.7から/var/log/mysqld.logにパスワードが記載されているので これを使って初期設定を行うらしい。 [crayon-5b4eff0575ad9996611799/]       .my.cnfを/rootに設置 Ansibleのmysqlモジュールを使うために/root/.my.cnfにファイルを設置 [crayon-5b4eff0575adc723592184/] temp_my.cnf.j2 connect-expired-passwordが地味に大事 [crayon-5b4eff0575add175849185/]       rootパスワードを設定する 一時的なパスワードでは覚えられないので変更します。 パスワードの要件が厳しくなって大文字小文字記号数字で8桁以上とかだった気がする(覚えてない) [crayon-5b4eff0575adf073167894/]       新しい.my.cnfを/rootに設置 [crayon-5b4eff0575ae1478337916/] new_my.cnf.j2 connect-expired-passwordを削除したバージョン [crayon-5b4eff0575ae3836633002/]       anonymousユーザーを削除 [crayon-5b4eff0575ae8829474297/]       レプリケーションユーザーを作成 [crayon-5b4eff0575aea901016205/]       FlushコマンドってAnsibleじゃ使えないよね…? [crayon-5b4eff0575aec911779225/]       マスターDBからダンプして、スレーブにインポート [crayon-5b4eff0575aee165866271/]       マスターのファイル名とポジションの取得 ここが一番詰まった。 Ansibleは異なるホスト間で変数の参照ができないので ファイル名とポジションの取得はスレーブのときに実行して、実際に実行するコマンドはマスター側で処理をする。 [crayon-5b4eff0575af0695274203/]   Change master [crayon-5b4eff0575af4627407038/]       スレーブの開始 [crayon-5b4eff0575af6149783761/]       スレーブの状況確認 Slave_IO_Running と Slave_SQL_RunningがどっちもYesであることを確認 [crayon-5b4eff0575af7234423707/]       マスターでロックしていたのを解除 [crayon-5b4eff0575afa276105017/]