Autor Thema: Domino DB Wartung auf Multicore Maschinen beschleunigen (Linux)  (Gelesen 3849 mal)

Offline Exordium

  • Frischling
  • *
  • Beiträge: 47
  • Geschlecht: Männlich
Moin.

Habe auf Anregung eines IBM Dokumentes ein script geschrieben, welches die monatliche Datenbankwartung (fixup, compact, updall) auf Multicoremaschinen extrem beschleunigen kann.

Alle Wartungs-Programme können ja per Eingabedatei mit einer Auflistung der Datenbanken die man verarbeiten möchte, gefüttert werden. Die Eingabedatei muss die Dateiendung ".ind" aufweisen und wird dem jeweiligen Programm als Parameter übergeben.

Was macht das script?
  • Ermittelt die Anzahl physischer CPU Cores
  • Generiert pro Core je eine Inputdatei mit den Lotus Notes Datenbanken (*.nsf)
  • Beendet den Domino Server kontrolliert
  • Startet im Hintergrund pro CPU-Core ein script mit den Wartungsprogrammen und einer Inputdatei als Parameter
  • Wartet bis alle Wartungsscripts beendet wurden
  • Startet den Domino Server wieder

Die Scripts sind rudimentär und ohne größere Fehlerabfragen. Sie können durch Anpassen der Variablen relativ leicht geändert werden. Veränderungen/Verbesserungen dürfen gerne hier gepostet werden!

Steuerndes Script #1
Code
#!/bin/bash

# Domino Binaries
DOMINO_DIR=/opt/ibm/lotus

#Notes Data
NOTES_DIR=/notesdata

# Domino Logfiles
LOG_DIR=/var/log/notes

# Domino Server Wartungsscript
MNT_SCRIPT=/usr/sbin/dominomnt2.sh

# Anzahl CPU Cores ermitteln
CORES=`cat /proc/cpuinfo | grep -m 1 "cpu cores" | awk '{print $NF}'`

echo $CORES "CPU Kerne für Verarbeitung gefunden."

# Domino Server beenden
echo "Lotus Domino Server wird kontrolliert beendet..."
cd $NOTES_DIR
su notes -c "$DOMINO_DIR/bin/server -quit"

count=0
NOTES_RUNNING=`ps -fu notes | grep $DOMINO_DIR | awk '{print $2}'`
while [ "$NOTES_RUNNING" ] ; do
        sleep 10
        count=`expr count +1`
        if [ $count -eq 30 ] ; then
                rm "~notes.lck"
                su notes -c "$DOMINO_DIR/bin/nsd -kill"
                break
        fi
        NOTES_RUNNING=`ps -fu notes | grep $DOMINO_DIR | awk '{print $2}'`
done
echo "Domino Server beendet!"

# Alte temporäre .ind Files löschen
echo -n "Lösche alte Eingabedateien..."
rm /tmp/_notesdbin*.ind
echo "fertig!"

# Wartungsscripts starten
for (( i=1;  i <= CORES; i++ ))
do
   echo "Starte Wartungsscript #"$i" auf Eingabedatei /tmp/_notesdbin"$i".ind"
   su notes -c "$MNT_SCRIPT /tmp/_notesdbin$i.ind &"
   sleep 3
done

# Check ob alle Wartungsscripts beendet wurden
SCRIPT_RUNNING=`ps -fu notes | grep $MNT_SCRIPT | awk '{print $2}'`
while [ "$SCRIPT_RUNNING" ] ; do
        sleep 60
        SCRIPT_RUNNING=`ps -fu notes | grep $MNT_SCRIPT | awk '{print $2}'`
done

# Domino Server wieder starten
echo "Alle Wartungsscripts beendet, Domino Server wird gestartet!"
cd -
/etc/init.d/domino start

exit 0

Worker Script (Wird vom Steuerscript aufgerufen)
Code
#!/bin/bash

