==== 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)