Linux:Installation configuration administration mongodb

De Djjnet
Aller à : Navigation, rechercher

Sommaire

Installation par compilation

git clone git://github.com/mongodb/mongo.git
cd mongo/
#Choisir la version 
git checkout r2.4.5
#Compilation
scons all
#Installation dans le dossier de votre choix
scons --prefix=/usr/local/mongodb install

Lancement :

/usr/local/mongodb/bin/mongod --dbpath /var/djjnet/mongodb
  • --fork : mode daemon
  • --logpath fichier : fichier pour les logs
  • --config : pour un fichier de configuration

Utiliser un fichier de configuration (/usr/local/mongodb/conf/mongodb.conf dans l'exemple) :

fork = true
dbpath = /var/djjnet/mongodb
logpath = /var/log/mongodb/mongodb.log

Lancement :

/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 19877
all output going to: /var/log/mongodb/mongodb.log
child process started successfully, parent exiting

Désactiver les transparent hugepages

Créer un fichier /etc/init.d/disable-transparent-hugepages :

#!/bin/sh
### BEGIN INIT INFO
# Provides:          disable-transparent-hugepages
# Required-Start:    $local_fs
# Required-Stop:
# X-Start-Before:    mongod mongodb-mms-automation-agent
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Disable Linux transparent huge pages
# Description:       Disable Linux transparent huge pages, to improve
#                    database performance.
### END INIT INFO

case $1 in
  start)
    if [ -d /sys/kernel/mm/transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/transparent_hugepage
    elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
      thp_path=/sys/kernel/mm/redhat_transparent_hugepage
    else
      return 0
    fi

    echo 'never' > ${thp_path}/enabled
    echo 'never' > ${thp_path}/defrag

    unset thp_path
    ;;
esac
chmod +x /etc/init.d/disable-transparent-hugepages
update-rc.d disable-transparent-hugepages defaults

Utilisation du client

Le client est mongo, par défaut, il se connecte à la base test :

/usr/local/mongodb/bin/mongo

Pour changer de base :

> use nombase

Pour voir la base actuelle, simplement taper la variable db et le nom sera affiché :

> db
test

Création, insertion et consultation d'une collection :

> use monitoring
switched to db monitoring
> db.createCollection("monitoring");
{ "ok" : 1 }
> show collections;
monitoring
system.indexes
> db.monitoring.insert({"chaine" : "toutvabien" });
> db.monitoring.find()
{ "_id" : ObjectId("51f64b5e4947118a8609ae5f"), "chaine" : "toutvabien" }

Gestion des bases

  • Supprimer une base :
> use traces
switched to db traces
> db.dropDatabase();
{ "dropped" : "traces", "ok" : 1 }

Directement depuis votre shell :

mongo --eval "db.dropDatabase();" base
  • Copier une base depuis un autre serveur :
> db.copyDatabase("base","base","ancien_serveur.lan");
{ "ok" : 1 }

Configuration

Niveau des loggs

Changer sous mongo :

db.setLogLevel(1)

Pour une partie des logs :

db.setLogLevel(2,"write")

Rotation des logs

Créer /etc/logrotate.d/mongodb :

/var/log/mongodb/*.log {
       daily
       rotate 30
       copytruncate
       delaycompress
       compress
       notifempty
       missingok
}

Gestion de cluster

Démarrer un cluser

mongo-N est présent dans /etc/hosts, dans le client mongo :

rs.initiate({
        "_id" : "myrs0",
        "version" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "mongo-1:27017"
                },
                {
                        "_id" : 1,
                        "host" : "mongo-2:27017"
                },
                {
                        "_id" : 2,
                        "host" : "mongo-3:27017"
                }
        ]
})

Obtenir le status :

rs.status()

Juste après l'initialisation, il renvoie dans le status pour les "SECONDARY" :

"lastHeartbeatMessage" : "could not find member to sync from",

Cela change après création d'une base et collection à :

"syncingTo" : "mongo-1:27017"

Changer le serveur master

On a besoin de forcer le changement de master. Pour cela, on change les priorités des serveurs.

Configuration actuelle :

> cfg = rs.conf()

On change les valeurs :

> cfg.members[1].priority = 2
> cfg.members[2].priority = 0.5

On applique :

> rs.reconfig(cfg)

S'il ne veut pas (par exemple un secondary qui ne veut pas passer master car le master est hs), on force :

rs.reconfig(cfg, {force : true})

Requêtes sur l'esclave

db.setSlaveOk()

ou

rs.slaveOk();