一.准备环境:
1.centos7 环境
2.安装ansible环境
3.mongodb二进制文件:可以先用yum安装拿取需要mongodb二进制文件,也可以在官网下载
mongod, mongodump,mongoexport, mongofiles,mongoimport,mongorestore,mongos,mongosh,mongostat
4.mongodb安装主机,作者用192.168.126.128,192.168.126.129,192.168.126.130三台服务器作为mongodb副本集安装环境
二.规划:
1.变量规划:
安装路径:mongodb_dir: /kingdee/mongodb
监听端口:mongodb_port: 27017
运行用户:mongodb_start_user: yzj
用户名称:mongodbuser: yzjuser
用户密码:mongodbpass: Mytest@@@@@@1203
集群IP: mongodb_ip: 192.168.126.128,192.168.126.129,192.168.126.130
实例名称: mongodb_instance: datacore
2.mongodb目录规划:
数据目录:/kingdee/mongodb/27017/data
执行文件:/kingdee/mongodb/27017/bin
日志文件:/kingdee/mongodb/27017/logs
3.集群规划:
192.168.126.128,192.168.126.129,192.168.126.130
主:192.168.126
从:192.168.126.129
仲裁:192.168.126.130
三.编写ansible-playbook:
1.创建ansible-playbook目录:
mkdir -p roles/mongodb_cluster/{files,tasks,templates,vars}
2.模板文件配置:
cd roles/mongodb_cluster/templates
#集群认证模板文件
vim cluster_mongodb_auth.conf.j2
systemLog:
destination: file
logAppend: true
path: /kingdee/mongodb/{{mongodb_instance}}/logs/mongod.log
storage:
dbPath: /kingdee/mongodb/{{mongodb_instance}}/data
journal:
enabled: true
processManagement:
fork: true # fork and run in background
pidFilePath: /kingdee/mongodb/{{mongodb_instance}}/mongod.pid
timeZoneInfo: /usr/share/zoneinfo
net:
port: {{mongodb_port}}
bindIp: 0.0.0.0
replication:
replSetName: commanrs
security:
authorization: enabled
keyFile: {{mongodb_dir}}/{{mongodb_instance}}/bin/keyfile
clusterAuthMode: "keyFile"
#集群无需认证模板文件
vim cluster_mongodb_unauth.conf.j2
systemLog:
destination: file
logAppend: true
path: /kingdee/mongodb/{{mongodb_instance}}/logs/mongod.log
storage:
dbPath: /kingdee/mongodb/{{mongodb_instance}}/data
journal:
enabled: true
processManagement:
fork: true # fork and run in background
pidFilePath: /kingdee/mongodb/{{mongodb_instance}}/mongod.pid
timeZoneInfo: /usr/share/zoneinfo
net:
port: {{mongodb_port}}
bindIp: 0.0.0.0
replication:
replSetName: commanrs
#security:
# authorization: enabled
# keyFile: {{mongodb_dir}}/{{mongodb_instance}}/bin/keyfile
# clusterAuthMode: "keyFile"
#集群启停脚本文件
vim cluster_mongodb.start.sh.j2
start(){
{{mongodb_dir}}/{{mongodb_instance}}/bin/mongod -f {{mongodb_dir}}/{{mongodb_instance}}/bin/{{mongodb_port}}.conf
}
stop(){
{{mongodb_dir}}/{{mongodb_instance}}/bin/mongod -f {{mongodb_dir}}/{{mongodb_instance}}/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.二进制文件拷贝到files:
cd roles/mongodb_cluster/files
将文件copy到files目录下:
mongod, mongodump,mongoexport, mongofiles,mongoimport,mongorestore,mongos,mongosh,mongostat
4.编写tasks文件
cd roles/mongodb_cluster/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_instance}}/bin"
file:
path: "{{mongodb_dir}}/{{mongodb_instance}}/{{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_instance}}/bin"
copy:
src: "{{item}}"
dest: "{{mongodb_dir}}/{{mongodb_instance}}/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/27017"
shell: |
chown -R {{mongodb_start_user}}:{{mongodb_start_user}} {{mongodb_dir}}/{{mongodb_instance}}
chmod -R 755 {{mongodb_dir}}
- name: "mongodb keyfile insert"
shell: |
echo "Ir3K9pY2bC+JPhGTnp/XscZjbRDTzjHtBCUQ717+soZdSZz1Eq8y3mA6c2H4No+f" >> {{mongodb_dir}}/{{mongodb_instance}}/bin/keyfile
chmod 400 {{mongodb_dir}}/{{mongodb_instance}}/bin/keyfile
- name: "copy mongodb config to {{mongodb_dir}}/{{mongodb_instance}}/bin"
template:
src: cluster_mongodb_unauth.conf.j2
dest: "{{mongodb_dir}}/{{mongodb_instance}}/bin/{{mongodb_port}}_unauth.conf"
force: yes
- name: "copy mongodb config to {{mongodb_dir}}/{{mongodb_instance}}/bin"
template:
src: cluster_mongodb_auth.conf.j2
dest: "{{mongodb_dir}}/{{mongodb_instance}}/bin/{{mongodb_port}}.conf"
force: yes
- name: "copy mongodb start shell to {{mongodb_dir}}/{{mongodb_instance}}/bin/{{mongodb_port}}.conf"
template:
src: cluster_mongodb.start.sh.j2
dest: "{{mongodb_dir}}/{{mongodb_instance}}/bin/start_mongodb_{{mongodb_port}}.sh"
force: yes
- name: "start mongodb"
shell: "{{mongodb_dir}}/{{mongodb_instance}}/bin/mongod -f {{mongodb_dir}}/{{mongodb_instance}}/bin/{{mongodb_port}}_unauth.conf "
vim initiate.yml
- name: "initiate mongodb cluster"
shell: |
{{mongodb_dir}}/{{mongodb_instance}}/bin/mongosh --port {{mongodb_port}} --host {{ansible_ssh_host}} admin --eval 'rs.initiate({_id: "commanrs",members: [{ _id: 0,host: "{{mongodb_ip.split(",")[0]}}:27017"},{ _id: 1,host: "{{mongodb_ip.split(",")[1]}}:27017"},{ _id: 2,host: "{{mongodb_ip.split(",")[2]}}:27017","arbiterOnly":true }]})'
when: ansible_ssh_host == "{{mongodb_ip.split(',')[0]}}"
ignore_errors: yes
- name: "sleep 20s for wating initate !!"
shell: sleep 20
vim createUser.yml
---
- name: "create mongodbuser for mongodb"
shell: |
{{mongodb_dir}}/{{mongodb_instance}}/bin/mongosh --port {{mongodb_port}} --host {{ansible_ssh_host}} admin --eval 'db.createUser({user:"{{mongodbuser}}",pwd:"{{mongodbpass}}",roles:[{role:"root",db:"admin"}]})'
when: ansible_ssh_host == "{{mongodb_ip.split(',')[0]}}"
ignore_errors: yes
- name: "sleep 20 s for waiting mongodb cluster initiate"
shell: sleep 20
- name: "remove unauth.config"
file:
path: "{{mongodb_dir}}/{{mongodb_instance}}/bin/{{mongodb_port}}_unauth.conf "
state: absent
- name: "stop mongodb seconde"
shell: |
sh {{mongodb_dir}}/{{mongodb_instance}}/bin/start_mongodb_{{mongodb_port}}.sh stop
when: ansible_ssh_host == "{{mongodb_ip.split(',')[2]}}"
- name: "stop mongodb seconde"
shell: |
sh {{mongodb_dir}}/{{mongodb_instance}}/bin/start_mongodb_{{mongodb_port}}.sh stop
when: ansible_ssh_host == "{{mongodb_ip.split(',')[1]}}"
- name: "restart mongodb seconde"
shell: |
sh {{mongodb_dir}}/{{mongodb_instance}}/bin/start_mongodb_{{mongodb_port}}.sh restart
when: ansible_ssh_host == "{{mongodb_ip.split(',')[0]}}"
- name: "start mongodb seconde"
shell: |
sh {{mongodb_dir}}/{{mongodb_instance}}/bin/start_mongodb_{{mongodb_port}}.sh start
when: ansible_ssh_host != "{{mongodb_ip.split(',')[0]}}"
vim main.yml
---
- include_tasks: installmongodb.yml
- include_tasks: initiate.yml
- include_tasks: createUser.yml
tasks目录文件如下:
四.编写hosts文件,与roles文件在同级目录:
vim hosts
[mongodb-cluster]
mongodb-master ansible_ssh_host=192.168.126.128
mongodb-node ansible_ssh_host=192.168.126.129
mongodb-arb ansible_ssh_host=192.168.126.130
五.编写运行yml文件,与roles文件在同级目录:
vim startinstall_cluster_mongodb.yml
---
- hosts: mongodb_cluster
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
- mongodb_ip: 192.168.126.128,192.168.126.129,192.168.126.130
- mongodb_instance: datacore
roles:
- role: mongodb_cluster
总体ansible-playbook目录如图所示【忽略rpm目录部分】:
六.ansible执行mongodb安装,最好在roles同级目录执行;
ansible-playbook -i hosts startinstall_cluster_mongodb.yml
七.执行完成后连接mongodb进行相关测试:
/kingdee/mongodb/27017/bin/mongosh –port 27017 admin
admin> db.auth(“yzjuser”,”Mytest@@@@@1203″)
admin>rs.status()
至此,ansible-playbook部署mongodb副本集已完成,下面会讲到mongodb分片使用ansible-playbook进行部署
服务器租用托管,机房租用托管,主机租用托管,https://www.e1idc.com