19 августа 2014 в 12:05

How-to: Разворачиваем Oracle Real Application Cluster 11g на VirtualBox из песочницы



1. Предыстория


Наша компания занимается серийным выпуском техники сугубо мирного назначения и вся сопутствующая информация с производства пишется в БД Oracle, которая располагается на виртуальном сервере под управлением VMware ESX. И вроде бы все налажено, конвейер работает, данные пишутся, идет отгрузка готовой продукции.

Но стойка, на которой кроме сервера БД, базируется еще куча каких-то непонятных серверов, имеет удивительное свойство иногда падать. Да и с самой БД в один прекрасный момент может произойти все, что угодно. Конечно, первым делом на ум приходит грамотная организация резервного копирования БД или создание спапшотов VMware. Однако, все эти действия, в случае отказа оборудования, не позволяют обеспечить непрерывную работу БД и всего конвейера соответственно. В общем, захотелось опробовать другие решения.

Когда в IT-отделе в очередной раз проводилось собрание по данной проблеме, было решено опробовать идею поднять Oracle Real Application Cluster и развернуть на нем производственную БД. Проблема заключалась лишь в том, что никто на тот момент не знал, как это делается.

Пред тем, как закупать железо и разворачивать новые сервера, было решено опробовать выбранную технологию локально, используя VM VirtualBox. После нескольких недель, плавно перешедших в месяцы, поиска и переваривания необходимой как воздух информации, кластер наконец-то был запущен, и можно было приступать к первым тестам. И так, всем, кто хочет поднять n-нодовый (n>=2) кластер, добро пожаловать под кат.

2. Программное обеспечение


Вначале мне хотелось бы озвучить весь список софта, который использовался для построения кластера:
  1. Oracle VM VirtualBox. На момент написания статьи, последняя версия под Windows была 4.3.14. Скачать можно тут;
  2. Oracle Linux Server 6.5 for x86-64. На данной оси будут развернуты ноды будущего кластера;
  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 или любая другая ось для DNS-сервера.

3. Описание кластерной инфраструктуры


Наш кластер будет состоять из 3-х виртуальных машин: на первых 2-х непосредственно будут располагаться ноды кластера, а 3-я будет использоваться в качестве DNS-сервера. Ко всем нодам кластера одновременно будут подключены 5 VDI (Virtual Disk Image), созданные специальным образом. Из этих дисков будет создана дисковая группа для хранения данных БД Oracle.

Набросок схемы, как это должно выглядеть:


3.1 Сетевая инфраструктура

Для построения кластера будут использоваться 3 подсети:
  1. LAN 1: внешний сетевой интерфейс, используется для подключения клиентов к БД;
  2. LAN 2: внутренний сетевой интерфейс для интерконнекта;
  3. LAN 3: внешняя сеть с выходом в Internet, необходима для установки и обновления пакетов на этапе инсталляции.

Далее нам понадобятся сетевые адреса, которые будет использовать кластер. Как и где их задавать, расскажу позже.
Вот адреса, которые будут задействованы в кластере.
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-серверов.

Кроме этого нам еще понадобятся SCAN (Single Client Access Name) и VIP-адреса.
SCAN-адреса. При помощи данной технологии все клиенты настраиваются на обращение к одному имени сервиса, которое при помощи DNS-сервера может резолвиться на несколько IP-адресов, на каждом из которых висит публичный LISTENER. Количество SCAN-адресов определяется выражением n+1, где n — число нод кластера:
192.168.56.121
192.168.56.122
192.168.56.123

VIP-адреса. Это логические сетевые адреса, назначаемые узлам на внешних сетевых интерфейсах. Как только какой-то узел кластера станет недоступным, то другой узел в кластере в теории должен подхватить на себя его VIP-адрес и временно продолжить обслуживать свои и, если получится, запросы упавшего узла.
192.168.56.113
192.168.56.114

3.2 Дисковая подсистема

Для функционирования Oracle Grid Infrastructure необходимо общее дисковое пространство, доступное для всех нод кластера. Существует два варианта организации такого хранилища: это Oracle Automatic Storage Management (Oracle ASM) и Shared File System. При использовании второго варианта все достаточно просто: на отдельном сервере создаются NFS-шары, которые монтируются на каждую ноду кластера (нужны дополнительные опции монтирования), настраивается само хранилище.
Следующие действия нам не пригодятся, но если вдруг, то...
Монтирование 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 представляет собой новый способ управления хранилищем, который лежит в основе БД. Будучи встроенным в ядро Oracle Database, он обеспечивает интеграцию файловой системы и менеджера томов для файлов базы данных. Начиная с версии 11gR2, ASM реализует ASM Cluster File System и ASM Dynamic Volume Manager. Эти возможности ASM являются альтернативой сторонним решениям файловых систем и управления томами для баз данных и приложений, для таких задач, как создание и размещение баз данных, управление пространством на дисках, размещение исполняемых файлов приложений и прочих аналогичных задач.

Несмотря на сложность реализации, останавливаем выбор на Oracle ASM. На этом заканчиваем с теорией и переходим к установке софта.

