Monatlicher Neustart, aber nur jeden ersten Montag

Hallo Zusammen,

ich habe letztens für einen Kunden einen monatlichen Neustart, für jeden ersten Montag, auf einigen Systeme einbauen sollen. Sounds simple 🙂 Der Cronjob baut sich wie folgt auf (wir wir alle wissen):

M H DoM M DoW       BEFEHL
Beispiel:
*/10 * * *          echo "Ich laufe alle 10 Minuten" >> /var/log/run.txt

[... Auszug man 5 cronjob ...]
   The time and date fields are:

          field          allowed values
          -----          --------------
          minute         0-59
          hour           0-23
          day of month   1-31
          month          1-12 (or names, see below)
          day of week    0-7 (0 or 7 is Sun, or use names)

„According to this“ würde der Cronjob ja wie folgt aussehen…

0 5 1-7 * 1       shutdown -r now

Hier greift nun aber ein Sonderfall für den Crontab. Denn die Angabe an „Day of Month“ und „Day of Week“ werden ODER verknüpft. Es würde durch den Crontab also wie folgt aufgelöst. „Führe aus an: Minuten UND Stunden UND (Tage ODER Wochentage) UND Monate.

Behelfen kann man sich hier nur über ein Script, welches eine Bedingung prüft, oder über einen Einzeiler der ebenfalls prüft ob Montag ist. Ich habe mich für die letztere Variante entschieden:

0 5 1-7 * * [ "$(LC_ALL=C date '+\%a')" = "Mon" ] && echo "Restart System by Cronjob" >> /var/log/messages  &&/sbin/shutdown -r now

Hinter der normalen Cronjobangabe für „Führe aus um 5 Uhr Morgens vom 1 bis zum 7 jeden Monat“ folgt die Prüfung ob der aktuelle Tag ein Montag ist. Das LC_ALL=C sorgt für Gleichheit der Sprache auf allen Systemen. Die Info in die Logfile /var/log/messages habe ich zur Info für andere Administratoren hinterlegt. Anschließend folgt der Reboot an sich.


LVM und wie man es anfasst… Teil 1 – Erweiterung von Mountpoints mit zusätzlicher Festplatte

Immer wieder stellt man fest, dass für einige LVM noch Hexenwerk ist. Sofern man allerdings noch nicht mit BTRfs oder vergleichbaren Filesystemen spielt, ist LVM immernoch sehr attraktiv. Denn man erhöht die Flexibilität bei Erweiterungen von Mountpoints und Verwaltung der physikalischen Festplatten.
Es gibt sicherlich noch viele weitere Vorteile, die will ich aber nicht alle aufzählen. 🙂

Erweiterung von Mointpoints

Sofern noch Platz in der Volumegroup ist, kann direkt beim lvextend loslegen. Herausfinden könnt ihr das über:

root@servername:~# vgs
  VG                #PV #LV #SN Attr   VSize   VFree
  random-vg-name      1   2   0 wz--n- 149.76g 8.00m

Hier wären nun nur 8MB frei.

Erweitern des VGs

Nehmen wir an wir haben eine neue Festplatte eingebaut – Virtuell oder Physikalisch spielt natürlich keine Rolle.

Nun müssen wir herausfinden, wie die neue Festplatte im System heißt, dazu können wir zum einen unter dmesg oder in die /proc/partitions schauen:

dmesg | tail -n 7

[17986986.088284] sd 3:0:0:0: [sdb] 104857600 512-byte logical blocks: (53.6 GB/50.0 GiB)
[17986986.088292] sd 3:0:0:0: Attached scsi generic sg2 type 0
[17986986.088302] sd 3:0:0:0: [sdb] Write Protect is off
[17986986.088304] sd 3:0:0:0: [sdb] Mode Sense: 61 00 00 00
[17986986.088322] sd 3:0:0:0: [sdb] Cache data unavailable
[17986986.088323] sd 3:0:0:0: [sdb] Assuming drive cache: write through
[17986986.104055] sd 3:0:0:0: [sdb] Attached SCSI disk

# Ergebnis ist "sdb"

cat /proc/partitions

Bei neuen Partitionen ist hier das Device ohne „Nummer“ zu suchen.

In unserem Fall ist es also das Device sdb, dieses partitionieren wir. Auch hier gibt es verschiedenste Ansichten… aber ich lege eine saubere Partition an.

parted /dev/sd[n] ## Buchstabe der Festplatte/Partition angeben

GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel msdos
Error: Expecting a partition type.
(parted) mkpart primary 0% 100%
(parted) set 1 lvm on
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  53.7GB  53.7GB  primary               lvm

(parted) quit

Nun ist das Device vorbereitet und wir können es der Volumegroup hinzufügen.

Erstellen des physical devices

Dieser Schritt wird bei vgextend oder vgcreate gleich mit erledigt. Der Vollständigkeit halber, erwähne ich es trotzdem kurz.
Mit pvcreate machen wir aus der eben angelegten Partion sd[n]1 ein physical device.

# Hilfeausgabe
root@servername:~# pvcreate --help
  pvcreate: Initialize physical volume(s) for use by LVM