TODAY=`date +"%Y.%m.%d"`   # yyyy.mm.dd

# Domino Binaries
DOMINO_DIR=/opt/ibm/lotus

#Notes Data
NOTES_DIR=/notesdata

# Domino Logfiles
LOG_DIR=/var/log/notes

#Inputfile in Parameter #1
DB_INFILE=$1

cd $NOTES_DIR

#Fixup starten
$DOMINO_DIR/bin/fixup -J -F $DB_INFILE >> "$LOG_DIR/$TODAY_fixup.log"

#Compact starten
$DOMINO_DIR/bin/compact -c $DB_INFILE >> "$LOG_DIR/$TODAY_compact.log"

#updall starten
$DOMINO_DIR/bin/updall -R $DB_INFILE >> "$LOG_DIR/$TODAY_updall.log"

exit 0

Benutzung der Scripts auf eigene Verantwortung!
2 x Domino Server 9.0.1 auf Ubuntu 10.04 LTS, ~650 Windows Notes Clients 9.0.1

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Schreib doch in das Haupt-Script Deinen Namen & URL hinein, damit wir beim weiterverteilen für Dich Werbung machen können ;)

BTW: Hast Du eine Liste der Docs, die Dich dazu inspiriert haben?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Exordium

  • Frischling
  • *
  • Beiträge: 47
  • Geschlecht: Männlich
Ich versuche die docs nochmal zu finden. Wie bei IBM üblich, musste man sich erstmal kreuz und quer durch support-docs, redbooks und wikis hangeln, um die Informationen einzusammeln.

Noch ein Tipp: Man kann den CORES-Counter natürlich auch manuell setzen. Es macht z.B. keinen Sinn, 4 x copy-style compact auf nem Quadcore laufen zu haben, wenn der Rechner nur über eine Festplatte und kein Diskarray oder SAN verfügt. Da wird der Platten-I/O dann schnell zum Flaschenhals.

Meine pers. Daten werde ich im Script V2 preisgeben. Seht diese hier, auch wenn sie funktionsfähig getestet sind, als Grundgerüst zum eigenen Ausbau bzw. Weiterentwicklung an.

Grüße
Markus
2 x Domino Server 9.0.1 auf Ubuntu 10.04 LTS, ~650 Windows Notes Clients 9.0.1

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Was Du noch beim compact einarbeiten könntest:
Zitat
# nn - Execute up to nn compactions in parallel using different threads.
Quelle: http://www.leadershipbynumbers.com/ms.nsf/archive?openview&type=Category&key=Secrets%20of%20the%20Administration%20Guild
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Exordium

  • Frischling
  • *
  • Beiträge: 47
  • Geschlecht: Männlich
Danke für den Tipp. Der compact stellt tatsächlich ein kleines Problem dar. Auf meinem Testserver (IBM 3550 M2, Xeon Quadcore, 8GB RAM, 6x160GB SAS HDD mit Hardware Raid 5) liefen der fixup und updall um Faktor 2-3 schneller durch, bei 4 gestarteten Instanzen. 4 parallele compact tasks lasteten aber das Diskarray zu über 90% aus, während die CPU fast einschlief. Hier ist also der Disk-IO das Nadelöhr.
Der Multithread compact ließe Spielraum für eine andere Idee... Ich melde mich wieder...  ;D

2 x Domino Server 9.0.1 auf Ubuntu 10.04 LTS, ~650 Windows Notes Clients 9.0.1

Offline J Parlin

  • Senior Mitglied
  • ****
  • Beiträge: 390
Moin Moin,

ich hake hier mal ein und möchte mal fragen, wie ihr Eure "Wartungs-Programme" plant ( updall, compact, design, catalog ).
Mit zunehmender Volumina verschieben sich doch irgendwann die Wartungszeitfenster ...

PS: weiß jemand, ob es ein adäquates Script für Windows Server 2008 gibt.

Danke

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz