Nous sommes en train de configurer un serveur MongoDB pour l'environnement de production sur l'instance Amazon EC2, mais nous n'avons pas pu démarrer le service. J'ai suivi this documentation pour la configuration. Voici les étapes que j'ai suivies pour configurer le serveur:
Ajout suivant à /etc/yum.repos.d/mongodb-org-3.0.repo
[mongodb-org-3.0]
name=MongoDB Repository
baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
gpgcheck=0
enabled=1
Et installé MongoDB 3.0.2 en utilisant Sudo yum install -y mongodb-org-3.0.2
Création de trois partitions pour les données, le journal et le journal:
Sudo mkdir /mongo
Sudo mkdir /mongo/data
Sudo mkdir /mongo/log
Sudo mkdir /mongo/journal
Système de fichiers créé pour trois partitions distinctes:
Sudo mkfs.ext4 /dev/xvdb
Sudo mkfs.ext4 /dev/xvdc
Sudo mkfs.ext4 /dev/xvdd
Entrée créée dans fstab
pour le redémarrage:
echo '/dev/xvdb /mongo/data ext4 defaults,auto,noatime,noexec 0 0
/dev/xvdc /mongo/journal ext4 defaults,auto,noatime,noexec 0 0
/dev/xvdd /mongo/log ext4 defaults,auto,noatime,noexec 0 0' | Sudo tee -a /etc/fstab
Et monté les partitions:
Sudo mount /mongo/data
Sudo mount /mongo/journal
Sudo mount /mongo/log
Étant donné les autorisations et le lien créé
Sudo chown mongod:mongod /mongo/data /mongo/journal /mongo/log
Sudo ln -s /mongo/journal /mongo/data/journal
Configuré ulimit
& lire à l’avance les paramètres indiqués dans le lien de la documentation ci-dessus. Permissions et partitions vérifiées:
[deployer@prod-mongo ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 8.0G 1.3G 6.8G 16% /
devtmpfs 3.6G 0 3.6G 0% /dev
tmpfs 3.5G 0 3.5G 0% /dev/shm
tmpfs 3.5G 57M 3.4G 2% /run
tmpfs 3.5G 0 3.5G 0% /sys/fs/cgroup
/dev/xvdc 7.8G 36M 7.3G 1% /mongo/journal
/dev/xvdb 150G 51M 149G 1% /mongo/data
/dev/xvdd 3.9G 16M 3.6G 1% /mongo/log
Permissions:
[deployer@prod-mongo ~]$ ll /
total 32
lrwxrwxrwx. 1 root root 7 Sep 29 2014 bin -> usr/bin
dr-xr-xr-x. 4 root root 4096 Sep 29 2014 boot
drwxr-xr-x. 17 root root 2860 May 11 12:11 dev
lrwxrwxrwx. 1 root root 7 Sep 29 2014 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Sep 29 2014 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Jun 10 2014 mnt
drwxr-xr-x. 5 mongod mongod 41 May 11 05:06 mongo
drwxr-xr-x. 21 root root 660 May 11 12:47 run
lrwxrwxrwx. 1 root root 8 Sep 29 2014 sbin -> usr/sbin
/mongo
intérieur
[deployer@prod-mongo ~]$ ll /mongo/
total 12
drwxr-xr-x. 3 mongod mongod 4096 May 11 07:33 data
drwxr-xr-x. 3 mongod mongod 4096 May 11 07:31 journal
drwxr-xr-x. 3 mongod mongod 4096 May 11 08:58 log
Après avoir changé les configurations à l'intérieur de /etc/mongodb.conf
logpath=/mongo/log/mongod.log
dbpath=/mongo/data
et quand je fais: Sudo service mongod start
, j'obtiens cette erreur:
Starting mongod (via systemctl): Job for mongod.service failed. See 'systemctl status mongod.service' and 'journalctl -xn' for details.
[FAILED]
Enregistrement ultérieur:
[deployer@prod-mongo ~]$ Sudo systemctl status mongod.service
mongod.service - SYSV: Mongo is a scalable, document-oriented database.
Loaded: loaded (/etc/rc.d/init.d/mongod)
Active: failed (Result: exit-code) since Tue 2015-05-12 04:42:10 UTC; 42s ago
Process: 22881 ExecStart=/etc/rc.d/init.d/mongod start (code=exited, status=1/FAILURE)
May 11 04:42:10 ip-xx-xx-xx-xx.local runuser[22887]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
May 11 04:42:10 ip-xx-xx-xx-xx.localdomain runuser[22887]: pam_unix(runuser:session): session closed for user mongod
May 11 04:42:10 ip-xx-xx-xx-xx.local mongod[22881]: Starting mongod: [FAILED]
May 11 04:42:10 ip-xx-xx-xx-xx.local systemd[1]: mongod.service: control process exited, code=exited status=1
May 11 04:42:10 ip-xx-xx-xx-xx.local systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
May 11 04:42:10 ip-xx-xx-xx-xx.local systemd[1]: Unit mongod.service entered failed state.
J'ai suivi divers articles et billets de blog et réponses StackExchange mais je n'ai pas trouvé de solution. Est-ce que je manque quelque chose?
Update : Si j'exécute directement le service mongodb
à partir de l'utilisateur normal, par exemple, Sudo mongod --logpath ~/mongod.log --dbpath ~/mongodata
, ce service démarre correctement.
Nous avons essayé de changer le chemin du fichier pid
dans un autre répertoire, cela n’a pas aidé non plus.
Au cas où quelqu'un rencontrerait le même problème au démarrage de MongoDB, voici le fil de discussion des commentaires https://jira.mongodb.org/browse/SERVER-18439 . Cela devrait être corrigé dans 3.1
.
Je suppose que vous utilisez une version de Linux qui utilise SELinux (RHEL ou CentOS 7, peut-être?)
Si tel est le cas, le problème est que vous n’avez pas de stratégie permissive dans votre répertoire /mongo/
qui autorise l’accès aux démons (comme le service mongod
.)
De Wikipedia:
SELinux peut potentiellement contrôler les activités qu'un système autorise chaque utilisateur, processus et démon , Avec des spécifications très précises. Cependant, Est principalement utilisé pour confiner les démons [citation nécessaire], comme les moteurs de base de données Ou les serveurs Web disposant de droits d'accès aux données et de droits plus définis. Cela limite les dommages potentiels d'un démon confiné Qui devient compromis. Les processus utilisateur ordinaires s'exécutent souvent dans le domaine Non restreint, non restreint par SELinux, mais toujours limité par Par les droits d'accès classiques à Linux.
Pour vérifier si tel est le problème, essayez ceci sur le shell:
Sudo setenforce 0
Cela devrait désactiver les stratégies SELinux et permettre au service de s'exécuter.
Pour une solution plus permanente, voir https://wiki.centos.org/HowTos/SELinux
J'ai rencontré ce problème et j'ai trouvé une solution pour moi.
En bref, mongodb 3.2 utilise l'utilisateur 'mongod' alors que les versions précédentes utilisaient 'mongodb'. Certains fichiers et répertoires appartenaient à «mongodb» (l'utilisateur le plus ancien). Une fois que je les ai transmis à l'utilisateur 'mongod', j'ai pu utiliser systemctl pour contrôler le processus mongod.
Plus précisément, c’est les fichiers "/ var/log/mongodb/*" qui avaient un propriétaire incorrect.
root@<Host>:# ls -alh /var/log/mongodb
total 664K
drwxr-xr-x 2 mongod mongod 4.0K Oct 27 12:08 .
drwxr-xr-x. 22 root root 4.0K Oct 27 11:51 ..
-rw-r--r-- 1 mongodb mongodb 3.8K Oct 27 11:48 mongod.log
-rw-r--r-- 1 mongodb mongodb 19K Apr 14 2016 mongod.log.2016-04-14T18-29-34
-rw-r--r-- 1 mongodb mongodb 2.8K Apr 14 2016 mongod.log.2016-04-14T18-30-13
-rw-r--r-- 1 mongodb mongodb 12K Apr 14 2016 mongod.log.2016-04-14T22-27-27
-rw-r--r-- 1 mongodb mongodb 11K Apr 14 2016 mongod.log.2016-04-14T22-29-12
-rw-r--r-- 1 mongodb mongodb 5.6K Apr 18 2016 mongod.log-20160418.gz
-rw-r--r-- 1 mongodb mongodb 0 Apr 18 2016 mongod.log.2016-09-09T17-33-48
-rw-r--r-- 1 mongodb mongodb 3.6K Sep 9 11:34 mongod.log.2016-09-09T17-34-52
-rw-r--r-- 1 mongodb mongodb 23K Sep 9 11:49 mongod.log.2016-09-09T17-49-49
-rw-r--r-- 1 mongodb mongodb 5.0K Sep 9 11:55 mongod.log.2016-09-09T17-55-15
-rw-r--r-- 1 mongodb mongodb 5.0K Sep 9 12:02 mongod.log.2016-09-09T18-02-26
-rw-r--r-- 1 mongodb mongodb 5.0K Sep 9 12:13 mongod.log.2016-09-09T18-13-17
-rw-r--r-- 1 mongodb mongodb 5.0K Sep 9 12:25 mongod.log.2016-09-09T18-25-01
-rw-r--r-- 1 mongodb mongodb 5.2K Sep 9 12:47 mongod.log.2016-09-09T18-47-54
-rw-r--r-- 1 mongodb mongodb 5.0K Sep 9 12:52 mongod.log.2016-09-09T18-52-16
-rw-r--r-- 1 mongodb mongodb 5.0K Sep 9 12:54 mongod.log.2016-09-09T18-54-49
-rw-r--r-- 1 mongodb mongodb 5.0K Sep 9 13:01 mongod.log.2016-09-09T19-01-22
-rw-r--r-- 1 mongodb mongodb 3.0K Sep 9 13:03 mongod.log.2016-09-09T19-03-21
-rw-r--r-- 1 mongodb mongodb 215K Sep 9 14:25 mongod.log.2016-09-09T20-25-59
-rw-r--r-- 1 mongodb mongodb 281K Sep 10 03:42 mongod.log-20160910
-rw-r--r-- 1 mongodb mongodb 0 Sep 10 03:42 mongod.log.2016-10-27T17-42-42
-rw-r----- 1 mongod mongod 0 Sep 29 22:03 mongod.log.rpmnew
Notez que le propriétaire du répertoire est «mongod» (le nouvel utilisateur), tandis que les fichiers journaux sont tous détenus par «mongodb» (l'ancien utilisateur).