iperf ein Bandbreiten Messtool

Heute will ich mal ein kleines anerkanntes Tool zur Bandbreitenmessung vorstellen. iperfist der Name und Bandbreiten-/Durchsatzmessung die Aufgabe. Es ist eine client/server Applikation, also muss es auf beiden Seiten installiert sein. Um diesen kleinen Kerl zu installieren, habe ich das Standard-Repository von dem System genutzt, auf dem ich mich befand. Auf einem RHEL muss man sich das Repo: epel-repo hinzufügen. Auf ubuntu or debian nutzt man dann einfach

sudo apt-get install iperf

Sobald es auf beiden Systemen installiert ist muss es nur noch gestartet werden. Irgendwie so:

iperf -s
# Falls ein anderer Port genutzt werden soll
iperf -s -p 12345

Die Ausgabe sollte in etwa so aussehen (Standardport)

[root@weichert ~] # iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

Auf der Clientseite kann man sich nun mit dem Server verbinden. Mit dem Parameter -r kann man direkt bidirektional testen. Mit -P 5 öffnet man 5 parallele Streams. -w passt die TCP Window Size an.

Dann lasst uns das Thema einmal anschauen.

# Start the test on clientside 
[root@test-vm ~] # iperf -c weichert.it -P 5
------------------------------------------------------------
Client connecting to weichert.it, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  7] local 85.114.145.4 port 36718 connected with 85.114.145.4 port 12345
[  3] local 85.114.145.4 port 36714 connected with 85.114.145.4 port 12345
[  4] local 85.114.145.4 port 36715 connected with 85.114.145.4 port 12345
[  5] local 85.114.145.4 port 36716 connected with 85.114.145.4 port 12345
[  6] local 85.114.145.4 port 36717 connected with 85.114.145.4 port 12345
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  6.19 GBytes  5.34 Gbits/sec
[  4]  0.0-10.0 sec  4.62 GBytes  3.98 Gbits/sec
[  5]  0.0-10.0 sec  4.76 GBytes  4.11 Gbits/sec
[  6]  0.0-10.0 sec  5.83 GBytes  5.03 Gbits/sec
[  7]  0.0-10.0 sec  6.35 GBytes  5.46 Gbits/sec
[SUM]  0.0-10.0 sec  27.8 GBytes  23.8 Gbits/sec
# The server generate some similiar output 
[root@weichert ~] # iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 85.114.145.4 port 12345 connected with 85.114.145.4 port 36714
[  5] local 85.114.145.4 port 12345 connected with 85.114.145.4 port 36715
[  6] local 85.114.145.4 port 12345 connected with 85.114.145.4 port 36716
[  7] local 85.114.145.4 port 12345 connected with 85.114.145.4 port 36717
[  8] local 85.114.145.4 port 12345 connected with 85.114.145.4 port 36718
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  6.19 GBytes  5.31 Gbits/sec
[  5]  0.0-10.0 sec  4.62 GBytes  3.96 Gbits/sec
[  7]  0.0-10.0 sec  5.83 GBytes  5.01 Gbits/sec
[  6]  0.0-10.0 sec  4.76 GBytes  4.09 Gbits/sec
[  8]  0.0-10.0 sec  6.35 GBytes  5.43 Gbits/sec
[SUM]  0.0-10.0 sec  27.8 GBytes  23.7 Gbits/sec

So weit so gut…, aber was machen wenn iperf nicht installiert ist, oder man es aus irgendwelchen Gründen nicht installieren kann/darf? Schaut euch dafür mal dd. Ich habe dazu mal ein kleines HowTo mit dd und ssh/netcat geschrieben.


Test der Bandbreite mit dd oder/und netcat

Wenn man kein iperf zur hand hat, weil man es auf dem Server nicht installieren darf oder kann, wird mein iperf Artikel nicht weiterhelfen. Es gibt aber natürlich noch andere Wege und Mittel die Bandbreite und den Durchsatz zu prüfen. Diese sind meistens sogar Standardmäßig installiert.

Alternative Eins: netcat Mit netcat können wir etwas ähnliches zur Ermittlung tun. Als erstes lassen wir netcat auf einer Seite auf einem Port lauschen, dann bauen wir von der zweiten Seite die Verbindung auf

