Подробно процедура настройки сети описана в документе
Multiple Public Networks in Private Database Clouds.
При попытке претворить эту идею в жизнь вдруг выясняется (раздел 8.2 вышеприведенного документа), что scan-листенер поддерживает перенаправление запросов на соединение
только внутри публичной сети по умолчанию (public default network).
Поэтому, для подключения к СУБД через дополнительную подсеть, требуется использовать старый синтаксис (до RAC 11.2) в дескрипторе соединения, с указанием всех узлов кластера.
Первый вопрос который возникает: поддерживается ли протокол SDP в случае когда сервер СУБД работает на SPARC Solaris (узла внутри Sun Super Cluster), а клиент на платформе Linux x64 (узлы внутри Exalogic)?
Документация утверждает, что SDP поддерживается, но при этом ни слова не говорится о платформе (работает на всех платформах ?). Документ MOS "Sqlnet support for the Infiniband SDP protocol [ID 1352737.1]", корректирует информацию, говоря о том, что поддержка Infiniband SDP для SQL*Net есть только для Linux. Позже выяснилось, что документ этот уже устарел, и его еще не успели поправить: поддержка Infiniband SDP для SQL*Net есть также и для Sun Solaris!
По инструкции, описанной в документе "Multiple Public Networks in Private Database Clouds" в Grid Infrastructure была зарегистрирована новая подсеть для SDP и на каждом узле был создан соответствующий листенер.
Настройки листенера выглядят следующим образом (пример с 4-ого узла Super Cluster):
oracle@ssca04:~$ lsnrctl status listener_ib
LSNRCTL for Solaris: Version 11.2.0.3.0 - Production on 09-SEP-2012 21:10:56
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_IB)))
STATUS of the LISTENER
------------------------
Alias LISTENER_IB
Version TNSLSNR for Solaris: Version 11.2.0.3.0 - Production
Start Date 08-SEP-2012 20:15:19
Uptime 1 days 0 hr. 55 min. 37 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/11.2.0.3/grid/network/admin/listener.ora
Listener Log File /u01/app/11.2.0.3/grid/log/diag/tnslsnr/ssca04/listener_ib/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_IB)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=sdp)(HOST=192.168.11.27)(PORT=1522)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.11.27)(PORT=1522)))
The listener supports no services
The command completed successfully
Для регистрации экземпляра в scan и локальных листенерах применяются параметры LOCAL_LISTENER и REMOTE_LISTENER. В случае, когда регистрация экземпляра необходима в нескольктих листенерах работающих в разных подсетях, нужно применять другой параметр - LISTENER_NETWORKS.Предварительно, в файле tnsnames.ora на каждом узла кластера, были определены следующих четыре дескриптора (пример для 4-ого узла):
LISTENER_IPLOCAL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ssca04-vip)(PORT = 1521
))
)
#LISTENER_IPREMOTE =
# (DESCRIPTION =
# (ADDRESS = (PROTOCOL = TCP)(HOST = ssca-scan.osc.uk.oracle.com)(PORT = 1521
))
# )
LISTENER_IPREMOTE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 138.3.16.87)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 138.3.16.88)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 138.3.16.89)(PORT = 1521))
)
LISTENER_IBREMOTE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ssca01-ibvip)(PORT = 1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = ssca02-ibvip)(PORT = 1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = ssca03-ibvip)(PORT = 1522))
)
LISTENER_IBLOCAL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ssca04-ibvip)(PORT = 1522))
(ADDRESS = (PROTOCOL = SDP)(HOST = ssca04-ibvip)(PORT = 1522))
)
Алиасы LISTENER_IPREMOTE и LISTENER_IPLOCAL предназначены для регистрации экземпляров в обычной сети Gigabit-Ethernet. Обратите внимание, что в алиасе LISTENER_IPREMOTE указано не scan-имя кластера, а все три IP-адреса скан-листенеров!Проблема связана с тем, что PMON НЕ производил разыименование имени в три адреса, а регистрировал экземпляр только в одном скан-листенере. Скорее всего это баг, с которым к сожалению не было времени разбираться.
Алиасы LISTENER_IBREMOTE и LISTENER_IBLOCAL предназначены для регистрации экземпляров в Infiniband SDP-сети.
Определяем параметр LISTENER_NETWORKS, предварительно выключая параметры LOCAL_LISTENER и REMOTE_LISTENER:
Параметр LISTENER_NETWORKS не динамический - после его изменения требуется перезагрузка всех экземпляров кластера.
SQL> alter system reset local_listener scope=both sid='*';
System altered.
SQL> alter system reset remote_listener scope=both sid='*';
System altered.
SQL> alter system set
listener_networks='((NAME=network2)(LOCAL_LISTENER=LISTENER_IBLOCAL)(REMOTE_LISTENER=LISTENER_IBREMOTE))',
'((NAME=network1)(LOCAL_LISTENER=LISTENER_IPLOCAL)(REMOTE_LISTENER=LISTENER_IPREMOTE))' scope=spfile sid='*';
System altered.
SQL>
Как уже было отмечено ранее, на узлах Exalogic, для подключения к СУБД по протоколу SDP, нужно использовать синтаксис с перечислением всех узлов (перенаправление через скан-листенер в Infiniband-сети не работает):
mydb =
(DESCRIPTION =
(LOAD_BALANCE=YES)
(ADDRESS = (PROTOCOL = SDP)(HOST = 192.168.11.24)(PORT = 1522))
(ADDRESS = (PROTOCOL = SDP)(HOST = 192.168.11.25)(PORT = 1522))
(ADDRESS = (PROTOCOL = SDP)(HOST = 192.168.11.26)(PORT = 1522))
(ADDRESS = (PROTOCOL = SDP)(HOST = 192.168.11.27)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
Использование протокола Infiniband SDP позволяет обеспечить очень высокую пропускную способность сети между сервером приложений и СУБД. Это дает возможность еще больше увеличить скорость работы приложений в среде программно-аппаратных комплексов Oracle.
В следующей серии: распараллеливание создания резервной копии с помощью RMAN по протоколу SDP, с всех узлов кластера.