[Из песочницы] Строим инфраструктуру Oracle Data Guard 12c из Oracle RAC баз данных с использованием Far Sync

Введение


Целью данной работы ставилось построение демо стенда для изучения возможностей Oracle Data Guard из узлов Oracle RAC 12.1.0.2.0.

Так как под рукой у меня не нашлось сервера, на котором я бы мог разместить все необходимые мне виртуальные машины (7 штук), то строить будем с использованием офисных PC.

Итого имеем:

  1. 3 PC с такими характеристиками: CPU i5, 16 GB RAM
  2. Обычная офисная сеть 1Gbit/s


На двух PC разместятся два сайта Oracle Data Guard, в каждом из которых по 2 узла Oracle RAC 12c и один Far Sync экземпляр в отдельных виртульных машинах.

На третьем PC разместится одна виртуалка управления с Oracle Enterprise Manager Cloud Control 12c Release 5 (12.1.0.5). Насчет EM — дальше я о нем упоминать не буду ввиду того, что это отдельная тема в данном случае больше связанная не с построением стенда Data Guard, а с его использованием.

Необходимое программное обеспечение Oracle скачиваем с их сайта, а в качестве основной операционной системы я выбрал Fedora 22 с qemu-kvm + libvirt + openvswitch. В качестве гостевой ОС используем Oracle Linux 6.6.

Подготовка Fedora для хостинга виртуальных машин


Каждая из виртуальных машин будет иметь по 4 сетевых интерфейса. Назначение сетей:

192.168.100.0/24 #VLAN 100 Public Clusterware network
192.168.101.0/24 #VLAN 101 Interconnect 1
192.168.102.0/24 #VLAN 101 Interconnect 2
192.168.103.0/24 #VLAN 103 Data Guard


Interconnect кластера будет у нас дублирован, для трафика Data Guard выделена отдельная сеть. Есть еще внешняя сеть и один порт Open vSwitch на каждом PC использует физический интерфейс, которой получает IP адрес по DHCP из этой сети.

Распределим IP адреса следующим образом:

# cat /etc/hosts


192.168.100.1 prmy.example.com prmy # PC1 Primary RAC Database
192.168.100.2 sby.example.com sby # PC2 Standy RAC Database
192.168.100.3 em.example.com em # PC3 EM 12c
192.168.100.11 prmy1.example.com prmy1 # PC1 VM1 Node 1 Primary RAC Database
192.168.100.12 prmy2.example.com prmy2 # PC1 VM2 Node 2 Primary RAC Database
192.168.100.13 prmy3.example.com prmy3 # PC1 VM3 Primary Far Sync
192.168.100.21 sby1.example.com sby1 # PC2 VM1 Node 1 Standy RAC Database
192.168.100.22 sby2.example.com sby2 # PC2 VM2 Node 2 Standy RAC Database
192.168.100.23 sby3.example.com sby3 # PC2 VM3 Standy Far Sync


сформируем имена на каждом из компьютеров:


[root@prmy ~]# hostnamectl set-hostname prmy.example.com
[root@sby ~]# hostnamectl set-hostname sby.example.com
[root@em ~]# hostnamectl set-hostname em.example.com


Избавляемся от GNOME на каждой из персоналок:


# systemctl set-default multi-user.target


Сконфигурируем HugeMem для виртуалок из расчета 4300M на каждую.


# echo "vm.nr_hugepages=6450" > /etc/sysctl.d/hugepages.conf


Включим маршрутизацию:


# echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/forward.conf


Кластерам нужна синхронизация времени, поэтому на prmy конфигурируем chronyd:


[root@prmy ~]# echo "allow 192.168.100/24" >> /etc/chrony.conf
[root@prmy ~]# systemctl enable chronyd


На prmy конфигурируем DHCP сервер для раздачи IP адресов виртуалкам:


root@prmy ~]# dnf install dhcp
[root@prmy ~]# systemctl enable dhcpd
[root@prmy ~]# vi /etc/dhcp/dhcpd.conf


Содержимое файла /etc/dhcp/dhcpd.conf

#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
authoritative;

option domain-name   "example.com";
ddns-domainname      "example.com";
ddns-rev-domainname  "in-addr.arpa.";
ddns-update-style    interim;
ddns-updates         on;
ignore               client-updates;

default-lease-time 21600;
max-lease-time 43200;

#       Public
subnet 192.168.100.0 netmask 255.255.255.0
{
        option routers          192.168.100.1;
        option subnet-mask              255.255.255.0;
        option broadcast-address        192.168.100.255;
        option domain-name-servers      192.168.100.1;
        option ntp-servers              192.168.100.1;

        option ip-forwarding on;

        pool
        {
                range 192.168.100.100 192.168.100.254;
        }

        group
        {
                host prmy1 { hardware ethernet 00:16:3e:00:01:01; fixed-address 192.168.100.11; }
                host prmy2 { hardware ethernet 00:16:3e:00:01:02; fixed-address 192.168.100.12; }
                host prmy3 { hardware ethernet 00:16:3e:00:01:03; fixed-address 192.168.100.13; }

                host sby1 { hardware ethernet 00:16:3e:00:02:01; fixed-address 192.168.100.21; }
                host sby2 { hardware ethernet 00:16:3e:00:02:02; fixed-address 192.168.100.22; }
                host sby3 { hardware ethernet 00:16:3e:00:02:03; fixed-address 192.168.100.23; }
        }
}

#       Interconnect 1
subnet 192.168.101.0 netmask 255.255.255.0
{
        option subnet-mask              255.255.255.0;
        option broadcast-address        192.168.101.255;
        range                   192.168.101.100 192.168.101.254;
}

#       Interconnect 2
subnet 192.168.102.0 netmask 255.255.255.0
{
        option subnet-mask              255.255.255.0;
        option broadcast-address        192.168.102.255;
        range                   192.168.102.100 192.168.102.254;
}