# Serverside
[root@weichert ~] # netcat -vvnlp 12345 > /dev/null
listening on [any] 12345 ...
connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 38340
sent 0, rcvd 149621964

# Clientside
time yes|netcat -v localhost 12345 > /dev/null
localhost [127.0.0.1] 12345 (?) open

real    0m41.912s
user    0m40.796s
sys     0m7.252s

Nun etwas Mathe, yeah ich weiß – wir alle lieben Mathe ;-). Multipliziere die bytes rcvd mit 8 um die gesamten übertragenen bits zu bekommen, dann durch die gelaufene Zeit: Ergebnis ist 28559 MBit/s => 28Gbit/s

Alternative Zwei: dd über ssh oder netcat Nun mal ein Blick zu dd. Hier schicken wir Daten über ssh oder netcat zu einem Ziel.

dd if=/dev/zero bs=1024 count=512 | netcat -v localhost 12345
# Ergebnis wird irgendwas sein wie
536870912 bytes (537 MB) copied, 3.42426 s, 182 MB/s
# mit ssh
dd if=/dev/zero bs=1024 count=512 | ssh user@testhost.de 'cat > /dev/null'
536870912 bytes (537 MB) copied, 3.42426 s, 182 MB/s

Auch hier Mathe, multipliziere die 182MB/s mit 8 um Mbit/s

Ich hoffe das hilft euch weiter, viel spaß beim spielen.


Goldeneye: Vorsicht neue Ransomware unterwegs

Seit gestern Abend macht sich ein neuer Verschlüsselungstrojaner breit. Dieser tarnt sich als Bewerbungsmail, in sehr guten Deutsch geschrieben, mit einer Exceldatei im Anhang, welche zur Bearbeitung das Aktivieren von Bearbeitungsfunktionen (Makros und Ähnliches) fordert. Aktiviert man die Bearbeitungsfunktionen, so werden über eingebettete Makros zwei EXE-Dateien angelegt und anschließend ausgeführt. Danach wird ein Neustart des Systems erzwungen und eine „gefälschte“ Datenträgerkontrolle/Dateisystemprüfung durchgeführt, hier werden nun die Dateien verschlüsselt und anschließend die Lösegeldforderung gestartet. Nach aktuellem Stand sind nur Windows 7, Windows 10 und Windows 2008 Server betroffen, dies kann sich aber jederzeit ändern. Laut einigen Berichten auf Heise.de – Aufgepasst neuer Verschlüsselungstrojaner Goldeneye sind auch Netzwerkfreigaben betroffen.

Was könnt ihr tun?

Was wenn es zu spät ist?

  • Rechner ausschalten!
  • Rechner zum Experten! 🙂

Edit 08.12.2016 – 07:44: Es gibt ein paar neue Erkenntnisse: Es scheint so, dass die Entwickler von Goldeneye gezielt Personalabteilungen und -verantwortliche anschreiben. Diese Daten haben die Entwickler wohl direkt vom Arbeitsamt gesammelt.


Der Moment wenn…

… du an einen Network Delivery Lead schreibst…

Diese Woche habe ich Kontakt zu den Netzwerkspezialisten einer großen weltweitagierenden Firma gehabt. Grandios… Wir können über einen Ihrer VPN-Tunnel ein gewisses Ziel nicht erreichen.

Geschickt habe ich Ihm die IP-Adressen, sowie ein netcat auf die Destination IP und den Destination Port. Alles Numerisch…

Antwort:

Hello,

Thanks to Ullrich for translating this for me 🙂 As far as I can see here, this is some kind of DNS problem, what has this to do with the VPN?

Best regards,

Name

Network Delivery Lead


DNS Timeouts in DUALSTACK Umgebungen

Vor einigen Tagen hatten wir auf unseren Oracle RAC Servern ein seltsames Phänomen mit TNSListener Timeouts.

EM Event: Critical:LISTENER_SCAN3_rac-scan - Listener response to a TNS ping is 5,010 msecs

Nach einiger Recherche und viel Analyse fiel auf, dass die betroffenen Server bei DNS-Anfragen den A-Record und den AAAA-Record (quadA-Record) als Ergebnis erwarteten. Dies konnte man im TCPDUMP sehr schön sehen.

