notebook

都内でWEB系エンジニアやってます。

ansibleでサーバ再起動

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でサーバのグループと同時実行数を指定しているので管理する対象サーバによってこの値を変えられます

これで、バックエンドの中でもアクションによってサーバを振り分けている場合などでも対応できますね