Installation de Mongo DB sur CentOS 7

mongodb

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

Aucun commentaire

No module Published on Offcanvas position