#       Data Guard
subnet 192.168.103.0 netmask 255.255.255.0
{
        option subnet-mask              255.255.255.0;
        option broadcast-address        192.168.103.255;

        pool
        {
                range 192.168.103.100 192.168.103.254;
        }

        group
        {
                host prmy1-dg { hardware ethernet 00:16:3e:00:01:31; fixed-address 192.168.103.11; }
                host prmy2-dg { hardware ethernet 00:16:3e:00:01:32; fixed-address 192.168.103.12; }
                host prmy3-dg { hardware ethernet 00:16:3e:00:01:33; fixed-address 192.168.103.13; }

                host sby1-dg { hardware ethernet 00:16:3e:00:02:31; fixed-address 192.168.103.21; }
                host sby2-dg { hardware ethernet 00:16:3e:00:02:32; fixed-address 192.168.103.22; }
                host sby3-dg { hardware ethernet 00:16:3e:00:02:33; fixed-address 192.168.103.23; }
        }
}



Настраиваем DNS


[root@prmy ~]# dnf install bind
[root@prmy ~]# systemctl enable named


В стандартный /etc/named.conf добавим следующие стрчки:


[root@prmy ~]# vi /etc/named.conf


Строки добавляемые в файл vi /etc/named.conf

listen-on port 53 { 192.168.100.1; };
allow-query             { localhost; 192.168.100.0/24; };
allow-query-cache       { localhost; 192.168.100.0/24; };
allow-recursion         { localhost; 192.168.100.0/24; };
zone "example.com"
{
        type master;
        file "dynamic/example.zone";
        allow-update { key "rndc-key"; };
        notify yes;
};

zone "100.168.192.in-addr.arpa" IN
{
        type master;
        file "dynamic/192.168.100.zone";
        allow-update { key "rndc-key"; };
        notify yes;
};

zone "103.168.192.in-addr.arpa" IN
{
        type master;
        file "dynamic/192.168.103.zone";
        allow-update { key "rndc-key"; };
        notify yes;
};



Создаем зоны:


[root@prmy ~]# vi /var/named/dynamic/example.zone


Содержимое файла /var/named/dynamic/example.zone

$ORIGIN .
$TTL 86400      ; 1 day
example.com             IN SOA  dns.example.com. sysadmin.example.com. (
                                59              ; serial
                                28800           ; refresh (8 hours)
                                7200            ; retry (2 hours)
                                2419200         ; expire (4 weeks)
                                86400           ; minimum (1 day)
                                )
                        IN      NS   dns.example.com.
$ORIGIN example.com.
$TTL 10800      ; 3 hours
$TTL 86400      ; 1 day
dns                     A       192.168.100.1
prmy                    CNAME   dns
prmy1                   A       192.168.100.11
prmy2                   A       192.168.100.12
prmy3                   A       192.168.100.13

sby                     A       192.168.100.2
sby1                    A       192.168.100.21
sby2                    A       192.168.100.22
sby3                    A       192.168.100.23

prmy1-dg                A       192.168.103.11
prmy2-dg                A       192.168.103.12
prmy3-dg                A       192.168.103.13

sby1-dg                 A       192.168.103.21
sby2-dg                 A       192.168.103.22
sby3-dg                 A       192.168.103.23

em                      A       192.168.100.3

clu-prmy-gns            A       192.168.100.51
clu-prmy                NS      clu-prmy-gns.example.com.



[root@prmy ~]# vi /var/named/dynamic/192.168.100.zone


Содержимое файла /var/named/dynamic/192.168.100.zone

