Performance spielt für uns nicht nur bei IT-Anwendungen eine Rolle. Deshalb starten wir auch dieses Jahr wieder beim M-net Firmenlauf in Augsburg. Als Bezug zu Linux und Open-Source nehmen wir natürlich unseren "Tux" auf dem Laufshirts mit ;-)
Mit Virtualbox auf einer Zeitreise in die Zukunft
Um ein paar technische Details für das Backup-Konzept eines Kunden klären zu können, war es heute sehr hilfreich, eine VM in Virtualbox mit der Zeit in die Zukunft zu versetzen. Dazu waren folgende Schritte notwendig.
Zeitsynchronisation zwischen Host und virtueller Maschine deaktivieren:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata "rhel701" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1
Als nächstes muss der Zeitoffset zwischen gewünschter Zeit in der Zukunft und jetzt in Millisekunden via Powershell berechnet werden:
PS C:\Users\frank> ([datetime]"06/26/2017" - [datetime]::Now) Days : 11 Hours : 6 Minutes : 6 Seconds : 6 Milliseconds : 746 Ticks : 9723667466261 TotalDays : 11,2542447526169 TotalHours : 270,101874062806 TotalMinutes : 16206,1124437683 TotalSeconds : 972366,7466261 TotalMilliseconds : 972366746,6261
Dieser Zeitoffset wird dann für die VM gesetzt:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvm "rhel701" --biossystemtimeoffset 972366746
In die Gegenwart zurück geht es via:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata "rhel701" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 0 "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyvm "rhel701" --biossystemtimeoffset 0
Oracle RAC 12c R2 – Teil 3 – Shared Storage Konfiguration
Neben den VMs für die beiden RAC-Knoten benötigen wir noch eine Shared Storage Konfiguration. Sobald die VMs ausgeschaltet sind, können in Virtualbox unter Windows sechs 10 GB Disks angelegt werden:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" createhd --filename C:\vm\shared\asmdisk01.vdi --size 10240 --format VDI --variant Fixed "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" createhd --filename C:\vm\shared\asmdisk02.vdi --size 10240 --format VDI --variant Fixed "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" createhd --filename C:\vm\shared\asmdisk03.vdi --size 10240 --format VDI --variant Fixed "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" createhd --filename C:\vm\shared\asmdisk04.vdi --size 10240 --format VDI --variant Fixed "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" createhd --filename C:\vm\shared\asmdisk05.vdi --size 10240 --format VDI --variant Fixed "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" createhd --filename C:\vm\shared\asmdisk06.vdi --size 10240 --format VDI --variant Fixed
Anbindung der Disks an die VMs:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storageattach "ol73o122-1" --storagectl "SATA" --port 1 --device 0 --type hdd --medium C:\vm\shared\asmdisk01.vdi --mtype shareable "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storageattach "ol73o122-2" --storagectl "SATA" --port 1 --device 0 --type hdd --medium C:\vm\shared\asmdisk01.vdi --mtype shareable "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storageattach "ol73o122-1" --storagectl "SATA" --port 2 --device 0 --type hdd --medium C:\vm\shared\asmdisk02.vdi --mtype shareable "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storageattach "ol73o122-2" --storagectl "SATA" --port 2 --device 0 --type hdd --medium C:\vm\shared\asmdisk02.vdi --mtype shareable "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storageattach "ol73o122-1" --storagectl "SATA" --port 3 --device 0 --type hdd --medium C:\vm\shared\asmdisk03.vdi --mtype shareable "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storageattach "ol73o122-2" --storagectl "SATA" --port 3 --device 0 --type hdd --medium C:\vm\shared\asmdisk03.vdi --mtype shareable "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storageattach "ol73o122-1" --storagectl "SATA" --port 4 --device 0 --type hdd --medium C:\vm\shared\asmdisk04.vdi --mtype shareable "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storageattach "ol73o122-2" --storagectl "SATA" --port 4 --device 0 --type hdd --medium C:\vm\shared\asmdisk04.vdi --mtype shareable "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storageattach "ol73o122-1" --storagectl "SATA" --port 5 --device 0 --type hdd --medium C:\vm\shared\asmdisk05.vdi --mtype shareable "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storageattach "ol73o122-2" --storagectl "SATA" --port 5 --device 0 --type hdd --medium C:\vm\shared\asmdisk05.vdi --mtype shareable "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storageattach "ol73o122-1" --storagectl "SATA" --port 6 --device 0 --type hdd --medium C:\vm\shared\asmdisk06.vdi --mtype shareable "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" storageattach "ol73o122-2" --storagectl "SATA" --port 6 --device 0 --type hdd --medium C:\vm\shared\asmdisk06.vdi --mtype shareable
Nach dem Start der Cluster-Knoten, müssten nun die neuen Disks via fdisk sichtbar sein:
[root@ol73o122-1 ~]# fdisk -l Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000e44b6 Device Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 83886079 40893440 8e Linux LVM Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sdd: 10.7 GB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sde: 10.7 GB, 10737418240 bytes, 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/mapper/ol-root: 37.7 GB, 37706792960 bytes, 73646080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/mapper/ol-swap: 4160 MB, 4160749568 bytes, 8126464 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
Um die Disks für den ASM Filer Driver zu labeln entpacken wir die Grid Infrastructure Software im Grid Home als OS-User grid:
[grid@ol73o122-1 ~]$ cd /opt/oracle/grid [grid@ol73o122-1 grid]$ unzip -q /media/sf_transfer/linux_12201/linuxx64_12201_grid_home.zip
Das Labeln erfolgt wieder als root:
[root@ol73o122-1 dev]# export ORACLE_HOME=/opt/oracle/grid [root@ol73o122-1 dev]# export ORACLE_BASE=/tmp [root@ol73o122-1 dev]# /opt/oracle/grid/bin/asmcmd afd_label DATA1 /dev/sdb --init [root@ol73o122-1 dev]# /opt/oracle/grid/bin/asmcmd afd_label DATA2 /dev/sdc --init [root@ol73o122-1 dev]# /opt/oracle/grid/bin/asmcmd afd_label DATA3 /dev/sdd --init [root@ol73o122-1 dev]# /opt/oracle/grid/bin/asmcmd afd_label DATA4 /dev/sde --init [root@ol73o122-1 dev]# /opt/oracle/grid/bin/asmcmd afd_label DATA5 /dev/sdf --init [root@ol73o122-1 dev]# /opt/oracle/grid/bin/asmcmd afd_label DATA6 /dev/sdg --init
Oracle RAC 12c R2 - Teil 2 – Installation Oracle Linux 7.3
Im zweiten Teil erfolgt nun die Basisinstallation von Oracle Linux 7.3 auf den beiden Cluster Knoten. Für die VMs wurde folgende Grundkonfiguration gewählt:
- Hauptspeichergröße je VM: 6 GB
- Größe der lokalen Disk jeweils: 40 GB
- RPM-Package-Auswahl: minimal mit UEK-Kernel
- Konfiguration der Netzwerkkarten: manuel ohne DHCP
Netzwerkkonfiguration nach der Basisinstallation:
[root@ol73o122-1 ~]# ip addr show 1: lo:mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:45:95:3e brd ff:ff:ff:ff:ff:ff inet 192.168.56.101/24 brd 192.168.56.255 scope global enp0s3 valid_lft forever preferred_lft forever inet6 fe80::56d4:7072:782f:dba2/64 scope link valid_lft forever preferred_lft forever 3: enp0s8: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:ad:0e:75 brd ff:ff:ff:ff:ff:ff inet 192.168.59.101/24 brd 192.168.59.255 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::f08d:41a8:a861:df36/64 scope link valid_lft forever preferred_lft forever
Aktueller Kernel:
[root@ol73o122-1 ~]# uname -a Linux ol73o122-1.t01.fm-berger.de 4.1.12-61.1.18.el7uek.x86_64 #2 SMP Fri Nov 4 15:48:30 PDT 2016 x86_64 x86_64 x86_64 GNU/Linux
Kurzcheck DNS:
[root@ol73o122-1 ~]# hostname ol73o122-1.t01.fm-berger.de [root@ol73o122-1 ~]# ping ol73o122-2.t01.fm-berger.de PING ol73o122-2.t01.fm-berger.de (192.168.56.102) 56(84) bytes of data. 64 bytes from ol73o122-2.t01.fm-berger.de (192.168.56.102): icmp_seq=1 ttl=64 time=1.21 ms 64 bytes from ol73o122-2.t01.fm-berger.de (192.168.56.102): icmp_seq=2 ttl=64 time=0.803 ms 64 bytes from ol73o122-2.t01.fm-berger.de (192.168.56.102): icmp_seq=3 ttl=64 time=0.791 ms ^C --- ol73o122-2.t01.fm-berger.de ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 0.791/0.934/1.210/0.197 ms [root@ol73o122-1 ~]# ping ol73o122-2-priv.t01.fm-berger.de PING ol73o122-2-priv.t01.fm-berger.de (192.168.59.102) 56(84) bytes of data. 64 bytes from ol73o122-2-priv.t01.fm-berger.de (192.168.59.102): icmp_seq=1 ttl=64 time=0.778 ms 64 bytes from ol73o122-2-priv.t01.fm-berger.de (192.168.59.102): icmp_seq=2 ttl=64 time=0.846 ms 64 bytes from ol73o122-2-priv.t01.fm-berger.de (192.168.59.102): icmp_seq=3 ttl=64 time=0.721 ms ^C --- ol73o122-2-priv.t01.fm-berger.de ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 0.721/0.781/0.846/0.060 ms
Firewall für die Erstinstallation zunächst deaktivieren:
[root@ol73o122-1 ~]# systemctl disable firewalld Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
Installation des Oracle Preinstall-RPMs:
[root@ol73o122-1 ~]# yum install oracle-database-server-12cR2-preinstall
Zusätzlich erforderliche RPMs für die VBoxLinuxAdditions:
[root@ol73o122-1 ~]# yum install gcc kernel-uek-devel bzip2 perl
Das Preinstall-RPM hat die OS-Gruppen oinstall und dba sowie den OS-User oracle bereits angelegt, für eine RAC-Installation benötigen wir aber weitere OS-Gruppen:
[root@ol73o122-1 ~]# id -a oracle uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba) [root@ol73o122-1 ~]# groupadd -g 54323 oper [root@ol73o122-1 ~]# groupadd -g 54324 backupdba [root@ol73o122-1 ~]# groupadd -g 54325 dgdba [root@ol73o122-1 ~]# groupadd -g 54326 kmdba [root@ol73o122-1 ~]# groupadd -g 54327 asmdba [root@ol73o122-1 ~]# groupadd -g 54328 asmoper [root@ol73o122-1 ~]# groupadd -g 54329 asmadmin [root@ol73o122-1 ~]# groupadd -g 54330 racdba
Neben den OS-Gruppen legen wir zusätzlich den OS-User grid als Software-Owner für die Grid Infrastructure an:
[root@ol73o122-1 ~]# useradd -u 54322 -g oinstall -G asmadmin,asmdba,asmoper,racdba,vboxsf grid [root@ol73o122-1 ~]# id -a grid uid=54322(grid) gid=54321(oinstall) groups=54321(oinstall),995(vboxsf),54327(asmdba),54328(asmoper),54329(asmadmin),54330(racdba)
Dem bereits bestehenden OS-User oracle fügen wir weitere OS-Gruppen hinzu:
[root@ol73o122-1 ~]# id -a oracle uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba) [root@ol73o122-1 ~]# usermod -a -G asmdba,backupdba,dgdba,kmdba,racdba,vboxsf,oper oracle [root@ol73o122-1 ~]# id -a oracle uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),995(vboxsf),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54327(asmdba),54330(racdba)
Vorbereitung der Installationsverzeichnisse:
[root@ol73o122-1 ~]# mkdir -p /opt/oracle/grid-base [root@ol73o122-1 ~]# mkdir -p /opt/oracle/grid [root@ol73o122-1 ~]# mkdir -p /opt/oracle/rdbms [root@ol73o122-1 ~]# chown -R grid:oinstall /opt/oracle [root@ol73o122-1 ~]# chown oracle:oinstall /opt/oracle/rdbms [root@ol73o122-1 ~]# chmod -R 775 /opt/oracle
Oracle RAC 12c R2 - Teil 1 - Netzwerklayout
Die nächsten Kundenprojekte mit Oracle RAC stehen an und Oracle 12c R2 ist zum Download bereit. Es wird also Zeit die eigene Installationsdoku aufzufrischen und eine erste Evaluierungs-Installation durchzuführen. Planung und Vorbereitung sind wichtige Schritte bei jeder Cluster-Installation, daher werde ich meine Installationsvorbereitungen über mehrere Blog-Einträge aufgeteilt veröffentlichen. Geplant ist der Klassiker, eine "kleine" Zwei-Knoten-RAC Installation auf einem Notebook zu Evaluierungs-Zwecken. Die beiden RAC-Knoten werden als VMs mit Virtualbox (5.1.14) aufgesetzt, Host-Betriebssystem ist Windows und als Gast-Betriebssystem wird Oracle Linux 7.3 genutzt.
Das Netzwerklayout für diese Installation besteht aus zwei Host-Only-Netzwerken in Virtualbox:
- Netz 1 - Public: 192.168.56.0/24
- Netz 2 - Privat / Cluster-Interconnect: 192.168.59.0/24
- DNS Subdomain: .t01.fm-berger.de
Neben den beiden VMs für die RAC-Knoten gibt es eine weitere VM für die Bereitstellung der Basisinfrastruktur:
- Hostname: infra01.t01.fm-berger.de
- IP im Netz 1: 192.168.56.10
- IP im Netz 2: 192.168.59.10
Für die einzelnen Cluster-Knoten sind folgende Hostnamen und IPs geplant:
| Knoten 1 | Knoten 2 | |
| Hostname - Public | ol73o122-1.t01.fm-berger.de | ol73o122-2.t01.fm-berger.de |
| IP - Public | 192.168.56.101 | 192.168.56.102 |
| Hostname VIP - Public | ol73o122-1-vip.t01.fm-berger.de | ol73o122-2-vip.t01.fm-berger.de |
| IP VIP - Public | 192.168.56.111 | 192.168.56.112 |
| Hostname Private (Interconnect) | ol73o122-1-priv.t01.fm-berger.de | ol73o122-2-priv.t01.fm-berger.de |
| IP Private (Interconnect) | 192.168.59.101 | 192.168.59.102 |
Und für den SCAN-Hostname:
- Hostname: ol73o122-scan.t01.fm-berger.de
- IPs: 192.168.56.121, 192.168.56.122, 192.168.56.123
Als ersten Schritt benötigen wir nun eine passende DNS-Server-Konfiguration auf dem System infra01.t01.fm-berger.de. Diese VM ist über zwei Netzwerkinterfaces angebunden:
[root@infra01 ~]# ip addr show 1: lo:mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:dd:27:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.56.10/24 brd 192.168.56.255 scope global enp0s3 valid_lft forever preferred_lft forever inet6 fe80::ebd5:891c:22a3:8d49/64 scope link valid_lft forever preferred_lft forever 3: enp0s8: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:8f:52:06 brd ff:ff:ff:ff:ff:ff inet 192.168.59.10/24 brd 192.168.59.255 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::305:ba33:311a:c878/64 scope link valid_lft forever preferred_lft forever
Zur Vereinfachung ist die Firewall auf diesem System deaktiviert:
[root@infra01 ~]# systemctl disable firewalld [root@infra01 ~]# systemctl stop firewalld
Als DNS-Server wird BIND eingesetzt:
[root@infra01 yum.repos.d]# yum install bind-libs bind bind-utils
Die Konfigurationsdateien wurden wie folgt angepasst:
/etc/named.conf
options {
listen-on port 53 { 127.0.0.1; 192.168.56.10; 192.168.59.10; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; 192.168.56.0/24; 192.168.59.0/24; };
recursion no;
dnssec-enable no;
dnssec-validation no;
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "t01.fm-berger.de" IN {
type master;
file "t01.fm-berger.de.zone";
allow-update { none; };
};
zone "56.168.192.in-addr.arpa." IN {
type master;
file "192.168.56.zone";
allow-update { none; };
};
zone "59.168.192.in-addr.arpa." IN {
type master;
file "192.168.59.zone";
allow-update { none; };
};
/var/named/t01.fm-berger.de.zone
@ IN SOA infra01. root.localhost. (
2017030201; serial
28800; refresh, seconds
7200; retry, seconds
604800; expire, seconds
86400 ); minimum, seconds
;
NS infra01.;
;
infra01 IN A 192.168.56.10
ol73o122-1 IN A 192.168.56.101
ol73o122-2 IN A 192.168.56.102
ol73o122-1-priv IN A 192.168.59.101
ol73o122-2-priv IN A 192.168.59.102
ol73o122-1-vip IN A 192.168.56.111
ol73o122-2-vip IN A 192.168.56.112
ol73o122-scan IN A 192.168.56.121
ol73o122-scan IN A 192.168.56.122
ol73o122-scan IN A 192.168.56.123
/var/named/192.168.56.zone
$ORIGIN 56.168.192.in-addr.arpa.
$TTL 1H
@ IN SOA infra01.t01.fm-berger.de. root.infra01.t01.fm-berger.de. (
2017030201; serial
28800; refresh, seconds
7200; retry, seconds
604800; expire, seconds
86400 ); minimum, seconds
;
56.168.192.in-addr.arpa. IN NS infra01.t01.fm-berger.de.
IN NS infra01.t01.fm-berger.de.
101 IN PTR ol73o122-1.t01.fm-berger.de.
102 IN PTR ol73o122-2.t01.fm-berger.de.
111 IN PTR ol73o122-1-vip.t01.fm-berger.de.
112 IN PTR ol73o122-2-vip.t01.fm-berger.de.
121 IN PTR ol73o122-scan.t01.fm-berger.de.
122 IN PTR ol73o122-scan.t01.fm-berger.de.
123 IN PTR ol73o122-scan.t01.fm-berger.de.
/var/named/192.168.59.zone
$ORIGIN 59.168.192.in-addr.arpa.
$TTL 1H
@ IN SOA infra01.t01.fm-berger.de. root.infra01.t01.fm-berger.de. (
2017030201; serial
28800; refresh, seconds
7200; retry, seconds
604800; expire, seconds
86400 ); minimum, seconds
;
59.168.192.in-addr.arpa. IN NS infra01.t01.fm-berger.de.
IN NS infra01.t01.fm-berger.de.
101 IN PTR ol73o122-1-priv.t01.fm-berger.de.
102 IN PTR ol73o122-2-priv.t01.fm-berger.de.
Start von named und dauerhafte Aktivierung:
[root@infra01 ~]# systemctl enable named [root@infra01 ~]# systemctl start named
