20 мая 2011 г.

Shadow-сервисы в Oracle RAC 11.2

В Real Application Cluster версии 11.2 появился интересный тип сервисов - так называемые preconnect-сервисы. Мне больше нравится определение их как "теневых" (shadow).

Теневой сервис автоматически создается при создании основного сервиса, если вы укажете ключ -P PRECONNECT:

rac1-> srvctl add service -d racdb -s OLTP -P PRECONNECT -r "racdb1" -a "racdb2"


После создания сервиса OLTP автоматически будет создан сервис OLTP_PRECONNECT:

rac1-> crs_stat -p | grep oltp
NAME=ora.racdb.oltp.svc
NAME=ora.racdb.oltp_preconnect.svc
rac1->


Теневой сервис, при старте основного сервиса, автоматически запускается на резервных узлах. Поэтому shadow-сервис может существовать только тогда, когда у основного сервиса определены и "живы" резервные узлы:

rac1-> crs_stat
... ... ...
NAME=ora.racdb.oltp.svc
TYPE=ora.service.type
TARGET=ONLINE
STATE=ONLINE on rac1

NAME=ora.racdb.oltp_preconnect.svc
TYPE=ora.service.type
TARGET=ONLINE
STATE=ONLINE on rac2

... ... ...

Теперь проделаем интересный эксперимент: принудительно переместим наш сервис OLTP на узел rac2

rac1-> srvctl relocate service -d racdb -s OLTP -i racdb1 -t racdb2 -f
rac1-> crs_stat
... ... ...
NAME=ora.racdb.oltp.svc
TYPE=ora.service.type
TARGET=ONLINE
STATE=ONLINE on rac2

NAME=ora.racdb.oltp_preconnect.svc
TYPE=ora.service.type
TARGET=ONLINE
STATE=ONLINE on rac1
... ... ...

обратите внимание, что теневой сервис oltp_preconnect переехал на узел rac1, то есть произошел своеобразный "Switсh Over"!
При остановке основного сервиса, теневой сервис также автоматически останавливается.

Как использовать теневые сервисы на клиенте ?
К сожалению, пока клиент не понимает их наличие и нужно его явно конфигурировать в backup-соединении в файле tnsnames.ora:
OLTP =
  (DESCRIPTION =
    (FAILOVER=YES)
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
  (CONNECT_DATA =
    (SERVICE_NAME = oltp.rac.com)
    (FAILOVER_MODE=
      (BACKUP=OLTP_PRECONNECT)
      (TYPE=SELECT)
      (METHOD=PRECONNECT)
    )
  )
)


OLTP_PRECONNECT =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = oltp_preconnect.rac.com)
    )
  )


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

C:\Work\RACDD4D\v3.1>sqlplus rscott/rtiger@oltp

SQL*Plus: Release 11.2.0.2.0 Production on Fri May 20 21:55:45 2011

Copyright (c) 1982, 2010, Oracle. All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, and Real Application Testing options

SQL> SELECT inst_id FROM gv$session WHERE username='RSCOTT' and program='sqlplus.exe';

INST_ID
----------
1
2
SQL> select dbms_utility.current_instance from dual;

CURRENT_INSTANCE
----------------
1


Как видите, соединение было сделано к основному сервису (первый узел), а резервное - к теневому сервису (второй узел).

Комментариев нет:

Отправить комментарий