EC2重新启动后,使用Ansible重新启动MongoDB

EC2重新启动后,使用Ansible重新启动MongoDB,mongodb,amazon-ec2,ansible,Mongodb,Amazon Ec2,Ansible,我使用来配置和部署一个运行MongoDB的EC2实例 我现在想知道如何配置MongoDB在EC2实例重启后自动重启。还是我只需要重新运行Ansible剧本 这是我目前的《Ansible剧本》: - hosts: staging_mongodb user: ec2-user sudo: yes vars_files: - vars/mongodb.yml tasks: - name: Check NTP action: service name=nt

我使用来配置和部署一个运行MongoDB的EC2实例

我现在想知道如何配置MongoDB在EC2实例重启后自动重启。还是我只需要重新运行Ansible剧本

这是我目前的《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

在此特定示例中,最简单的方法是在最后一个块中将
state=started
更改为
state=restarted

来自Ansible的
服务
模块文档:

启动/停止是不会运行命令的幂等操作 除非必要重新启动将始终跳转服务重新加载 将始终重新加载

然而,根据ANNICE的最佳实践,您应该考虑使用“处理程序”,以便只在必要时重新启动MyGDB。

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= Mango-10GeNe=最新,考虑使用特定的包版本。对于像数据库这样重要的东西,您真的不想在每次构建新服务器时运行不同的包版本,也不想在10gen意外发布对您产生负面影响的新版本时感到惊讶。
使用带有包名版本的变量,当您准备迁移到新版本时,只需更新它。

@ Voes BTW,ANDIST的RPO有MangoDB的一些示例,考虑看一下,这看起来是一个任务列表,所以<代码>重新启动MangGDB < /Cord>每次都会无条件地开火。任务应该在
tasks:
部分,处理程序应该在
handlers:
部分。@Nate查看我更新的答案。如果我仍然错了,请编辑我的答案以使其准确。@Mxx我将“任务”和“处理程序”编辑为小写。否则,在我看来是对的。