ansible 部署mongodb集群(三台主机)

ansible 部署mongodb集群

下载地址链接:https://pan.baidu.com/s/1yx7uk-7Jyhk6WGadPFVS_A
提取码:t3l2

如果需要安装其他版本的需要修改
1 groups_vars 里面的 mongodb_version: 4.0.0 这里需要注意是 4.0.0不是4.0
2 common/files/mongodb-org-4.0.repo 这个文件名
3 common/files/mongodb-org-4.0.repo里面的baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/

rpm包安装的方式下载地址
链接:https://pan.baidu.com/s/1nygiYXUwkFPEWwyHBZMlwQ
提取码:l2u5 rpm安装比较简单只需要修改主机名 以及对应的common里面的rpm包

一 目录结构

二 运行方式

ansible-playbook -i hosts site.yml

三 运行顺序以及结构分析

[root@mongodb1 mongodb]# cat site.yml

---
# This Playbook would deploy the whole mongodb cluster with replication and sharding.
# 首先运行common模块
- hosts: all
  roles:
  - role: common
#运行mongod角色
- hosts: mongo_servers
  roles:
  - role: mongod

- hosts: mongoc_servers
  roles:
  - role: mongoc

- hosts: mongos_servers
  roles:
  - role: mongos

# run shading test
- include: shard_test.yml

common角色详解

[root@mongodb1 roles]# tree  ./common/
./common/
├── files
│   ├── Centos-ali.repo
│   ├── epel.repo.j2
│   ├── mongodb-org-3.2.repo
│   ├── pip.conf
│   └── RPM-GPG-KEY-EPEL-6
├── handlers
│   └── main.yml
├── tasks
│   └── main.yml
└── templates
    ├── hosts.j2
    └── iptables.j2

查看common的主文件

[root@mongodb1 roles]# cat ./common/tasks/main.yml 
---
# This Playbook runs all the common plays in the deployment

#- name: Create the repository for ali mirror for China area
#  copy: src=Centos-ali.repo dest=/etc/yum.repos.d/CentOS-Base.repo
#
#- name: Refresh repository cache
#  shell: yum clean all && yum makecache

#- name: Install the epel-release package
#  yum: name=epel-release state=present
#配置yum源
- name: Create the repository for mongodb
  copy: src=mongodb-org-3.2.repo dest=/etc/yum.repos.d/mongodb-org-3.2.repo
# 安装mongodb 里面的变量在 group_vars 里面定义
- name: Install the mongodb package
  yum: name={{ item }} state=present
  with_items:
#   - python-pip
   - policycoreutils-python
   - mongodb-org-mongos-{{mongodb_version}}
   - mongodb-org-shell-{{mongodb_version}}
   - mongodb-org-server-{{mongodb_version}}

#- name: Speed pip by tsinghua mirror
#  copy: src=pip.conf dest=/etc/pip.conf

#- name: Install the latest pymongo package
#  pip: name={{item}} state=latest
#  with_items:
#   - pip

# selinux 配置
- name: Enable port On SELinux
  seport:
    ports: "2700-2703,{{mongos_port}},{{mongoc_port}}"
    proto: tcp
    setype: mongod_port_t
    state: present
  when: ansible_selinux is defined and ansible_selinux != False and ansible_selinux.status == 'enabled'
    #创建mongodb运行用户
- name: Create the mongod user
  user: name=mongod comment="MongoD"
#创建目录 /data
- name: Create the data directory for the namenode metadata
  file: path={{ mongodb_datadir_prefix }} owner=mongod group=mongod state=directory setype=mongod_var_lib_t recurse=true
# 创建日志目录
- name: create log directory for mongodb
  file: path=/var/log/mongo state=directory owner=mongod group=mongod setype=mongod_log_t recurse=true
#创建pid目录
- name: create run directory for mongodb
  file: path=/var/run/mongo state=directory owner=mongod group=mongod setype=mongod_var_run_t seuser=system_u recurse=true

mongod 服务部分

[root@mongodb1 roles]# tree mongod/
mongod/
├── files
│   └── secret
├── tasks
│   └── main.yml
└── templates
    ├── mongod.conf.j2
    ├── mongod_init.js.j2
    ├── mongod.service.j2
    └── shard_init.j2

 查看主文件
[root@mongodb1 roles]# cat ./mongod/tasks/main.yml 
---
# This role deploys the mongod processes and sets up the replication set.

#需要注意groups这个内置变量 代表了hosts里面定义的所有组,通过 .组名的方式可以获取到某个组里面所有主机的列表, delegate_to 委派给主机执行
- name: create data directory for mongodb
  file: path={{ mongodb_datadir_prefix }}/mongo-{{ inventory_hostname }} state=directory owner=mongod group=mongod
  delegate_to: '{{ item }}'
  with_items: "{{groups.replication_servers}}"

