====== Installation Oracle NoSQL Database 11gR2 (11.2.2.0.39) ====== ==== Übersicht über die Architektur ==== In der folgenden Übersicht wird von einen Replikationsfaktor von Drei ausgegangen, d.h. es gibt für jede Storage mit seinen jeweiligen zugeordneten Partitionen je zwei "Kopien" die automatisch immer aktuell gehalten werden. Es werden drei physikalische Server eingesetzt. {{ :nosql:oracle_nosql_architektur_uebersicht.png?500 | Übersicht über die Oracle NoSQL Architektur}} * SN = Storage Node = Physikalischer Rechner mit lokalen Plattenplatz * SNA = Storage Node Agent = Kontroll Prozess * KVStore = Das Speicherarray mit den Storage Nodes * Storage Node Master = Pro Node ein Master (schreibt / ließt) und repliziert mit dem [[http://en.wikipedia.org/wiki/Paxos_%28computer_science%29| Paxos Protokoll]] zu seinen je zwei Replikaten und hat seinen eigenen lokalen Speicherbereich mit seinen ihm zugeteilten Partitionen ( mit eine je anderen Hashkey!) * Storage Node Replication = Kopie der Daten von einen Storage Node Master für die Ausfallsicherheit * Replikationsgruppe =Ein Master und min. eine Replika ==== Installation ==== Installation einer Oracle NoSQL Datenbank auf drei Oracle Linux 6.4 Server Ablauf: * Betriebssystem auf den Servern bereitstellen * FW Konfiguration plannen, falls FW zwischen den Knoten und der eigentlichen Anwendung * Java auf den Servern aufsetzen * Deploy der Oracle NoSQL Software * Aufsetzen der Store Struktur === Download Software === Die benötigte Software: * [[http://www.oracle.com/technetwork/products/nosqldb/downloads/index.html|Oracle NoSQL Database, Community Edition 11gR2 (11.2.2.0.39)]] * Oracle Linux 6.4 - Download über [[https://edelivery.oracle.com/EPD/Download/get_form?egroup_aru_number=16064752| edelivery ]] * Java Kit 7 - Download über [[http://www.oracle.com/technetwork/java/javase/downloads/index.html|Oracle Java SE Downloads ]] * oder alternativ : Oracle JRockit - Download über [[http://www.oracle.com/technetwork/middleware/jrockit/downloads/index.html | Oracle JRockit Downloads ]] ===== Installation Linux Umgebung ===== * Installation Oracle Linux 6.4 Basis ( Desktop Umgebung nur bei Bedarf) * Yum Repository prüfen, Konfiguration bei Bedarf anlegen # cd /etc/yum.repos.d # wget http://public-yum.oracle.com/public-yum-ol6.repo * Update mit "yum update" * SELinux deaktiviert : [root@nosqldb01 ~]# vi /etc/selinux/config .. SELINUX=disabled .. [root@nosqldb01 ~]# reboot [root@nosqldb01 ~]# getenforce * Firewall Einstellungen prüfen und je nach Umgebung einstellen! * Auf die richtige Uhrzeit achten und per ntpd die Zeit auf allen Servern im Store immer richtig einstellen lassen! ===Oracle User anlegen=== groupadd -g 1000 oinstall useradd -u 1100 -g oinstall oracle passwd oracle ===Software Verzeichnis anlegen === mkdir -p /opt/oracle chown -R oracle:oinstall /opt/oracle chmod -R 775 /opt/oracle ===Java Version prüfen - JDK nach Bedarf installieren === ** Als User root! ** \\ Kopieren von jdk-7u25-linux-x64.rpm auf dem Server und installieren/aktivieren. # Java installieren yum install --nogpgcheck jdk-7u25-linux-x64.rpm # Java aktivieren # Neue Java Version dem OS bekannt geben /usr/sbin/alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_25/bin/java 17025 # Versionen anzeigen /usr/sbin/alternatives --display java # Version einstellen /usr/sbin/alternatives --config java # testen java -version Alternativ kann auch Oracle JRockit eingesetzt werden, siehe hier als Anleitung [[http://www.oracle-base.com/articles/linux/jrockit-installation-on-linux.php|jrockit Installation Oracle-Base.com]]. \\ Für das Oracle Sun JDK ist hier ein hilfreicher Link [[http://www.gokhanatil.com/2011/07/how-to-installupdate-java-jdk-on-oracle.html|How to Install/Update Java (JDK) on Oracle Linux]] Das Programm jps muss auf dem Server im Pfad liegen/funktionieren, wird vom SNA benötigt! jps-m # falls fehler # über /usr/bin verlinken ln -s /usr/java/jdk1.7.0_21/bin/jps /usr/bin/jps ===Software auf den Server kopieren und entpacken/installieren === **User Oracle!** \\ Entpacken der Software in das Verzeichnis /opt/oracle/product/11.2.0, damit ist die eigentliche Installation der Software auch schon abgeschlossen. mkdir -p /opt/oracle/product/11.2.0/ unzip kv-cc-2.0.39.zip -d /opt/oracle/product/11.2.0/ Umgebungsvariable KVHOME in der Bash setzen und je nach Vorlieben permanent einrichten: export KVHOME=/opt/oracle/product/11.2.0/Kv-2.0.39 Testen der Installation mit: # zeigt die installierte Software Version java -jar $KVHOME/lib/kvclient.jar 11gR2.2.0.39 ==== Anlegen der Storage Location ==== **User Oracle!** \\ Anlegen des KVROOT Verzeichnisses, hier werden später dann die Daten abgelegt. mkdir /opt/oracle/kvdata ==== Clonen der Umgebung um die weitern Storage Node zu konfigurieren ==== Die bestehende Umgebung stoppen und als Clone Template verwenden um die Hosts 2 und 3 anzulegen Tipp: Daran denken das nach einen Clone einer Linux 6 Maschine die Netzwerkkarten Konfiguration stark verbogen wird, siehe [[http://www.cyberciti.biz/tips/vmware-linux-lost-eth0-after-cloning-image.html|UDEV nach Clone reparieren]] ! Die Namensauflösung zwischen den Knoten prüfen und bei Bedarf die Namen in der hosts Datei eintragen. Darauf achten, dass auch der eigenen Name des Servers richtig aufgelöst wird. ==== FW Konfiguration plannen, falls FW zwischen den Knoten und der eigentlichen Anwendung ==== Soll eine FW den Zugriff zwischen den Store und der Applikation kontrollieren, sind die folgenden Regeln zu beachten: [[nosql:netzkonfiguration_fw_oracle_nosql_db_11gr2|Oracle NoSQL Netzwerk Konfiguration]]. Der Client/Applikation Server, der mit dem Store arbeiten soll, muss auf JEDEN Knoten des Store über den passenden Port zugreifen können! ==== Boot Konfiguration erstellen ==== ** User Oracle auf jeden Knoten ** Vorüberlegungen: Auf welchen Knoten soll der Admin Service laufen - in unserem Beispiel auf Node 1 Parameter bestimmen: * **root** * KVROOT Verzeichnis für die abzulegenden Daten * **port** * TCP/IP Port um den Knoten auf Client aus zu erreichen wie 5000 * **admin** * TCP/IP Port für die ADMIN Web Console wie 5001 * **harange** * Portrange für die interne Kommunikation der Nodes untereinander wie 5010,5020 * **servicerange** * Portrange für RMI basierende Dienste * **capacity** optional * Wieviele Replication Prozesse können auf diesen Server kaufen * **storagedir** optional * Alternativer Speicherplatz für die Replication Prozesse * **num_cpus** * Wie viele CPU's können die Replication nodes verbrauchen * **memory_mb** * Wie viel Speicher können die Replication nodes verbrauchen Konfiguration anlegen: export KVROOT=/opt/oracle/kvdata java -jar $KVHOME/lib/kvstore.jar makebootconfig -root $KVROOT \ -port 5000 \ -admin 5001 \ -host $HOSTNAME \ -harange 5010,5020 \ -servicerange 5021,5041 \ -capacity 3 \ -num_cpus 1 \ -memory_mb 500 **Update V3!** Für die Version 3 ist nun auch der Parameter -store-security anzugeben, soll der Store sich wie in der Version 2 verhalten mit dem Wert "none". ==== Oracle NoSQL Database Storage Node Agent (SNA) starten ==== nohup java -jar $KVHOME/lib/kvstore.jar start -root $KVROOT & Logfile prüfen: cd $KVROOT vi snaboot_0.log Java Prozesse auf der Maschine lassen sich mit jps und jstat [[http://openbook.galileocomputing.de/java7/1507_23_002.html#dodtp2da3a818-4728-47dc-84a7-105c87b85834|Java 7 - Mehr als eine Insel]] auf der Maschine überwachen. Liegen aber normalerweise nicht im Pfad, sondern im Bin Verzeichnis des aktuellen JDK! /usr/java/jdk1.7.0_21/bin/jps -v 2033 kvstore ... /usr/java/jdk1.7.0_21/bin/jstat -gcutil Connect prüfen: java -jar $KVHOME/lib/kvstore.jar ping -port 5000 -host $HOSTNAME SNA at hostname: nosqldb01, registry port: 5000 is not registered No further information is available Die Meldung zeigt uns, dass zwar ein SNA Prozess auf dem Knoten schon läuft, diese aber noch nicht konfiguriert ist. Diese Konfiguration auf den beiden anderen Servern anlegen und über den Host Parameter vom obigen ping Kommando testen ob alle SNA Nodes erreichbar sind. Damit ist die Grundinstallation der Oracle NoSQL Umgebung abgeschlossen. ===Um SNA wieder zu stoppen === java -jar $KVHOME/lib/kvstore.jar stop -root $KVROOT === Autostart einrichten === Autostart über init.d Mechanismus einrichten. Beispiel: #!/bin/bash # # Run-level Startup script NoSQL # # chkconfig: 2345 08 92 # description: Starts, stops Oracle NoSQL # # ### BEGIN INIT INFO # Provides: OracleNoSQLKVStore # Required-Start: # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start and stop OracleNoSQLKVStore # Description: Start, stop and save OracleNoSQLKVStore ### END INIT INFO # Source function library. . /etc/init.d/functions ORACLE_USER=oracle KVHOME=/opt/oracle/produkt/11.2.0/kv-2.0.39 KVROOT=/opt/oracle/kvdata/ #Start or stop the Oracle NoSQL Node case "$1" in start) # Oracle NoSQL start echo -n "Starting Oracle: " su - $ORACLE_USER -c "nohup java -jar $KVHOME/lib/kvstore.jar start -root $KVROOT > /tmp/nohup.out 2>&1 &" echo "OK" ;; stop) # Oracle Nosql shutdown echo -n "Shutdown Oracle: " su - $ORACLE_USER -c "java -jar $KVHOME/lib/kvstore.jar stop -root $KVROOT" echo "OK" ;; status) # status echo -n "Status Oracle: " jps -m | grep kv ;; reload|restart) $0 stop $0 start ;; *) echo "Usage: $0 start|stop|restart|reload|status" exit 1 esac exit 0 Start Script einrichten: # datei nach /etc/init.d/nosql # rechte chmod 777 /etc/init.d/nosql # chkconfig --add nosql # chkconfig | grep nosql ==== KV Store einrichten und konfigurieren ==== Die Administration der Umgebung erfolgt über ein Kommando Zeilen Werkzeug. Aufruf: java -jar $KVHOME/lib/kvstore.jar runadmin -port 5000 -host $HOSTNAME Kv-> Ablauf: * SNA müssen alle gestartet sein ( mit der Installation erfolgt) * KV Store einen Namen vergeben * Data Center anlegen * Admin Prozess auf einen Knoten anlegen * Storage Node Pool anlegen * Weitere Storage Knoten hinzufügen * Erzeugen und Verteilen der Replication Nodes === KV Store einen Namen vergeben === Komandozeilen Werkzeug starten und mit dem Befehl „configure -name „ einen Store Namen vergeben Kv-> configure -name GPIDB Store configured: GPIDB === Data Center anlegen === Ein Store kann nur ein Data Center enthalten und wird mit dem Befehl "plan deploy-datacenter" erstellt. Mit -wait wartet die Console auf der Ergebnis des Befehls. Parameter: * name * datacenter name - eindeutiger Name der Systemumgebung * rf * replication factor - weiviele relicate der Daten sollen gehalten werden - bei uns 3 Ablauf: kv-> plan deploy-datacenter -name jupiter -rf 3 -wait Executed plan 1, waiting for completion... Plan 1 ended successfully Ergebnis anzeigen lassen: kv-> show plans 1 Deploy Datacenter (1) SUCCEEDED === Admin Prozess auf einen Knoten anlegen === Jeder KVStore hat eine administrative Datenbank. Auf dem Knoten der die Admin Datenbank halten soll, mit dem Kommandozeilen Werkzeug anmelden und dort mit den Befehlen deploy-sn und deploy-admin die administrative DB anlegen. Umgebung (topology) anzeigen lassen: kv-> show topology store=GPIDB numPartitions=0 sequence=1 dc=[dc1] name=jupiter repFactor=3 Für den deploy-sn Befehl benötigen wir die obigen Ausgaben, wir fügen im ersten Schritt den Node hinzu: kv-> plan deploy-sn -dc dc1 -host nosqldb01 -port 5000 -wait Executed plan 2, waiting for completion... Plan 2 ended successfully kv->show topology # => zeigt nun den ersten Node mit an Nach dem Hinzufügen des ersten Knoten können wir hier den administrativen Prozess konfigurieren. kv-> plan deploy-admin -sn sn1 -port 5001 -wait Executed plan 3, waiting for completion... Plan 3 ended successfully Für das Einrichten der Umgebung bzw. für unsere drei Knoten Test Umgebung ist das nun ausreichend, für produktive Umgebungen empfiehlt Oracle bis zu 3 administrative Services zu verwenden. === Storage Node Pool anlegen === Der Storage Node Pool enthält unser 3 Hosts als Storage Knoten. Mit "pool create" wird der Pool angelegt, mit "pool join" werden die Knoten hinzugefügt werden. kv-> pool create -name JupiterPool kv-> show topology dc=[dc1] name=Jupiter sn=[sn1] dc=dc1 nosqldb01:5000 status=UNREPORTED kv-> pool join -name JupiterPool -sn sn1 Added Storage Node sn1 to pool JupiterPool ===Weitere Storage Knoten hinzufügen=== Nun können die beiden anderen Knoten dem System hinzugefügt werden. Hinzufügen eines Hosts mit "plan deploy-sn", anzeigen der System mit "show topology", hinzufügen zum Pool mit "pool join", anzeigen des Pools mit "show pool". kv-> plan deploy-sn -dc dc1 -host nosqldb02 -port 5000 -wait Executed plan 4, waiting for completion... Plan 4 ended successfully kv-> pool join -name JupiterPool-sn sn2 Added Storage Node sn2 to pool JupiterPool kv-> plan deploy-sn -dc dc1 -host nosqldb03 -port 5000 -wait Executed plan 5, waiting for completion... Plan 5 ended successfully kv-> pool join -name JupiterPool-sn sn3 Added Storage Node sn3 to pool JupiterPool === Erzeugen und Verteilen der Replication Nodes === Im letzten Schritt werden die Replication Nodes für die "Kopien" der Daten erstellt. Dazu wird der Befehl "topology create" verwendet. Parameter: * topology name - Name für die Topologie * pool name - Name des Pools * number of partitions - Anzahl der Partitionen Ein wichtiger Wert ist hier die Anzahl der Partitionen. Faustformel: (Total number of disks hosted by the storage nodes / Replication Factor) * 10 Genauer siehe [[http://docs.oracle.com/cd/NOSQL/html/AdminGuide/estimate-total-shards-and-machines.html#num-partitions|Number of Partitions]] kv-> topology create -name GPItopo -pool JupiterPool-partitions 300 Created: GPItopo kv-> plan deploy-topology -name GPItopo -wait Executed plan 6, waiting for completion... Plan 6 ended successfully Mit dem Kommando "show plans" prüfen ob alles geklappt hat. === Skripten === Die Befehle lassen sich auch in einem Script bündeln und gemeinsam ausführen, in der Kommandoshell mit dem Befehl "load -file " aufrufen oder als Parameter von "java -jar KVHOME/lib/kvstore.jar runadmin -port 5000 -host node01 load -file ". Siehe auch:[[nosql:install_oracle_nosql_db_11gr2_script_based|Oracle NoSQL Installation automatisieren]] === Test der Umgebung === Ping auf die Storage Knoten: java -jar $KVHOME/lib/kvstore.jar ping -port 5000 -host nosqldb01 Umgebung mit verify überprüfen: java -jar KVHOME/lib/kvstore.jar runadmin -port 5000 -host $HOSTNAME kv-> verify == Im Browser Status prüfen == Aufruf der Admin Console im Browser über den Server Namen und den Admin Port 5001 Aufruf über den Browser: {{:nosql:admin_overview_nosql.png?300 |Admin Übersicht Oracle NoSQL}} Leider nicht Passwort geschützt! === Löschen einer Umgebung === Um eine Umgebung zurückzusetzen muss auf jeden Knoten alles gestoppt und der KVROOT gelöscht werden. java -jar $KVHOME/lib/kvstore.jar stop -root $KVROOT rm -r $KVROOT ==== Quellen ==== * http://www.oracle.com/technetwork/products/nosqldb/overview/index.html * http://docs.oracle.com/cd/NOSQL/html/AdminGuide/index.html