0
点赞
收藏
分享

微信扫一扫

ansibel-playbook之mongodb6.0.4副本集部署

耳一文 2023-03-30 阅读 105

一.准备环境:

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

ansibel-playbook之mongodb6.0.4副本集部署_mongodb


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目录文件如下:

ansibel-playbook之mongodb6.0.4副本集部署_二进制文件_02


四.编写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目录部分】:

ansibel-playbook之mongodb6.0.4副本集部署_vim_03


六.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()

ansibel-playbook之mongodb6.0.4副本集部署_mongodb_04


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















举报

相关推荐

0 条评论