4. Установка Oracle VM VirtualBox


На этапе установки VBox нет ничего сложного. Единственное, что хотелось бы отметить, после установки VBox добавьте путь установки к переменной Path в списке системных переменных. В дальнейшем это нам очень пригодится.

На следующем шаге нам необходимо добавить и настроить виртуальные адаптеры хоста. По умолчанию VBox создает один адаптер с именем VirtualBox Host-Only Ethernet Adapter. Используя меню программы, создаем еще один адаптер с именем VirtualBox Host-Only Ethernet Adapter #2.

Свойства PTC/IPv4 адаптера:
Далее переходим в Панель управления\Сеть и Интернет\Сетевые подключения и в свойствах 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


На этом настройка VBox завершена, можно переходить к созданию VM.

5. Настройка и конфигурация DNS-сервера


В качестве дистрибутива для будующего DNS-сервера я выбрал тот, который первым попался в поле зрения. Им оказался дистрибутив CentOS 6.4 x86_64.

5.1 Конфигурация VM

Вот мои настройки:


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


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


5.2 Установка ОС

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


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


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


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


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


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


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


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


5.3 Конфигурация BIND

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

Проверяем состояние:
# service iptables status

И отключаем:
# service iptables stop
# chkconfig iptables off

В качестве DNS-сервера будем использовать BIND.
# yum install named

Далее необходимо отредактировать файл named.conf:
# nano /etc/named.conf

* Имхо, для этих целей лучше всего использовать Midnight Commander или WinSCP.

Вот, что у нас должно быть на выходе:
// 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";

Создание файлов-отчетов:
# cd /var/named/chroot/var/log/named
# touch conf.log
# touch lamers.log
# touch security.log
# touch xfer.log

Рекурсивно назначаем права доступа на весь каталог:
# cd /var/named/chroot/var/log
# chmod 750 -R named
# chown -R named:named named

Для создания прямой зоны переходим в каталог:
# cd /var/named

и создаем файл forward.test:
# touch forward.test
# chmod 750 forward.test
# chown named:named forward.test

Содержимое файла прямой зоны:
$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

Аналогично создаем файл reverse.test для обратной зоны
вот с таким содержимым:
$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.

Ставим демон named на автозапуск и стартуем:
# chkconfig named on
# service named start

Если все сделано правильно, то демон успешно стартуем с сообщением:
Запускается named:                                         [  OK  ]

Тестируем:
# 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. Подготовка к установке инфраструктуры GRID


И так! Теперь мы вплотную подобрались к созданию нод кластера. В данном пункте описан пример подготовки первой ноды кластера к установке инфраструктуры GRID.
Для того, что бы подготовить очередную ноду для кластера, необходимо повторить пункты 6.1 – 6.3.
* Если Вы ранее работали с VBox, то Вы можете подготовить одну ноду, после чего создать ее клона (армию клонов).

6.1 Конфигурация VM

Настройки VM для ноды:


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


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


6.2 Установка ОС

Подробный процесс
Запускаем установку 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 Конфигурация ОС

Все операции в данном подразделе выполняются от имени root!
Настройки безопасности:
После установки ОС первым делом отключаем Firewall. На этом шаге можно воспользоваться GUI. Для этого выбираем Система – Администрирование – Межсетевой экран. Нажимаем Выключить и Применить:


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

Создаем одноименные группу и пользователя, из-под которого будем устанавливать Oracle Database:
# groupadd -g 501 oracle
# useradd -g oracle -u 501 -d /home/oracle -p ****** oracle

Создаем дополнительные группы:
# groupadd -g 502 dba
# groupadd -g 503 asmdba
# groupadd -g 504 asmoper
# groupadd -g 505 asmadmin

Добавляем пользователя grid
в группы:
# 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

Для пользователя oracle
проделываем аналогичную процедуру:
# usermod -g dba oracle
# usermod -a -G oracle oracle
# usermod -a -G asmdba oracle
# usermod -a -G asmoper oracle
# usermod -a -G asmadmin oracle

На хосте расшариваем каталог, где находится распакованный инсталлятор Oracle Database 11g Release 2 for Linux. Монтируем шару:
# 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

Устанавливаем дополнительные пакеты. На самом деле я немножко поторопился и перенес данный пункт сюда, т.к. я уже точно знаю, каких именно пакетов мне не будет хватать для полного счастья. Если Вы планируете использовать, или уже скачали те-же версии Oracle Linux и Oracle Grid Infrastructure, что описаны в статье, то вопросов быть не должно. В противном случае данный абзац рекомендуется пропустить.
Переходим в каталог /media/ora_linux/grid/rpm и
начинаем установку пакетов:
# 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

Для последующей инсталляции Oracle GRID и Database
создаем структуру каталогов:
# 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/

После установки пакетов Oracle ASM можно переходить к его конфигурации. Первым делом надо сконфигурировать сам драйвер. Это делается один раз. Запускаем конфигурирование и указываем некоторые данные: пользователя, из-под которого будет работать драйвер, и кому будет принадлежать интерфейс, группу, автозапуск драйвера при старте системы.
Вот как это выглядит:
# 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

