MongoDB est un système de gestion de base de données orientée documents qui ne nécessite pas de schéma prédéfini des données. MongoDB manipule des objets JSON binaire (BSON). Et contrairement aux systèmes de gestion de bases de données relationnelles, les champs des enregistrements, appelés "documents", peuvent être différents au sein d'une même table ("collection" dans le formalisme MongoDB).
Configuration du repository
Nous allons configurer le repository de la version 3.4 de MongoDB qui est la version stable courante.
sudo tee /etc/yum.repos.d/mongodb-org-3.4.repo <<-'EOF' [mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc EOF
Une fois le repository configuré, nous pouvons lancer la commande d'installation des paquets.
sudo yum install -y mongodb-org-3.4.0
Afin d'éviter des mises à jours non souhaitées, nous allons ajouter des exclusions au fichier de configuration du gestionnaire de paquets de CentOS. Editez le fichier /etc/yum.conf pour y ajouter la ligne suivante :
exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools
Configuration du système
MongoDB nécessite l'exécution de nombreux process. Il est nécessaire de modifier la limite système par défaut pour permettre à MongoDB de s'exécuter dans des conditions optimales. Nous allons donc éditer le fichier /etc/security/limits.d/20-nproc.conf pour y ajouter les lignes suivantes :
mongod soft nproc 64000 mongod hard nproc 64000 mongod soft nofile 64000 mongod hard nofile 64000
Optimisation des performances
Dans un soucis d'optimisation des performances, il est également conseillé de désactiver les Transparent Hugepages.
Nous allons en profiter pour réaliser d'autres optimisations.
Pour ce faire, il faut créer un fichier de configuration spécifique :
sudo mkdir /etc/tuned/no-thp sudo tee /etc/tuned/no-thp/tuned.conf <<-'EOF' [main] include=virtual-guest [vm] transparent_hugepages=never [script] script=disable-defrag.sh [sysctl] vm.swappiness = 1 # almost no swap to disk (0=never swap, 100=always swap) zone_reclaim_mode = 0 # no memory reclaimed (normally the default value) # Network optimizations net.core.somaxconn = 4096 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_time = 120 net.ipv4.tcp_max_syn_backlog = 4096 EOF
Puis nous allons créer un script pour désactiver la défragmentation des Transparent Hugepages :
sudo tee /etc/tuned/no-thp/disable-defrag.sh <<-'EOF' #!/bin/sh . /usr/lib/tuned/functions start() { echo never > /sys/kernel/mm/transparent_hugepage/defrag return 0 } stop() { return 0 } process $@ EOF
On le rend exécutable avec la commande :
sudo chmod 755 /etc/tuned/no-thp/disable-defrag.sh
Nous pouvons maintenant activer ces nouveaux paramètres système :
sudo tuned-adm profile no-thp
Pour vérifier que la configuration a bien été prise en compte, vous pouvez lancer les commandes suivantes :
sudo cat /sys/kernel/mm/transparent_hugepage/enabled sudo cat /sys/kernel/mm/transparent_hugepage/defrag
Si tout est bien configuré, elle doivent vous renvoyer :
always madvise [never]
Il existe d'autre paramètres sur lesquels vous pouvez jouer pour optimiser les performances d'un serveur physique.
Mais comme il y a de grandes chances que vous soyez en train de configurer une machine virtuelle, ils ne seront pas traités dans cet article.
Lancement de MongoDB et activation au démarrage du système
Nous allons maintenant exécuter les commandes suivantes pour activer le lancement de MongoDB à chaque démarrage du système.
Nous en profitons également pour le lancer immediatement.
sudo systemctl enable mongod sudo systemctl start mongod
Pour vérifier que tout s'est bien déroulé normalement :
sudo tail /var/log/mongodb/mongod.log | grep "waiting for connections"
La commande doit vous renvoyer un message similaire à celui-ci :
2017-01-25T11:04:51.823+0100 I NETWORK [thread1] waiting for connections on port 27017
Ajout des règles de pare-feu (optionnel)
Si vous souhaitez que votre serveur MongoDB soit accessible depuis un autre serveur, vous devrez ouvrir le port 27017 sur le pare-feu :
sudo firewall-cmd --permanent --add-port=27017/tcp sudo firewall-cmd --reload
Important : Vous devrez également commenter la ligne bindIP: 127.0.0.1 dans le fichier de configuration de MongoDB : /etc/mongod.conf.
Création de l'utilisateur administrateur
On se connecte à la base de données Mongo pour créer l'administrateur :
sudo mongo localhost/maBase
Si tout ce passe bien, MongoDB vous affiche ce qui suit :
MongoDB shell version v3.4.0 connecting to: mongodb://localhost/maBase MongoDB server version: 3.4.0 Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see http://docs.mongodb.org/ Questions? Try the support group http://groups.google.com/group/mongodb-user >
Si vous avez en plus ces messages, ignorez les pour l'instant :
Server has startup warnings: 2017-01-25T11:04:51.767+0100 I CONTROL [initandlisten] 2017-01-25T11:04:51.767+0100 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2017-01-25T11:04:51.767+0100 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2017-01-25T11:04:51.767+0100 I CONTROL [initandlisten] 2017-01-25T11:04:51.768+0100 I CONTROL [initandlisten] 2017-01-25T11:04:51.768+0100 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. 2017-01-25T11:04:51.768+0100 I CONTROL [initandlisten] ** We suggest setting it to 'never' 2017-01-25T11:04:51.768+0100 I CONTROL [initandlisten]
Nous allons maintenant choisir le nom et le mot de passe de l'administrateur (remplacez "administrateur" et "mot-de-passe" par ce que vous souhaitez) :
> db.createUser({ user: "administrateur", pwd: "mot-de-passe", roles: [{role: "root", db: "admin"}] })
Le résultat de la commande est le suivant :
Successfully added user: { "user" : "administrateur", "roles" : [ { "role" : "root", "db" : "admin" } ] } >
Le résultat de la commande est le suivant :
Vous pouvez ensuite quitter le shell interractif de MongoDB :
> exit
La dernière étape consiste à activer le mode d'authentification dans le fichier de configuration du serveur /etc/mongod.conf.
Vous devez ajouter les lignes suivantes sous le commentaire #security:
security: authorization: enabled
Redémarrage du service MongoDB
Maintenant que le service est correctement configuré, nous pouvons le relancer :
sudo systemctl restart mongod
Test
Pour tester la prise en compte du mode d'authentification, vous pouvez lancer la commande suivante (remplacez "administrateur" et "mot-de-passe" par ce que vous avez choisi) :
sudo mongo maBase --username administrateur --password mot-de-passe --authenticationDatabase maBase MongoDB shell version: 3.2.11 connecting to: maBase > exit bye