La version V02.07.00 de Shinken Entreprise apporte un lot de nouveautés, et notamment la mise à jour de la base de données Mongo utilisée pour stocker différents types de données. Cette mise à jour apporte notamment un nouveau système de gestion des données internes à Mongo qui promet une meilleure gestion et performances au niveau de Mongo, ainsi que des améliorations au niveau de la sécurité.
Dans une installation Shinken Entreprise classique, la mise à jour de Mongo est automatisée par le script d'installation.
Lorsque Mongo est configuré pour fonctionner en tant que cluster, le script d'installation/mise à jour de Shinken permet également d'effectuer la mise à jour de cette installation de cluster Mongo de manière automatique. Cependant, compte tenu de la configuration plus complexes, des manipulations supplémentaires sont nécessaires.
Ces manipulations sont décrites de la procédure ci-dessous.
Dans un cluster Mongo, la mise à jour de Mongo sur les différents membres du cluster doit être simultanée pour éviter d'avoir des versions de Mongo différentes au sein du cluster, ce qui entraînerait des incompatibilités.
Pour résoudre ce problème, le script de mise à jour de Shinken détecte lorsque la mise à jour se fait sur un membre du cluster Mongo. Dans ce cas, il lance alors la mise à jour de Mongo de manière simultanée sur toutes les machines du cluster Mongo (en s'y connectant via SSH).
Une fois la mise à jour du cluster Mongo terminée, le script de mise à jour Shinken continue la mise à jour de Shinken en V02.07.00 comme sur une installation classique.
La procédure est donc la suivante:
Pour permettre un synchronisation de la mise à jour de Mongo sur toutes les machines du cluster, il faut qu'un des nœuds du cluster Mongo (n'importe lequel, pas forcément le nœud primaire) puisse se connecter via SSH sur les autres nœuds.
Cette connexion doit pouvoir se faire sur l'utilisateur root et sans avoir besoin de mot de passe. Une copie de la clé SSH de l'utilisateur root de la machine effectuant la mise à jour vers le compte root des autres machines du cluster Mongo est donc nécessaire avant le lancement de la mise à jour.
Sur la machine qui effectue la mise à jour du cluster, on effectue alors les commandes suivantes:
Si aucune clé SSH n'existe pour l'utilisateur root (~/.ssh/id_rsa.pub), en générer une en tant que root:
ssh-keygen |
Copier la clé sur les nœuds du cluster:
for i in noeud1 noeud2 noeud3; do ssh-copy-id ~/.ssh/id_rsa.pub root@$i; done |
Vérification de la connexion SSH. En tant que root, on vérifie la connexion SSH avec tous les noeuds du cluster:
ssh root@noeud1 ssh root@noeud2 ssh root@noeud3 |
Si les clés ont bien été copiées, chacune des connexion doit s'effectuer avec succès et sans demander de mot de passe.
Une fois qu'une machine du cluster Mongo a été choisie et peut se connecter avec une clé SSH en root sur les autres machines du cluster, le processus de mise à jour peut être commencé:
|
Une des nouveautés de la version 3 de Mongodb est la modification du format des fichiers de configuration. Lors de la mise à jour, ces fichiers ne sont pas modifiés et conservent le format de la version v2.6.9.
Cependant, pour être le plus à jour possible et éviter les problèmes potentiels dus à l'utilisation de fichiers obsolètes, il est conseillé de mettre à jour ces fichiers de configuration dans le nouveau format utilisé par Mongodb.
Dans la suite de cette documentation sont présentés côte à côte ces 2 formats de fichier (ancien à gauche, nouveau à droite), ce qui permet ensuite de faire la modification facilement.
# mongod.conf #where to log logpath=/var/log/mongodb/mongod.log logappend=true # fork and run in background fork=true port=27018 dbpath=/var/lib/mongo # location of pidfile pidfilepath=/var/run/mongodb/mongod.pid # Listen to local interface only. Comment out to listen on all interfaces. #bind_ip=127.0.0.1 # Disables write-ahead journaling # nojournal=true # Enables periodic logging of CPU utilization and I/O wait #cpu=true # Turn on/off security. Off is currently the default #noauth=true #auth=true # Verbose logging output. #verbose=true # Inspect all client data for validity on receipt (useful for # developing drivers) #objcheck=true # Enable db quota management #quota=true # Set oplogging level where n is # 0=off (default) # 1=W # 2=R # 3=both # 7=W+some reads #diaglog=0 # Ignore query hints #nohints=true # Enable the HTTP interface (Defaults to port 28017). #httpinterface=true # Turns off server-side scripting. This will result in greatly limited # functionality #noscripting=true # Turns off table scans. Any query that would do a table scan fails. #notablescan=true # Disable data file preallocation. #noprealloc=true # Specify .ns file size for new databases. # nssize=<size> # Replication Options # in replicated mongo databases, specify the replica set name here #replSet=setname replSet=rs-shinken # maximum size in megabytes for replication operation log #oplogSize=1024 # path to a key file storing authentication info for connections # between replica set members #keyFile=/path/to/keyfile keyFile=/etc/mongod.keyfile |
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # Where and how to store data. storage: dbPath: /var/lib/mongo journal: enabled: true # engine: # mmapv1: # wiredTiger: # how the process runs processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile # network interfaces net: port: 27017 bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces. #security: #operationProfiling: replication: replSetName: rs-shinken #sharding: ## Enterprise-Only Options #auditLog: #snmp: storage: engine: wiredTiger |
logpath=/var/log/mongodb/mongos.log logappend=true fork=true pidfilepath=/var/run/mongodb/mongos.pid # Port to listen for application connections port=27017 # Listen to local interface only. Comment out to listen on all interfaces. #bind_ip=127.0.0.1 # Change here your real configuration servers # Better to set names from a /etc/hosts than # IP that can change in the future configdb=node1:27019,node2:27019,node3:27019 # Security file, for node authentifications # IMPORTANT: MUST be the same across ALL your mongo servers # and with mongod:mongod 600 rights keyFile=/etc/mongod.keyfile |
# mongos.conf # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongos.log # how the process runs processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongos.pid # location of pidfile # network interfaces net: port: 27017 #bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces. sharding: configDB: node1:27019,node2:27019,node3:27019 |
# mongo-configsrv.conf #where to log logpath=/var/log/mongodb/mongo-configsrv.log logappend=true # fork and run in background fork=true port=27019 dbpath=/var/lib/mongo/configdb # location of pidfile pidfilepath=/var/run/mongodb/mongo-configsrv.pid # Listen to local interface only. Comment out to listen on all interfaces. #bind_ip=127.0.0.1 # Disables write-ahead journaling # nojournal=true # Enables periodic logging of CPU utilization and I/O wait #cpu=true # Turn on/off security. Off is currently the default #noauth=true #auth=true # Verbose logging output. #verbose=true # Inspect all client data for validity on receipt (useful for # developing drivers) #objcheck=true # Enable db quota management #quota=true # Set oplogging level where n is # 0=off (default) # 1=W # 2=R # 3=both # 7=W+some reads #diaglog=0 # Ignore query hints #nohints=true # Enable the HTTP interface (Defaults to port 28017). #httpinterface=true # Turns off server-side scripting. This will result in greatly limited # functionality #noscripting=true # Turns off table scans. Any query that would do a table scan fails. #notablescan=true # Disable data file preallocation. #noprealloc=true # Specify .ns file size for new databases. # nssize=<size> # Replication Options # in replicated mongo databases, specify the replica set name here #replSet=setname # maximum size in megabytes for replication operation log #oplogSize=1024 # path to a key file storing authentication info for connections # between replica set members # IMPORTANT: MUST be the same across ALL your mongo servers # and with mongod:mongod 600 rights keyFile=/etc/mongod.keyfile |
# mongo-configsrv.conf
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongo-configsrv.log
# Where and how to store data.
storage:
dbPath: /var/lib/mongo/configdb
journal:
enabled: true
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongo-configsrv.pid # location of pidfile
# network interfaces
net:
port: 27019
#bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces. |