Exemple d’automatisation de gestion de plusieurs régions sur opensim (3/3)

IV – Automatisation de la gestion des régions avec monit

Sources :

Doc Monit : http://mmonit.com/monit/documentation/

Remote admin : http://opensimulator.org/wiki/RemoteAdmin

Article Snoopy Pfeffer : http://maxping.org/technobabble/platforms/open-simulator/opensim-linux-series-–-service-management-with-monit.aspx

Article Coyled : http://coyled.com/2010/07/07/monit-and-opensim/

IV-1 Mise en place des scripts

Copier dans le répertoire ServiceManagement les 8 scripts suivants :

  • broadcastos

Script Python qui envoie des messages aux utilisateurs Opensim. Le numéro de port http doit être fourni en tant que paramètre.

#!/usr/bin/python
# -*- encoding: utf-8 -*-
import ConfigParser
import xmlrpclib
import optparse
import os.path
if __name__ == ‘__main__’:
    parser = optparse.OptionParser()
    parser.add_option(‘-s’, ‘–server’, dest = ‘server’, help = ‘URI of the region server’, metavar = ‘SERVER’)
    parser.add_option(‘-p’, ‘–password’, dest = ‘password’, help = ‘password of the region server’, metavar = ‘PASSWD’)
    parser.add_option(‘-m’, ‘–message’, dest = ‘message’, help = ‘message to broadcast’, metavar = ‘MSG’)
    (options, args) = parser.parse_args()
    server = options.server
    password = options.password
    message = options.message
    gridServer = xmlrpclib.Server(server)
    res = gridServer.admin_broadcast({‘password’: password, ‘message’: message})
    if res [‘success’] == ‘true’:
        print ‘message was sent to %s’ % server
    else:
        print ‘sending message to %s failed’ % server

N.B. Pour les scripts en python attention a bien respecter l’indentation des conditions if else

  • clearos

Script pour nettoyer ScriptEngines . Il peut être utile d’exécuter cette commande après chaque mise à jour.

