2013-05-07 108 views
0

我使用Ansible來配置和部署正在運行MongoDB的EC2實例。在EC2重新啓動後用Ansible重啓MongoDB

我想知道現在如何配置MongoDB在EC2實例重新啓動後自動重啓。或者我只需要重新運行Ansible Playbook?

這是我目前Ansible劇本

- 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 

回答

2

在這個具體的例子,最簡單的方法是,最後的程序改變​​到state=restarted

從Ansible的service模塊文檔:

啓動/停止是不會運行的命令 除非必要冪等動作。 重新啓動會一直彈回服務。 重新加載 將始終重新加載。

然而,根據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意外地發佈對您產生負面影響的新版本時不想感到驚訝。 使用包名稱版本的變量,只需在準備好遷移到新版本時進行更新即可。

+0

感謝您的回答! – Voles 2013-05-12 10:58:59

+0

@Voles Btw,Ansible的回購有一些MongoDB的例子,考慮看看他們https://github.com/ansible/ansible-examples – Mxx 2013-05-12 19:03:57

+0

這似乎是一個任務列表,所以'重新啓動mongodb'將無條件地開火時間。這些任務應該放在'tasks:'部分,並且放在'handlers:'部分。 – Nate 2013-05-14 10:16:41