How-to: Deploy Oracle Real Application Cluster 11g on VirtualBox

Published on August 19, 2014

How-to: Deploy Oracle Real Application Cluster 11g on VirtualBox



1. Background


Our company is engaged in the serial production of purely peaceful equipment and all related information from the production is written in the Oracle database, which is located on a virtual server running VMware ESX . And everything seems to be adjusted, the conveyor is working, data is being written, the finished product is being shipped.

But the rack, on which, in addition to the database server, is also based on a bunch of some obscure servers, has an amazing property of sometimes falling. Yes, and with the database itself at one point, anything can happen. Of course, the first thing that comes to mind is the competent organization of database backup or the creation of VMware spapshots. However, all these actions, in the event of equipment failure, do not allow for continuous operation of the database and the entire conveyor, respectively. In general, I wanted to try out other solutions.

When a meeting on this issue was held again in the IT department, it was decided to try out the idea of ​​raising Oracle Real Application Cluster and deploying a production database on it. The only problem was that at that moment no one knew how to do this.

Before purchasing hardware and deploying new servers, it was decided to test the selected technology locally using VM VirtualBox . After several weeks that smoothly passed into months, searching and digesting the necessary information like air, the cluster was finally launched, and it was possible to start the first tests. And so, for everyone who wants to raise an n -node ( n> = 2 ) cluster, welcome to cat.

2. Software


First, I would like to announce the entire list of software that was used to build the cluster:
  1. Oracle VM VirtualBox. At the time of writing, the latest version for Windows was 4.3.14. You can download it here ;
  2. Oracle Linux Server 6.5 for x86-64. Nodes of the future cluster will be deployed on this axis;
  3. Oracle Grid Infrastructure 11g Release 2 (11.2.0.3.0) for Linux x86-64;
  4. Oracle Database 11g Release 2 (11.2.0.3.0) for Linux x86-64;
  5. CentOS 6.4 or any other axis for the DNS server.

3. Description of cluster infrastructure


Our cluster will consist of 3 virtual machines: the first 2 will directly host the cluster nodes, and the 3rd will be used as a DNS server. All cluster nodes will simultaneously be connected 5 VDI ( Virtual Disk Image ), created in a special way. A disk group will be created from these disks to store Oracle database data.

A sketch of a diagram of how this should look:


3.1 Network Infrastructure

To build a cluster, 3 subnets will be used:
  1. LAN 1: external network interface, used to connect clients to the database;
  2. LAN 2: internal network interface for interconnect;
  3. LAN 3: an external network with Internet access is required for installing and updating packages at the installation stage.

Next, we need the network addresses that the cluster will use. How and where to ask them, I will tell later.
Here are the addresses that will be involved in the cluster.
SERVER NAME   LAN 1
(192.168.56.0/24)
LAN 2
(10.0.0.0/24)
LAN 3
(172.30.0.0/14)
dns server Device eth0   eth1
IP Address 192.168.56.101 172.30.201.101 *
Network mask 255.255.255.0 255.255.0.0
Gateway 192.168.56.1 * 172.30.0.1 **
DNS 127.0.0.1 172.30.1.3***
172.30.1.8***
 
rac1-node Device eth0 eth1  
IP Address 192.168.56.111 10.0.0.111
Network Mask 255.255.255.0 255.255.255.0
Gateway 192.168.56.101 10.0.0.1*
DNS 192.168.56.101  
 
rac2-node Device eth0 eth1  
IP Address 192.168.56.112 10.0.0.112
Network Mask 255.255.255.0 255.255.255.0
Gateway 192.168.56.101 10.0.0.1*
DNS 192.168.56.101

* IP-адреса виртуальных адаптеров хоста;
** IP-адрес шлюза, который используется хостом;
*** IP-адреса внешних DNS-серверов.

In addition, we will also need SCAN (Single Client Access Name) and VIP addresses .
SCAN addresses. Using this technology, all clients are configured to access a single service name, which using a DNS server can resolve to several IP addresses, each of which has a public LISTENER. The number of SCAN addresses is determined by the expression n + 1 , where n is the number of cluster nodes:
192.168.56.121
192.168.56.122
192.168.56.123

VIP addresses. These are logical network addresses assigned to nodes on external network interfaces. As soon as a cluster node becomes unavailable, in theory another node in the cluster should pick up its VIP address and temporarily continue to service its own and, if possible , requests of the fallen node.
192.168.56.113
192.168.56.114

3.2 Disk Subsystem

