0

Ansibleを使用して、MongoDB を実行している EC2 インスタンスを構成およびデプロイしています。

EC2 インスタンスの再起動後に、MongoDB を自動的に再起動するように構成するにはどうすればよいでしょうか。それとも、Ansible Playbook を再実行する必要がありますか?

これは私の現在のAnsible Playbookです:

- hosts: staging_mongodb
  user: ec2-user
  sudo: yes

  vars_files:
    - vars/mongodb.yml

  tasks:
    - name: Check NTP
      action: service name=ntpd state=started

    - name: Copy MongoDB repo file
      action: copy src=files/10gen.repo dest=/etc/yum.repos.d/10gen.repo

    - name: Install MongoDB
      action: yum pkg=mongo-10gen state=latest

    - name: Install MongoDB server
      action: yum pkg=mongo-10gen-server state=latest

    - name: Template the MongoDB configuration file
      action: template src=templates/mongod.conf.j2 dest=/etc/mongod.conf

    - name: Prepare the database directory
      action: file path=${db_path} state=directory recurse=yes owner=mongod group=mongod mode=0755

    - name: Configure MongoDB
      action: service name=mongod state=started enabled=yes
4

1 に答える 1

2

この特定の例では、最も簡単な方法は、最後のブロックを に変更state=startedすることstate=restartedです。

Ansible のserviceモジュール ドキュメントから:

started/stoppedは、必要でない限りコマンドを実行しない冪等アクションです。再起動すると、常にサービスがバウンスされます。reloaded は常にリロードします。

ただし、Ansible のベスト プラクティスによれば、MongoDB が必要な場合にのみ再起動するように「ハンドラー」の使用を検討する必要があります。

tasks:
  - name: Template the MongoDB configuration file
    action: template src=templates/mongod.conf.j2 dest=/etc/mongod.conf
    notify:
      - restart mongodb

  - name: Prepare the database directory
    action: file path=${db_path} state=directory recurse=yes owner=mongod group=mongod mode=0755
    notify:
    - restart mongodb

  - name: Configure MongoDB
    action: service name=mongod state=started enabled=yes

handlers:
  - name: restart mongodb
    service: name=mongodb state=restarted

ハンドラーは、特定のタスクが変更を報告したときにのみ起動され、各プレイの最後に実行されるため、必要以上に MongoDB を再起動することはありません。

最後に、を使用する代わりに、yum pkg=mongo-10gen state=latest特定のパッケージ バージョンを使用することを検討してください。データベースと同じくらい重要なものでは、新しいサーバーを構築するたびに異なるパッケージバージョンを実行したくない、および/または 10gen が予期せずに新しいバージョンをリリースして悪影響を及ぼしたときに驚かされたくない. パッケージ名-バージョンの変数を使用し、新しいバージョンに移行する準備ができたら更新するだけです。

于 2013-05-08T15:23:04.430 に答える