2016-10-13 15:22:54.247889 IP (tos 0x0, ttl 64, id 11169, offset 0, flags [DF], proto UDP (17), length 75)
    11.20.22.101.23397 > 11.20.41.10.domain: [bad udp cksum 5c97!] 7836+ A? rac-scan.domain.local. (47)
2016-10-13 15:22:54.247895 IP (tos 0x0, ttl 64, id 11170, offset 0, flags [DF], proto UDP (17), length 75)
    11.20.22.101.23397 > 11.20.41.10.domain: [bad udp cksum 6ac8!] 53901+ AAAA? rac-scan.domain.local. (47)
2016-10-13 15:22:54.248504 IP (tos 0x0, ttl 127, id 30819, offset 0, flags [none], proto UDP (17), length 123)
    11.20.41.10.domain > 11.20.22.101.23397: [udp sum ok] 7836* q: A? rac-scan.domain.local. 3/0/0 rac-scan.domain.local. [1h] A 11.20.22.104, rac-scan.domain.local. [1h] A 10.60.22.105, rac-scan.domain.local. [1h] A 11.20.22.103 (95)
2016-10-13 15:22:59.251573 IP (tos 0x0, ttl 64, id 11171, offset 0, flags [DF], proto UDP (17), length 75)
    11.20.22.101.23397 > 11.20.41.10.domain: [bad udp cksum 5c97!] 7836+ A? rac-scan.domain.local. (47)

Nun dieses Verhalten, das beide Einträge abgefragt werden, ist in DUALSTACK Umgebungen völlig normal und gewollt. Das Problem ist nur, dass einige Betriebssystemversionen und manche Hardware die Anfragen über den selben Socket rausschicken, aber nach der ersten Antwort den Socket bereits wieder schließen. Dadurch wartet die zweite Anfrage bis auf den Sankt Nimmerleinstag und rennt vor die Wand (den Timeout).

Nun kann man IPv6 Ausschalten, wenn man es nicht dringend benötigt, oder man kann den DNS-Resolver eine von zwei Optionen mitgeben.

man resolv.conf
[... gekürzte Ausgabe ...]
...
single-request (since glibc 2.10)
     sets RES_SNGLKUP in _res.options.  By default, glibc performs IPv4 and IPv6 lookups in parallel since version 2.9.  Some appliance DNS servers cannot handle these queries properly and make the
    requests time out.  This option disables the behavior and makes glibc perform the IPv6 and IPv4 requests sequentially (at the cost of some slowdown of the resolving process).

single-request-reopen (since glibc 2.9)
    The  resolver uses the same socket for the A and AAAA requests.  Some hardware mistakenly only sends back one reply.  When that happens the client sytem will sit and wait for the second reply.
    Turning this option on changes this behavior so that if two requests from the same port are not handled correctly it will close the  socket and  open  a  new  one  before  sending  the  second
    request.
...

single-request sorgt dafür, dass IPv6 Lookups und IPv4 Lookups parallel laufen. Hier können allerdings einige DNS-Server nicht mit umgehen. single-request-reopen sorgt für, dass neue Sockets geöffnet werden.

Wir haben nun die Option single-request-reopen in der resolv.conf hinzugefügt. Bisher rennt nun alles wie gewünscht.

[root@rac01 ~]# cat /etc/resolv.conf
options single-request-reopen
search domain.local
nameserver 11.20.41.10
nameserver 11.20.41.11

Zabbix-Userparameter – Überprüfen des multipathing

Hier sind ein paar „quick & dirty“ zusammengezimmerte Userparameter für Zabbix :), welche zum Einen prüfen, wieviele Pfade pro Device zur Verfügnung stehen, sowie einmal schauen, ob sich Pfade in einem Fehlerstatus befinden.

Anzahl der Pfade

UserParameter=Count.Multipath.Devices, echo $(( $(echo 'show paths' | sudo /sbin/multipathd -k | grep ready | wc -l) / $(echo 'show maps' | sudo /sbin/multipathd -k | grep dm | wc -l) ))

Hier wird der multipathd -k aufgerufen und die Pfade und Maps abgefragt. Ist die Summe aus Pfade / Maps = 4 so wird davon ausgegangen, dass alle 4 Pfade für das jeweilige Device da ist.

Fehlerstatus Überprüfung

UserParameter=Check.Failed.Path, echo 'show paths' | sudo /sbin/multipathd -k | awk '/failed/||/faulty/||/shaky/||/offline/ {print $2,$5,$6,$7}'|wc -l