#创建mongodb 启动文件
- name: Create the mongodb startup file
  template: src=mongod.service.j2 dest=/etc/systemd/system/mongod-{{ inventory_hostname }}.service mode=0644 seuser=system_u
  delegate_to: '{{ item }}'
  with_items: "{{groups.replication_servers}}"

#创建mongodb 配置文件
- name: Create the mongodb configuration file
  template: src=mongod.conf.j2 dest=/etc/mongod-{{ inventory_hostname }}.conf
  delegate_to: '{{ item }}'
  with_items: "{{groups.replication_servers}}"

#创建keyfile 文件
- name: Copy the keyfile for authentication
  copy:
    src: secret
    dest: "{{ mongodb_datadir_prefix }}/secret"
    owner: mongod
    group: mongod
    mode: 0400
    setype: mongod_var_lib_t

#启动服务
- name: Start the mongodb service
  systemd: name=mongod-{{ inventory_hostname }} state=started daemon_reload=yes enabled=yes
  delegate_to: '{{ item }}'
  with_items: "{{groups.replication_servers}}"

# 这里需要注意,mongodb_port 拿到的是一个值 也就是对应主机,后面的变量
- wait_for:
    port: "{{ mongod_port }}"
    delay: 5

- name: Create the file to initialize the mongod replica set
  template: src=mongod_init.js.j2 dest=/tmp/mongod_init.js

- name: Initialize the replication set
  shell: /usr/bin/mongo "localhost:{{ mongod_port }}/admin" /tmp/mongod_init.js
  ignore_errors: yes

mongoc 配置文件 也就是mongoconfig 服务器

[root@mongodb1 mongoc]# cat tasks/main.yml 
---
# This playbook  deploys the mongodb configurationdb  servers

- name: Create data directory for mongoc configuration server
  file: path={{ mongodb_datadir_prefix }}/configdb state=directory owner=mongod group=mongod

- name: Create the mongodb startup file
  template: src=mongoc.service dest=/etc/systemd/system/mongoc.service mode=0644 seuser=system_u

- name: Create the mongodb configuration file
  template: src=mongoc.conf.j2 dest=/etc/mongoc.conf

- name: Copy the keyfile for authentication
  copy:
    src: roles/mongod/files/secret
    dest: "{{ mongodb_datadir_prefix }}/secret"
    owner: mongod
    group: mongod
    mode: 0400
    setype: mongod_var_lib_t

- name: Start the mongodb service
  systemd: name=mongoc state=started daemon_reload=yes enabled=yes

- wait_for:
    port: "{{ mongoc_port }}"
    delay: 3

- name: Create the file to initialize mongo user
  template: src=mongoc_init.js.j2 dest=/tmp/mongoc_init.js
  when: "{{inventory_hostname == groups['mongoc_servers'][0]}}"

- name: Create admin User
  shell: /usr/bin/mongo "localhost:{{ mongoc_port }}/admin" /tmp/mongoc_init.js
  when: "{{inventory_hostname == groups['mongoc_servers'][0]}}"
  ignore_errors: yes

#- name: add the admin user
#  mongodb_user:
#    login_database: admin
#    login_port: "{{ mongoc_port }}"
#    database: admin
#    name: admin
#    password: "{{ mongo_admin_pass }}"
#    state: present
#  ignore_errors: yes
[root@mongodb1 roles]# cat ./mongos/tasks/main.yml 
---
#This Playbook configures the mongos service of mongodb

- name: Create the mongos startup file
  template: src=mongos.service.j2 dest=/etc/systemd/system/mongos.service mode=0655 seuser=system_u

- name: Create the mongos configuration file
  template: src=mongos.conf.j2 dest=/etc/mongos.conf

- name: Copy the keyfile for authentication
  copy: src=roles/mongod/files/secret dest={{ mongodb_datadir_prefix }}/secret owner=mongod group=mongod mode=0400

- name: Start the mongodb service
  systemd: name=mongos state=started daemon_reload=yes enabled=yes

- wait_for:
    port: "{{ mongos_port }}"
    delay: 3

- name: Copy the file enable  sharding
  template: src=mongos_init.js.j2 dest=/tmp/mongos_init.js
  when: "{{inventory_hostname == groups['mongos_servers'][0]}}"

- name: Create sharding
  shell: /usr/bin/mongo "localhost:{{ mongos_port }}/admin" /tmp/mongos_init.js
  when: "{{inventory_hostname == groups['mongos_servers'][0]}}"
原文地址:https://www.cnblogs.com/ZFBG/p/13518138.html