==== Ein neues VIP und ein neues Netzwerk einem RAC Cluster ONLINE hinzufügen ====
Ziel ist es, in einer bestehenden Umgebung ONLINE ein neues Netz und einen neuen Listener für dieses Netz hinzuzufügen OHNE dass die anderen Datenbanken auf dem System "gestört" werden.
===Genereller Ablauf:===
- IP Adressen und Namen definieren
- DNS Eintrag für die neuen IP's und Namen im Nameserver hinzufügen
- Evtl. Routen und FW Einträge im Netz pflegen
- DNS Auflösung von jeden Knoten testen
- Bestehendes Routing auf den Maschinen protokollieren
- Ein cluvfy Check, das die bestehende Umgebung "gesund" ist
- Bestehende Udev Konfiguration der Netzwerkkarten sichern
- Netzwerkkarte physikalisch aktivieren / hinzufügen (Kabel einstecken) - je nach Hardware
- Udev Konfiguration überprüfen (neue Karten hinten eingefügt!)
- ifcfg-ethx Scripte für die beiden neuen Karten erstellen
- ifcfg-bondx Script erstellen
- Bond Interface im OS aktivieren
- Cluster Status überprüfen
- Routing Tabellen prüfen
- IP Konfiguration überprüfen
- Verbindung der Knoten untereinander prüfen
- Extern Verbindung zu dem neuen Netz auf jeden Knoten prüfen
- Ein cluvfy Check, ob das neue Interface auch richtig erkannt wird
- Netzwerk im Cluster registrieren
- Konfiguration im Cluster überprüfen
- VIP's zum Cluster hinzufügen
- Neue Vips überprüfen
- Neuen Listener auf dieser Vips hinzufügen (netca oder manuell)
- Neuen Listener prüfen
- Lokale tnsname.ora auf den Knoten anpassen
- Local und Remote Listener Parameter setzen
- DB am Listener anmelden
- Datenbankverbindung prüfen
==== Umsetzung====
==IP Adressen und Namen definieren==
In unsere Beispiel:
^Bedeutung ^Name ^IP ^
|Host 1 |racdb01|192.162.178.220|
|Host 2 |racdb01|192.162.178.222|
|GPI Lan Host 1 |racdb01-GPI|192.162.183.220|
|GPI Lan Host 2 |racdb02-PL|192.162.183.222|
|VIP GPI Lan Host 1 |racdb01-GPI-vip |192.162.183.224|
|VIP GPI Lan Host 2 |racdb02-GPI-vip |192.162.183.226|
Name der DB : **GPIDB**
==DNS Eintrag für die neuen IP's und Namen im Nameserver hinzufügen==
Möglichst keine Host files sondern einen DNS Server verwenden!
==Evtl. Routen und FW Einträge im Netz pflegen==
Je nach Umgebung nicht vergessen zu pflegen
==DNS Auflösung von jeden Knoten testen==
**User root , auf 1. Knoten und 2. Knoten**
nslookup racdb01-GPI-vip
nslookup racdb02-GPI-vip
nslookup racdb02-GPI
nslookup racdb01-GPI
==Bestehendes Routing auf den Maschinen protokollieren - je nach Routing Komplxität auf Policies umsteigen==
**User root , auf 1. Knoten und 2. Knoten**
ip route show > route_before.txt
route >> route_before.txt
Da sich das Routing beim Aktivieren einer Netzwerkarte ändert, ist ein Lösung "Policy Routing" einzuetzen.
Policy Routing With Linux Details:
* http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/index.html
* http://www.policyrouting.org/PolicyRoutingBook/ONLINE/TOC.html
==Clufy Check, das bestehende Umgebung "gesund" ist==
**Als Oracle Grid, auf 1. Knoten **
set ORALCE_HOME=/u01/app/11.2.0.4/grid
cd %ORACLE_HOME/bin
./cluvfy comp nodecon -n racdb01,racdb02 -verbose > clufy_before.txt
Ausgabe in der Datei auf Fehler prüfen, treten hier Fehler auf, diese zuvor fixen.
==Bestehende Udev Konfiguration der Netzwerkkarten sichern==
**User root , auf 1. Knoten und 2. Knoten**
vi /etc/udev/rules.d/70-persistent-net.rules
# für die Doku
cp 70-persistent-net.rules /tmp
==Netzwerkkarte physikalisch aktivieren / hinzufügen ==
**User root , auf 1. Knoten und 2. Knoten**
Je nach Hardware ist eine Karte bereits im System bekannt bzw. wird per HotPlug dem System hinzugefügt.
Im OS testen ob die Karte da ist:
lspci
lshw - class network
Mac Adresse kann erkannt werden mit:
ip link show
==Udev Konfiguration überprüfen, fall eine neue Karte per HotPlug aktiviert wurde==
**User root , auf 1. Knoten und 2. Knoten**
In VMware kann zum Beispiel eine Karte via Hotplug im laufenden Betrieb hinzugefügt werden, allerdings setzt dabei die Maschine kurz aus.
# check the changes, numbering of the interfaces should not change!
vi /etc/udev/rules.d/70-persistent-net.rules
Ändert sich hier die Reihenfolge, gibt es spätestens beim nächsten Reboot Ärger!
==ifcfg-ethx Scripte für die beiden neuen Karten erstellen==
**User root , auf 1. Knoten und 2.Knoten**
cd /etc/sysconfig/network-scripts/
vi ifcfg-eth5
DEVICE=eth5
BOOTPROTO=none
HWADDR=""
NM_CONTROLLED="no
TYPE="Ethernet"
PEERDNS=no
ONBOOT=yes
MASTER=ibond3
SLAVE=yes
USERCTL=no
vi ifcfg-eth6
DEVICE=eth6
BOOTPROTO=none
HWADDR=""
NM_CONTROLLED="no
TYPE="Ethernet"
PEERDNS=no
ONBOOT=yes
MASTER=ibond3
SLAVE=yes
USERCTL=no
==ifcfg-bondx Script erstellen==
**User root , auf 1. Knoten und 2.Knoten**
#add Bonding Interface
/etc/modprobe.d/bonding.conf:
alias bond3 bonding
# be carefully no default gateway!
# Gateway set with routing rules
vi ifcfg-ibond3
DEVICE=ibond3
TYPE="Ethernet"
IPADDR=192.162.183.224
NETMASK=255.255.255.0
ONBOOT=yes
NM_CONTROLLED=no
PEERDNS=no
BOOTPROTO=none
BONDING_OPTS="mode=1 miimon=1000"
# Define Routing Polices
/etc/iproute2/rt_tables:
100 gpivlan
/etc/sysconfig/network-scripts/route-bond3:
default via 192.162.183.254 dev bond3 table gpivlan
/etc/sysconfig/network-scripts/rule-bond3:
from 192.162.183.224 lookup plvlan
from 192.162.183.226 lookup plvlan
from all to 192.162.183.220 lookup gpivlan
from all to 192.162.183.224 lookup gpivlan
==Bond Interface im OS aktivieren==
**User root , auf 1. Knoten und 2.Knoten**
ifconfig bond3 up
# alternativ
ifup bond3
In meiner produktiven Umgebung wurde durch das Aktivieren des neuen Bondinterfaces die Default Route für das gesamte System gelöscht und durch die Default Route des zweiten Netzes ersetzt. Das diese aber falsch war, führte das zu Störungen. Nach einem Stopp und wiederholten Start dees Bond Interfaces wurden die Routen wieder richtig gesetzt -> besser testen und routing policies verwenden!
==Cluster Status überprüfen==
**User root , auf 1. Knoten und 2.Knoten**
set ORALCE_HOME=/u01/app/11.2.0.4/grid
cd %ORACLE_HOME/bin
./crsctl stat res -t
./srvctl status nodeapps
./crs_stat -t -v
==Routing Tabellen prüfen==
**User root , auf 1. Knoten und 2.Knoten**
ip route show
route
==IP Konfiguration überprüfen==
**User root , auf 1. Knoten und 2.Knoten**
ifconfig
cat /sys/class/net/bonding_masters
cat /sys/class/net/bond0/bonding/mode
cat /proc/net/bonding/bond3
==Verbindung der Knoten untereinander prüfen==
**User root , auf 1. Knoten und 2.Knoten**
ping rac-db01-pl
==Extern Verbindung zu dem neuen Netz auf jeden Knoten prüfen==
**User root , auf 1. Knoten und 2.Knoten**
ping racdb01-GPI
ping racdb02-pl
==Clufy Check, ob das neue Interface auch richtig erkannt wird==
**User Oracle GRID, auf 1 Knoten für das ganze Cluster**
set ORALCE_HOME=/u01/app/11.2.0.4/grid
%ORACLE_HOME/bin/cluvfy comp nodecon -n racdb01,racdb02 -verbose
==Netzwerk im Cluster registrieren==
**User root , auf 1 Knoten für das ganze Cluster**
set ORALCE_HOME=/u01/app/11.2.0.4/grid
cd %ORACLE_HOME/bin
./srvctl add network -k 2 -S 192.168.183.0/255.255.255.0/bond3
==Konfiguration im Cluster überprüfen==
**User root , auf 1 Knoten für das ganze Cluster**
set ORALCE_HOME=/u01/app/11.2.0.4/grid
cd %ORACLE_HOME/bin
./srvctl config network
./oifcfg iflist
==VIP's zum Cluster hinzufügen==
**User root , auf 1 Knoten für das ganze Cluster**
cd %ORACLE_HOME/bin
./srvctl add vip -n racdb01 -k 2 -A 192.168.183.224/255.255.255.0/bond3
./srvctl add vip -n racdb02 -k 2 -A 192.168.183.226/255.255.255.0/bond3
==Neue Vips überprüfen==
**User root , auf 1 Knoten für das ganze Cluster**
VIP is zu diesem Zeitpunkt noch offline, bis der Listener die Resource anfordert und es online genommen wird.
cd %ORACLE_HOME/bin
./crsctl stat res -t | grep -C 2 vip
./oifcfg iflist
./srvctl config nodeapps
==Neuen Listener auf dieser Vips hinzufügen (netca oder manuell)==
**User oracle GRID , Knoten 1**
#Als user Oracle GRID
set ORALCE_HOME=/u01/app/11.2.0.4/grid
%ORACLE_HOME/bin/netca &
# the create LISTENER_GPI ; Check carefully that you use network 2
Per Befehlt:
./srvctl add listener -l LISTENER_GPI -s -p 1521 -k 2
==Neuen Listener prüfen==
**User oracle, auf jeden Knoten**
lsnrctl status listener LISTENER_PL
==Locale tnsname.ora auf den Knoten anpassen==
**User oracle, auf jeden Knoten**
vi $TNS_ADMIN/tnsnames.ora
#add entry local listner listener_net2_racdb01_GPI
listener_net2_racdb01_GPI=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=racdb01-GPI-vip)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.162.183.224)(PORT=1521)(IP=FIRST))))
#add entry local listner listener_net2_racdb02_GPI
listener_net2_racdb02_GPI=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=racdb02-GPI-vip)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.162.183.226)(PORT=1521)(IP=FIRST))))
==Local und Remote Listener Parameter setzen==
**User oracle DB, Knoten 1**
export ORACLE_SID=GPIDB1
sqlplus / as sysdba
show parameter listner
alter system set LISTENER_NETWORKS='((NAME=network2)(LOCAL_LISTENER=listener_net2_racdb01_GPI)(REMOTE_LISTENER=listener_net2_racdb02_GPI))' sid='GPIDB1'
alter system set LISTENER_NETWORKS='((NAME=network2)(LOCAL_LISTENER=listener_net2_racdb02_GPI)(REMOTE_LISTENER=listener_net2_racdb01_GPI))' sid='GPIDB2';
==DB am Listener anmelden==
**User oracle DB, Knoten 1**
sqlplus / as sysdba
sql>alter system register;
==Datenbankverindung prüfen==
**User oracle, Externer Rechner**
#tnsnames Eintrag für das neue Netz hinzufügen
vi $TNS_ADMIN/tnsnames.ora
tnsping new_GPI_db
sqlplus system@new_GPI_db
==== Quellen ====
* http://advancelinux.blogspot.de/2012/01/bonding-in-rhel-6.html
* http://www.linuxhorizon.ro/bonding.html
* http://streetkiter.wordpress.com/2011/11/23/andern-der-ip-adressen-in-einem-rac-cluster-unter-oracle-11g-release-2-11-2-0-3/
Metalink:
* How to Configure A Second Listener on a Separate Network in 11.2 Grid Infrastructure (Doc ID 1063571.1)
* How to Validate Network and Name Resolution Setup for the Clusterware and RAC (Doc ID 1054902.1)