web-dev-qa-db-fra.com

Impossible de démarrer le service MongoDB 3.0.2 sur CentOS 7

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.

7
Shashank Agrawal

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.

1
Shashank Agrawal

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

4
Lee Benson

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

3
Tobiwan