Hier wird die Ausgabe von echo 'show path' | multipathd -k durch einen awk geschleift und geprüft ob einer dieser Fehlerstatus auftaucht. – shaky / faulty Ist ein Pfad verbunden und bereit für I/O ist der Status „online“ ansonsten wird er auf faulty oder shaky gesetzt. – failed Ist ein DM down wird es als „failed“ markiert. Ist das selbe wie bei „faulty“. – offline Ist ein SCSI Device deaktivert, wird der Online_Status auf offline gesetzt.

Der Rückgabewert ist 0, sofern keine Fehler erkannt werden. Ist also der Rückgabewert höher als 0, so muss interveniert werden.

Trigger

Im Zabbix sind Trigger eingerichtet, welche dann entsprechend des Verwendungszweckes auf die Werte reagieren.

Berechtigungen

Um multipathd in den Zabbixuserparametern zu nutzen, ist es erforderlich die Berechtigungen anzupassen. Dies wird im Artikel SUDO Einstellungen für Zabbix.


SUDO Einstellungen für Zabbix-User-Parameter

Damit Zabbix die verwendeten Tools, wie zum Beispiel Multipath verwenden kann, müssen die Berechtigungen natürlich angepasst werden.

Über visudo werden die jeweiligen SUDO-Einstellungen angepasst.

Da Zabbix nicht zwingend über ein Terminal tty nutzt, sollte man dies für die Verbindungen von Zabbix ruhig deaktiveren… Entweder man kommentiert die Zeile Defaults requiretty aus, oder man fügt ein Defaults:zabbix !requiretty ein. Entscheidet man sich für Methode Eins, so wird für alle SUDO Aufrufe die Anforderung einer TTy. Bei Methode Zwei wird dies nur für den User Zabbix deaktivert.

Nun müssen die Berechtigungen für die Tools/Programme und den User gesetzt werden. Hier gilt natürlich aus Securitysicht der Grundsatz: „as little as possible, as much as necessary“ / „So wenig wie möglich, soviel wie nötig.“ . Also fügen wir folgene Zeile hinzu:

zabbix ALL=NOPASSWD: /sbin/multipathd -k

Weitere Tools/Programme/Commands/Scripte/usw können per Komma separiert angefügt werden. Es können auch Zugriffe auf Dateien freigegeben werden.


Oracle RAC Backup über Backup Exec

Sämtliche beschriebenen Konfigurationen müssen auf allen RAC-Knoten durchgeführt werden. Alle Shell-Output-Schnipsel sind Beispiele.

Vorarbeiten

Oratab und Beoratab

Bei RAC-Instanzen muss zwingend folgender Schritt vorher erledigt werden.

cp /etc/oratab /etc/VRTSralus/beoratab

Nun noch die Berechtigungen für die beoratab setzen:

chown root:beoper /etc/VRTSralus/beoratab
chmod g+w /etc/VRTSralus/beoratab

Nun müssen die Einträge angepasst werden…

-MGMTDB:/opt/grid/12.1.0.2:N            # line added by Agent
+ASM1:/opt/grid/12.1.0.2:N              # line added by Agent
DB1_RAC:/opt/oracle/product/12.1.0.2/dbhome_1:N               # line added by Agent
DB2_RAC:/opt/oracle/product/12.1.0.2/dbhome_1:N            # line added by Agent
DB3_RAC:/opt/oracle/product/12.1.0.2/dbhome_1:N             # line added by Agent
DB4_RAC:/opt/oracle/product/12.1.0.2/dbhome_1:N            # line added by Agent
DB5_RAC:/opt/oracle/product/12.1.0.2/dbhome_1:N              # line added by Agent

Die Oracle SID Einträge (*Die Einträge vor dem „:“ *) müssen nun auf die Oracle SID der jeweiligen Node geändert werden. Die Oracle SID kann man unkompliziert über ps -ef | grep pmon abfragen. Hier kommt folgendes Ergebnis:

[root@rac01 log]# ps -ef | grep pmon
oracle    7123     1  0 Sep07 ?        00:02:13 asm_pmon_+ASM1
root     13413 31904  0 12:43 pts/6    00:00:00 grep pmon
oracle   14783     1  0 Sep08 ?        00:03:12 ora_pmon_DB1
oracle   19193     1  0 Sep08 ?        00:04:00 ora_pmon_DB2
oracle   19198     1  0 Sep08 ?        00:03:15 ora_pmon_DB3
oracle   19205     1  0 Sep08 ?        00:03:16 ora_pmon_DB4
oracle   19259     1  0 Sep08 ?        00:03:33 ora_pmon_DB15

Die Einträge für DB1, DB2, usw. müssen auf DB11, DB21, usw… angepasst werden, Da hier die lokalen Instanznamen angesprochen werden, im Backupexec wird dann die Zuordnung zum RAC-Namen erstellt. Am schnellsten geht dies über folgenden sed Befehl: sed -i 's/_RAC/1/g' /etc/VRTSralus/beoratab

Info: Hier wird einfach das _RAC durch eine 1 ersetzt.

Gruppenzugehörigkeiten

Der User Oracle muss zusätzlich ein Mitglied der Gruppe „beoper“ sein. Dies lässt sich per id oracle überprüfen.

id oracle
uid=501(oracle) gid=503(oinstall) groups=503(oinstall),501(asmdba),504(dba),505(oper)

Ist der User kein Mitglied der Gruppe, erweitern wir seine Gruppenzugehörigkeit über usermod.

usermod -G asmdba,dba,oper,beoper,oinstall oracle
id oracle
uid=501(oracle) gid=503(oinstall) groups=503(oinstall),501(asmdba),504(dba),505(oper),506(beoper)

Agent konfigurieren

Nun da die Einträge in der /etc/VRTSralus/beoratab angepasst sind, können wir die Konfiguration des Remote Agents von Backupexec anpassen. Dazu brauchen wir die: – Passwörter des Oracle-Systemusers – Den Backupaccount und das zugehörige Passwort der Datenbanken + Der Datenbankuser benötigt das SYSBACKUP Recht auf der jeweiligen Datenbank. + Weiterhin ist das Oraclepasswordfile der jeweiligen Datenbankinstanz um sysbackup=y zu erweitern.

Sind die Vorarbeiten erledigt, können wir die Konfiguration für die Oracle-Sicherung über den Backup Exec mit /opt/VRTSralus/bin/AgentConfig anpassen

Die Systemcredentials werden im Root-Kontext angelegt:

/opt/VRTSralus/bin/AgentConfig

Symantec Backup Exec Remote Agent Utility
    Choose one of the following options:
    1. Configure database access
    2. Configure Oracle instance information
    3. Quit
    Please enter your selection: 1

Configuring machine information
    Choose one of the following options:
    1. Add system credentials for Oracle operations
    2. Edit system credentials used for Oracle operations
    3. Remove system credentials used for Oracle operations
    4. View system credentials used for Oracle operations
    5. Quit
    Please enter your selection: 1
    Enter a user name that has local system credentials: oracle
    Enter the password:
    Re-enter password:
    Validating credentials…….
    Do you want to use a custom port to connect to the media server during Oracle operations? (Y/N): N
    Commit Oracle operation settings to the configuration file? (Y/N): Y
    SUCCESS: Successfully added the entry to the configuration file. 

Nun wird das Script beendet um die Datenbanken-Instanzinformationen zu hinterlegen. Da wir einen RAC-Knoten bearbeiten, muss dies im Oracle-User-Kontext durchgeführt werden, da es sonst zu Problemen bei der Authentifizierung kommen kann.

Symantec Backup Exec Remote Agent Utility
    Choose one of the following options:
    1. Configure database access
    2. Configure Oracle instance information
    3. Quit
Note: If the Oracle instance you want to protect is part of an Oracle RAC setup with version 12c, then before selecting the 'Configure Oracle instance information' option, please switch to the Oracle user.
    Please enter your selection: 2

Configuring the Oracle Agent
    Choose one of the following options:
    1. Add a new Oracle instance to protect
    2. Edit an existing Oracle instance
    3. Delete an existing Oracle instance
    4. View Oracle instance entries that have been added in the Remote Agent Utility
    5. Quit
    Please enter your selection: 1
    Select an Oracle instance to configure
        Entry 1. DB1
        Entry 2. DB2
        Entry 3. DB3
        Entry 4. DB4
        Entry 5. DB5
        Enter the number 0 to go back
    Enter your selection: 1
    Enter the Oracle database SYSBACKUP user name: SYSBACKUP
    Enter the Oracle database SYSBACKUP password:
    Re-enter password:
    Validating credentials.......
    Enter the auxiliary instance path for PDB restores:

Der BackupServer muss über die folgende IP aus dem Netz erreichbar sein. Da der BackupServer meist Multihomed ist, ist die Wahrscheinlichkeit sehr hoch, dass dieser ein Bein im selben Netz hat, wie der zu sichernde Server.

    Enter the Backup Exec server name or IP address: <IP.DES.BACKUP.SERVERS>
    Do you use a recovery catalog? (Y/N):Y
    Enter the recovery catalog TNSNAME: <CATALOG_TNSNAME>
    Enter the recovery catalog user name: rman_DB1
    Enter the recovery catalog password:
    Re-enter password:
    Validating credentials.......
    Do you want to use a customized job template? (Y/N): N
    Commit Oracle operation settings to the configuration file? (Y/N): Y
    SUCCESS: Successfully added the entry to the configuration file.

Diesen Schritt wiederholt man für jede einzelne Datenbanken-Instanz, man kann auch die entsprechenden Einträge aus der Configfile /etc/VRTSralus/ralus.cfg kopieren und anpassen.

Agent neustarten

Nach jeder Änderung an der /etc/VRTSralus/ralus.cfg (Das Tool AgentConfig führt ebenfalls Änderungen an der ralus.cfg durch) muss der Dienst über folgenden Befehl neugestartet werden.

/etc/init.d/VRTSralus.init restart
## Output from shell
Stopping Symantec Backup Exec Remote Agent ..
Stopping Symantec Backup Exec Remote Agent:                              [  OK  ]
Starting Symantec Backup Exec Remote Agent ......
Starting Symantec Backup Exec Remote Agent:                              [  OK  ]

Konfiguration im Backup Exec

Im Backup Exec müssen nun Login-Kontos für die einzelnen RAC-Knoten und eine virtuelle RAC-Node eingerichtet werden. Bei zwei RAC-Nodes sind also 3 Einträge anzulegen. Hierbei ist wichtig, dass ein Oracle-Systemuser und einen Datenbank-Account eingetragen wird. Diese sollten sich mit den auf den Nodes konfigurierten Einträgen decken.

Unter Backup und Widerherstellung tauchen die RAC-Instanzen automatisch im folgenden Schema auf RAC-<Datenbankname>-<Datenbank-ID> und können gesichert werden.


Zabbix Sizing

Zabbix, ein sehr umfangreiches Monitoringsystem, welches eine sehr schöne Alternative zu den bekannten Monitoringsystemen Cacti und Nagios. Am Anfang eines jeden Monitoringsystems steht die Plannung für Aufbau und natürlich das Sizing der eigentlich Hardwareressource. Die Anforderungen werden natürlich direkt von Zabbix geliefert und sind hier zu finden: Zabbix Requirements

Ein weiterer interessanter Aspekt ist in diesem Fall natürlich auch das Sizing der Datenbank, welche die Einstellungen und die historischen Daten der Zabbixinstallation hält. In dem Unternehmen, in dem ich aktuell arbeite setzen wir Zabbix für so ziemlich jegliche Art von Überwachung ein und somit kommt einiges an Daten zusammen. Um nach Möglichkeit das Datenbanksizing einfach und schnell zu ermitteln habe ich in diesem Zusammenhang einen Zabbix-DB-Calculator entwickelt. Dieser berechnet je nach Anforderung direkt die geforderte Datenbankgröße. Hier geht es zum Zabbix DB Calculator, ach als schnöde Exceldatei gibt es diesen natürlich auch 🙂 Zabbix DB Calculator – EXCEL

Weitere Artikel zu Zabbix werden sicher folgen 🙂


Dokumentation zum MultipathD

Dokumentation zum MultipathD

Der multipathd unterstüzt den DeviceMapper bei der Konfiguration von Festplatten, die über mehrere Pfade angeschlossen sind.

Wichtige Files

Wichtig für den multipathd sind folgende Dateien: – /etc/multipath.conf Enthält die eigentliche Konfiguration für den multipathd… — Blacklisting — Ausnahmen — Zuordnungen — usw.

