Всем привет. Первая заметка данного блога будет посвящена установке и настройке Oracle RAC 12c Release 1. Основной целью является базовая настройка кластера, для того чтобы в дальнейшем проводить различные эксперименты, которые будут подробно описаны в других статьях.
Данную заметку можно разбить на следующие части:
Данную заметку можно разбить на следующие части:
- Настройка сетевых адаптеров в VMware
- Установка виртуальной машины для DNS сервера
- Установка виртуальных машин для Oracle RAC узлов
- Конфигурирование DNS сервера
- Добавление дисков на уровне VMware
- Подготовка кластерных узлов к установке
- Создание дисков для ASM
- Конфигурирование экземпляра ASM
- Конфигурирование экземпляра БД
- Проверка работоспособности системы
1. Настройка сетевых адаптеров в VMware
Прежде чем перейти к непосредственной установке системы – важно заранее сконфигурировать сетевые адаптеры, которые будут добавлены каждой из виртуальных машин.
Для Oracle RAC нужно иметь отдельную подсеть для внутрикластерного взаимодействия (private network) и еще одну (public network), которая будет использоваться для Node IP, Node VIP, SCAN.
Я использую VMware Workstation версии 11.1.0 build-2496824 и для добавления новой подсети нужно проделать следующие шаги:
Edit – Virtual Network Editor – Change Settings
Edit – Virtual Network Editor – Change Settings
Далее делаем следующее:
Add Network – Vmnet6
Add Network – Vmnet6
Указываем IP, который вам нужен. В моем случае следующая подсеть будет использоваться как Public:
Аналогичным способом создаем другую подстеть (VMnet7) , которая будет использована для внутрикластерного взаимподействия (Private):
Далее жмем Apply, чтобы изменения вступили в силу.
2. Установка виртуальной машины для DNS сервера
В большинстве статей по установке Oracle RAC используется BIND как DNS сервер. DNS играет важную роль в системе, поскольку для корректного использования SCAN технологии не получится просто прописать необходимые IP адреса в файле /etc/hosts на каждом из узлов кластера, точнее получится, но по факту будет всегда использоваться один из SCAN VIP вместо трех. При использовани DNS сервера – SCAN-имя кластера будет каждый раз перенаправляться на новый SCAN VIP по принципу round robin.
В моем случае нашелся дистрибутив с Windows Server 2012, поэтому DNS сервер будем делать на этой ОС, за счет добавления роли DNS Server.
File – New Virtual Machine – Typical - Next
В большинстве статей по установке Oracle RAC используется BIND как DNS сервер. DNS играет важную роль в системе, поскольку для корректного использования SCAN технологии не получится просто прописать необходимые IP адреса в файле /etc/hosts на каждом из узлов кластера, точнее получится, но по факту будет всегда использоваться один из SCAN VIP вместо трех. При использовани DNS сервера – SCAN-имя кластера будет каждый раз перенаправляться на новый SCAN VIP по принципу round robin.
В моем случае нашелся дистрибутив с Windows Server 2012, поэтому DNS сервер будем делать на этой ОС, за счет добавления роли DNS Server.
File – New Virtual Machine – Typical - Next
Далее VMware попросит ключ активации Windows, но это можно пропустить на данный момент и нажать Next:
Сразу добавлю немного оперативной памяти:
После чего запущу виртуальную машину и начнется стандартный процесс установки:
После установки отключим firewall. Есть несколько способов сделать это и самый простой это открыть PowerShell от имени администратора и выполнить следующую команду:
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
Выбираем роль:
DNS Server – Add Features – Next – Next – Next – Install
После завершения установки жмем Close:
Далее необходимо создать зону, в которой будет располагаться наша система. Для этого открываем:
Server Manager – Tools – DNS
Далее жмем правой кнопкой по Forward Lookup Zones – New Zone:
Next – Primary Zone (Next) – Zone Name (Next)
На данном этапе пока все. После того как будут созданы виртуальные машины для двух кластерных узлов и встроенный VMware DHCP сервер присвоит им IP адреса в тех подсетях, которые мы создали ранее, можно будет их прописать в данном DNS сервере.
3. Установка виртуальных машин для Oracle RAC узлов
ОС для установки будет Oracle Linux Server release 6.9.
Подробно останавливаться на каждом шаге не буду. Опишу лишь основные моменты:
Расширил RAM до 5 GB и запустил виртуальную машину, чтобы начался процесс установки:
Из необходимых пакетов я обычно выбираю:
Servers – System administration tools – Select all optional packages
А так же ряд следующих пакетов, которые мне необходимы для комфортной работы с системой:
• Desktops
• Desktop
• Desktop Platform
• Fonts
• General Purpose Desktop
• Graphical Administration Tools
• X Windows System
После выбора необходимых пакетов жмем Next и начинается установка операционной системы:
Далее устанавливаем "VMware Tools". Для этого в настройках VMware выбираем следующее:
После чего к виртуалке будет подмаунчен диск с установщиком. Нужно скопировать архив с необходимыми скриптами и запустить его как показано ниже. На все вопросы отвечаю дефолтно:
Далее добавляем сконфигрурированные ранее два сетевых адаптера. Для этого заходим в настройки виртуальной машины и выбираем добавить Network Adapter. В результате должно получиться следующее:
После включения виртуальной машины мы получим следующий результат:
Выполняем аналогичные действия по установке второй виртуальной машины, имя которой, в моем случае будет, head02, а hostname – head02.hydra.com.
4. Конфигурирование DNS сервера
Запускаем виртуальную машину с DNS сервером, если еще не запущена.
Заходим в:
Server Manager – Tools – DNS – Открываем вложение с нашей зоной – Жмем правой кнопкой – New Host (A or AAAA) …
Добавляем узлы следующим образом:
Насколько мне известно, общепринятым является добавление в DNS всех IP адресов, за исключением тех, которые будут относиться к внутрикластерному взаимодействию (в моем случае : 192.168.27.10, 192.168.27.11), которые буду прописаны в файле /etc/hosts на каждом из узлов.
Теперь на каждом из Linux узлов нужно добавить IP этого DNS сервера в файл /etc/resolv.conf.
У меня
получилась такая картина:
[root@head01 ~]# cat /etc/resolv.conf
search cerberus.com hydra.com
nameserver 192.168.197.153
[root@head02 ~]# cat /etc/resolv.conf
search cerberus.com hydra.com
nameserver 192.168.197.153
Для проверки того, что DNS сервер используется Linux серверами, достаточно сделать следующее:
Я также заметил, что если с одного сервера попробовать сделать ping второго, то имя расрешается быстро, а вот ответы приходят через несколько секунд. При этом, если пинговать по IP такой задержки нет. Оказалось, что для такого, чтобы избежать такого поведения – необходимо создать для каждого IP, определенного в DNS сервере - PTR запись:
Так же на каждом из серверов я сделал следующие настройки:
1. Correct /etc/udev/rules.d/70-persistent-net.rules
update HWADDR accordinly for each eth --- (!!!) Здесь важно, чтобы буквенные символы мак адреса были нижнего регистра
2. Correct /etc/sysconfig/network-scripts/ifcfg-eth0 1 2
Example for eth0 WITH DNS1
+++++
DEVICE=eth0
NM_CONTROLLED=yes
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
HWADDR=00:0C:29:ED:56:E3
IPADDR=192.168.197.151
NETMASK=255.255.255.0
GATEWAY=192.168.197.2
DNS1=192.168.197.153
+++++
Example for eth1
+++++
DEVICE=eth1
NM_CONTROLLED=yes
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
HWADDR=00:0C:29:ED:56:ED
IPADDR=192.168.26.12
NETMASK=255.255.255.0
GATEWAY=192.168.26.1
+++++
Example for eth2:
+++++
DEVICE=eth2
NM_CONTROLLED=yes
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
HWADDR=00:0C:29:ED:56:F7
IPADDR=192.168.27.10
NETMASK=255.255.255.0
GATEWAY=192.168.27.1
+++++
Reboot here so VMware DHCP can assign provided IP addresses.
After reboot check if all is fine: ifconfig -a
3. Update Network Manager config to avoid /etc/resolv.conf override
cat /etc/NetworkManager/NetworkManager.conf
+++++
[main]
plugins=ifcfg-rh
dns=none
+++++
4. Correct resolv.conf with DNS ip address:
Example:
+++++
search cerberus.com hydra.com
nameserver 192.168.197.153
+++++
Если этого не сделать, тогда адрес будет присваиваться встроенным DHCP сервером VMware, но основное неудобство в том, что файл /etc/resolv.conf будет перезаписан после каждой перезагрузки сервера. Если же определить использование статичного IP, тогда такой проблемы не будет и в /etc/resolv.conf будет уже прописан нужный нам DNS сервер.
Итоговый вывод ifconfig на примере первой ноды:
[root@head01 ~]# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:0C:29:ED:56:E3
inet addr:192.168.197.151 Bcast:192.168.197.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feed:56e3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:262 errors:0 dropped:0 overruns:0 frame:0
TX packets:275 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:23359 (22.8 KiB) TX bytes:23026 (22.4 KiB)
eth1 Link encap:Ethernet HWaddr 00:0C:29:ED:56:ED
inet addr:192.168.26.12 Bcast:192.168.26.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feed:56ed/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:38 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5626 (5.4 KiB) TX bytes:1237 (1.2 KiB)
eth2 Link encap:Ethernet HWaddr 00:0C:29:ED:56:F7
inet addr:192.168.27.10 Bcast:192.168.27.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feed:56f7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:98 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16126 (15.7 KiB) TX bytes:1237 (1.2 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:152 errors:0 dropped:0 overruns:0 frame:0
TX packets:152 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:14502 (14.1 KiB) TX bytes:14502 (14.1 KiB)
pan0 Link encap:Ethernet HWaddr 42:03:1A:95:A8:D7
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Для удобства, всю основную сетевую топологию, необходимую для установки Oracle RAC, можно изобразить ввиде след. таблицы:
После чего запущу виртуальную машину и начнется стандартный процесс установки:
После установки отключим firewall. Есть несколько способов сделать это и самый простой это открыть PowerShell от имени администратора и выполнить следующую команду:
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
Далее, перед добавлением роли DNS сервера необходимо прописать статический IP адрес, который будет использоваться данным сервером:
Network – Properties – Change Adapter Settings – Properties – Use Following IP Address – Ok
Далее можно
добавить DNS роль. Для этого необходимо открыть:
Server manager – Add roles and features - Next
DNS Server – Add Features – Next – Next – Next – Install
После завершения установки жмем Close:
Далее необходимо создать зону, в которой будет располагаться наша система. Для этого открываем:
Server Manager – Tools – DNS
Далее жмем правой кнопкой по Forward Lookup Zones – New Zone:
Next – Primary Zone (Next) – Zone Name (Next)
На данном этапе пока все. После того как будут созданы виртуальные машины для двух кластерных узлов и встроенный VMware DHCP сервер присвоит им IP адреса в тех подсетях, которые мы создали ранее, можно будет их прописать в данном DNS сервере.
3. Установка виртуальных машин для Oracle RAC узлов
ОС для установки будет Oracle Linux Server release 6.9.
Подробно останавливаться на каждом шаге не буду. Опишу лишь основные моменты:
Расширил RAM до 5 GB и запустил виртуальную машину, чтобы начался процесс установки:
Из необходимых пакетов я обычно выбираю:
Servers – System administration tools – Select all optional packages
А так же ряд следующих пакетов, которые мне необходимы для комфортной работы с системой:
• Desktops
• Desktop
• Desktop Platform
• Fonts
• General Purpose Desktop
• Graphical Administration Tools
• X Windows System
После выбора необходимых пакетов жмем Next и начинается установка операционной системы:
После установки и перезагрузки:
После чего к виртуалке будет подмаунчен диск с установщиком. Нужно скопировать архив с необходимыми скриптами и запустить его как показано ниже. На все вопросы отвечаю дефолтно:
Далее добавляем сконфигрурированные ранее два сетевых адаптера. Для этого заходим в настройки виртуальной машины и выбираем добавить Network Adapter. В результате должно получиться следующее:
После включения виртуальной машины мы получим следующий результат:
Выполняем аналогичные действия по установке второй виртуальной машины, имя которой, в моем случае будет, head02, а hostname – head02.hydra.com.
4. Конфигурирование DNS сервера
Запускаем виртуальную машину с DNS сервером, если еще не запущена.
Заходим в:
Server Manager – Tools – DNS – Открываем вложение с нашей зоной – Жмем правой кнопкой – New Host (A or AAAA) …
Добавляем узлы следующим образом:
Аналогичным образом добавляем каждый IP-адрес, который будет использоваться в системе.
В итоге у меня получилась следующая картина:
Насколько мне известно, общепринятым является добавление в DNS всех IP адресов, за исключением тех, которые будут относиться к внутрикластерному взаимодействию (в моем случае : 192.168.27.10, 192.168.27.11), которые буду прописаны в файле /etc/hosts на каждом из узлов.
Теперь на каждом из Linux узлов нужно добавить IP этого DNS сервера в файл /etc/resolv.conf.
[root@head01 ~]# cat /etc/resolv.conf
search cerberus.com hydra.com
nameserver 192.168.197.153
search cerberus.com hydra.com
nameserver 192.168.197.153
Для проверки того, что DNS сервер используется Linux серверами, достаточно сделать следующее:
Я также заметил, что если с одного сервера попробовать сделать ping второго, то имя расрешается быстро, а вот ответы приходят через несколько секунд. При этом, если пинговать по IP такой задержки нет. Оказалось, что для такого, чтобы избежать такого поведения – необходимо создать для каждого IP, определенного в DNS сервере - PTR запись:
Так же на каждом из серверов я сделал следующие настройки:
1. Correct /etc/udev/rules.d/70-persistent-net.rules
update HWADDR accordinly for each eth --- (!!!) Здесь важно, чтобы буквенные символы мак адреса были нижнего регистра
2. Correct /etc/sysconfig/network-scripts/ifcfg-eth0 1 2
Example for eth0 WITH DNS1
+++++
DEVICE=eth0
NM_CONTROLLED=yes
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
HWADDR=00:0C:29:ED:56:E3
IPADDR=192.168.197.151
NETMASK=255.255.255.0
GATEWAY=192.168.197.2
DNS1=192.168.197.153
+++++
Example for eth1
+++++
DEVICE=eth1
NM_CONTROLLED=yes
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
HWADDR=00:0C:29:ED:56:ED
IPADDR=192.168.26.12
NETMASK=255.255.255.0
GATEWAY=192.168.26.1
+++++
Example for eth2:
+++++
DEVICE=eth2
NM_CONTROLLED=yes
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
HWADDR=00:0C:29:ED:56:F7
IPADDR=192.168.27.10
NETMASK=255.255.255.0
GATEWAY=192.168.27.1
+++++
Reboot here so VMware DHCP can assign provided IP addresses.
After reboot check if all is fine: ifconfig -a
3. Update Network Manager config to avoid /etc/resolv.conf override
cat /etc/NetworkManager/NetworkManager.conf
+++++
[main]
plugins=ifcfg-rh
dns=none
+++++
4. Correct resolv.conf with DNS ip address:
Example:
+++++
search cerberus.com hydra.com
nameserver 192.168.197.153
+++++
Итоговый вывод ifconfig на примере первой ноды:
[root@head01 ~]# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:0C:29:ED:56:E3
inet addr:192.168.197.151 Bcast:192.168.197.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feed:56e3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:262 errors:0 dropped:0 overruns:0 frame:0
TX packets:275 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:23359 (22.8 KiB) TX bytes:23026 (22.4 KiB)
eth1 Link encap:Ethernet HWaddr 00:0C:29:ED:56:ED
inet addr:192.168.26.12 Bcast:192.168.26.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feed:56ed/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:38 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5626 (5.4 KiB) TX bytes:1237 (1.2 KiB)
eth2 Link encap:Ethernet HWaddr 00:0C:29:ED:56:F7
inet addr:192.168.27.10 Bcast:192.168.27.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feed:56f7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:98 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16126 (15.7 KiB) TX bytes:1237 (1.2 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:152 errors:0 dropped:0 overruns:0 frame:0
TX packets:152 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:14502 (14.1 KiB) TX bytes:14502 (14.1 KiB)
pan0 Link encap:Ethernet HWaddr 42:03:1A:95:A8:D7
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Public
|
Private
|
||
Name
|
Node IP
|
Name
|
IP
|
head01.hydra.com
|
192.168.26.12
|
head01-riv.hydra.com
|
192.168.27.10
|
head02.hydra.com
|
192.168.26.13
|
head02-riv.hydra.com
|
192.168.27.11
|
Name
|
Node VIP
|
||
head01-vip-hydra.com
|
192.168.26.14
|
||
head02-vip-hydra.com
|
192.168.26.15
|
||
Name
|
SCAN / SCAN VIP
|
||
hydra-scan.hydra.com
|
192.168.26.16
|
||
hydra-scan.hydra.com
|
192.168.26.17
|
||
hydra-scan.hydra.com
|
192.168.26.18
|
5. Добавление дисков на уровне VMware
1. В меню виртуальной машины "head01" заходим в настройки "Settings".
2. Нажимаем "Add" – выбираем "Hard Disk" – "Next".
3. Выбираем тип диска "SCSI (Recommended)", режим "Indepenent" – "Persistent" – "Next".
4. "Create a new virtual disk" – "Next"
5. Далее я поставил галочку на "Allocate all disk space now", а размер указал 10 GB.
6. На следующем шаге я присвоил ему имя "disk01.vmdk" – для удобства.
7. Finish.
8. Аналогичным образом я создал еще 3 диска: disk02, disk03, disk04.
Итак, диски созданы, теперь нужно сделать следующее:
9. Переместить созданные диски на другой SCSI device. Для того чтобы избежать всех проблем, которые могут возникнуть в нашем кластерном окружении нам нужно расместить расшаренные диски на другой SCSI контроллер.
Открываем настройки виртуальной машины "head01".
Выбираем первый диск и заходим во вкладку “Advanced”.
10. Меню "Hard Disk Advanced Settings" позволяет модифицировать "Virtual device node". По дефолту там будет выставлено "SCSI 0:1", но нам нужно выставить в "SCSI 1:0". За счет этого новый диск переместится на SCSI controller 1, device 0 (это для disk01). Для остальных дисков нужно будет выбрать "SCSI 2:0", "SCSI 3:0", "SCSI 4:0" соответственно.
11. В настройках виртуальной машины "head02" добавляем те же самые диски, как уже существующие.
12. Далее нужно подкорректировать конфигурационные файлы самых виртуальных машин.
Это необходимо сделать, поскольку, по дефолту VMware Workstation не поддерживает использование общих дисков между виртуальными машинами. Однако, если подкорректировать настройки, то можно добиться необходимого нам результата, чтобы все работало в учебных целях ...
Заходим в папку с файлами виртуальной машины: "D:\VM\head01".
Открываем файл "head01.vmx" текстовым редактором и добавляем в конец следующие параметры:
disk.locking = "FALSE"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.dataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
scsi1.sharedBus = "virtual"
Предварительно сделать бекап данного файла, на всякий случай.
13. Аналогичные изменения с конфигурационным файлом второй вирт. машины (head02).
6. Подготовка кластерных узлов к установке
Запускаем head01 и приступаем к настройке.
Для автоматической настройки всех необходимых параметров (ядра и т.п.) необходимо выполнить следующее:
$ yum install oracle-rdbms-server-12cR1-preinstall -y
Устанавливаем необходимые пакеты:
{
yum install binutils -y
yum install compat-libcap1 -y
yum install compat-libstdc++-33 -y
yum install compat-libstdc++-33.i686 -y
yum install gcc -y
yum install gcc-c++ -y
yum install glibc -y
yum install glibc.i686 -y
yum install glibc-devel -y
yum install glibc-devel.i686 -y
yum install ksh -y
yum install libgcc -y
yum install libgcc.i686 -y
yum install libstdc++ -y
yum install libstdc++.i686 -y
yum install libstdc++-devel -y
yum install libstdc++-devel.i686 -y
yum install libaio -y
yum install libaio.i686 -y
yum install libaio-devel -y
yum install libaio-devel.i686 -y
yum install libXext -y
yum install libXext.i686 -y
yum install libXtst -y
yum install libXtst.i686 -y
yum install libX11 -y
yum install libX11.i686 -y
yum install libXau -y
yum install libXau.i686 -y
yum install libxcb -y
yum install libxcb.i686 -y
yum install libXi -y
yum install libXi.i686 -y
yum install make -y
yum install sysstat -y
yum install unixODBC -y
yum install unixODBC-devel -y
}
Так же необходимо установить след. пакеты нужные для ASM:
Создаем группы, пользователей, директорий:
Для хранения Database и Grid Homes я добавил отдельный виртуальный диск к каждой из виртуальных машин, размером 40 GB. Все остальные настройки, касающиеся добавления диска, остались по дефолту.
После добавления на каждой из виртуальных машин необходимо создать партицию и директорию, в которую партиция будет примонтирована.
$ mkdir -p /u01
$ fdisk /dev/sdf
p
n
1
<<<enter>>>
<<<enter>>>
t
83
w
$ mkfs.ext4 /dev/sdf1
$ mount /dev/sdf1 /u01
$ df -h
-----
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_head01-lv_root
26G 5.2G 20G 21% /
tmpfs 2.4G 68K 2.4G 1% /dev/shm
/dev/sda1 477M 124M 329M 28% /boot
.host:/ 931G 632G 300G 68% /mnt/hgfs
/dev/sdf1 40G 48M 38G 1% /u01
-----
1. В меню виртуальной машины "head01" заходим в настройки "Settings".
2. Нажимаем "Add" – выбираем "Hard Disk" – "Next".
3. Выбираем тип диска "SCSI (Recommended)", режим "Indepenent" – "Persistent" – "Next".
4. "Create a new virtual disk" – "Next"
5. Далее я поставил галочку на "Allocate all disk space now", а размер указал 10 GB.
6. На следующем шаге я присвоил ему имя "disk01.vmdk" – для удобства.
7. Finish.
8. Аналогичным образом я создал еще 3 диска: disk02, disk03, disk04.
Итак, диски созданы, теперь нужно сделать следующее:
9. Переместить созданные диски на другой SCSI device. Для того чтобы избежать всех проблем, которые могут возникнуть в нашем кластерном окружении нам нужно расместить расшаренные диски на другой SCSI контроллер.
Открываем настройки виртуальной машины "head01".
Выбираем первый диск и заходим во вкладку “Advanced”.
10. Меню "Hard Disk Advanced Settings" позволяет модифицировать "Virtual device node". По дефолту там будет выставлено "SCSI 0:1", но нам нужно выставить в "SCSI 1:0". За счет этого новый диск переместится на SCSI controller 1, device 0 (это для disk01). Для остальных дисков нужно будет выбрать "SCSI 2:0", "SCSI 3:0", "SCSI 4:0" соответственно.
11. В настройках виртуальной машины "head02" добавляем те же самые диски, как уже существующие.
12. Далее нужно подкорректировать конфигурационные файлы самых виртуальных машин.
Это необходимо сделать, поскольку, по дефолту VMware Workstation не поддерживает использование общих дисков между виртуальными машинами. Однако, если подкорректировать настройки, то можно добиться необходимого нам результата, чтобы все работало в учебных целях ...
Заходим в папку с файлами виртуальной машины: "D:\VM\head01".
Открываем файл "head01.vmx" текстовым редактором и добавляем в конец следующие параметры:
disk.locking = "FALSE"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.dataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
scsi1.sharedBus = "virtual"
Предварительно сделать бекап данного файла, на всякий случай.
13. Аналогичные изменения с конфигурационным файлом второй вирт. машины (head02).
6. Подготовка кластерных узлов к установке
Запускаем head01 и приступаем к настройке.
Для автоматической настройки всех необходимых параметров (ядра и т.п.) необходимо выполнить следующее:
$ yum install oracle-rdbms-server-12cR1-preinstall -y
{
yum install binutils -y
yum install compat-libcap1 -y
yum install compat-libstdc++-33 -y
yum install compat-libstdc++-33.i686 -y
yum install gcc -y
yum install gcc-c++ -y
yum install glibc -y
yum install glibc.i686 -y
yum install glibc-devel -y
yum install glibc-devel.i686 -y
yum install ksh -y
yum install libgcc -y
yum install libgcc.i686 -y
yum install libstdc++ -y
yum install libstdc++.i686 -y
yum install libstdc++-devel -y
yum install libstdc++-devel.i686 -y
yum install libaio -y
yum install libaio.i686 -y
yum install libaio-devel -y
yum install libaio-devel.i686 -y
yum install libXext -y
yum install libXext.i686 -y
yum install libXtst -y
yum install libXtst.i686 -y
yum install libX11 -y
yum install libX11.i686 -y
yum install libXau -y
yum install libXau.i686 -y
yum install libxcb -y
yum install libxcb.i686 -y
yum install libXi -y
yum install libXi.i686 -y
yum install make -y
yum install sysstat -y
yum install unixODBC -y
yum install unixODBC-devel -y
}
Так же необходимо установить след. пакеты нужные для ASM:
$ rpm -Uvh
kmod-oracleasm-2.0.8-15.el6_9.x86_64.rpm
$ rpm -Uvh
oracleasmlib-2.0.12-1.el6.x86_64.rpm
$ rpm -Uvh
oracleasm-support-2.1.8-1.el6.x86_64.rpm
Создаем группы, пользователей, директорий:
Для хранения Database и Grid Homes я добавил отдельный виртуальный диск к каждой из виртуальных машин, размером 40 GB. Все остальные настройки, касающиеся добавления диска, остались по дефолту.
После добавления на каждой из виртуальных машин необходимо создать партицию и директорию, в которую партиция будет примонтирована.
$ mkdir -p /u01
$ fdisk /dev/sdf
p
n
1
<<<enter>>>
<<<enter>>>
t
83
w
$ mkfs.ext4 /dev/sdf1
$ mount /dev/sdf1 /u01
$ df -h
-----
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_head01-lv_root
26G 5.2G 20G 21% /
tmpfs 2.4G 68K 2.4G 1% /dev/shm
/dev/sda1 477M 124M 329M 28% /boot
.host:/ 931G 632G 300G 68% /mnt/hgfs
/dev/sdf1 40G 48M 38G 1% /u01
-----
После этого – нужно добавить следущие строки в файл /etc/fstab, чтобы монтирование происходило автоматически, после каждого рестарта системы:
$ cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Feb 10 13:31:58 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_head01-lv_root / ext4 defaults 1 1
UUID=b95cd02b-fcef-4819-91f3-bbe13f57ec28 /boot ext4 defaults 1 2
/dev/mapper/vg_head01-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
#device mountpoint fstype options dump fsck
/dev/sdf1 /u01 ext4 defaults 0 1
Создаем необходимые группы
$ groupadd dba
$ groupadd oinstall
$ groupadd oper
$ groupadd asmadmin
$ groupadd asmdba
$ groupadd asmoper
Создаем пользователей
$ useradd -g oinstall -G dba,asmadmin,asmdba,asmoper -d /home/grid grid
$ useradd -g oinstall -G dba,oper,asmadmin -d /home/oracle oracle
$ usermod -a -G oper,asmadmin,asmdba,dba oracle
$ passwd oracle
$ passwd grid
Создаем необходимые директории
$ mkdir -p /u01/app/oracle
$ mkdir -p /u01/app/grid
$ mkdir -p /u01/app/oracle/product/12.1.0.2/db
$ chown -R oracle:oinstall /u01/app/oracle/product/12.1.0.2/db
$ chown -R oracle:oinstall /u01/app/oracle
$ mkdir -p /u01/app/12.1.0.2/grid
$ chown -R grid:oinstall /u01/app/12.1.0.2
$ chown -R grid:oinstall /u01/app/12.1.0.2
$ chown grid:oinstall /u01/app/grid
$ chmod -R 775 /u01
$ chown root:oinstall /u01/app/
Подкорректировать /etc/hosts:
$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
### Private Network ###
192.168.27.10 head01-priv.hydra.com head01-priv
192.168.27.11 head02-priv.hydra.com head02-priv
### Node IP ###
192.168.26.12 head01.hydra.com head01
192.168.26.13 head02.hydra.com head02
### Node VIP ###
### 192.168.26.14 head01-vip-hydra.com head01-vip
### 192.168.26.15 head02-vip-hydra.com head02-vip
### SCAN ###
### 192.168.26.16 hydra-scan.hydra.com hydra-scan
### 192.168.26.17 hydra-scan.hydra.com hydra-scan
### 192.168.26.18 hydra-scan.hydra.com hydra-scan
Строки, относящиеся к SCAN и Node VIP закомментировал, поскольку запросы к ним буду обрабатываться через DNS.
Устанавливаем SELINUX=permissive
$ cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
Отключение FireWall:
$ service iptables stop
$ chkconfig iptables off
Отключаем NTP:
В данной установке я не буду конфигурировать NTP, вместо него синхронизировать время между узлами будет оракловый cssd демон. Поэтому отелючаем NTP:
$ service ntpd stop
Shutting down ntpd: [ OK ]
$ chkconfig ntpd off
$ mv /etc/ntp.conf /etc/ntp.conf.orig
$ rm /var/run/ntpd.pid
Создание файлов окурежния для каждого пользователя:
oracle@head01 ~]$ cat HYDRA01.env
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=head01.hydra.com
export ORACLE_UNQNAME=HYDRA
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.1.0.2/db
export ORACLE_SID=HYDRA1
export BASE_PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PS1='\[\033[0;32m\]$ORACLE_SID> \[\033[0;33m\]\u@\h\[\033[00m\] [\t] \w]\$ '
grid@head01 [08:25:48] ~]$ cat *env
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=head01.hydra.com
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/12.1.0.2/grid
export ORACLE_SID=+ASM1
export BASE_PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$BASE_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PS1='\[\033[0;32m\]$ORACLE_SID> \[\033[0;33m\]\u@\h\[\033[00m\] [\t] \w]\$ '
Аналогичные действия выполнил для виртуальной машины head02.
7. Создание дисков для ASM
Теперь те диски, которые мы добавили на одном из предыдущих этапов необходимо раметить средствами ОС. В последствие, эти диски, а точнее парции каждого диска, будут «отданы» ASM и использованы для создания дисковых групп:
$ root@head01
$ fdisk -l
$ fdisk /dev/sdc
$ fdisk /dev/sdd
$ fdisk /dev/sde
$ fdisk /dev/sdf
Пример для
одного из дисков:
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
[root@head01 ~]# fdisk /dev/sdc
Device contains neither a valid DOS partition table,
nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier
0xd3aceac5.
Changes will remain in memory only, until you decide
to write them.
After that, of course, the previous content won't be
recoverable.
Warning: invalid flag 0x0000 of partition table 4 will
be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's
strongly recommended to
switch
off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help):
Command (m for help): p
Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd3aceac5
Device
Boot Start End Blocks
Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1305,
default 1305):
Using default value 1305
Command (m for help): p
Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd3aceac5
Device
Boot Start End Blocks
Id System
/dev/sdc1
1 1305 10482381
83 Linux
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing
disks.
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
{
chown grid:asmadmin /dev/sdc1
chown grid:asmadmin /dev/sdd1
chown grid:asmadmin /dev/sde1
chown grid:asmadmin /dev/sdf1
chmod 660 /dev/sdc1
chmod 660 /dev/sdd1
chmod 660 /dev/sde1
chmod 660 /dev/sdf1
}
Для того чтобы изменения были "видны" на втором узле необходимо сделать следующее:
Пример для одного из дисков (необходимо выполнить для всех четырех)
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
[root@head02 ~]# fdisk /dev/sdc
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p
Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb5f00090
Device Boot Start End Blocks Id System
/dev/sdc1 1 1305 10482381 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
{
chown grid:asmadmin /dev/sdc1
chown grid:asmadmin /dev/sdd1
chown grid:asmadmin /dev/sde1
chown grid:asmadmin /dev/sdf1
chmod 660 /dev/sdc1
chmod 660 /dev/sdd1
chmod 660 /dev/sde1
chmod 660 /dev/sdf1
}
Далее подготовим диски выше для ASM следующим образом:
>>> root@head01
$ /etc/init.d/oracleasm configure
Answers for questions:
<><><><><>
Default user to own the driver interface []: grid
Default group to own the driver interface []: asmadmin
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
Initializing the Oracle ASMLib driver: [ OK ]
Scanning the system for Oracle ASMLib disks: [ OK ]
<><><><><>
$ /etc/init.d/oracleasm createdisk DATA01 /dev/sdc1
$ /etc/init.d/oracleasm createdisk DATA02 /dev/sdd1
$ /etc/init.d/oracleasm createdisk ARCH01 /dev/sde1
$ /etc/init.d/oracleasm createdisk ARCH02 /dev/sdf1
$ /etc/init.d/oracleasm snandisks
$ /etc/init.d/oracleasm listdisks
-----
ARCH01
ARCH02
DATA01
DATA02
-----
>>> root@head02
$ /etc/init.d/oracleasm configure
$ /etc/init.d/oracleasm snandisks
$ /etc/init.d/oracleasm listdisks
-----
ARCH01
ARCH02
DATA01
DATA02
-----
8. Конфигурирование экземпляра ASM
Наконец-то приступаем к установке софта. Первым делом необходимо установить Grid.
Скачиваем архивы с сайта Oracle, распаковываем и переходим к установке.
>>> grid@head01/head02
unzip linuxamd64_12102_grid_1of2.zip
unzip linuxamd64_12102_grid_2of2.zip
cd grid
./runInstaller
9. Конфигурирование экземпляра БД
Настало время перейти к установке Oracle Database.
Скачиваем архивы с сайта Oracle, распаковываем и переходим к установке.
>>> oracle@head01/head02
unzip linuxamd64_12102_database_1of2.zip
unzip linuxamd64_12102_database_2of2.zip
cd database/
./runInstaller
10. Проверка работоспособности системы
>>> oracle
$ srvctl status database -d HYDRA
Instance HYDRA1 is running on node head01
Instance HYDRA2 is running on node head02
$ srvctl config database -d HYDRA
Database unique name: HYDRA
Database name: HYDRA
Oracle home: /u01/app/oracle/product/12.1.0.2/db
Oracle user: oracle
Spfile: +DATA/HYDRA/PARAMETERFILE/spfile.288.1000279357
Password file: +DATA/HYDRA/PASSWORD/pwdhydra.276.1000278689
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools:
Disk Groups: DATA
Mount point paths:
Services:
Type: RAC
Start concurrency:
Stop concurrency:
OSDBA group: dba
OSOPER group: oper
Database instances: HYDRA1,HYDRA2
Configured nodes: head01,head02
Database is administrator managed
$ sqlplus / as sysdba
SQL> select instance_name, status from gv$instance;
INSTANCE_NAME STATUS
---------------- ------------
HYDRA2 OPEN
HYDRA1 OPEN
>>> root
$ crsctl status res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
ONLINE ONLINE head01 STABLE
ONLINE ONLINE head02 STABLE
ora.LISTENER.lsnr
ONLINE ONLINE head01 STABLE
ONLINE ONLINE head02 STABLE
ora.asm
ONLINE ONLINE head01 Started,STABLE
ONLINE ONLINE head02 Started,STABLE
ora.net1.network
ONLINE ONLINE head01 STABLE
ONLINE ONLINE head02 STABLE
ora.ons
ONLINE ONLINE head01 STABLE
ONLINE ONLINE head02 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE head02 STABLE
ora.LISTENER_SCAN2.lsnr
1 ONLINE ONLINE head01 STABLE
ora.LISTENER_SCAN3.lsnr
1 ONLINE ONLINE head01 STABLE
ora.MGMTLSNR
1 OFFLINE OFFLINE 169.254.190.102 192.
168.27.10,STABLE
ora.cvu
1 OFFLINE OFFLINE STABLE
ora.head01.vip
1 ONLINE ONLINE head01 STABLE
ora.head02.vip
1 ONLINE ONLINE head02 STABLE
ora.hydra.db
1 ONLINE ONLINE head01 Open,STABLE
2 ONLINE ONLINE head02 Open,STABLE
ora.mgmtdb
1 OFFLINE OFFLINE Instance Shutdown,ST
ABLE
ora.oc4j
1 OFFLINE OFFLINE STABLE
ora.scan1.vip
1 ONLINE ONLINE head02 STABLE
ora.scan2.vip
1 ONLINE ONLINE head01 STABLE
ora.scan3.vip
1 ONLINE ONLINE head01 STABLE
--------------------------------------------------------------------------------
$ srvctl status database -d HYDRA
Instance HYDRA1 is running on node head01
Instance HYDRA2 is running on node head02
$ srvctl config database -d HYDRA
Database unique name: HYDRA
Database name: HYDRA
Oracle home: /u01/app/oracle/product/12.1.0.2/db
Oracle user: oracle
Spfile: +DATA/HYDRA/PARAMETERFILE/spfile.288.1000279357
Password file: +DATA/HYDRA/PASSWORD/pwdhydra.276.1000278689
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools:
Disk Groups: DATA
Mount point paths:
Services:
Type: RAC
Start concurrency:
Stop concurrency:
OSDBA group: dba
OSOPER group: oper
Database instances: HYDRA1,HYDRA2
Configured nodes: head01,head02
Database is administrator managed
$ sqlplus / as sysdba
SQL> select instance_name, status from gv$instance;
INSTANCE_NAME STATUS
---------------- ------------
HYDRA2 OPEN
HYDRA1 OPEN
>>> root
$ crsctl status res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
ONLINE ONLINE head01 STABLE
ONLINE ONLINE head02 STABLE
ora.LISTENER.lsnr
ONLINE ONLINE head01 STABLE
ONLINE ONLINE head02 STABLE
ora.asm
ONLINE ONLINE head01 Started,STABLE
ONLINE ONLINE head02 Started,STABLE
ora.net1.network
ONLINE ONLINE head01 STABLE
ONLINE ONLINE head02 STABLE
ora.ons
ONLINE ONLINE head01 STABLE
ONLINE ONLINE head02 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE head02 STABLE
ora.LISTENER_SCAN2.lsnr
1 ONLINE ONLINE head01 STABLE
ora.LISTENER_SCAN3.lsnr
1 ONLINE ONLINE head01 STABLE
ora.MGMTLSNR
1 OFFLINE OFFLINE 169.254.190.102 192.
168.27.10,STABLE
ora.cvu
1 OFFLINE OFFLINE STABLE
ora.head01.vip
1 ONLINE ONLINE head01 STABLE
ora.head02.vip
1 ONLINE ONLINE head02 STABLE
ora.hydra.db
1 ONLINE ONLINE head01 Open,STABLE
2 ONLINE ONLINE head02 Open,STABLE
ora.mgmtdb
1 OFFLINE OFFLINE Instance Shutdown,ST
ABLE
ora.oc4j
1 OFFLINE OFFLINE STABLE
ora.scan1.vip
1 ONLINE ONLINE head02 STABLE
ora.scan2.vip
1 ONLINE ONLINE head01 STABLE
ora.scan3.vip
1 ONLINE ONLINE head01 STABLE
--------------------------------------------------------------------------------