ansible httpdサーバ再起動
バックエンドサーバがある程度増えてくると手動で再起動していくのはとても面倒になってきます
デプロイツール使えばいいって話なのですが、今回はansibleを使ってみようということで試みてみました
何のことはなく簡単でした。
- hosts: "{{servers}}" serial: "{{serial}}" # 同時実行数 sudo: no tasks: - name: stop raw: /usr/sbin/apachectl -f /path/to/httpd.conf -k graceful-stop sudo: yes - name: start raw: /usr/sbin/apachectl -f /path/to/httpd.conf -k start sudo: yes - name: check restarted wait_for: port=8000 delay=10 # 8000番ポートがあくまでまつ、10秒間隔で確かめる
これだけ
ポイントはwait_forモジュールで8000番ポートがあくまで待つという処理を入れたところです
これがないとスタートコマンド打ってすぐ次のサーバの起動に移ってしまうので調整によっては全サーバアクセスできないという状況になりかねません
後はコマンドラインから
ansible-playbook -i hosts restart.yml --extra-vars 'servers=backend serial=2' --ask-sudo-pass
と実行すると2台づつ再起動をかけてくれます
--extra-varsでサーバのグループと同時実行数を指定しているので管理する対象サーバによってこの値を変えられます
これで、バックエンドの中でもアクションによってサーバを振り分けている場合などでも対応できますね