0

我正在使用Ansible配置和部署一个运行 MongoDB 的 EC2 实例。

我现在想知道如何将 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
4

1 回答 1

2

在此特定示例中,最简单的方法是在最后一个块中更改state=startedstate=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 意外发布对您产生负面影响的新版本时感到惊讶。使用带有包名称版本的变量,并在准备迁移到新版本时对其进行更新。

于 2013-05-08T15:23:04.430 回答