pvcreate
        [--norestorefile]
        [--restorefile file]
        [-d|--debug]
        [-f[f]|--force [--force]]
        [-h|-?|--help]
        [--labelsector sector]
        [-M|--metadatatype 1|2]
        [--pvmetadatacopies #copies]
        [--metadatasize MetadataSize[bBsSkKmMgGtTpPeE]]
        [--dataalignment Alignment[bBsSkKmMgGtTpPeE]]
        [--dataalignmentoffset AlignmentOffset[bBsSkKmMgGtTpPeE]]
        [--setphysicalvolumesize PhysicalVolumeSize[bBsSkKmMgGtTpPeE]
        [-t|--test]
        [-u|--uuid uuid]
        [-v|--verbose]
        [-y|--yes]
        [-Z|--zero {y|n}]
        [--version]
        PhysicalVolume [PhysicalVolume...]

root@servername:~# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created

root@servername:~# pvs
  PV         VG                Fmt  Attr PSize   PFree
  /dev/sda5  random-vg-name    lvm2 a--  149.76g  8.00m
  /dev/sdb1                    lvm2 a--   50.00g 50.00g

Erweitern der Volumegroup

Nun können wir die Volumegroup erweitern:

root@servername:~# vgextend --help
  vgextend: Add physical volumes to a volume group

vgextend
        [-A|--autobackup y|n]
        [--restoremissing]
        [-d|--debug]
        [-f|--force]
        [-h|--help]
        [-t|--test]
        [-v|--verbose]
        [--version]
        [ PHYSICAL DEVICE OPTIONS ]
        VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

root@servername:~# vgextend random-vg-name /dev/sdb1
  Volume group "random-vg-name" successfully extended

root@servername:~# vgs
  VG                #PV #LV #SN Attr   VSize   VFree
  random-vg-name      2   2   0 wz--n- 199.75g 50.00g

root@servername:~# pvs
  PV         VG                Fmt  Attr PSize   PFree
  /dev/sda5  random-vg-name    lvm2 a--  149.76g  8.00m
  /dev/sdb1  random-vg-name    lvm2 a--   50.00g 50.00g

Erweitern des Logical Volumes (LV) und des Dateisystems

Nun muss das LV und das Filesystem natürlich noch erweitert werden.
Dies werde ich ebenfalls in zwei Schritten durchführen. Bei lvextend kann über den Schalter -r das Filesystem gleich mit erweitert werden.

root@servername:~# lvs
  LV     VG                Attr      LSize   Pool Origin Data%  Move Log Copy%  Convert
  root   random-vg-name    -wi-ao--- 141.75g
  swap_1 random-vg-name    -wi-ao---   8.00g

root@servername:~# lvextend --help
  lvextend: Add space to a logical volume

lvextend
        [-A|--autobackup y|n]
        [--alloc AllocationPolicy]
        [-d|--debug]
        [-f|--force]
        [-h|--help]
        [-i|--stripes Stripes [-I|--stripesize StripeSize]]
        {-l|--extents [+]LogicalExtentsNumber[%{VG|LV|PVS|FREE|ORIGIN}] |
         -L|--size [+]LogicalVolumeSize[bBsSkKmMgGtTpPeE]}
        [-m|--mirrors Mirrors]
        [--nosync]
        [--use-policies]
        [-n|--nofsck]
        [--noudevsync]
        [-r|--resizefs]
        [-t|--test]
        [--type VolumeType]
        [-v|--verbose]
        [--version]
        LogicalVolume[Path] [ PhysicalVolumePath... ]

root@servername:~# lvextend -L +20G /dev/random-vg-name/root        (ein -r erweitert gleich das Filesystem)
  Extending logical volume root to 161.75 GiB
  Logical volume root successfully resized

Anzeigen des genutzten Filesystems:

root@servername:~# mount
/dev/mapper/random-vg-name--02--vg-root on / type **ext4** (rw,errors=remount-ro)  <<---- EXT4
... # Ausgabe gekürzt

root@servername:~# resize2fs /dev/random-vg-name/root
resize2fs 1.42.9 (4-Feb-2014)
Filesystem at /dev/random-vg-name/root is mounted on /; on-line resizing required
old_desc_blocks = 9, new_desc_blocks = 11
The filesystem on /dev/random-vg-name/root is now 42402816 blocks long.

root@servername:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G  4.0K  3.9G   1% /dev
tmpfs           799M  960K  798M   1% /run
/dev/dm-0       160G  119G   33G  79% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            5.0M     0  5.0M   0% /run/lock
none            3.9G     0  3.9G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/sda1       236M   70M  154M  32% /boot
root@servername:~# vgs
  VG                #PV #LV #SN Attr   VSize   VFree
  random-vg-name      2   2   0 wz--n- 199.75g 30.00g

Wir haben das Filesystem bzw. das LV nicht um die volle Kapazität erweitert, falls diese irgendwo anders untergebracht werden sollen.
Man könnte bei lvextend auch alle Extents zuweisen lvextend -l 100%FREE /dev/random-vg-name/root

Ich hoffe dieses kleine HowTo hilft euch etwas weiter.
Gerne könnt ihr Fragen oder Anregungen in den Kommentaren posten!

Grüße


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.