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

Oracle Database 11.2 Express Edition Beta

Seit ein paar Tage ist eine Beta Version für die Oracle Database 11.2 Express Edition verfügbar. Die Beta basiert auf dem Release Stand 11.2.0.2.0. Eine erste Installation unter Oracle Enterprise Linux 6 verlief relativ problemlos.

Wichtig ist das der Hostname des Systems auflösbar ist:

[root@centos6 log]# ping `hostname`
PING centos6 (192.168.56.101) 56(84) bytes of data.
64 bytes from centos6 (192.168.56.101): icmp_seq=1 ttl=64 time=0.081 ms
64 bytes from centos6 (192.168.56.101): icmp_seq=2 ttl=64 time=0.078 ms

Die Installation erfolgt dann wie von der 10g Version gewohnt:

[root@centos6 mnt]# rpm -i oracle-xe-11.2.0-0.5.x86_64.rpm
Executing post-install steps...
You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.

[root@centos6 log]# /etc/init.d/oracle-xe configure

Oracle Database 11g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 11g Express
Edition.  The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts.  Press  to accept the defaults.
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:

Specify a port that will be used for the database listener [1521]:

Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of
different passwords for each database account.  This can be done after
initial configuration:
Confirm the password:

Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:

Starting Oracle Net Listener...Done
Configuring database...Done
Starting Oracle Database 11g Express Edition instance...Done
Installation completed successfully.

Auf meinem System gab es beim ersten Versuch Schwierigkeiten mit folgenden Einträgen in der Datei /etc/sysctl.conf:

# Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

Ein zweiter Versuch das RPM-Paket zu installieren lief reibungslos durch. Auf dem Testsystem ist eine Firewall aktiv. Für den Remote-Zugriff auf die Datenbank und die APEX-Weboberfläche wurden folgende Firewall-Regeln in /etc/sysconfig/iptables ergänzt:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

Zum Schluss muss der Remote-Zugriff auf die Web-Oberfläche in der XDB-Konfiguration ebenfalls eingetragen werden:

[root@centos6 ~]# su - oracle
-bash-4.1$ . /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
-bash-4.1$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Beta on Tue Apr 5 18:07:08 2011
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Beta
SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
PL/SQL procedure successfully completed.
SQL>

RHEL / OEL 6 DVD als yum-Repository verwenden

Welcher Linux Administrator kennt das Problem nicht, nach der Installation von Linux sollen einzelne RPM-Pakete nachinstalliert werden. Aufgrund der vielen Abhängigkeiten zwischen den Paketen ist der direkte Einsatz des Tools rpm oft mühsam. Hier hat sich der yum-Einzeiler "yum install PACKAGENAME" bewährt.

In so mancher Firmenumgebung steht aber leider nicht direkt ein YUM-Repository zur Verfügung und die Server haben meist keinen Internetzugang. YUM kann die Installations-DVD mit ein wenig Nachhilfe auch direkt als Repository verwenden. Hier am Beispiel für Oracle Enterprise Linux 6 dargestellt (die DVD wurde unter /mnt gemountet):

[root@centos6 ~]# cd /mnt
[root@centos6 mnt]# cp media.repo /etc/yum.repos.d/
[root@centos6 mnt]# vi /etc/yum.repos.d/media.repo

In der Datei muss noch ein entsprechender Eintrag für den Parameter baseurl aufgenommen werden. In diesem Fall also:

baseurl=file:///mnt

JRockit Virtualization Edition

Ab heute gibt es Oracle WebLogic Server on JRockit Virtualization Edition als Download. Vor ein paar Wochen gab es bereits ein Meldung bei heise.de zu neuen Java-Virtualisierungswerkzeugen von Oracle - Oracle präsentiert Java-Virtualisierungswerkzeuge. Die technische Basis für dieses Produkt wurde Ende 2006 von der Firma BEA als Liquid VM angekündigt (theserverside.com - JRockit's Liquid VM could be the first real Java OS). Hinter der JRockit Virtualization Edition steckt der Ansatz eine Java VM direkt auf virtualisierter Hardware, ohne Betriebssystem-Schicht, laufen zu lassen. Einen ähnlichen Ansatz stellt das Projekt JNode.org (Java New Operating System Design Effort) dar.

Oracle liefert die JRockit Virtualization Edition zusammen mit Weblogic als 370 MB grosses Zip-File. Darin sind folgende Dateien enthalten:

# unzip -t wlsvePackage.zip 
Archive:  wlsvePackage.zip
    testing: wlsve/                   OK
    testing: wlsve/system.img         OK
    testing: wlsve/vm.cfg             OK
    testing: wlsveimagetool.jar       OK
    testing: README.txt               OK
    testing: wlsve_medrec_domain_with_odb.pdf   OK
    testing: THIRDPARTYLICENSEREADME.txt   OK

Hauptbestandteil ist das Disk-Image system.img

$ qemu-img info wlsve/system.img 
image: wlsve/system.img
file format: raw
virtual size: 1.0G (1073741824 bytes)
disk size: 1.0G

Als Dateisystem wird in diesem Disk-Image ext2 verwendet, die Disk lässt sich daher unter Linux ohne Schwierigkeiten direkt mounten.

# mount -o loop wlsve/system.img /mnt
# cd /mnt
# ls -l
total 20
drwx------ 8 root root 4096 2010-04-14 02:48 application
drwx------ 3 root root 4096 2010-04-14 02:49 boot
drwx------ 8 root root 4096 2010-04-14 02:49 jrockitve
drwx------ 2 root root 4096 2010-04-14 02:48 lost+found
-rw------- 1 root root  361 2010-04-14 02:49 VERSION

Für den Betrieb einer Virtuellen-Maschine mit JRockit VE wird eigentlich Oracle VM benötigt. In einem ersten Test ließ sich das Disk-Image aber auch in einer normalen Xen-Umgebung booten. Hierzu wurde die Konfigurations-Datei vm.cfg mit folgendem Inhalt versehen:

name="wlsve01"
bootloader="/usr/bin/pygrub"
memory=1024
disk=['tap:aio:/var/nfs/system.img,sda1,w']
vif=['bridge=xenbr0']

Der Start der Xen-Domain erfolgt dann wie gewohnt mit den entsprechenden Xen-Befehlen.

# xm create -c vm.cfg