Инициализируем драйвер:
# 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

Настройка службы NTP. Открываем /etc/sysconfig/ntpd и добавляем параметр –x.
Должно быть так:
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid -g"

Перезапускаем службу NTP:
# service ntpd restart

На этом конфигурация ОС завершена. Теперь можно тушить машину и создавать клона.

6.4 Создание дисков ASM

При создании дисковой группы мы будем использовать обычную избыточность, организованную средствами Oracle. С учетом запаса места для импорта тестовой базы создадим 5 дисков размером по 10 Gb каждый. Для этого на хост-машине открываем консоль Windows и перемещаемся в каталог расположения файлов ASM-дисков и
выполняем следующие команды:
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

Все! На этом все подготовительные работы завершены, можно устанавливать Oracle GRID Infrastructure.

7. Установка инфраструктуры GRID


Запускаем все ноды. Логинимся в одну из нод, с которой будем проводить установку, под пользователем grid.
Монтируем шару с дистрибутивом:
# 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

Перед тем как начать установку, необходимо специальным образом разметить ASM-диски и проверить их доступность на каждой ноде. Далее все операции выполняем от имени root на одной из нод кластера!
Разметка:
# 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


Создаем ASM-диски:
# 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

На всех нодах по очереди
проверяем наличие ASM-дисков:
# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...

# oracleasm listdisks
DISK1
DISK2
DISK3
DISK4
DISK5

На этом разметка ASM-дисков завершена. Теперь можно приступать непосредственно к установке Oracle GRID.

7.1 Установка GRID

Установка осуществляется при помощи графического мастера. Запускаем терминал от имени grid.
[grid@rac1-node /]$ cd /media/ora_linux/grid
[grid@rac1-node /]$ ./runInstaller

Пошаговый мастер установки
Пропускаем обновление ПО:


На следующем шаге выбираем установку и конфигурацию 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

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


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


Ребутим все ноды кластера.

7.2 Проверка инфраструктуры

После загрузки всех нод открываем терминал и
смотрим состояние нод кластера:
# 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. Установка Database Software


Логинимся в одну из нод, с которой будем проводить установку, под пользователем oracle. Монтируем шару. Далее, как и в случае с Oracle GRID, установка осуществляется при помощи графического мастера. Запускаем терминал от имени oracle.
[oracle@rac1-node /]$ cd /media/ora_linux/database
[oracle@rac1-node /]$ ./runInstaller

Пошаговый мастер установки
Пропускаем обновление ПО:




Выбираем тип установки: 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. Создание и тестирование БД


Теперь все готово для создания БД и заливки дампа.

9.1 Создание БД

Запускаем DB Configuration Assistant:
[oracle@rac1-node /]$ cd /u01/app/oracle/product/11.2.0/wncdb/bin
[oracle@rac1-node /]$ ./dbca

Пошаговый процесс создания БД
Выбираем пункт 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 Тестирование соединения

Если Вы хотите запустить SQLplus прямо с одной их нод, необходимо
прописать переменные среды:
[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

Запускаем 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 /]$

Что бы подключиться к БД из любого другого места, где установлен Oracle Client, в tnsnames.ora
необходимо добавить:
WIND =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan.test.com.by)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = WIND)
    )
  )

В итоге всех этих манипуляций у нас получился функционирующий двухнодовый кластер с развернутой тестовой БД!
Артем Бородич @mink_h
карма
19,0
рейтинг 0,0
Пользователь
Похожие публикации
Самое читаемое Разработка

Комментарии (4)

  • –1
    habrastorage.org/files/481/827/ff6/481827ff6c0649f2955f39e13c2e8cec.jpg
  • +2
    Обилие скриншотов просто пугает. В большинство из них не имеют никакого смысла. До появления ASM настраивал RAC на ocfs ( о которой кстати вы не упомянули), но тогда я видел смысл в этом так как процессоры того времени были одноядерными. Какой смысл в rac в наше время? Так как rac стоит половину Enterprise лицензии, это очень дорогое удовольствие. При этом некоторый софт в rac работает медленнее, чем даже на одной ноде этого же кластера. При стандарт лицензии (в которой rac «бесплатен») в плане быстродействия будет выгоднее один сервер с 4 сокетами, чем 2 с двумя. В наше время редко БД «упирается» в процессор (за счет многоядерноси) чаще всего в IO систему. Может подскажете все таки приемущества rac над кластером на основе ОС. Кроме того, что отключение ноды происходит «незаметно» для пользователей.
    • 0
      отключение ноды происходит «незаметно» для пользователей — это и есть основное преимущество. Автор ведь написал, что у них производство зависит от доступности базы данных.
  • +2
    Позволю добавить, что использования одной дискгруппы для кластера и базы является не совсем корректным решением. Также, при использовании oracle-asm, diskstring для работы с дисками должен иметь вид «ORCL:*».

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.