For Oracle Grid Infrastructure to function, it needs a shared disk space available for all nodes in the cluster. There are two options for organizing such storage: this is Oracle Automatic Storage Management ( Oracle ASM ) and the Shared File System . When using the second option, everything is quite simple: NFS balls are created on a separate server, which are mounted on each node of the cluster (additional mounting options are needed), the storage itself is configured.
The following actions will not be useful to us, but if suddenly, then ...
Монтирование NFS-шары для Shared File System:
# mkdir -p /st_nfs0
# mkdir -p /st_nfs1
# mkdir -p /st_nfs2

Открыть /etc/fstab и добавить записи:
storage-server:/mnt/nfs0   /st_nfs0      nfs   bg,intr,noac,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0   0 0
storage-server:/mnt/nfs1   /st_nfs1      nfs   bg,intr,noac,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0   0 0
storage-server:/mnt/nfs2   /st_nfs2      nfs   bg,intr,noac,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0   0 0

ASM is a new way to manage storage that underlies the database. Built into the core of the Oracle Database , it provides file system and volume manager integration for database files. Starting with version 11gR2, ASM implements the ASM Cluster File System and ASM Dynamic Volume Manager . These ASM capabilities are an alternative to third-party file system and volume management solutions for databases and applications, for tasks such as creating and placing databases, managing disk space, placing executable application files, and other similar tasks.

Despite the complexity of the implementation, we stop at Oracle ASM. This ends with the theory and proceed to the installation of software.

4. Installing Oracle VM VirtualBox


At the stage of installing VBox there is nothing complicated. The only thing I would like to note is that after installing VBox, add the installation path to the variable Pathin the list of system variables. In the future, this will be very useful to us.

In the next step, we need to add and configure virtual host adapters. By default, VBox creates one adapter with the name VirtualBox Host-Only Ethernet Adapter. Using the program menu, create another adapter with the name VirtualBox Host-Only Ethernet Adapter #2.

Properties of the PTC / IPv4 adapter:
Далее переходим в Панель управления\Сеть и Интернет\Сетевые подключения и в свойствах PTC/IPv4 адаптера прописываем следующее:
VirtualBox Host-Only Ethernet Adapter:
IP Address: 192.168.56.1
Mask: 255.255.255.0

VirtualBox Host-Only Ethernet Adapter #2
IP Address: 10.0.0.1
Mask: 255.255.255.0


This completes the configuration of VBox, you can proceed to create a VM.

5. Setup and configuration of the DNS server


As the distribution for the future DNS server, I chose the one that first came into view. It turned out to be the CentOS 6.4 x86_64 distribution .

5.1 VM configuration

Here are my settings:


На вкладке Сеть в качестве 1-го адаптера выбираем Виртуальный адаптер хоста:


2-й адаптер – Сетевой мост (можно использовать NAT) с адаптером, который смотрит во внешнюю сеть:


5.2 OS Installation

Detailed process
Переходим к установке ОС. Задаем имя нашего сервера: dns-server.test.com.by:


Тут же нажимаем Настроить сеть и поочередно задаем параметры для обоих адаптеров:


Выставляем опцию Подключаться автоматически. Иначе, каждый раз после перезапуска машины сеть придется включать в ручную:


Задаем параметры IPv4:


Аналогично проделываем все для 2-го интерфейса:


Если во внешней сети есть свой DHCP-сервер, или вы выбрали NAT, то параметры IPv4 можно не конфигурировать:


Выбираем минимальную установку – этого будет вполне достаточно для нашего сервера:


Ждем, скрестив пальцы, конца установки:


5.3 BIND Configuration

Before starting further configuration of the system, in order to avoid the questions “Well, I seem to have done everything correctly, why doesn’t it work?” , I recommend temporarily disabling Firewall .

Check the status:
# service iptables status

And turn off:
# service iptables stop
# chkconfig iptables off

We will use BIND as the DNS server .
# yum install named

Next, you need to edit the file named.conf:
# nano /etc/named.conf

* IMHO, for these purposes, it is best to use Midnight Commander or WinSCP.

