[英]/var/run/mongodb disappeared once reboot instance after mongodb installation done
我正在使用 ansible 在 mongodb 中添加管理員用戶。我使用了下面的劇本,但出現錯誤。 有人可以建議解決方案嗎..為了使用模塊,我在添加用戶之前也安裝了 pymongo。 mongod.conf 中禁用身份驗證,bindIp 設置為 0.0.0.0
- hosts: devqa_mongod_single:dwprod_mongod_single
become: yes
vars_files:
- ../../vars/vars_secrets.yaml
vars:
password: "mongoadmin"
mongoAuth: "/usr/bin/mongosh 'mongodb://admin:{{ password | urlencode() }}@localhost:27017/admin?authSource=admin' --norc --quiet"
mongoNoAuth: "/usr/bin/mongosh 'mongodb://localhost:27017/admin' --norc --quiet"
tasks:
# volume config for mongodb
- name: Create a new xfs primary partition
community.general.parted:
device: /dev/nvme1n1
number: 1
state: present
fs_type: xfs
label: gpt
- name: Create an xfs filesystem on /dev/nvme1n1
community.general.filesystem:
fstype: xfs
state: present
dev: /dev/nvme1n1p1
- name: Create Directory /data/db
ansible.builtin.file:
path: /data/db
state: directory
owner: root
group: root
mode: 0751
- name: Fetch the UUID of /dev/nvme1n1p1
command: blkid -s UUID -o value /dev/nvme1n1p1
changed_when: false
register: blkid_out
- name: Mount /dev/nvme1n1 by UUID
ansible.posix.mount:
path: /data/db
src: UUID={{ blkid_out.stdout }}
fstype: xfs
opts: "defaults,nofail"
passno: 2
state: mounted
# Installation of mongodb
- name: Install aptitude using apt
apt:
name: aptitude
state: latest
update_cache: yes
- name: Import public key
apt_key:
url: 'https://www.mongodb.org/static/pgp/server-6.0.asc'
state: present
- name: Add repository
apt_repository:
filename: '/etc/apt/sources.list.d/mongodb-org-6.0.list'
repo: 'deb https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/6.0 multiverse'
state: present
update_cache: yes
- name: Install mongoDB
apt:
name: mongodb-org
state: present
update_cache: yes
notify:
- restart mongodb
- name: Recursively change ownership of a /data/db
ansible.builtin.file:
path: /data/db
state: directory
recurse: yes
owner: mongodb
group: mongodb
notify:
- restart mongodb
- name: Create Directory /var/run/mongodb
ansible.builtin.file:
path: /var/run/mongodb
state: directory
owner: mongodb
group: mongodb
mode: 0751
notify:
- restart mongodb
- name: Ensure mongodb is running and and enabled to start automatically on reboots
service:
name: mongod
enabled: yes
state: started
# Installing pymongo to use community.mongodb.mongodb_user module
- name: "Install PyMongo"
apt:
update_cache: yes
name: "python3-pymongo"
state: "latest"
# copy temorary config file
- name: user_init | set temporary conf
become: yes
timeout: 300
ansible.builtin.copy:
src: ../templates/mongodb/mongod_init.conf.j2
dest: /etc/mongod.conf
owner: root
group: root
mode: '0644'
notify:
- restart mongodb
# Adding root user
- name: Check if authentication is enabled
shell:
cmd: "{{ mongoAuth }} --eval 'db.getMongo()'"
executable: /bin/bash
register: authenticate
failed_when: false
changed_when: false
check_mode: no
- name: Create users
shell:
cmd: "{{ (authenticate.rc == 0) | ternary(mongoAuth, mongoNoAuth) }} --eval '{{ js }}'"
executable: /bin/bash
vars:
js: |
admin = db.getSiblingDB("admin")
{% if authenticate.rc != 0 %}
admin.createUser({ user: "admin", pwd: "{{ password }}", roles: ["root"] })
admin.auth("admin", "{{ password }}")
{% endif %}
notify:
- restart mongodb
# Copy mongod.conf file having auth enabled
- name: copy mongod.conf | set
become: yes
timeout: 300
ansible.builtin.copy:
src: ../templates/mongodb/mongod.conf.j2
dest: /etc/mongod.conf
owner: root
group: root
mode: '0644'
register: mongo_conf_set
notify:
- restart mongodb
- name: Copy mongodb file for log rotation
become: yes
timeout: 300
ansible.builtin.copy:
src: ../templates/mongodb/mongodb
dest: /etc/logrotate.d/mongodb
owner: root
group: root
mode: 0644
- name: Daemon Reload
shell: systemctl daemon-reload
- name: Starting MongoDB service
service:
name: mongod
state: started
handlers:
- name: restart mongodb
service: name=mongod state=restarted
我的 mongod.conf 文件實例
systemLog:
destination: file
logAppend: true
logRotate: reopen
path: /var/log/mongodb/mongod.log
storage:
dbPath: /data/db
journal:
enabled: true
engine: wiredTiger
processManagement:
fork: true
pidFilePath: /var/run/mongodb/mongod.pid
net:
port: 27017
bindIp: 0.0.0.0
security:
authorization: enabled
我手動創建用戶:
- hosts: all
vars:
mongoAuth: "/usr/bin/mongosh 'mongodb://admin:{{ password | urlencode() }}@localhost:27017/admin?authSource=admin' --norc --quiet"
mongoNoAuth: "/usr/bin/mongosh 'mongodb://localhost:27017/admin' --norc --quiet"
tasks:
- name: Check if authentication is enabled and if user already exists
shell:
cmd: "{{ mongoAuth }} --eval 'db.getMongo()'"
executable: /bin/bash
register: authenticate
failed_when: false
changed_when: false
check_mode: no
- name: Create users
shell:
cmd: "{{ (authenticate.rc == 0) | ternary(mongoAuth, mongoNoAuth) }} --eval '{{ js }}'"
executable: /bin/bash
vars:
js: |
admin = db.getSiblingDB("admin")
{% if authenticate.rc != 0 %}
admin.createUser({ user: "admin", pwd: "{{ password }}", roles: ["root"] })
admin.auth("admin", "{{ password }}")
{% endif %}
// create more users if needed
admin.createUser(...)
我假設您在主機上的配置設置錯誤。
無法連接到數據庫:未知選項直接連接
在我看來,這不像是 Ansible 錯誤。
為了進一步幫助您,您應該禁用 mongo 身份驗證,然后重新啟動 mongo。 然后,創建 3 個用戶, admin
、 root
和userAdminAnyDatabase
。 然后重啟mongo。 這是我為 MongoDB 編寫的 Ansible 角色,因此您可以在那里查看它是如何工作的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.