zoukankan      html  css  js  c++  java
  • 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]}}"
    
  • 相关阅读:
    == 与 equals 之区别
    值传递和引用传递
    try-catch-finally容易犯的错误
    设计模式之备忘录模式
    设计模式之观察者模式 Observer
    设计模式之状态模式 State
    设计模式之模板方法模式 templateMethod
    设计模式之策略模式 Strategy
    Java过滤器与SpringMVC拦截器之间的关系与区别
    SpringMVC中使用Interceptor拦截器
  • 原文地址:https://www.cnblogs.com/ZFBG/p/13518138.html
Copyright © 2011-2022 走看看