stone-payments.mongodb

stone-payments.mongodb

构建状态

Ansible角色,用于管理独立设置或副本集中的MongoDB。

支持的系统

为了节省开发精力,我们决定支持的操作系统需要满足以下条件:

  • 当前由操作系统制造商支持(即不在生命周期结束(EOL)中);
  • 当前由MongoDB.org支持(这一要求可能很快会取消);
  • 基于systemd;
  • 拥有足够广泛的用户基础。

因此,当前支持的系统列表为:

  • 企业Linux(包括CentOS和RHEL)
    • 7.3
    • 7.4
    • 7.5
  • Ubuntu
    • 16.04

如满足要求,可根据请求添加更多发行版。

用法

快速开始

设置一个基本的、无密码、仅限回环的独立MongoDB设置不需要任何变量。只需在播放中包含它:

- name: 安装mongodb
  hosts: all
  roles: stone-payments.mongodb

副本集设置

为了建立一个副本集,您需要通知主节点它是主节点,以及连接到哪个主节点的副本。您可以使用以下内容完成所有操作:

- name: 安装mongodb副本集
  hosts: all
  roles: stone-payments.mongodb
  vars:
    mongodb_conf_bindIp: "0.0.0.0"
    mongodb_replSet_enabled: true
    mongodb_replSet_name: "someReplicaSetName"
    mongodb_replSet_master: "1.2.3.4" #必须是IP地址
    mongodb_replSet_key: "someLongKey" #可选,跨副本认证密钥
    mongodb_replSet_member: "{{ ansible_eth1['ipv4']['address'] }}" #可选,指定不同的接口进行复制
    mongodb_replSet_arbiter: "{{ true if inventory_hostname == 'hostThatIsArbiter' else false }}"

认证

您可以通过以下方式启用认证并创建一个管理员账户:

- name: 安装带认证的mongodb
  hosts: all
  roles: stone-payments.mongodb
  vars:
    mongodb_conf_auth: true
    mongodb_admin_user: "admin"
    mongodb_admin_password: "somePassword"

日志记录

您可以通过提供mongodb_conf_logging字典来设置任何systemLog选项:

- name: 安装带网络调试日志的mongodb
  hosts: all
  roles: stone-payments.mongodb
  vars:
    mongodb_conf_logging:
      verbosity: 0
      component:
        network:
          verbosity: 5
      destination: file
      path: /var/log/mongodb/mongod.log

防火墙

此规则将配置ufw或firewalld以默认启用传入连接。您可以使用以下选项自定义它(这些选项特定于您正在使用的防火墙解决方案):

- name: 安装带自定义防火墙设置的mongodb
  hosts: all
  roles: stone-payments.mongodb
  vars:
    mongodb_firewall_zone: "public" #仅适用于firewalld
    mongodb_firewall_interface: "eth0" #仅适用于ufw
    mongodb_firewall_source: "192.168.0.0/24" #仅适用于ufw

您还可以通过设置mongodb_install_firewall: false来抑制防火墙配置。

Linux安全模块

此角色默认将配置LSM(当前仅支持SELinux)。您可以通过设置: mongodb_install_lsm: false来禁用此功能。

其他配置

我相信几乎所有其他配置都是自解释的或直接与MongoDB核心功能相关。只需覆盖defaults/main.yml中的配置,它们会(希望)应用到您的系统上。

测试

此角色使用分子在Docker上实现了大多数单元测试。请注意,我们仅支持Molecule 2.0或更高版本。一些测试在Vagrant和VirtualBox上实现,以便测试需要完整虚拟机的方面。然而,对于需要Vagrant的测试,由于没有公开的支持嵌套虚拟化的CI,因此没有CI集成。

以下场景可用:

场景名称 驱动程序 描述
default docker 基本角色完整性测试
replica-set docker 副本集中的混合发行版设置
security vagrant 完整虚拟机以测试LSM和防火墙配置

Docker环境设置

您可以使用以下命令在虚拟环境中安装Molecule和Docker交互库。请注意,虚拟环境内部和外部都需要docker-py:

sudo pip install docker-py
virtualenv .venv
.venv/bin/activate
pip install molecule docker-py

Docker的安装和配置超出本讨论范围。

如果您有SELinux启用的主机,您还必须安装libselinux-python库。在将任务委派给localhost时,Molecule剧本中会有特殊的附加内容,以使用主机的python解释器,而不是虚拟环境中的python,以便正确访问SELinux绑定。您可以通过以下方式在Fedora和CentOS上安装此软件包:

sudo yum install python2-libselinux

Vagrant环境设置

您可以使用以下命令在虚拟环境中安装Molecule:

virtualenv .venv
.venv/bin/activate
pip install molecule

Vagrant和VirtualBox的安装和配置超出本讨论范围。

运行测试

在虚拟环境中设置好Molecule后,您可以使用以下命令运行测试:

molecule converge [-s scenario_name]

其中scenario_namemolecule下的一个测试用例名称。如果没有传递参数,将运行默认测试用例。

贡献

请随时提交PR。我们欢迎PR!

待办事项

以下是您可以做的一些建议:

  • 支持使用发行版打包的MongoDB。
  • 使用serverspec或testinfra编写更多独立测试。
  • 改进副本集的测试用例。

许可证

此角色在MIT许可证下分发。

关于项目

Role for installing MongoDB with clustering support

安装
ansible-galaxy install stone-payments.mongodb
许可证
mit
下载
405
拥有者
Pensar fora da máquina só é possível quando se trabalha com tecnologia humana de ponta.