Folgende Files werden durch den multipathd generiert und verwaltet.

  • /etc/multipath/bindings

Zuordnungen der Devices

  • /etc/multipath/wwids

Enthält die wwids

Tools

Das Tool zum Erstellen und Bearbeiten der Konfigurationsfiles ist mpathconf. Hierüber lässt sich die /etc/multipath.conf anpassen. Man kann die /etc/multipath.conf allerdings auch manuell bearbeiten… Beispiel:

defaults {
         udev_dir               /dev
         no_path_retry          1
         polling_interval       10
         path_checker           tur
         path_grouping_policy   group_by_prio
         user_friendly_names    yes
         selector               "round-robin 0"
         max_fds                "4128"
}

blacklist {
        devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
        devnode "^hd[a-z]"
        devnode "^dcssblk[0-9]*"
        wwid "*"
}

blacklist_exceptions {
        wwid "3600d0230000000000e13955cc3757802"
        wwid "3600d0230000000000e13955cc3757801"
        wwid "3600d0230000000000e13955cc3757800"
        wwid "3600d0230000000000e13955cc3757803"
        wwid "3600d0230000000000e13955cc3757804"
}
multipaths {
        multipath {
                uid 54321
                gid 0
                wwid "3600d0230000000000e13955cc3757800"
                mode 0660
                alias AliasA
        }
        multipath {
                uid 54321
                gid 0
                wwid "3600d0230000000000e13955cc3757801"
                mode 0660
                alias AliasB
        }
        multipath {
                uid 54321
                gid 0
                wwid "3600d0230000000000e13955cc3757802"
                mode 0660
                alias AliasC
        }
        multipath {
                uid 54321
                gid 0
                wwid "3600d0230000000000e13955cc3757803"
                mode 0660
                alias AliasD
        }
        multipath {
                uid 54321
                gid 0
                wwid "3600d0230000000000e13955cc3757804"
                mode 0660
                alias AliasE
        }
}

Die File ist irgendwie selbst erklärend 🙂

WWIDs ermitteln

An die WWIDs kommt man wie folgt: mit dem Befehl scsi_id -g -u /dev/sdb wird die WWID für das Device sdb ausgegeben. Über eine Schleife wie zum Beispiel: for device in /dev/sd*; do echo "Device: ${device} $(scsi_id -g -u ${device})"; done wird für alle erkannten Devices die WWID ausgeworfen. Die Ausgabe sieht in etwa wie folgt aus:

> Device: /dev/sdb 3600d0230000000000e13955cc3757800
> Device: /dev/sdc 3600d0230000000000e13955cc3757801
> Device: /dev/sdd 3600d0230000000000e13955cc3757802
> Device: /dev/sde 3600d0230000000000e13955cc3757803
> Device: /dev/sdf 3600d0230000000000e13955cc3757804
> Device: /dev/sdg 3600d0230000000000e13955cc3757800
> Device: /dev/sdh 3600d0230000000000e13955cc3757801
> Device: /dev/sdi 3600d0230000000000e13955cc3757802
> Device: /dev/sdj 3600d0230000000000e13955cc3757803
> Device: /dev/sdk 3600d0230000000000e13955cc3757804
> Device: /dev/sdl 3600d0230000000000e13955cc3757800
> Device: /dev/sdm 3600d0230000000000e13955cc3757801
> Device: /dev/sdn 3600d0230000000000e13955cc3757802
> Device: /dev/sdo 3600d0230000000000e13955cc3757803
> Device: /dev/sdp 3600d0230000000000e13955cc3757804
> Device: /dev/sdq 3600d0230000000000e13955cc3757800
> Device: /dev/sdr 3600d0230000000000e13955cc3757801
> Device: /dev/sds 3600d0230000000000e13955cc3757802
> Device: /dev/sdt 3600d0230000000000e13955cc3757803
> Device: /dev/sdu 3600d0230000000000e13955cc3757804

Diese müssen dann in der multipath.conf entsprechend gepflegt werden.

Autoconfig über multipathd

Sind alle Konfigurationsfiles angepasst, kann der multipathd einfach restartet werden service multipathd restart und der DeviceMapper weist alles sauber zu. Zusätzlich sollte geprüft werden ob sich der multipathd im Autostart befindet. chkconfig multipathd --list Falls nicht chkconfig multipathd on.