一.准备环境:
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 !"
esac
3.二进制文件准备:
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 restart
vim main.yml
---
- include_tasks: installmongodb.yml
- include_tasks: createUser.yml
tasks下文件如下:
四.编写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进行部署