Here is what we should have at the exit:
// named.conf
logging {
    channel "xfer" {
        file "/var/log/named/xfer.log" versions 3 size 10m;
        print-time yes;
        print-severity yes;
        severity info;
    };
    channel "lame" {
        file "/var/log/named/lamers.log" versions 2 size 10m;
        print-time yes;
        print-severity yes;
        severity info;
    };
    channel "config" {
        file "/var/log/named/conf.log" versions 3 size 10m;
        print-time yes;
        print-severity yes;
        severity info;
    };
    channel "security" {
        file "/var/log/named/security.log" versions 3 size 10m;
        print-time yes;
        print-severity yes;
        severity info;
    };
    category "xfer-in" { "xfer"; };
    category "xfer-out" { "xfer"; };
    category "notify" { "xfer"; };
    category "lame-servers" { "lame"; };
    category "config" { "config"; };
    category "security" { "security"; };
    category "default" { "default_syslog"; "default_debug"; };
};
acl "test_net" {
     localhost;
     192.168.56.0/24;
};
options {
    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";
    version "DNS Server";
    allow-recursion { test_net; };
    allow-query { test_net; };
    forwarders { 172.30.1.3; 172.30.1.8; };
    forward only;
    listen-on port 53 { localhost; 192.168.56.101; }; ### Master DNS IP ###
    dnssec-enable no;
    dnssec-validation no;
    dnssec-lookaside auto;
    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
};
zone "." IN {
    type hint;
    file "named.ca";
};
zone"test.com.by" IN {
    type master;
    file "forward.test";
    allow-update { none; };
};
zone"56.168.192.in-addr.arpa" IN {
    type master;
    file "reverse.test";
    allow-update { none; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

Creating report files:
# cd /var/named/chroot/var/log/named
# touch conf.log
# touch lamers.log
# touch security.log
# touch xfer.log

We assign access rights to the entire directory recursively:
# cd /var/named/chroot/var/log
# chmod 750 -R named
# chown -R named:named named

To create a direct zone, go to the directory:
# cd /var/named

and create the file forward.test:
# touch forward.test
# chmod 750 forward.test
# chown named:named forward.test

Direct Zone File Contents:
$TTL 86400
@	IN	SOA	dns-server.test.com.by. root.test.com.by. (
	2011071001	;Serial
	3600		;Refresh
	1800		;Retry
	604800		;Expire
	86400		;Minimum TTL
)
@	IN	NS	dns-server.test.com.by.
@	IN	A	192.168.56.101
@	IN	A	192.168.56.111
@	IN	A	192.168.56.112
@	IN	A	192.168.56.113
@	IN	A	192.168.56.114
dns-server	IN  A   192.168.56.101
rac1-node	IN  A   192.168.56.111
rac2-node	IN  A   192.168.56.112
rac1-node-vip	IN  A   192.168.56.113
rac2-node-vip	IN  A   192.168.56.114
rac1-node-priv	IN  A   10.0.0.111
rac2-node-priv	IN  A   10.0.0.112
rac-scan	IN  A   192.168.56.121
rac-scan	IN  A   192.168.56.122
rac-scan	IN  A   192.168.56.123

Similarly, create a file reverse.testfor the reverse zone
here with this content:
$TTL 86400
@	IN	SOA	dns-server.test.com.by. root.test.com.by. (
	2011071001	;Serial
	3600		;Refresh
	1800		;Retry
	604800		;Expire
	86400		;Minimum TTL
)
@	IN  NS		dns-server.test.com.by.
@       IN  PTR		test.com.by.
grid-server	IN  A   192.168.56.101
rac1-node	IN  A   192.168.56.111
rac2-node	IN  A   192.168.56.112
rac1-node-vip	IN  A   192.168.56.113
rac2-node-vip	IN  A   192.168.56.114
101	IN PTR		dns-server.test.com.by.
111	IN PTR		rac1-node.test.com.by.
112	IN PTR		rac2-node.test.com.by.
113	IN PTR		rac1-node-vip.test.com.by.
114	IN PTR		rac2-node-vip.test.com.by.

We put the daemon namedon autorun and start:
# chkconfig named on
# service named start

If everything is done correctly, then the daemon successfully starts with the message:
Запускается named:                                         [  OK  ]

Testing:
# ping rac-scan
PING rac-scan.test.com.by (192.168.56.121) 56(84) bytes of data.
From server-manager (192.168.56.101) icmp_seq=1 Destination Host Unreachable
# ping rac-scan
PING rac-scan.test.com.by (192.168.56.122) 56(84) bytes of data.
From server-manager (192.168.56.101) icmp_seq=1 Destination Host Unreachable
# ping rac-scan
PING rac-scan.test.com.by (192.168.56.123) 56(84) bytes of data.
From server-manager (192.168.56.101) icmp_seq=1 Destination Host Unreachable
# ping rac1-node
PING rac1-node (192.168.56.111) 56(84) bytes of data.
From server-manager (192.168.56.101) icmp_seq=1 Destination Host Unreachable
# ping rac2-node
PING rac2-node (192.168.56.112) 56(84) bytes of data.
From server-manager (192.168.56.101) icmp_seq=2 Destination Host Unreachable
# ping habrahabr.ru
PING habrahabr.ru (212.24.44.141) 56(84) bytes of data.
64 bytes from habrahabr.ru (212.24.44.141): icmp_seq=1 ttl=128 time=30.95 ms
64 bytes from habrahabr.ru (212.24.44.141): icmp_seq=1 ttl=128 time=28.03 ms
64 bytes from habrahabr.ru (212.24.44.141): icmp_seq=1 ttl=128 time=24.71 ms

Обратите внимание: при каждой новой попытке пингануть rac-scan, сервер по-кругу возвращает новый IP-адрес. На этом настройка DNS-сервера завершена. Более подробно про настройку BIND можно почитать тут.

6. Preparing to install the GRID infrastructure


So! Now we have come close to creating the cluster nodes. This paragraph describes an example of preparing the first cluster node for installing the GRID infrastructure.
In order to prepare the next node for the cluster, it is necessary to repeat paragraphs 6.1 - 6.3 .
* If you previously worked with VBox, then you can prepare one node, and then create its clone (army of clones).

6.1 VM configuration

VM settings for a node:


На вкладке Сеть в качестве 1-го адаптера выбираем виртуальный адаптер хоста VirtualBox Host-Only Ethernet Adapter:


Для второго адаптера выбираем VirtualBox Host-Only Ethernet Adapter #2:


6.2 OS Installation

Detailed process
Запускаем установку Oracle Linux. Выбираем Install or upgrade an existing system:


Выбираем родной язык установки:


А вот раскладку клавиатуры лучше оставить по умолчанию.


Выбираем стандартный тип накопителей:


Присваиваем имя для первой ноды кластера: rac1-node.test.com.by и переходим к конфигурации сетевых соединений:


System eth0:




System eth1:




Задаем пароль для супер пользователя root:


Далее, при выборе типа установки, указываем Все пространство и обязательно отмечаем пункт Просмотр и изменение структуры разделов:


На следующем шаге система автоматически создаст разбиение диска. Здесь все вроде хорошо, но есть один момент: при автоматическом разбиении размер swap задается примерно равным объему выделенной оперативной памяти. Так вот, при инсталляции Oracle GRID очень сильно «матерится» на значение данного параметра. При объеме оперативной памяти 2 Gb он затребует размер swap не менее 3,8 Gb. Я решил перестраховаться и задал значение 8 Gb. Для этого вначале необходимо уменьшить размер логического тома lv_root, а потом увеличить размер lv_swap за счет освободившегося пространства. В итоге должно получиться что-то наподобие этого:


Выбираем тип установки Desktop (можно и Database Server) и отмечаем пункт Настроить сейчас для изменения набора пакетов:


На следующем шаге переходим на вкладку Базы данных и снимаем все флажки, если они установлены:


Далее начнется установка пакетов, после которой будет предложено перезагрузить систему. Далее нужно создать пользователя grid. Под ним будет проходить дальнейшая инсталляция Oracle GRID:


Включаем синхронизацию времени. Если в Вашей сети есть NTP-сервер, то его можно указать в списке серверов:


На данном шаге установка завершена, ребутим систему. После чего можно приступать к дальнейшей конфигурации.

6.3 OS configuration

All operations in this subsection are performed on behalf of root!
Security Settings:
После установки ОС первым делом отключаем Firewall. На этом шаге можно воспользоваться GUI. Для этого выбираем Система – Администрирование – Межсетевой экран. Нажимаем Выключить и Применить:


Далее рекомендуется отключить SELinux, выставив значение переменной SELINUX=disabled в файле /etc/selinux/config.

We create the group of the same name and the user from which we will install Oracle Database :
# groupadd -g 501 oracle
# useradd -g oracle -u 501 -d /home/oracle -p ****** oracle

Create additional groups:
# groupadd -g 502 dba
# groupadd -g 503 asmdba
# groupadd -g 504 asmoper
# groupadd -g 505 asmadmin

Add user grid
in groups:
# usermod -g dba grid
# usermod -a -G grid grid
# usermod -a -G disk grid
# usermod -a -G asmdba grid
# usermod -a -G asmoper grid
# usermod -a -G asmadmin grid

For the user oracle
we perform a similar procedure:
# usermod -g dba oracle
# usermod -a -G oracle oracle
# usermod -a -G asmdba oracle
# usermod -a -G asmoper oracle
# usermod -a -G asmadmin oracle

On the host, share the directory where the unpacked Oracle Database 11g Release 2 for Linux installer is located . Mount the ball:
# mkdir -p /media/ora_linux
# mount -t cifs "//192.168.56.1/ora_linux" /media/ora_linux -o username="vasya_pupkin",password="********",iocharset=utf8,file_mode=0777,dir_mode=0777

Install additional packages. In fact, I hurried a little and moved this item here, because I already know exactly which packages I will not have enough for complete happiness. If you plan to use, or have already downloaded the same versions of Oracle Linux and Oracle Grid Infrastructure , which are described in the article, then there should be no questions. Otherwise, this paragraph is recommended to be skipped.
Go to the directory /media/ora_linux/grid/rpmand
start installing packages:
# yum install ./cvuqdisk-1.0.9-1.rpm
# yum install bind-utils
# yum install compat-libcap1-1.10
# yum install compat-libstdc++-33
# yum install libstdc++-devel
# yum install gcc-c++
# yum install ksh-20100621
# yum install libaio-devel
# yum install oracleasm
# yum install oracleasm-support

For the subsequent installation of Oracle GRID and Database
create a directory structure:
# mkdir -p /u01/app/grid
# mkdir -p /u01/app/oracle
# chown grid:dba /u01/app/grid
# chown oracle:dba /u01/app/oracle
# mkdir -p /u01/app/11.2.0/grid
# chown grid:dba /u01/app/11.2.0
# chown grid:dba /u01/app/11.2.0/grid
# mkdir /u01/app/oraInventory
# chown grid:dba /u01/app/oraInventory
# chmod -R 775 /u01/

After installing Oracle ASM packages , you can proceed to configure it. The first step is to configure the driver itself. This is done once . We start the configuration and specify some data: the user from under whom the driver will work, and to whom the interface, group , driver autostart at the system startup will belong .
Here's what it looks like:
# oracleasm configure –i
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 []: grid
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]: y
Writing Oracle ASM library driver configuration: done

We initialize the driver:
# oracleasm init
Creating /dev/oracleasm mount point: /dev/oracleasm
Loading module "oracleasm": oracleasm
Configuring "oracleasm" to use device physical block size
Mounting ASMlib driver filesystem: /dev/oracleasm

Configure NTP service. Open /etc/sysconfig/ntpdand add the parameter –x.
It should be like this:
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid -g"

Restarting the NTP service:
# service ntpd restart

This completes the OS configuration. Now you can put out the car and create a clone.

6.4 Creating ASM Disks

When creating a disk group, we will use the usual redundancy, organized by means of Oracle. Taking into account the reserve space for importing the test base, we will create 5 disks of 10 Gb each. To do this, open the Windows console on the host machine and move to the directory where the ASM disks are located and
we execute the following commands:
ASM> VBoxManage createhd --filename ASM_1.vdi --size 10240 --format VDI --variant Fixed
ASM> VBoxManage createhd --filename ASM_2.vdi --size 10240 --format VDI --variant Fixed
ASM> VBoxManage createhd --filename ASM_3.vdi --size 10240 --format VDI --variant Fixed
ASM> VBoxManage createhd --filename ASM_4.vdi --size 10240 --format VDI --variant Fixed
ASM> VBoxManage createhd --filename ASM_5.vdi --size 10240 --format VDI --variant Fixed

Подключаем диски к нодам кластера:
ASM> VBoxManage storageattach "RAC #1 ORA ASM" --storagectl "SATA" --port 1 --device 0 --type hdd --medium ASM_1.vdi --mtype shareable
ASM> VBoxManage storageattach "RAC #1 ORA ASM" --storagectl "SATA" --port 2 --device 0 --type hdd --medium ASM_2.vdi --mtype shareable
ASM> VBoxManage storageattach "RAC #1 ORA ASM" --storagectl "SATA" --port 3 --device 0 --type hdd --medium ASM_3.vdi --mtype shareable
ASM> VBoxManage storageattach "RAC #1 ORA ASM" --storagectl "SATA" --port 4 --device 0 --type hdd --medium ASM_4.vdi --mtype shareable
ASM> VBoxManage storageattach "RAC #1 ORA ASM" --storagectl "SATA" --port 5 --device 0 --type hdd --medium ASM_5.vdi --mtype shareable
ASM> VBoxManage storageattach "RAC #2 ORA ASM" --storagectl "SATA" --port 1 --device 0 --type hdd --medium ASM_1.vdi --mtype shareable
ASM> VBoxManage storageattach "RAC #2 ORA ASM" --storagectl "SATA" --port 2 --device 0 --type hdd --medium ASM_2.vdi --mtype shareable
ASM> VBoxManage storageattach "RAC #2 ORA ASM" --storagectl "SATA" --port 3 --device 0 --type hdd --medium ASM_3.vdi --mtype shareable
ASM> VBoxManage storageattach "RAC #2 ORA ASM" --storagectl "SATA" --port 4 --device 0 --type hdd --medium ASM_4.vdi --mtype shareable
ASM> VBoxManage storageattach "RAC #2 ORA ASM" --storagectl "SATA" --port 5 --device 0 --type hdd --medium ASM_5.vdi --mtype shareable

Everything! On this, all the preparatory work is completed, you can install Oracle GRID Infrastructure .

7. Installing the GRID infrastructure


We start all notes. We will log in to one of the nodes with which we will carry out the installation, under the user grid.
We mount the ball with the distribution kit:
# mount -t cifs "//192.168.56.1/ora_linux" /media/ora_linux -o username="vasya_pupkin",password="********",iocharset=utf8,file_mode=0777,dir_mode=0777

7.1 ASM Partitioning

Before starting the installation, it is necessary to mark ASM disks in a special way and check their availability on each node. Next, we perform all operations on behalf of root one of the cluster nodes!
Markup:
# ls /dev/sd*
/dev/sdb  /dev/sdc  /dev/sdd  /dev/sde  /dev/sdf

Выбираем первый по списку диск и размечаем:
# fdisk /dev/sdb

Далее вводим команды в следующей последовательности:
n
p
1
Два раза Enter
w

Разметка диска завершена. Проводим аналогичную процедуру с оставшимися 4-мя дисками. Вот что должно получиться в итоге:
# ls /dev/sd*
/dev/sdb1  /dev/sdc1  /dev/sdd1  /dev/sde1  /dev/sdf1


Create ASM disks:
# oracleasm createdisk DISK1 /dev/sdb1
# oracleasm createdisk DISK2 /dev/sdc1
# oracleasm createdisk DISK3 /dev/sdd1
# oracleasm createdisk DISK4 /dev/sde1
# oracleasm createdisk DISK5 /dev/sdf1

On all nodes in turn
check for ASM disks:
# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
# oracleasm listdisks
DISK1
DISK2
DISK3
DISK4
DISK5

This completes the partitioning of the ASM disks. Now you can proceed directly to the installation of Oracle GRID.

7.1 GRID Installation

Installation is done using the graphical wizard. We launch the terminal on behalf of grid.
[grid@rac1-node /]$ cd /media/ora_linux/grid
[grid@rac1-node /]$ ./runInstaller

Step-by-step installation wizard
Пропускаем обновление ПО:


На следующем шаге выбираем установку и конфигурацию Oracle Grid Infrastructure:


Выбираем расширенный тип установки:


Добавляем поддержку родного языка:


На следующем шаге необходимо задать имя кластера, имя и порт SCAN. У нас это будет выглядеть так:
Cluster Name: rac-cluster
SCAN name: rac scan
SCAN Port: 1521



Инсталлятор обратится к DNS-серверу и проверит наличие соответствующих записей SCAN-адреса. Если все в порядке, то на следующем шаге можно будет добавить ноды в кластер. При добавлении очередной ноды, необходимо заполнить поля Public и Virtual Hostname. Public Hostname – это имя компьютера, которое используется для его идентификации в сети. Virtual Hostname – виртуальное имя компьютера, которое будет использоваться Oracle GRID. Все мена должны иметь соответствующие записи на DNS-сервере.

В моем случае это выглядит так:
Node Public Hostname Virtual Hostname
1 rac1-node.test.com.by rac1-node-vip.test.com.by
2 rac2-node.test.com.by rac2-node-vip.test.com.by



После ввода всех узлов в кластер необходимо настроить SSH-соединение между будущими нодами. Для этого необходимо нажать кнопку SSH Connectivity и ввести пароль пользователя grid (вот именно поэтому на всех нодах должны быть одни и те-же пользователи с одинаковыми паролями). Установить соединение, нажав кнопку Setup:


Если все сделано правильно, то Oracle Grid отрапортует нам об этом, после чего можно будет переходить к следующему шагу.


На следующем шаге необходимо распределить сетевые интерфейсы: который будет внешним, а который будет использоваться для интерконнекта:


Далее необходимо определиться с типом хранилища. Выбираем Oracle ASM:


Задаем имя дисковой группе. Это имя в последующем будет использоваться в качестве отправной точки при задании места расположения датафайлов БД. Выбираем избыточность, задаем размер блока и отмечаем диски.
Disk Group Name: DATA
Redundancy: Normal
AU Size: 2 MB



Для того, что бы в поле Add Disks отображались диски, которые мы создали на предыдущем шаге, необходимо задать путь: /dev/oracleasm/disks* в окне Change Disk Discovery Path:


Задаем пароль для ASM Account:


Назначаем привилегии на соответствующие группы:


Прописываем пути установки Oracle Base и Software Location:


Путь установки Oracle Inventory:


После задания всех параметров инсталлятор начнет анализ системы, результатом которого может стать внушительный список действий: изменить некоторые параметры системы, установить дополнительные пакеты, проделать нечто невозможное. Те пункты, которые отмечены, как No – придется исправлять вручную. Остальные можно убить, одним нажатием Fix & Check Again:


После нажатия кнопки Fix & Check Again на экране появится окно Execute Fixup Scripts с подробными инструкциями и последовательностью запуска.


Вот мой пример фиксации предупреждений:
$ su
Password: 
# cd /tmp/CVU_11.2.0.3.0_grid
# ./runfixup.sh

После устранения всех, ну или почти всех предупреждений, оставшиеся не являются критическими. Ставим Ignore All:


После получения краткой сводки запускаем процесс инсталляции:


Процесс установки:


Во время установки понадобится выполнить несколько скриптов от имени root. Подробные инструкции будут представлены в окне Execute Configuration scripts:


В данном случае последовательно на обеих нодах необходимо выполнить вот эти инструкции:
$ su
Password: 
# cd /u01/app/oraInventory
# ./orainstRoot.sh
# cd /u01/app/11.2.0/grid
# ./root.sh

Процесс установки – финал уже близко:


Все, установка завершена!


We reboot all the nodes of the cluster.

7.2 Checking the infrastructure

After loading all the nodes, open the terminal and
We look at the state of the cluster nodes:
# cd /u01/app/11.2.0/grid/bin
# ./crsctl status resource -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       rac1-node
               ONLINE  ONLINE       rac2-node
ora.LISTENER.lsnr
               ONLINE  ONLINE       rac1-node
               ONLINE  ONLINE       rac2-node
ora.asm
               ONLINE  ONLINE       rac1-node                Started
               ONLINE  ONLINE       rac2-node                Started
ora.gsd
               OFFLINE OFFLINE      rac1-node
               OFFLINE OFFLINE      rac2-node
ora.net1.network
               ONLINE  ONLINE       rac1-node
               ONLINE  ONLINE       rac2-node
ora.ons
               ONLINE  ONLINE       rac1-node
               ONLINE  ONLINE       rac2-node
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       rac2-node
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       rac1-node
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       rac1-node
ora.cvu
      1        ONLINE  ONLINE       rac1-node
ora.oc4j
      1        ONLINE  ONLINE       rac1-node
ora.rac1-node.vip
      1        ONLINE  ONLINE       rac1-node
ora.rac2-node.vip
      1        ONLINE  ONLINE       rac2-node
ora.scan1.vip
      1        ONLINE  ONLINE       rac2-node
ora.scan2.vip
      1        ONLINE  ONLINE       rac1-node
ora.scan3.vip
      1        ONLINE  ONLINE       rac1-node
ora.wind.db
      1        ONLINE  ONLINE       rac1-node                Open
      2        ONLINE  ONLINE       rac2-node                Open


8. Installing Database Software


We will log in to one of the nodes with which we will carry out the installation, under the user oracle. Mount the ball. Further, as in the case of Oracle GRID , the installation is carried out using the graphical wizard. We launch the terminal on behalf of oracle.
[oracle@rac1-node /]$ cd /media/ora_linux/database
[oracle@rac1-node /]$ ./runInstaller

Step-by-step installation wizard
Пропускаем обновление ПО:




Выбираем тип установки: Install database software only. Саму базу мы будем разворачивать позже.


И вот оно: на следующем шаге выбираем Oracle Real Application Clusters database installation и в низу, о чудо, видим наши ноды – будем ставить на все. Здесь же еще необходимо настроить SSH-соединение между всеми нодами. Нажимаем кнопку SSH Connectivity, вводим пароль пользователя oracle и нажимаем кнопку Setup:


После успешной настройки SSH можно переходить к следующему шагу.


Добавляем поддержку родного языка:


Выбираем тип инсталляции – Enterprise Edition:


Задаем пути установки Oracle Base и Software Location:


Назначаем привилегии на соответствующие группы:


После задания всех параметров инсталлятор начнет анализ системы, результатом которого будет список несоответствий, которые необходимо исправить до начала процесса установки. Те пункты, которые отмечены как No – придется исправлять вручную. Остальные можно убить одним нажатием Fix & Check Again:


После нажатия кнопки Fix & Check Again на экране появится окно Execute Fixup Scripts с подробными инструкциями и последовательностью запуска:


Вот конкретный пример фиксации предупреждений:
$ su
Password: 
# cd /tmp/CVU_11.2.0.3.0_oracle
# ./runfixup.sh

Закрыть окно можно только по завершении отработки скрипта на всех нодах кластера.

Некоторые предупреждения так могут и остаться неисправленными. Очень часто встречается предупреждение Task resolv.conf Integrity. Я так и не нашел внятного ответа, как его исправить, в итоге просто проигнорировал:


Вот краткая сводка перед установкой:


Процесс установки:


Во время установки снова понадобится последовательно на каждой ноде выполнить несколько скриптов от имени root. Подробные инструкции будут представлены в окне Execute Configuration scripts:


В данном случае последовательно на обеих нодах нужно выполнить вот эти инструкции:
$ su
Password: 
# cd /u01/app/oracle/product/11.2.0/wncdb
# ./root.sh

По завершении отработки скрипта на всех нодах можно закрыть окно.

И вот оно, процесс установки Oracle Database Software завершен!


9. Creating and testing a database


Now everything is ready to create a database and fill the dump.

9.1 Creating a database

Launch DB Configuration Assistant :
[oracle@rac1-node /]$ cd /u01/app/oracle/product/11.2.0/wncdb/bin
[oracle@rac1-node /]$ ./dbca

Step-by-step database creation process
Выбираем пункт Oracle Real Application Clusters (RAC) database:


На следующем шаге выбираем Create a Database:


Выбираем шаблон для создания базы:


Здесь задаем Configuration Type, Global Database Name и выбираем ноды, на которых хотим создать базу:


При необходимости задаем опции конфигурации Enterprise Manager:


Задаем пароли для пользователей SYS и SYSTEM:


На следующем шаге необходимо определить дисковое хранилище. Выбираем ранее созданное дисковое хранилище DATA:


Для этого потребуется нажать кнопку Browse, при этом у нас потребуют ввести пароль от ASM Account:


Выбираем доступное дисковое хранилище:


На следующем шаге можно настроить Fast Recovery Area. Я решил пропустить данный шаг:


Выбираем дополнительные компоненты для установки:


Задаем размеры SGA и PGA:


Задаем размер блока и количество процессов:


Устанавливаем набор символов:


и выбираем режим подключения к базе:


Конфигурируем табличные пространства, создаем датафайлы и файлы Redo Log:


Все готово для запуска процесса создания БД, осталось только нажать на большую красную кнопку:


Сохраняем Summary – вдруг еще пригодится:


Сидим, скрестив пальцы:


И вот оно, последнее окно, которое приводит в восторг автора под конец рабочего дня:


9.2 Testing the connection

If you want to run SQLplus directly from one of their nodes, you must
register environment variables:
[oracle@rac1-server /]$ PATH=$PATH:/u01/app/oracle/product/11.2.0/wncdb/bin
[oracle@rac1-server /]$ export PATH
[oracle@rac1-server /]$ ORACLE_HOME=/u01/app/oracle/product/11.2.0/wncdb
[oracle@rac1-server /]$ export ORACLE_HOME
[oracle@rac1-server /]$ ORACLE_OWNER=oracle
[oracle@rac1-server /]$ export ORACLE_OWNER
[oracle@rac1-server /]$ NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
[oracle@rac1-server /]$ export NLS_LANG

We start SQLplus:
[oracle@rac1-server /]$ sqlplus
SQL*Plus: Release 11.2.0.3.0 Production on Thu Aug 14 11:41:49 2014
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Enter user-name: sys@wind as sysdba
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> SELECT inst_name FROM v$active_instances;
INST_NAME
------------------------------------------------------------
rac1-node.test.com.by:WIND1
rac2-node.test.com.by:WIND2
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
[oracle@rac1-server /]$

To connect to the database from any other place where Oracle Client is installed , intnsnames.ora
need to add:
WIND =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan.test.com.by)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = WIND)
    )
  )

As a result of all these manipulations, we have a functioning two-single cluster with a deployed test database!