一.准备环境:
1.centos7 环境
2.安装ansible环境
3.mongodb二进制文件:可以先用yum安装拿取需要mongodb二进制文件
mongod, mongodump,mongoexport, mongofiles,mongoimport,mongorestore,mongos,mongosh,mongostat
4.mongodb安装主机,作者用192.168.126.128作为mongodb安装环境
二.规划:
1.变量规划:
安装路径:mongodb_dir: /kingdee/mongodb
监听端口:mongodb_port: 27017
运行用户:mongodb_start_user: yzj
用户名称:mongodbuser: yzjuser
用户密码:mongodbpass: Mytest@@@@@@1203
2.mongodb目录规划:
数据目录:/kingdee/mongodb/27017/data
执行文件:/kingdee/mongodb/27017/bin
日志文件:/kingdee/mongodb/27017/logs
三.编写ansible-playbook:
1.创建ansible-playbook目录
mkdir -p roles/mongodb_single/{files,tasks,templates,vars}2.模板文件配置
cd roles/mongodb_single/templates
#认证配置文件
vim only_mongodb_auth.conf.j2
systemLog:
  destination: file
  logAppend: true
  path: /kingdee/mongodb/{{mongodb_port}}/logs/mongod.log
storage:
  dbPath:  /kingdee/mongodb/{{mongodb_port}}/data
  journal:
    enabled: true
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /kingdee/mongodb/{{mongodb_port}}/mongod.pid
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: {{mongodb_port}}
  bindIp: 0.0.0.0
security:
  authorization: enabled#无需认证配置文件
vim only_mongodb_unauth.conf.j2
systemLog:
  destination: file
  logAppend: true
  path: /kingdee/mongodb/{{mongodb_port}}/logs/mongod.log
storage:
  dbPath:  /kingdee/mongodb/{{mongodb_port}}/data
  journal:
    enabled: true
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /kingdee/mongodb/{{mongodb_port}}/mongod.pid
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: {{mongodb_port}}
  bindIp: 0.0.0.0
#secutity:
#  authorization: enabled
#mongodb 启停脚本
start(){
{{mongodb_dir}}/{{mongodb_port}}/bin/mongod -f  {{mongodb_dir}}/{{mongodb_port}}/bin/{{mongodb_port}}.conf
}
stop(){
{{mongodb_dir}}/{{mongodb_port}}/bin/mongod -f  {{mongodb_dir}}/{{mongodb_port}}/bin/{{mongodb_port}}.conf --shutdown
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 10
start
;;
*)
echo "Only param { start|stop|restart } is supported !"
esac3.二进制文件准备:
cd roles/mongodb_single/files
将文件copy到给目录下:
mongod, mongodump,mongoexport, mongofiles,mongoimport,mongorestore,mongos,mongosh,mongostat

4.编写playbook
cd roles/mongodb_single/tasks
vim installmongodb.yml
---
- name: "gourpadd start user"
  group:
    name:  "{{mongodb_start_user}}"
    gid:   "9999"
    state: "present"
  ignore_errors: yes
- name: "useradd start user"
  user:
    name:  "{{mongodb_start_user}}"
    uid:   "9999"
    group: "{{mongodb_start_user}}"
  ignore_errors: yes
- name: "mkdir {{mongodb_dir}}/{{mongodb_port}}/bin"
  file:
    path:  "{{mongodb_dir}}/{{mongodb_port}}/{{item}}"
    state: "directory"
    owner: "{{mongodb_start_user}}"
    group: "{{mongodb_start_user}}"
    mode:  0755
    recurse: yes
  with_items:
    - data
    - logs
    - bin
  ignore_errors: yes
- name: "copy mongodb bin to {{mongodb_dir}}/{{mongodb_port}}/bin"
  copy:
    src:  "{{item}}"
    dest: "{{mongodb_dir}}/{{mongodb_port}}/bin/{{item}}"
  with_items:
    - mongod
    - mongodump
    - mongoexport
    - mongofiles
    - mongoimport
    - mongorestore
    - mongos
    - mongosh
    - mongostat
    - mongotop
- name: "chown -R {{mongodb_start_user}}:{{mongodb_start_user}} kingdee/mongodb/{{mongodb_port}}"
  shell: |
    chown -R {{mongodb_start_user}}:{{mongodb_start_user}} {{mongodb_dir}}/{{mongodb_port}}
    chmod -R 755 {{mongodb_dir}}
- name: "copy mongodb config to  {{mongodb_dir}}/{{mongodb_port}}/bin"
  template:
    src:  only_mongodb_unauth.conf.j2
    dest: "{{mongodb_dir}}/{{mongodb_port}}/bin/{{mongodb_port}}_unauth.conf"
- name: "copy mongodb config to  {{mongodb_dir}}/{{mongodb_port}}/bin"
  template:
    src:  only_mongodb_auth.conf.j2
    dest: "{{mongodb_dir}}/{{mongodb_port}}/bin/{{mongodb_port}}.conf"
- name: "copy mongodb start shell to {{mongodb_dir}}/{{mongodb_port}}/bin/{{mongodb_port}}.conf"
  template:
    src: only_mongodb.start.sh.js
    dest: "{{mongodb_dir}}/{{mongodb_port}}/bin/start_mongodb_{{mongodb_port}}.sh"
- name:  "start mongodb"
  shell: "{{mongodb_dir}}/{{mongodb_port}}/bin/mongod -f {{mongodb_dir}}/{{mongodb_port}}/bin/{{mongodb_port}}_unauth.conf"vim installmongodb.yml
- name: "create mongodb for mongodb"
  shell: |
     {{mongodb_dir}}/{{mongodb_port}}/bin/mongosh --port {{mongodb_port}} --host {{ansible_ssh_host}} admin --eval \
     'db.createUser({user:"{{mongodbuser}}",pwd:"{{mongodbpass}}",roles:[{role:"root",db:"admin"}]})'
  ignore_errors: yes
- name: "remove unauth.config"
  file:
    path:  "{{mongodb_dir}}/{{mongodb_port}}/bin/{{mongodb_port}}_unauth.conf "
    state: absent
- name: "restart mongodb "
  shell: |
    sh  {{mongodb_dir}}/{{mongodb_port}}/bin/start_mongodb_{{mongodb_port}}.sh restartvim main.yml
---
- include_tasks: installmongodb.yml
- include_tasks: createUser.ymltasks下文件如下:

四.编写hosts文件,与roles文件在同级目录:
vim hosts
[mongodb_single]
mongodb_single ansible_ssh_host=192.168.126.128五.编写运行yml文件
vim startinstall_single_mongodb.yml
---
- hosts: mongodb_single
  remote_user: yzj
  #become_method: sudo
  #$become_user: root
  #$become: yes
  gather_facts: no
  vars:
    - mongodb_dir: /kingdee/mongodb
    - mongodb_port: 27017
    - mongodb_start_user: yzj
    - mongodbuser: yzjuser
    - mongodbpass: Mytest@@@@@@1203
  roles:
    - role: mongodb_single总体ansible-playbook目录如图所示【忽略rpm目录部分】:
六.ansible执行mongodb安装,最好在roles同级目录执行;
ansible-playbook -i hosts startinstall_single_mongodb.yml

七.执行完成后连接mongodb进行相关测试:
/kingdee/mongodb/27017/bin/mongosh --port 27017 admin
admin> db.auth("yzjuser","Mytest@@@@@1203")
admin>show dbs

至此,ansible-playbook部署单机版mongodb已完成,下面会讲到副本集使用ansible-playbook进行部署










