Instalacja klastra Oracle RAC 11gR2... 1 ISCSI-TARGET... 1 Oracle ASMLib... 2 Konfiguracja DNS... 3 Konfiguracja SSH... 8 Instalacja oprogramowania GRID... 9 Kreowanie bazy danych... 12 Rejestracja bazy w klastrze... 14 Instalacja klastra Oracle RAC 11gR2 W artykule opisano sposób instalacji testowego RAC a 11gR2 z użyciem wirtualnych maszyn Oracle VirtualBox, na których zainstalowano systemy operacyjne OEL 5.5 systemem hostującym jest Ubuntu 10.04 LTS. Istotne jest, żeby systemy operacyjne miały skonfigurowane minimum dwie karty sieciowe (pomocny może się okazać dostęp do Internetu) oraz doinstalowane pakiety do obsługi ISCSI oraz konfiguracji serwerów DNS. Instrukcja przeznaczona jest dla osób, mających doświadczenie z instalacją klastra Oracle RAC10g. ISCSI- TARGET Omawiana instalacja wykorzystuje jako zasoby współdzielone dyski zaprezentowane przez iscsi-target. Konfiguracja dla Lun ów: Target rac11gr2:disk Lun 0 Path=/virtual/iscsi/cdata,Type=fileio Lun 1 Path=/virtual/iscsi/asm01,Type=fileio Po prawidłowym skonfigurowaniu powinniśmy móc otrzymać status podobny do poniższgo: root@obi-wan:/virtual/iscsi# cat /proc/net/iet/volume tid:4 name:rac11gr2:disk lun:0 state:0 iotype:fileio iomode:wt path:/virtual/iscsi/cdata lun:1 state:0 iotype:fileio iomode:wt path:/virtual/iscsi/asm01 Na obydwu maszynach naszego RAC a logujemy się do serwera ISCSI tak jak w przykładzie poniżej [root@rac2 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.56.1 [root@rac2 ~]# iscsiadm -m node --login -T rac11gr2:disk -p 192.168.56.1 Na każdym z zaprezentowanych dysków tworzymy partycję podstawową o maksymalnej wielkości.
Oracle ASMLib Posłużymy się alternatywą dla urządzeń RAW jest to sterownik napisany przez Oracle, dedykowany do obsługi ASM a ponieważ w wersji 11gR2 możemy składować pliki VOTE oraz CRS bezpośrednio na ASM ie nie będziemy potrzebować dodatkowych urządzeń surowych. W opisywanej instalacji stworzyłem dwie grupy dyskowe CDATA do przechowywania OCR i VOTE oraz DATA do przechowywania plików bazy danych. Dla każdej z grup zostało zaprezentowane jedno urządzenie dyskowe za pomocą ISCSI. Po pobraniu RPM ów odpowiadających naszym systemom operacyjnym, przystępujemy do instalacji oraz konfiguracji ASMLib. [root@rac1 ~]# ls oracleasm* oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm oracleasmlib-2.0.4-1.el5.x86_64.rpm oracleasm-support-2.1.3-1.el5.x86_64.rpm [root@rac1 ~]# rpm -Uvh oracleasm* ostrzeňľenie: oracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm: NagŇā wek V3 Podpis DSA: NOKEY, key ID 1e5e0159 Przygotowywanie... ########################################### [100%] 1:oracleasm-support ########################################### [ 33%] 2:oracleasm-2.6.18-194.el########################################### [ 67%] 3:oracleasmlib ########################################### [100%] Konfiguracja Oracle ASMLib na pierwszym węźle RAC a oraz stworzenie nowych urządzeń [root@rac1 ~]# /etc/init.d/oracleasm configure Configuring the Oracle ASM library driver. This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values will be shown in brackets ('[]'). Hitting <ENTER> without typing an answer will keep that current value. Ctrl-C will abort. Default user to own the driver interface []: oracle Default group to own the driver interface []: dba Start Oracle ASM library driver on boot (y/n) [n]: y Scan for Oracle ASM disks on boot (y/n) [y]: Writing Oracle ASM library driver configuration: done Initializing the Oracle ASMLib driver: [ OK ] Scanning the system for Oracle ASMLib disks: [ OK ] [root@rac1 ~]# /etc/init.d/oracleasm createdisk cdata /dev/sdb sdb sdb1 [root@rac1 ~]# /etc/init.d/oracleasm createdisk cdata /dev/sdb1 Marking disk "cdata" as an ASM disk: [ OK ]
[root@rac1 ~]# /etc/init.d/oracleasm createdisk data /dev/sdc1 Marking disk "data" as an ASM disk: [ OK ] Po przeprowadzeniu konfiguracji na pierwszym węźle i stworzeniu nowych przypisań do urządzeń dyskowych, należy przeprowadzić konfigurację na drugim węźle [root@rac2 ~]# /etc/init.d/oracleasm configure Configuring the Oracle ASM library driver. This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values will be shown in brackets ('[]'). Hitting <ENTER> without typing an answer will keep that current value. Ctrl-C will abort. Default user to own the driver interface []: oracle Default group to own the driver interface []: dba Start Oracle ASM library driver on boot (y/n) [n]: y Scan for Oracle ASM disks on boot (y/n) [y]: Writing Oracle ASM library driver configuration: done Initializing the Oracle ASMLib driver: [ OK ] Scanning the system for Oracle ASMLib disks: [ OK ] You have mail in /var/spool/mail/root Jeśli wszystko przebiegło prawidłowo, powinniśmy otrzymać następujący obraz sytuacji: [root@rac2 ~]# ls -al /dev/oracleasm/disks/* brw-rw---- 1 oracle dba 8, 17 lut 24 17:21 /dev/oracleasm/disks/cdata brw-rw---- 1 oracle dba 8, 33 lut 24 17:21 /dev/oracleasm/disks/data [root@rac2 ~]# Konfiguracja DNS Począwszy od wersji 11gR2, Oracle zaprezentował nowy sposób łączenia się do klastra SCAN dzięki temu połączenie do klastra odbywa się z użyciem jednej nazwy, rozwiązywanej przez DNS y do adresów, na końcu których znajdują się nasłuchy, posiadające zarejestrowane usługi serwera Oracle. http://wiki.oracle.com/page/oracle+rac11g+r2+single+client+access+name-+scan W tej instalacji posłużymy się skonfigurowanymi serwerami DNS na obydwu node ach (nie będziemy posługiwać się opcją GNS). Node RAC1 rndc-confgen -a [root@rac1 Server]# cat /etc/named.conf
// Enterprise Linux BIND Configuration Tool // // Default initial "Caching Only" name server configuration // options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; zone "localdomain." IN { file "localdomain.zone"; allow-update { none; zone "0.0.127.in-addr.arpa." IN { file "named.local"; allow-update { none; zone "racdomain." IN { file "racdomain.zone"; allow-update { none; zone "56.168.192.in-addr.arpa." IN { file "named.rac"; allow-update { none;
include "/etc/rndc.key"; [root@rac1 Server]# cat /var/named/racdomain.zone $TTL 86400 @ IN SOA rac2 root.rac1 ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS rac1 rac1 IN A 192.168.56.121 rac2 IN A 192.168.56.122 rac1-v IN A 192.168.56.131 rac2-v IN A 192.168.56.132 scan IN A 192.168.56.141 scan IN A 192.168.56.142 scan IN A 192.168.56.143 [root@rac2 Server]# cat /var/named/named.rac $TTL 86400 @ IN SOA rac2. root.rac1. ( 42 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS rac1. 121 IN PTR rac1. 122 IN PTR rac2. 131 IN PTR rac1-v. 132 IN PTR rac2-v. 141 IN PTR scan. 142 IN PTR scan. 143 IN PTR scan. [root@rac1 ~]# cat /etc/resolv.conf
search racdomain nameserver 192.168.56.121 nameserver 192.168.56.122 chkconfig named on Node RAC2 rndc-confgen -a [root@rac2 Server]# cat /etc/named.conf // Enterprise Linux BIND Configuration Tool // // Default initial "Caching Only" name server configuration // options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; zone "localdomain." IN { file "localdomain.zone"; allow-update { none; zone "0.0.127.in-addr.arpa." IN { file "named.local"; allow-update { none;
zone "racdomain." IN { file "racdomain.zone"; allow-update { none; zone "56.168.192.in-addr.arpa." IN { file "named.rac"; allow-update { none; include "/etc/rndc.key"; [root@rac2 Server]# cat /var/named/racdomain.zone $TTL 86400 @ IN SOA rac2 root.rac2 ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS rac2 rac1 IN A 192.168.56.121 rac2 IN A 192.168.56.122 rac1-v IN A 192.168.56.131 rac2-v IN A 192.168.56.132 scan IN A 192.168.56.141 scan IN A 192.168.56.142 scan IN A 192.168.56.143 [root@rac2 Server]# cat /var/named/named.rac $TTL 86400 @ IN SOA rac2. root.rac2. ( 42 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS rac2.
121 IN PTR rac1. 122 IN PTR rac2. 131 IN PTR rac1-v. 132 IN PTR rac2-v. 141 IN PTR scan. 142 IN PTR scan. 143 IN PTR scan. [root@rac2 ~]# cat /etc/resolv.conf search racdomain nameserver 192.168.56.122 nameserver 192.168.56.121 chkconfig named on Konfiguracja SSH Podobnie jak w poprzednich wersjach, pomiędzy użytkownikami będącymi właścicielami oprogramowania Oracle musi istnieć konieczność wymiany danych po SSH bez użycia haseł. Na obydwu node ach [oracle@rac1 ~]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/oracle/.ssh/id_rsa): Created directory '/home/oracle/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/oracle/.ssh/id_rsa. Your public key has been saved in /home/oracle/.ssh/id_rsa.pub. The key fingerprint is: c1:9d:30:c2:d9:d4:22:a4:dc:86:c4:ee:93:a0:bc:c1 oracle@rac1 [oracle@rac1 ~]$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/oracle/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/oracle/.ssh/id_dsa. Your public key has been saved in /home/oracle/.ssh/id_dsa.pub. The key fingerprint is: 77:c0:81:f2:e5:f8:e8:0a:7a:71:a1:2a:00:10:0c:91 oracle@rac1 Tylko na jednym nod zie
[oracle@rac1 ~]$ cd.ssh/ [oracle@rac1.ssh]$ ls id_dsa id_dsa.pub id_rsa id_rsa.pub [oracle@rac1.ssh]$ touch authorized_keys [oracle@rac1.ssh]$ cat *.pub >> authorized_keys [oracle@rac1.ssh]$ ssh rac2 "cat /home/oracle/.ssh/*.pub" >> authorized_keys The authenticity of host 'rac2 (192.168.56.122)' can't be established. RSA key fingerprint is 27:97:44:9f:96:9c:41:5b:4c:18:8e:d8:b6:31:e6:13. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rac2,192.168.56.122' (RSA) to the list of known hosts. oracle@rac2's password: [oracle@rac1.ssh]$ scp authorized_keys rac2:$pwd oracle@rac2's password: authorized_keys 100% 1988 1.9KB/s 00:00 [oracle@rac1.ssh]$ ssh rac1 date; ssh rac2 date The authenticity of host 'rac1 (192.168.56.121)' can't be established. RSA key fingerprint is 6b:2d:84:0f:e3:8c:0a:bc:18:97:ee:db:9c:0d:97:b1. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'rac1,192.168.56.121' (RSA) to the list of known hosts. czw lut 24 19:21:17 CET 2011 czw lut 24 19:21:18 CET 2011 [oracle@rac1.ssh]$ ssh rac1 date; ssh rac2 date czw lut 24 19:21:20 CET 2011 czw lut 24 19:21:21 CET 2011 Instalacja oprogramowania GRID Jeżeli dotychczasowa konfiguracja przebiegła pomyślnie możemy przystąpić do instalacji Oracle Grid istotny jest fakt, że od wersji 11gR2 konfiguracja ASM a jest robiona z GRID a, który zastąpił wcześniejszy produkt Oracle Clusterware.
Kreowanie bazy danych Po prawidłowym zainstalowaniu opcji GRID możemy zainstalować software bazy danych i przystąpić do tworzenia bazy opisałem ręczny sposób stworzenia bazy i zarejestrowania jej w klastrze: Przykładowy plik pfile: db_name='orcl' sga_target=1g sga_max_size=2g pga_aggregate_target=200m processes = 150 audit_trail ='db' db_block_size=8192 db_recovery_file_dest_size=2g open_cursors=300 remote_login_passwordfile='exclusive' orcl1.instance_name=orcl1 orcl2.instance_name=orcl2 orcl1.thread=1 orcl2.thread=2 orcl1.undo_tablespace=undo1 orcl2.undo_tablespace=undo2 cluster_database=false cluster_database_instances=2 db_create_file_dest='+data'
db_create_online_log_dest_1='+data' db_recovery_file_dest='+data' Uruchamiamy bazę w trybie NOMOUNT i przystępujemy do jej tworzenia sqlplus "/ as sysdba" SQL> create spfile from pfile; SQL> startup nomount ORACLE instance started. Total System Global Area 3221225472 bytes Fixed Size 2087416 bytes Variable Size 3019900424 bytes Database Buffers 184549376 bytes Redo Buffers 14688256 bytes CREATE DATABASE CONTROLFILE REUSE DATAFILE SIZE 1G AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED SYSAUX DATAFILE SIZE 600M AUTOEXTEND ON NEXT 10240K MAXSIZE 5G DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE SIZE 500M UNDO TABLESPACE "UNDO1" DATAFILE SIZE 1G autoextend on next 10M maxsize 5G CHARACTER SET EE8ISO8859P2 LOGFILE GROUP 1 SIZE 100M, GROUP 2 SIZE 100M, GROUP 3 SIZE 100M; Po prawidłowym wykonaniu tworzenia bazy danych, należy stworzyć dla niej słownik danych i zestaw pakietów oraz typów. SQL> @?/rdbms/admin/catalog.sql SQL> @?/rdbms/admin/catproc.sql SQL> @?/rdbms/admin/catclust.sql SQL> @?/rdbms/admin/utlrp.sql Po zmianie parametru CLUSTER_DATABASE na TRUE restartujemy instancję i dodajemy nowe grupy REDO oraz nową przestrzeń tabel UNDO dla drugiej instancji RAC a alter database add logfile thread 2 group 4;
alter database add logfile thread 2 group 5; alter database add logfile thread 2 group 6; alter database enable public thread 2; create undo tablespace undo2 datafile size 200m autoextend on next 10m maxsize unlimited; Rejestracja bazy w klastrze Możemy zarejestrować bazę danych w klastrze na dwa sposoby stary i nowy. Za pomocą starego sposobu rejestrujemy bazę i przypisujemy jej instancje, znajdujące się na poszczególnych węzłach klastra. Posługując się nową metodą, stworzymy pulę serwerów, za pomocą której baza Oracle będzie zarządzana. http://download.oracle.com/docs/cd/e14072_01/rac.112/e10717/votocr.htm#chdhidgf W tej instalacji stworzyłem pulę serwerów. [oracle@rac1 ~]$ srvctl add srvpool -g prod_orcl -l 1 -u 2 -i 10 [oracle@rac1 ~]$ srvctl status srvpool Server pool name: Free Active servers count: 0 Server pool name: Generic Active servers count: 0 Server pool name: prod_orcl Active servers count: 2 [oracle@rac1 ~]$ srvctl add database -d orcl -o /u01/app/oracle/product/11.2.0/db_1 -p /u01/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora -g prod_orcl -a data,orahome [oracle@rac1 ~]$ srvctl config database -d orcl Database unique name: orcl Database name: Oracle home: /u01/app/oracle/product/11.2.0/db_1 Oracle user: oracle Spfile: /u01/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora Domain: Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: prod_orcl Database instances: Disk Groups: DATA,ORAHOME
Services: Database is policy managed [oracle@rac1 ~]$ srvctl add instance -d orcl -i orcl1 -n rac1 PRCD-1051 : Failed to add instance to database orcl PRCD-1045 : Database orcl is policy managed and does not support add instance option [oracle@rac1 ~]$ srvctl status database -d orcl Database is not running. [oracle@rac1 ~]$ srvctl start database -d orcl Jak widać powyżej nie da się dodać statycznie instancji dla bazy zarządzanej przez pulę serwerów sprawdź zawartość katalogu $ORACLE_HOME/dbs a zobaczysz, że powstały tam nowe pliki pfile pula zarządza automatycznie przypasaniami instancji do serwerów RAC a. Interesujący wydaje się fakt, że po stworzeniu puli zbędne okazują się parametry dotyczące numerów instancji, wątków i undo przypisania te zaczynają być zarządzane automatycznie.