$ORIGIN .
$TTL 86400      ; 1 day
100.168.192.in-addr.arpa IN SOA dns.example.com. sysadmin.example.com. (
                                40         ; serial
                                28800      ; refresh (8 hours)
                                7200       ; retry (2 hours)
                                2419200    ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        NS      dns.example.com.
$ORIGIN 100.168.192.in-addr.arpa.
1                       PTR     dns.example.com.
11                      PTR     prmy1.example.com.
12                      PTR     prmy2.example.com.
13                      PTR     prmy3.example.com.

2                       PTR     sby.example.com.
21                      PTR     sby1.example.com.
22                      PTR     sby2.example.com.
23                      PTR     sby3.example.com.

3                       PTR     em.example.com.

51                      PTR     clu-prmy-gns.example.com.



[root@prmy ~]# vi /var/named/dynamic/192.168.103.zone


Содержимое файла /var/named/dynamic/192.168.103.zone

$ORIGIN .
$TTL 86400      ; 1 day
103.168.192.in-addr.arpa IN SOA dns.example.com. sysadmin.example.com. (
                                42              ; serial
                                28800           ; refresh (8 hours)
                                7200            ; retry (2 hours)
                                2419200         ; expire (4 weeks)
                                86400           ; minimum (1 day)
                                )
                        NS      dns.example.com.
$ORIGIN 103.168.192.in-addr.arpa.
11                      PTR     prmy1-dg.example.com.
12                      PTR     prmy2-dg.example.com.
13                      PTR     prmy3-dg.example.com.

21                      PTR     sby1-dg.example.com.
22                      PTR     sby2-dg.example.com.
23                      PTR     sby3-dg.example.com.



[root@prmy ~]# chown named:named /var/named/dynamic/*


У нас будет свои DHCP и DNS сервера и чтобы не мешать остальной офисной сети мы сконфигурируем для работы стенда свои подсети в отдельных VLAN.

Устанавливаем Open vSwitch:


# dnf install openvswitch
# systemctl enable openvswitch
# systemctl disable NetworkManager
# systemctl enable network


Создаем отдельный свич для public сети кластера:


# vi /etc/sysconfig/network-scripts/ifcfg-ovsbr0
DEVICE=ovsbr0
DEVICETYPE=ovs
TYPE=OVSBridge
ONBOOT=yes
OVSBOOTPROTO="dhcp"
OVSDHCPINTERFACES="enp3s0"
DELAY=0
HOTPLUG=no
NOZEROCONF=yes


Вместе с мостом создается внутренний порт и на нем внутренний интерфейс по имени совпадающем с имением моста ovsbr0. Этот интерфейс будет получать IP адрес с офисного DHCP через физический интерфейс enp3s0.

В свою очередь физический интерфейс enp3s0 подключим к этому мосту:


# vi /etc/sysconfig/network-scripts/ifcfg-enp3s0
DEVICE="enp3s0"
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=ovsbr0
ONBOOT=yes
HWADDR=60:a4:4c:3c:93:06
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NM_CONTROLLED=no
USERCTL=no
NOZEROCONF=yes
HOTPLUG=no


Конфигурируем порт (VLAN 100) и интерфейс на Open vSwitch для public сети кластеров. Через него будем раздавать IP адреса, DNS и NTP для вируалок кластеров и EM 12c.


# vi /etc/sysconfig/network-scripts/ifcfg-pub0
DEVICE=pub0
TYPE="OVSIntPort"
DEVICETYPE="ovs"
OVS_BRIDGE="ovsbr0"
OVS_OPTIONS="tag=100"
OVS_EXTRA="set Interface $DEVICE external-ids:iface-id=$(hostname -s)-$DEVICE-vif"
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.100.1
PREFIX=24
IPV6INIT=no
DELAY=0
HOTPLUG=no
NOZEROCONF=yes


Конфигурируем отдельный свич, порт (VLAN 101) и интерфейс на Open vSwitch для первого inetrconnect’а кластера.


# vi /etc/sysconfig/network-scripts/ifcfg-iconn1
DEVICE=iconn1
DEVICETYPE=ovs
TYPE=OVSBridge
OVS_EXTRA="set port $DEVICE tag=101"
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.101.1
PREFIX=24
DELAY=0
HOTPLUG=no
NOZEROCONF=yes


Конфигурируем отдельный свич, порт (VLAN 102) и интерфейс на Open vSwitch для второго inetrconnect’а кластеров.


# vi /etc/sysconfig/network-scripts/ifcfg-iconn2
DEVICE=iconn2
DEVICETYPE=ovs
TYPE=OVSBridge
OVS_EXTRA="set port $DEVICE tag=102"
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.102.1
PREFIX=24
DELAY=0
HOTPLUG=no
NOZEROCONF=yes


Конфигурируем отдельный свич, порт (VLAN 103) и интерфейс на Open vSwitch для трафика Data Guard.


# vi /etc/sysconfig/network-scripts/ifcfg-dg0
DEVICE=dg0
DEVICETYPE=ovs
TYPE=OVSBridge
OVS_EXTRA="set port $DEVICE tag=103"
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.103.1
PREFIX=24
DELAY=0
HOTPLUG=no
NOZEROCONF=yes


Создаем такие же определения интерфейсов на sby меняя HWADDR на актуальные и последнюю цифру в IP адресах для sby на 2.
Свичи iconn1, iconn2 и dg0 получились у нас изолированными и их трафик не выходит наружу. Для того чтобы виртуальные машины на prmy могли обмениваться данными по всем внутренним сетям с виртуальными машинами на sby и наоборот, мы подключим эти свичи к ovsbr0, который имеет внешний физический порт.

Реализуем это соединением всех свичей «паровозиком» при помощи Patch портов на свичах.

Определения следующих интерфейсов идентичны на prmy и sby:

Соединеие свичей при помощи Patch портов

# vi /etc/sysconfig/network-scripts/ifcfg-patch-ovsbr0-iconn1
DEVICE=patch-ovsbr0-iconn1
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSPatchPort
OVS_BRIDGE=ovsbr0
OVS_PATCH_PEER=patch-iconn1-ovsbr0

# vi /etc/sysconfig/network-scripts/ifcfg-patch-iconn1-ovsbr0
DEVICE=patch-iconn1-ovsbr0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSPatchPort
OVS_BRIDGE=iconn1
OVS_PATCH_PEER=patch-ovsbr0-iconn1

# vi /etc/sysconfig/network-scripts/ifcfg-patch-iconn1-iconn2
DEVICE=patch-iconn1-iconn2
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSPatchPort
OVS_BRIDGE=iconn1
OVS_PATCH_PEER=patch-iconn2-iconn1

# vi /etc/sysconfig/network-scripts/ifcfg-patch-iconn2-iconn1
DEVICE=patch-iconn2-iconn1
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSPatchPort
OVS_BRIDGE=iconn2
OVS_PATCH_PEER=patch-iconn1-iconn2

# vi /etc/sysconfig/network-scripts/ifcfg-patch-iconn2-dg0
DEVICE=patch-iconn2-dg0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSPatchPort
OVS_BRIDGE=iconn2
OVS_PATCH_PEER=patch-dg0-iconn2

# vi /etc/sysconfig/network-scripts/ifcfg-patch-dg0-iconn2
DEVICE=patch-dg0-iconn2
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSPatchPort
OVS_BRIDGE=dg0
OVS_PATCH_PEER=patch-iconn2-dg0



Теперь перезагружаем prmy и sby.

Проверяем получившуюся конфигурацию openvswitch:


[root@prmy ~]# ovs-vsctl show


Результат выполения команды ovs-vsctl show

3d20f852-5b67-4a1c-b983-e2a8caa27de1
    Bridge "dg0"
        Port "patch-dg0-iconn2"
            Interface "patch-dg0-iconn2"
                type: patch
                options: {peer="patch-iconn2-dg0"}
        Port "dg0"
            tag: 103
            Interface "dg0"
                type: internal
    Bridge "iconn1"
        Port "iconn1"
            tag: 101
            Interface "iconn1"
                type: internal
        Port "patch-iconn1-iconn2"
            Interface "patch-iconn1-iconn2"
                type: patch
                options: {peer="patch-iconn2-iconn1"}
        Port "patch-iconn1-ovsbr0"
            Interface "patch-iconn1-ovsbr0"
                type: patch
                options: {peer="patch-ovsbr0-iconn1"}
    Bridge "iconn2"
        Port "iconn2"
            tag: 102
            Interface "iconn2"
                type: internal
        Port "patch-iconn2-iconn1"
            Interface "patch-iconn2-iconn1"
                type: patch
                options: {peer="patch-iconn1-iconn2"}
        Port "patch-iconn2-dg0"
            Interface "patch-iconn2-dg0"
                type: patch
                options: {peer="patch-dg0-iconn2"}
    Bridge "ovsbr0"
        Port "pub0"
            tag: 100
            Interface "pub0"
                type: internal
        Port "ovsbr0"
            Interface "ovsbr0"
                type: internal
        Port "enp3s0"
            Interface "enp3s0"
        Port "patch-ovsbr0-iconn1"
            Interface "patch-ovsbr0-iconn1"
                type: patch
                options: {peer="patch-iconn1-ovsbr0"}
    ovs_version: "2.3.2"



Конфигурация должна быть одинаковой на всех компьютерах.

Проверяем IP адреса:


[root@prmy ~]# ip addr show


Результат выполения команды ip addr show

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp3s0:  mtu 1500 qdisc fq_codel master ovs-system state UP group default qlen 1000
    link/ether 60:a4:4c:3c:93:06 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::62a4:4cff:fe3c:9306/64 scope link 
       valid_lft forever preferred_lft forever
3: ovs-system:  mtu 1500 qdisc noop state DOWN group default 
    link/ether 0a:91:1b:82:ce:a9 brd ff:ff:ff:ff:ff:ff
4: iconn1:  mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether d6:22:60:7e:9f:48 brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.1/24 brd 192.168.101.255 scope global iconn1
       valid_lft forever preferred_lft forever
    inet6 fe80::d422:60ff:fe7e:9f48/64 scope link 
       valid_lft forever preferred_lft forever
5: ovsbr0:  mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether 60:a4:4c:3c:93:06 brd ff:ff:ff:ff:ff:ff
    inet 192.168.118.16/26 brd 192.168.118.63 scope global dynamic ovsbr0
       valid_lft 62646sec preferred_lft 62646sec
    inet6 fe80::62a4:4cff:fe3c:9306/64 scope link 
       valid_lft forever preferred_lft forever
6: pub0:  mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether f2:c2:ba:85:a2:6e brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.1/24 brd 192.168.100.255 scope global pub0
       valid_lft forever preferred_lft forever
    inet6 fe80::f0c2:baff:fe85:a26e/64 scope link 
       valid_lft forever preferred_lft forever
7: iconn2:  mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether f2:e6:e8:93:f0:43 brd ff:ff:ff:ff:ff:ff
    inet 192.168.102.1/24 brd 192.168.102.255 scope global iconn2
       valid_lft forever preferred_lft forever
    inet6 fe80::f0e6:e8ff:fe93:f043/64 scope link 
       valid_lft forever preferred_lft forever
8: dg0:  mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether ae:bb:09:25:5c:4e brd ff:ff:ff:ff:ff:ff
    inet 192.168.103.1/24 brd 192.168.103.255 scope global dg0
       valid_lft forever preferred_lft forever
    inet6 fe80::acbb:9ff:fe25:5c4e/64 scope link 
       valid_lft forever preferred_lft forever

[root@sby ~]# ip addr show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp3s0:  mtu 1500 qdisc fq_codel master ovs-system state UP group default qlen 1000
    link/ether 10:bf:48:e2:58:5e brd ff:ff:ff:ff:ff:ff
    inet6 fe80::12bf:48ff:fee2:585e/64 scope link 
       valid_lft forever preferred_lft forever
3: ovs-system:  mtu 1500 qdisc noop state DOWN group default 
    link/ether 66:9a:f8:af:48:b4 brd ff:ff:ff:ff:ff:ff
4: iconn1:  mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether da:85:ce:d4:36:4f brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.2/24 brd 192.168.101.255 scope global iconn1
       valid_lft forever preferred_lft forever
    inet6 fe80::d885:ceff:fed4:364f/64 scope link 
       valid_lft forever preferred_lft forever
5: ovsbr0:  mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether 10:bf:48:e2:58:5e brd ff:ff:ff:ff:ff:ff
    inet 192.168.118.28/26 brd 192.168.118.63 scope global dynamic ovsbr0
       valid_lft 64250sec preferred_lft 64250sec
    inet6 fe80::12bf:48ff:fee2:585e/64 scope link 
       valid_lft forever preferred_lft forever
6: pub0:  mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether d6:2e:c7:82:d5:8c brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.2/24 brd 192.168.100.255 scope global pub0
       valid_lft forever preferred_lft forever
    inet6 fe80::d42e:c7ff:fe82:d58c/64 scope link 
       valid_lft forever preferred_lft forever
7: iconn2:  mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether aa:e2:ca:f4:76:4c brd ff:ff:ff:ff:ff:ff
    inet 192.168.102.2/24 brd 192.168.102.255 scope global iconn2
       valid_lft forever preferred_lft forever
    inet6 fe80::a8e2:caff:fef4:764c/64 scope link 
       valid_lft forever preferred_lft forever
8: dg0:  mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether ca:cc:91:bd:20:47 brd ff:ff:ff:ff:ff:ff
    inet 192.168.103.2/24 brd 192.168.103.255 scope global dg0
       valid_lft forever preferred_lft forever
    inet6 fe80::c8cc:91ff:febd:2047/64 scope link 
       valid_lft forever preferred_lft forever
9: vnet0:  mtu 1500 qdisc fq_codel master ovs-system state UNKNOWN group default qlen 500
    link/ether fe:16:3e:00:02:01 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc16:3eff:fe00:201/64 scope link 
       valid_lft forever preferred_lft forever
10: vnet1:  mtu 1500 qdisc fq_codel master ovs-system state UNKNOWN group default qlen 500
    link/ether fe:16:3e:00:02:11 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc16:3eff:fe00:211/64 scope link 
       valid_lft forever preferred_lft forever
11: vnet2:  mtu 1500 qdisc fq_codel master ovs-system state UNKNOWN group default qlen 500
    link/ether fe:16:3e:00:02:21 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc16:3eff:fe00:221/64 scope link 
       valid_lft forever preferred_lft forever
12: vnet3:  mtu 1500 qdisc fq_codel master ovs-system state UNKNOWN group default qlen 500
    link/ether fe:16:3e:00:02:31 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc16:3eff:fe00:231/64 scope link 
       valid_lft forever preferred_lft forever



Проверяем что ping есть на все адреса.

Создание виртуальных машин


Готовим libvirt:


# systemctl start libvirtd
# systemctl enable libvirtd


Удаляем default сеть libvirt:


# virsh net-destroy default
# virsh net-undefine default


Создаем свои определения сетей:


#vi ovsbr0.xml


  public
  
  
  
  
    
      
    
  



# virsh net-define ovsbr0.xml
# virsh net-start public
# virsh net-autostart public


#vi interconnect1.xml


  interconnect1
  
  
  
  
    
      
    
  



# virsh net-define interconnect1.xml
# virsh net-start  interconnect1
# virsh net-autostart  interconnect1


#vi interconnect2.xml


  interconnect2
  
  
  
  
    
      
    
  



# virsh net-define interconnect2.xml
# virsh net-start  interconnect2
# virsh net-autostart  interconnect2


#vi dataguard.xml


  dataguard
  
  
  
  
    
      
    
  



# virsh net-define dataguard.xml
# virsh net-start   dataguard
# virsh net-autostart   dataguard


Проверяем:


# virsh net-list
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 dataguard            active     yes           yes
 interconnect1        active     yes           yes
 interconnect2        active     yes           yes
 public               active     yes           yes


Создаем диски для prmy1:


[root@prmy ~]# mkdir /var/lib/libvirt/images/prmy1
[root@prmy ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/prmy1/system.qcow2 20G
[root@prmy ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/prmy1/u01.qcow2 16G


Заставить правильно работать qemu+kvm с общими дисками в формате qcow2 мне не удалось, поэтому общие диски создаем в формате raw.


[root@prmy ~]# qemu-img create -f raw /var/lib/libvirt/images/df.img 33G
[root@prmy ~]# qemu-img create -f raw /var/lib/libvirt/images/dg.img 11G


Берем дистрибутив Oracle Linux 6.6 64bit и кладем его на место:


[root@prmy ~]# cp V52218-01.iso /var/lib/libvirt/images


Конфигурируем NFS сервер:


[root@prmy ~]# mkdir /stage
[root@prmy ~]# echo '/stage             192.168.100.0/24(ro)' > /etc/exports.d/stage.exports
[root@prmy ~]# systemctl start nfs-server
[root@prmy ~]# systemctl enable nfs-server


В /stage скачиваем дистрибутивы Grid Infrastructure, Oracle Database 12.1.0.2 и распаковываем их.


[root@prmy stage]# cd /stage
[root@prmy ~]# unzip -q linuxamd64_12102_database_1of2.zip
[root@prmy ~]# unzip -q linuxamd64_12102_database_2of2.zip
[root@prmy ~]# unzip -q linuxamd64_12102_grid_1of2.zip
[root@prmy ~]# unzip -q linuxamd64_12102_grid_2of2.zip


Создаем определение виртуальной машины prmy1:


[root@prmy stage]# mkdir prmy1
[root@prmy stage]# cd prmy1
[root@prmy prmy1]#  vi prmy1.xml


Содержимое файла prmy1.xml

  prmy1
  4300
  4300
  
    
  
  1
  
    hvm
  
  
    
    
    
  
  
    
  
  
    
    
    
  
  destroy
  restart
  restart
  
    
    
  
  
    /usr/bin/qemu-kvm
    
      
      
      
      
      


Создаем виртуалку:


[root@prmy prmy1]# virsh define prmy1.xml


Запускаем Virtual Machine Manager и инсталлируем операционную систему любым удобным для вас способом. Сетевые интерфейсы должны получить свои IP адреса с нашего DHCP. 200MB отдаем для /boot, 8GB для swap и остальное для /. В качестве файловой системы для / и /boot используем, например ext3.

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


@core
@base
@x11
@basic-desktop
@general-desktop
@guest-agents


а также пакеты:


oracleasm-support
oracle-rdbms-server-12cR1-preinstall
nscd
ntp


Конфигурирование Oracle Linux 6


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


[root@prmy ~]# ssh -X root@prmy1.example.com


Избавляемся от GNOME:


[root@prmy1 ~]# vi /etc/inittab
id:3:initdefault:


Избавляемся от вопросов при удалении файла пользователем root:


[root@prmy1 ~]# sed -i -e 's/alias/#&/gi' /root/.bashrc


Избавляемся от запуска ненужных сервисов типа cups и прочих командой chkconfig:


[root@prmy1 ~]# chkconfig cups off
…


Сервисы ntpd и nscd наоборот включаем:


[root@prmy1 ~]# chkconfig  ntpd on
[root@prmy1 ~]# chkconfig  nscd on


У меня после перезагрузки получилось следующее:

Результат выполения команды chkconfig --list | grep: on

[root@prmy1 ~]# chkconfig --list | grep :on
acpid           0:off   1:off   2:on    3:on    4:on    5:on    6:off
atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off
auditd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
blk-availability        0:off   1:on    2:on    3:on    4:on    5:on    6:off
cpuspeed        0:off   1:on    2:on    3:on    4:on    5:on    6:off
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
haldaemon       0:off   1:off   2:off   3:on    4:on    5:on    6:off
irqbalance      0:off   1:off   2:off   3:on    4:on    5:on    6:off
mcelogd         0:off   1:off   2:off   3:on    4:off   5:on    6:off
messagebus      0:off   1:off   2:on    3:on    4:on    5:on    6:off
netfs           0:off   1:off   2:off   3:on    4:on    5:on    6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
nfslock         0:off   1:off   2:off   3:on    4:on    5:on    6:off
nscd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
ntpd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
oracle-rdbms-server-12cR1-preinstall-firstboot  0:off   1:off   2:on    3:on    4:on    5:on    6:off
oracleasm       0:off   1:off   2:on    3:on    4:on    5:on    6:off
portreserve     0:off   1:off   2:on    3:on    4:on    5:on    6:off
qemu-ga         0:off   1:off   2:on    3:on    4:on    5:on    6:off
rpcbind         0:off   1:off   2:on    3:on    4:on    5:on    6:off
rpcgssd         0:off   1:off   2:off   3:on    4:on    5:on    6:off
rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off
spice-vdagentd  0:off   1:off   2:off   3:off   4:off   5:on    6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
sysstat         0:off   1:on    2:on    3:on    4:on    5:on    6:off
udev-post       0:off   1:on    2:on    3:on    4:on    5:on    6:off



Конфигурируем ntpd:


[root@prmy1 ~]# vi /etc/sysconfig/ntpd
# Drop root to id 'ntp:ntp' by default.
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid -g"

# Set to 'yes' to sync hw clock after successful ntpdate
SYNC_HWCLOCK=no

# Additional options for ntpdate
NTPDATE_OPTIONS=""


[root@prmy1 ~]# vi /etc/ntp.conf


Содержимое файла/etc/ntp.conf

# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).

driftfile /var/lib/ntp/drift

# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery

# Permit all access over the loopback interface.  This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1

# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server  192.168.100.1
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10
broadcastdelay  0.008

# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography.
keys /etc/ntp/keys



Конфигурируем лимиты:


[root@prmy1 ~]# vi /etc/security/limits.conf


Добавленные строки в файл /etc/security/limits.conf

oracle  soft    nofile  131072
oracle  hard    nofile  131072
oracle  soft    nproc   131072
oracle  hard    nproc   131072
oracle  soft    core    unlimited
oracle  hard    core    unlimited
oracle  soft    memlock 3828161
oracle  hard    memlock 3828161
grid    soft    nofile  131072
grid    hard    nofile  131072
grid    soft    nproc   131072
grid    hard    nproc   131072
grid    soft    core    unlimited
grid    hard    core    unlimited
grid    soft    memlock 3828161
grid    hard    memlock 3828161
# Recommended stack hard limit 32MB for oracle installations
# oracle   hard   stack    32768



[root@prmy1 ~]# cd /etc/profile.d
[root@prmy1 profile.d]# vi oracle.sh
if [ $USER = "oracle" ] || [ $USER = "grid" ]; then
    if [ /bin/bash = "/bin/ksh" ]; then
        ulimit -p 16384
        ulimit -n 65536
    else
        ulimit -u 16384 -n 65536
    fi
    umask 022
fi


[root@prmy1 profile.d]# ln -s oracle.sh oracle.csh


[root@prmy1 ~]# sed -i -r -e 's/(tmpfs.*)(defaults)/\1size=3800M,rw,exec/gi' /etc/fstab


eth0, eth3 — public eth1, eth2 — interconnect


[root@prmy1 ~]# echo "net.ipv4.conf.eth0.rp_filter = 1" >> /etc/sysctl.conf
[root@prmy1 ~]# echo "net.ipv4.conf.eth3.rp_filter = 1" >> /etc/sysctl.conf
[root@prmy1 ~]# echo "net.ipv4.conf.eth1.rp_filter = 2" >> /etc/sysctl.conf
[root@prmy1 ~]# echo "net.ipv4.conf.eth2.rp_filter = 2" >> /etc/sysctl.conf


Создаем группы для Oracle:


[root@prmy1 ~]# groupadd oper
[root@prmy1 ~]# groupadd asmdba
[root@prmy1 ~]# groupadd asmoper
[root@prmy1 ~]# groupadd asmadmin


Включаем пользователя oracle в группы dba, oper и asmdba


[root@prmy1 ~]# usermod -G dba,oper,asmdba oracle
[root@prmy1 ~]# passwd oracle


Создаем пользователя grid:


[root@prmy1 ~]# useradd -m -g oinstall -G asmdba,asmoper,asmadmin grid
[root@prmy1 ~]# passwd grid


Для удобства будем отображать имя экземпляра Oracle в подсказке bash:


[root@prmy1 ~]# echo 'export PS1="[\u@\h-\`echo \$ORACLE_SID\` \W]$ "' >> /home/oracle/.bashrc
[root@prmy1 ~]# echo 'export PS1="[\u@\h-\`echo \$ORACLE_SID\` \W]$ "' >> /home/grid/.bashrc
[root@prmy1 ~]# echo 'export PS1="[\u@\h-\`echo \$ORACLE_SID\` \W]# "' >> /root/.bashrc


Создаем раздел и файловую систему на диске предназначенном для установки софта Oracle.
Должно получиться так:


[root@sby1- ~]# fdisk -u -c -l /dev/vdb
Disk /dev/vdb: 17.2 GB, 17179869184 bytes
3 heads, 2 sectors/track, 5592405 cylinders, total 33554432 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf12e0427

   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    33554431    16776192   83  Linux


[root@prmy1 ~]# mkfs.ext3 -L u01 /dev/vdb1


Монтировать разделы я хочу не по uuid, а по LABEL:


[root@prmy1 ~]# tune2fs -L boot /dev/vda1
[root@prmy1 ~]# tune2fs -L root /dev/vda3
[root@prmy1 ~]# swapoff
[root@prmy1 ~]# mkswap -L swap /dev/vda2
[root@prmy1 ~]# vi /etc/fstab
LABEL=root              /                       ext3    defaults        1 1
LABEL=boot              /boot                   ext3    defaults        1 2
LABEL=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
LABEL=u01               /u01                    ext3    defaults        0 0


[root@prmy1 ~]# mount -a
[root@prmy1 ~]# mkdir -p /u01/app/12.1.0/grid
[root@prmy1 ~]# mkdir -p /u01/app/grid
[root@prmy1 ~]# mkdir -p /u01/app/oracle
[root@prmy1 ~]# chown -R grid:oinstall /u01
[root@prmy1 ~]# chown oracle:oinstall /u01/app/oracle
[root@prmy1 ~]# chmod -R 775 /u01/


Нарезаем разделы для ASM дисков, у меня получилось в итоге так:


[root@sby1- ~]# fdisk -l -u -c /dev/vdc
Disk /dev/vdc: 35.4 GB, 35433480192 bytes
16 heads, 63 sectors/track, 68656 cylinders, total 69206016 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x8cee7a8e

   Device Boot      Start         End      Blocks   Id  System
/dev/vdc1            2048     5656927     2827440   83  Linux
/dev/vdc2         5656928    11311807     2827440   83  Linux
/dev/vdc3        11311808    16966687     2827440   83  Linux
/dev/vdc4        16966688    69206015    26119664    5  Extended
/dev/vdc5        16968736    22623615     2827440   83  Linux
/dev/vdc6        22625664    28280543     2827440   83  Linux
/dev/vdc7        28282592    33937471     2827440   83  Linux
/dev/vdc8        33939520    39594399     2827440   83  Linux
/dev/vdc9        39596448    45251327     2827440   83  Linux
/dev/vdc10       45253376    50908255     2827440   83  Linux
/dev/vdc11       50910304    56565183     2827440   83  Linux
/dev/vdc12       56567232    62222111     2827440   83  Linux
/dev/vdc13       62224160    67879039     2827440   83  Linux


[root@sby1- ~]# fdisk -u -c -l /dev/vdd
Disk /dev/vdd: 11.8 GB, 11811160064 bytes
1 heads, 32 sectors/track, 720896 cylinders, total 23068672 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x3416c855

   Device Boot      Start         End      Blocks   Id  System
/dev/vdd1            2048     5656927     2827440   83  Linux
/dev/vdd2         5656928    11311807     2827440   83  Linux
/dev/vdd3        11311808    16966687     2827440   83  Linux
/dev/vdd4        16966688    22621567     2827440   83  Linux


С сайта Oracle скачиваем пакет oracleasmlib-2.0.4–1.el6.x86_64 помещаем на prmy в /stage и устанавливаем его:


[root@prmy1 ~]# mount prmy:/stage /stage
[root@prmy1 ~]# rpm -Uvh oracleasmlib-2.0.4-1.el6.x86_64
[root@prmy1 ~]# rpm -Uvh /stage/grid/rpm/cvuqdisk-1.0.9-1.rpm
[root@prmy1 ~]# umount /stage


Конфигурируем oracleasm:


[root@prmy1 ~]# /usr/sbin/oracleasm configure -e -u grid -g asmadmin -s y


Создаем ASM диски:


[root@prmy1 ~]# oracleasm createdisk ASMDISK1P1 /dev/vdc1
[root@prmy1 ~]# oracleasm createdisk ASMDISK1P2 /dev/vdc2
[root@prmy1 ~]# oracleasm createdisk ASMDISK1P3 /dev/vdc3
[root@prmy1 ~]# oracleasm createdisk ASMDISK1P4 /dev/vdc5
[root@prmy1 ~]# oracleasm createdisk ASMDISK1P5 /dev/vdc6
[root@prmy1 ~]# oracleasm createdisk ASMDISK1P6 /dev/vdc7
[root@prmy1 ~]# oracleasm createdisk ASMDISK1P7 /dev/vdc8
[root@prmy1 ~]# oracleasm createdisk ASMDISK1P8 /dev/vdc9
[root@prmy1 ~]# oracleasm createdisk ASMDISK1P9 /dev/vdc10
[root@prmy1 ~]# oracleasm createdisk ASMDISK1P10 /dev/vdc11
[root@prmy1 ~]# oracleasm createdisk ASMDISK1P11 /dev/vdc12
[root@prmy1 ~]# oracleasm createdisk ASMDISK1P12 /dev/vdc13
[root@prmy1 ~]# oracleasm createdisk ASMDISK2P1 /dev/vdd1
[root@prmy1 ~]# oracleasm createdisk ASMDISK2P2 /dev/vdd2
[root@prmy1 ~]# oracleasm createdisk ASMDISK2P3 /dev/vdd3
[root@prmy1 ~]# oracleasm createdisk ASMDISK2P4 /dev/vdd4


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


[root@prmy1 ~]# ssh prmy mkdir /stage/prmy1
[root@prmy1 ~]# scp /etc/sysconfig/network prmy:/stage/prmy1
[root@prmy1 ~]# scp /etc/sysconfig/network/scripts/ifcfg-eth* prmy:/stage/prmy1
[root@prmy1 ~]# scp /etc/udev/rules.d/70-persistent-net.rules prmy:/stage/prmy1

[root@prmy1 ~]# poweroff


Клонирование виртуальных машин


Копируем общие диски на sby:


[root@prmy ~]# scp /var/lib/libvirt/images/*.img sby:/var/lib/libvirt/images


Создаем каталоги для виртуалок:


[root@prmy ~]# mkdir /var/lib/libvirt/images/prmy2
[root@prmy ~]# mkdir /var/lib/libvirt/images/prmy3
[root@prmy ~]# ssh sby mkdir /var/lib/libvirt/images/sby1
[root@prmy ~]# ssh sby mkdir /var/lib/libvirt/images/sby2
[root@prmy ~]# ssh sby mkdir /var/lib/libvirt/images/sby3


Копируем наши «эталонные» образы system.qcow и u01.qcow2 на sby.


[root@prmy ~]# scp /var/lib/libvirt/images/prmy1/system.qcow sby:/var/lib/libvirt/images
[root@prmy ~]# scp /var/lib/libvirt/images/prmy1/ u01.qcow2 sby:/var/lib/libvirt/images/sby1
[root@prmy ~]# scp /var/lib/libvirt/images/prmy1/ u01.qcow2 sby:/var/lib/libvirt/images/sby2
[root@prmy ~]# scp /var/lib/libvirt/images/prmy1/ u01.qcow2 sby:/var/lib/libvirt/images/sby3


Клонируем виртуальный диск system.qcow2 на prmy:


[root@prmy ~]# mv /var/lib/libvirt/images/prmy1/system.qcow2 /var/lib/libvirt/images
[root@prmy ~]# qemu-img create -f qcow2 -o backing_file=/var/lib/libvirt/images/system.qcow2 /var/lib/libvirt/images/prmy1/system.qcow2
[root@prmy ~]# qemu-img create -f qcow2 -o backing_file=/var/lib/libvirt/images/system.qcow2 /var/lib/libvirt/images/prmy2/system.qcow2
[root@prmy ~]# qemu-img create -f qcow2 -o backing_file=/var/lib/libvirt/images/system.qcow2 /var/lib/libvirt/images/prmy3/system.qcow2


Диск u01.qcow2 просто копируем:


[root@prmy ~]# cp /var/lib/libvirt/images/prmy1/u01.qcow2 /var/lib/libvirt/images/prmy2/u01.qcow2
[root@prmy ~]# cp /var/lib/libvirt/images/prmy1/u01.qcow2 /var/lib/libvirt/images/prmy3/u01.qcow2


Готовим файлы на замену в виртуалках:


[root@prmy ~]# mkdir /stage/{prmy2, prmy3}
[root@prmy ~]# cd /stage/prmy1
[root@prmy prmy1]# cp ifcfg-eth* network 70-persistent-net.rules ../prmy2
[root@prmy prmy1]# cp ifcfg-eth* network 70-persistent-net.rules ../prmy3
[root@prmy prmy1]# scp ifcfg-eth* network 70-persistent-net.rules sby:/stage/sby1
[root@prmy prmy1]# scp ifcfg-eth* network 70-persistent-net.rules sby:/stage/sby2
[root@prmy prmy1]# scp ifcfg-eth* network 70-persistent-net.rules sby:/stage/sby3


Туда же копируем определение виртуальной машины prmy1:


[root@prmy prmy1]# cp prmy1.xml /stage/prmy2/prmy2.xml
[root@prmy prmy1]# cp prmy1.xml /stage/prmy3/prmy3.xml
[root@prmy prmy1]# scp prmy1.xml sby:/stage/sby1/sby1.xml
[root@prmy prmy1]# scp prmy1.xml sby:/stage/sby2/sby3.xml
[root@prmy prmy1]# scp prmy1.xml sby:/stage/sby3/sby3.xml
[root@prmy prmy1]# cd ../prmy2


Редактируем файлы:


[root@prmy prmy2]# sed -i -r -e "s/prmy1/prmy2/gi" network
[root@prmy prmy2]# sed -i -r -e 's/(00:16:3E:00:0)(.)(:.)(1)/\11\32/gi' ifcfg-eth* 70-persistent-net.rules


Копируем их в образ виртуальной машины prmy2:


[root@prmy prmy2]# guestfish << EOF
add /var/lib/libvirt/images/prmy2/system.qcow2
run
mount /dev/sda3 /
copy-in network /etc/sysconfig
copy-in ifcfg-eth0 /etc/sysconfig/network-scripts
copy-in ifcfg-eth1 /etc/sysconfig/network-scripts
copy-in ifcfg-eth2 /etc/sysconfig/network-scripts
copy-in ifcfg-eth3 /etc/sysconfig/network-scripts
copy-in 70-persistent-net.rules /etc/udev/rules.d
umount /
exit
EOF


Редактируем определение виртуалной машины prmy2.
меняем имена:


[root@prmy prmy2]# sed -i -r -e "s/prmy1/prmy2/gi" prmy2.xml


меняем mac адреса:


[root@prmy prmy2]# sed -i -r -e 's/(00:16:3E:00:0)(.)(:.)(1)/\11\32/gi' prmy2.xml


удаляем CDROM:


[root@prmy prmy2]# sed -i "// {; d; }" prmy2.xml


удаляем IDE контроллер:


[root@prmy prmy2]# sed -i "// {; d; }" prmy2.xml


И создаем виртуальную машину prmy2:


[root@prmy prmy2]# virsh define prmy2.xml


Продолжаем в том же духе с prmy3.
Имена меняем командой:


[root@prmy prmy3]# sed -i -r -e "s/prmy1/prmy3/gi" network prmy3.xml


Mac адреса соответственно:


[root@prmy prmy3]# sed -i -r -e 's/(00:16:3E:00:0)(.)(:.)(1)/\11\33/gi' ifcfg-eth* 70-persistent-net.rules prmy3.xml


Запускаем виртуальные машины:


[root@prmy ~]# virsh start prmy1
[root@prmy ~]# virsh start prmy2
[root@prmy ~]# virsh start prmy3


Подключаемся к ним проверяем что имя у них правильное, соседок по сети, DNS и NTP сервера они видит, диски на месте:


# hostname
# ping
# df -h
# oracleasm listdisks


Похожую процедуру нужно проделать с виртуальными машинами на sby.example.com.
Например имена и Mac адреса в файлах для sby1 меняем так:


[root@sby sby1]# sed -i -r -e "s/prmy1/sby1/gi" network sby1.xml
[root@sby sby1]# sed -i -r -e 's/(00:16:3E:00:0)(.)(:.)(1)/\12\31/gi' ifcfg-eth* 70-persistent-net.rules sby1.xml


sby2:


[root@sby sby2]# sed -i -r -e "s/prmy1/sby2/gi" network sby2.xml
[root@sby sby2]# sed -i -r -e 's/(00:16:3E:00:0)(.)(:.)(1)/\12\32/gi' ifcfg-eth* 70-persistent-net.rules sby2.xml


sby3:


[root@sby sby2]# sed -i -r -e "s/prmy1/sby3/gi" network sby3.xml
[root@sby sby2]# sed -i -r -e 's/(00:16:3E:00:0)(.)(:.)(1)/\12\33/gi' ifcfg-eth* 70-persistent-net.rules sby3.xml


Их тоже стартуем:


[root@sby ~]# virsh start sby1
[root@sby ~]# virsh start sby2
[root@sby ~]# virsh start sby3

Инсталляция Grid Infrastructure


Процесс довольно длинный и скучный.

Инсталлируем Grid Infrastructure на prmy:


[root@prmy ~]# ssh -X grid@prmy1
[grid@prmy1- ~]$ su -
[root@prmy1 ~]# mount prmy:/stage /stage
[root@prmy1 ~]# exit
[grid@prmy1- ~]$ /stage/grid/runInstaller


6b5ee18d4be1467e81234d458b9ddc6b.png

Flex Cluster нам не нужен.
888e87e6ae134999b6c2e3ff412f86e5.png
2dcd9f05643649ef8b6bcdac4993cebd.png
b128e2244c564da18544e31e30492493.png

Сконфигурируем GNS на домене, указанном в DNS при делегировании зоны.
686307620b534c769edb3c2116e15628.png
1a6b2150d65f4ebc8705c38cb6b87d82.png
bb0d5a64754d4a208077342629b9cbd9.png
ae62b6aa737844b8bb6a806089a824b7.png

Сконфигурируем Flex ASM, хотя он тут по большому счету не нужен. Впрочем это же стенд для изучения возможностей и можно ограничить количество узлов на которых стартует ASM двумя. При использовании стандартного ASM можно было сэкономить по памяти — его минимальные требования 300M вместо 1G у Flex ASM.
3bff1288001f42ac86f9deec63178332.png

Берем первые 8 дисков
1c50733f59fb4068ab6d02e484e47c50.png
1d94c16e093d4a67a89b6055cb0a9fbc.png
25fd173cd6244a358c8072d0fdfa5ff1.png
© Habrahabr.ru