#!/bin/sh
rm -r /home/opensim/opensim/run/*/ScriptEngines/*
  • rmpidsos

Script pour nettoyer les fichiers pid après l’arrêt de tous les processus serveur OpenSim.

#!/bin/sh
rm -f /tmp/*.pid
  • shutdownos

Script Python qui arrête les processus serveur OpenSim. The Le numéro de port http doit être fourni en tant que paramètre.

#!/usr/bin/python
# -*- encoding: utf-8 -*-
import ConfigParser
import xmlrpclib
import optparse
import os.path
if __name__ == ‘__main__’:
    parser = optparse.OptionParser()
    parser.add_option(‘-s’, ‘–server’, dest = ‘server’, help = ‘URI of the region server’, metavar = ‘SERVER’)
    parser.add_option(‘-p’, ‘–password’, dest = ‘password’, help = ‘password of the region server’, metavar = ‘PASSWD’)
    (options, args) = parser.parse_args()
    server = options.server
    password = options.password
    gridServer = xmlrpclib.Server(server)
    res = gridServer.admin_shutdown({‘password’: password})
    if res[‘success’] == ‘true’:
        print ‘shutdown of %s initiated’ % server
    else:
        print ‘shutdown of %s failed’ % server
  • startbos

Script pour démarrer Opensim dans la console pour les essais (sans Monit et screen).  Le nom de la région doit être fourni en tant que paramètre.

#!/bin/sh
cd /home/opensim/opensim/run/$1/
mono ./OpenSim.exe -gridmode=true -smtag=$1
  • startqos

Script utilisé par Monit pour lancer Opensim (crée un fichier pid). . Le nom de la région doit être fourni en tant que paramètre.

#!/bin/sh
export PATH= »/home/opensim/bin/mono/bin:$PATH »
export PKG_CONFIG_PATH= »/home/opensim/bin/mono/lib/
pkgconfig:$PKG_CONFIG_PATH »
export MANPATH= »/home/opensim/bin/mono/share/man:$MANPATH »
export MONO_THREADS_PER_CPU=80
cd /home/opensim/opensim/run/$1/
screen -S $1 -d -m mono ./OpenSim.exe -gridmode=true -smtag=$1 &
  • stopos

Script qui est utilisé par Monit  pour arrêter un processus Opensim. Le nom de la région et le numéro de port http doivent être fournis en tant que paramètres. Ce script utilise le script « stopsoftos » ci-après.

#!/bin/sh
echo $1: stopping process
[ -e /tmp/$1.pid ] || exit 0
OPID=`cat /tmp/$1.pid`
/home/opensim/opensim/ServiceManagement/stopsoftos $2 &
sleep 90
PID=`cat /tmp/$1.pid`
if [ « $PID » = « $OPID » ]; then
kill -KILL $PID
rm /tmp/$1.pid
fi
  • stopsoftos

Script qui est utilisé par le script « stopos » pour l’arrêt d’un processus Opensim . Le numéro de port http doit être fourni en tant que paramètre.Ce script utilise les scripts  « broadcastos » et « shutdownos » pour envoyer des messages d’avertissement aux utilisateurs puis fermer Opensim.

#!/bin/sh
/home/opensim/opensim/ServiceManagement/broadcastos -s http://localhost:$1 -p votre_mot_de_passe -m « This region will restart in 1 minute! Please leave now! » &
sleep 30
/home/opensim/opensim/ServiceManagement/broadcastos -s http://localhost:$1 -p votre_mot_de_passe  -m « This region will restart in 30 seconds! Please leave now! » &
sleep 30
/home/opensim/opensim/ServiceManagement/shutdownos -s http://localhost:$1 -p votre_mot_de_passe  &

Utilisez votre mot de passe d’utilisateur opensim qui figurera aussi dans OpenSim.ini dans la section remote admin (voir ci-dessous).

IV-2 Modifications d’OpenSim.ini

  • création des fichiers pid (fichiers qui stockent les numéros de processus Linux) et paramétrage spécifique pour utiliser restart dans monit
[Startup]
……………………
; Place to create a PID file
PIDFile = « /tmp/REGION_NAME.pid »
……………………
InworldRestartShutsDown = true
  • activation de remote admin
RemoteAdmin]
    enabled = true
    access_password = votre_mot_de_passe_opensim
    port = HTTP_PORT
  • activation des webstats
[WebStats
………………………………………]
enabled=true

Si vous avez effectué les opération de la partie 2, modifiez le fichier maître dans opensim_x.x.x puis utilisez refreshos pour mettre à jour vos régions.

IV –3 Paramétrage de monit

Monit tourne sur le port 2812 et le fichier de configuration monitrc se trouve dans /etc/monit.

Voici un exemple de mon fichier /etc/monit/monitrc :

####################################################### Monit control file
######################################################
##
## Comments begin with a ‘#’ and extend through the end of the line. Keywords
## are case insensitive. All path’s MUST BE FULLY QUALIFIED, starting with ‘/’.
##
## Bellow is the example of some frequently used statements. For information
## about the control file, a complete list of statements and options please
## have a look in the monit manual.
##
##
######################################################
## Global section
######################################################
##
## Start monit in background (run as daemon) and check the services at 1-minute
## intervals.
#
set daemon 60
#
#
## Set syslog logging with the ‘daemon’ facility. If the FACILITY option is
## omited, monit will use ‘user’ facility by default. You can specify the
## path to the file for monit native logging.
#
# set logfile syslog facility log_daemon
set logfile /var/log/monit.log
#
## Set list of mailservers for alert delivery. Multiple servers may be
## specified using comma separator. By default monit uses port 25 – it is
## possible to override it with the PORT option.
#
# set mailserver mail.bar.baz, # primary mailserver
# backup.bar.baz port 10025, # backup mailserver on port 10025
# localhost # fallback relay
#
#
## By default monit will drop the event alert, in the case that there is no
## mailserver available. In the case that you want to keep the events for
## later delivery retry, you can use the EVENTQUEUE statement. The base
## directory where undelivered events will be stored is specified by the
## BASEDIR option. You can limit the maximal queue size using the SLOTS
## option (if omited then the queue is limited just by the backend filesystem).
#
# set eventqueue
# basedir /var/monit # set the base directory where events will be stored
# slots 100 # optionaly limit the queue size
#
#
## Monit by default uses the following alert mail format:
##
## -8<-
## From: monit@$HOST # sender
## Subject: monit alert – $EVENT $SERVICE # subject
##
## $EVENT Service $SERVICE #
## #
## Date: $DATE #
## Action: $ACTION #
## Host: $HOST # body
## Description: $DESCRIPTION #
## #
## Your faithful employee, #
## monit #
## -8<-
##
## You can override the alert message format or its parts such as subject
## or sender using the MAIL-FORMAT statement. Macros such as $DATE, etc.
## are expanded on runtime. For example to override the sender:
#
# set mail-format { from: monit@foo.bar }
#
#
## You can set the alert recipients here, which will receive the alert for
## each service. The event alerts may be restricted using the list.
#
# set alert sysadm@foo.bar # receive all alerts
# set alert manager@foo.bar only on { timeout } # receive just service-
# # timeout alert
#
#
## Monit has an embedded webserver, which can be used to view the
## configuration, actual services parameters or manage the services using the
## web interface.
#
set httpd port 2812 #and use address localhost
#allow localhost   # Allow localhost to connect
allow admin:monit # require user ‘admin’ with password ‘monit’
#ssl enable
#pemfile /etc/ssl/private/localhost.pem
#
#
####################################################
## Services
####################################################
##
## Check the general system resources such as load average, cpu and memory
## usage. Each rule specifies the tested resource, the limit and the action
## which will be performed in the case that the test failed.
#
check system ip_de_votre_serveur
if loadavg (1min) > 4 then alert
if loadavg (5min) > 2 then alert
if memory usage > 75% then alert
if cpu usage (user) > 70% then alert
if cpu usage (system) > 30% then alert
if cpu usage (wait) > 20% then alert
#
#
## Check a file for existence, checksum, permissions, uid and gid. In addition
## to the recipients in the global section, customized alert will be send to
## the additional recipient. The service may be grouped using the GROUP option.
#
## Check that a process is running, responding on the HTTP and HTTPS request,
## check its resource usage such as cpu and memory, number of childrens.
## In the case that the process is not running, monit will restart it by
## default. In the case that the service was restarted very often and the
## problem remains, it is possible to disable the monitoring using the
## TIMEOUT statement. The service depends on another service (apache_bin) which
## is defined in the monit control file as well.
#
# Monitor MySQL Service
check process mysql with pidfile /var/lib/mysql/votre_processus_mysql.pid
group database
start program « /etc/init.d/mysql start »
stop program « /etc/init.d/mysql stop »
if failed host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout
#
# Monitor mono opensim Service for R01
check process opensim_R01 with pidfile /tmp/R01.pid
start program = « /home/opensim/opensim/ServiceManagement/startqos R01 »
stop program = « /home/opensim/opensim/ServiceManagement/stopos R01 9010 »
if totalmem > 900 Mb then alert
if totalmem > 1100 Mb then restart
if cpu usage > 20% then alert
if cpu usage > 24% for 3 cycles then restart
if failed host 127.0.0.1 port 9010 send « GET /SStats/ HTTP/1.0\r\nHost: localhost\r\n\r\n » expect « <!DOCTYPE html .* » within 5 cycles then restart
if 5 restarts within 5 cycles then timeout
#
# Monitor mono opensim Service for R02
check process opensim_R02 with pidfile /tmp/R02.pid
start program = « /home/opensim/opensim/ServiceManagement/startqos R02 »
stop program = « /home/opensim/opensim/ServiceManagement/stopos R02 9011 »
if totalmem > 900 Mb then alert
if totalmem > 1100 Mb then restart
if cpu usage > 20% then alert
if cpu usage > 24% for 3 cycles then restart
if failed host localhost port 9011 type TCP send « GET /SStats/ HTTP/1.0\r\nHost: localhost\r\n\r\n » expect « <!DOCTYPE html .* » within 5 cycles then restart
if 5 restarts within 5 cycles then timeout………………….etc

IV-4 Lancement de monit

Le fichier monitrc doit être configuré pour root.

Autorisez l’utilisation de monit en éditant le fichier /etc/default/monit et en mettant la variable sartup à 1.

Testez votre fichier de configuration en exécutant monit –t.

Si tout est bon, vous pouvez (connecté comme root) lancer le démon monit par :

/etc/init.d/monit start

Vous pouvez désormais vous connecter par http://votre_ip:2812/, login:admin mot de masse:monit (à modifier par la suite dans le fichier monitrc).

image

image

Pour arrêter monit :

/etc/init.d/monit stop

Attention : pensez à désactiver monit si vous êtes en test d’opensim ou de vos régions ! Sinon il relancera automatiquement à tout arrêt. Pensez aussi qu’il se lancera automatiquement après un reboot.

V – Automatisation des sauvegardes SQL

Sources :

AutoMySQLBackup : http://sourceforge.net/projects/automysqlbackup/

Cron : http://doc.ubuntu-fr.org/cron

V.1 Installation et paramétrage

Téléchargez ici AutoMySQLBackup dans votre répertoire opensim/bin/

Editez le fichier et créez automysqlbackup.conf dans un répertoire /etc/automysqlbackup/ comme indiqué.

Renseignez username (root) et son mot de passe dans automysqlbackup.conf

Si comme moi vous préférez une sauvegarde par base, renseignez DBNAMES= »R01 R02 R03…………”

Indiquez le répertoire de sauvegarde :

BACKUPDIR= »/home/opensim/opensim/backup/DB/ »

(J’ai créé un sous-répertoire DB pour les sauvegardes mysql)

Enfin renseignez l‘adresse email ou désactivez la fonction email.

Testez le bon fonctionnement du script.

V.2 Programmation des sauvegardes

Créez un fichier crontab pour root

sudo crontab -e

Ajoutez la ligne :

0 0 * * * /home/opensim/bin/automysqlbackup

et vos sauvegardes se lanceront tous les jours à minuit.

V.3 Restauration

En cas de problème pour restaurer une base :

cd /home/opensim/opensim/backup/DB/daily/
cp ma_sauvegarde.sql.gz /home
cd
gunzip ma_sauvegarde.sql.gz
mysql -u root -p maBase < ma_sauvegarde.sql
rm ma_sauvegarde.sql

Et pour vérifier l’intégrité d’une base :

mysqlcheck –databases Rxx –auto-repair –verbose -p
Publicités

Un commentaire

  1. Leclerc said,

    décembre 10, 2015 à 1:17

    SVP signez la petition pour interdire les cds scatophiles de MORSAY dans les grandes surfaces Edouard Leclerc et Magasins U 71 https://stopliberalisme.wordpress.com/2015/09/27/des-cds-pedopornographiques-dans-les-grandes-surfaces/


Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :