Tech: Oracle Clusterware and Oracle TimesTen

Как я писал ранее, в версии 11.2.1 Oracle TimesTen приобрел несколько новых возможностей, одной из которых является возможность управления конфигурацией высокой надежности (active-standby pair репликацией) с помощью Oracle Clusterware.
Вот именно о данной возможности и пойдет речь далее.

Для рассмотрения данной возможности я использовал две виртуальные машины на базе Oracle VM-сервера 2.2.0 (x86 64 bit). В качестве гостевой операционной системы использовался Oracle Enterprise Linux 5.3 (x86). В качестве разделяемой системы хранения использовался Openfiler.

Установка Oracle Clusterware

Вначале установим Oracle Clusterware. На момент написания статьи, интеграция Oracle TimesTen и Oracle Clusterware возможна только на платформах Linux x86 и Linux x86-64, и только с версией Oracle Clusterware 11.1.0.7., поэтому после установки 11.1.0.6. необходимо поставить патчсет 11.1.0.7.

Процессу установки Oracle Clusterware посвящено достаточно много статей и поэтому я не буду детально описывать процесс установки. Только отмечу, что все машины должны использовать Network Time Protocol (NTP) или похожую систему для устранения расхождения во времени между машинами на интервал не больше чем 250 миллисекунд. Данное ограничение связано с функционированием active-standby pair репликации в Oracle TimesTen.

В данном примере я создал 2-ух узловой кластер со следующими настройками:

OS username / password:
• root/oracle
• oracle/oracle

Hostname raс1
• public IP 192.168.2.131
• virtual IP 192.168.2.31
• private IP 10.10.10.131
• IP for openfiler 172.16.2.131

Hostname rac2
• public IP 192.168.2.132
• virtual IP 192.168.2.32
• private IP 10.10.10.132
• IP for openfiler 172.16.2.132

Openfiler
• Public IP 172.16.2.1

Oracle Clusterware
• CRS_HOME=/u01/app/oracle/product/11.1.0/crs

Убедимся, что программное обеспечение Oracle Clusterware установлено и нормально функционирует.
[oracle@rac1 ~]$ crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora.rac1.gsd   application    ONLINE    ONLINE    rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
[oracle@rac1 ~]$

Также, убедимся что версия Oracle Clusterware соответствующая (11.1.0.7).
[oracle@rac1 ~]$ crsctl query crs activeversion
Oracle Clusterware active version on the cluster is [11.1.0.7.0]

Установка Oracle TimesTen 11g

После установки Oracle Clusterware устанавливаем Oracle TimesTen 11.2. Установить необходимо на те же машины, на которых функционирует Oracle Clusterware.

Процесс установки Oracle TimesTen 11.2 детально описан здесь (http://ggsig.blogspot.com/2010/05/oracle-timesten_01.html), за одним исключением (пункт взаимодействия с Oracle Clusterware). На данном этапе установки, необходимо прописать директорию хоума CRS-а, после чего инсталлятор должен показать доступные узлы для конфигурации active-standby pair репликации. После чего можно определить узлы на которых будет работать репликация.
Would you like to use TimesTen Replication with Oracle Clusterware? [ no ]yes
Please provide the path to the Oracle Clusterware installation on this machine (s=skip)? [  ] /u01/app/oracle/product/11.1.0/crs

NOTE: The TimesTen Clusterware agent port must be the same on all nodes
      of the cluster. Please refer to the TimesTen documentation for
      additional information.

Please enter a port number for the TimesTen Clusterware agent? [ 53386 ]

Executing '/u01/app/oracle/product/11.1.0/crs/bin/crsctl check cluster' ...
Oracle Clusterware is currently configured on the following nodes :

1. rac1
2. rac2

NOTE: By default, all of the nodes listed above will be added to the TimesTen
      Replication with Oracle Clusterware configuration. You can also
      specify your own list of nodes based on the list above.

Would you like to specify a node list for TimesTen Replication with Oracle Clusterware? [ no ]
После установки, проверим работу основного демона Oracle TimesTen
[oracle@rac1 ~]$ ttstatus
TimesTen status report as of Fri Feb 19 08:54:30 2010

Daemon pid 12978 port 53384 instance tt1
TimesTen server pid 13016 started on port 53385
------------------------------------------------------------------------
Accessible by group oinstall
End of report
Далее необходимо повторить процедуру установки на втором узле. Для более легкого управления рекомендуется устанавливать программное обеспечение под одним пользователем и в те же директории.

Если вы вначале установили Oracle TimesTen и после этого установили Oracle Clusterware, то для активации возможности интеграции данных продуктов вам необходимо воспользоваться утилитой ttmodinstall

Создание базы данных

Создадим на обоих узлах следующие директории:
  • /u01/app/datastore - для хранения всех баз данных Oracle TimesTen
  • /u01/app/datastore/ha_ds – для базы данных «ha_ds», которую будем реплицировать.
[root@rac1 ~]$ mkdir /u01/app/datastore[root@rac1 ~]$ chown oracle:oinstall /u01/app/datastore
[root@rac1 ~]$ mkdir /u01/app/datastore/ha_ds
[root@rac1 ~]$ chown oracle:oinstall /u01/app/datastore/ha_ds
Далее выбираем один из узлов кластера для создания базы данных. В данном случае - это узел rac1. Cоздадим сущность в файле sys.odbc.ini.
…
[ha_ds]
Driver=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so
DataStore=/u01/app/datastore/ha_ds
PermSize=40
TempSize=32
PLSQL=1
DatabaseCharacterSet=AL32UTF8
…
Далее соединяемся с базой данных «ha_ds» под администратором экземпляра Oracle TimesTen (пользователь, который устанавливал экземпляр Oracle TimesTen, в данном примере – это пользователь oracle) и создадим в ней необходимых пользователей:
  • adm – администратор базы данных и репликации (для этого данному пользователю необходима привилегия ADMIN).
  • app – пользователь имеющий минимальный набор привилегий, хозяин объектов.
[oracle@rac1 ~]$ ttisql ha_ds

Copyright (c) 1996-2009, Oracle.  All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.

connect "DSN=ha_ds";
Connection successful: DSN=ha_ds;UID=oracle;DataStore=/u01/app/datastore/ha_ds;
DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=US7ASCII;
DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;
PermSize=40;TempSize=32;TypeMode=0;
(Default setting AutoCommit=1)
Command> create user adm identified by adm;
User created.
Command> grant ADMIN to adm;
Command> create user app identified by app;
User created.
Command> grant create session, create table to app;
Command> exit;
Disconnecting...
Done.
[oracle@rac1 ~]$
После этого соединяемся с базой данных под пользователем app и создаем таблицу plans.
[oracle@rac1 ~]$ ttisql "DSN=ha_ds;UID=app;PWD=app"

Copyright (c) 1996-2009, Oracle.  All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.
connect "DSN=ha_ds;UID=app;PWD=app";
Connection successful: DSN=ha_ds;UID=app;DataStore=/u01/app/datastore/ha_ds;
DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=US7ASCII;
DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;
PermSize=40;TempSize=32;TypeMode=0;
(Default setting AutoCommit=1)
Command> create table plans ( Id  number(12),
       >                      Name        varchar(32 char),
       >                      PricePerMin binary_double,
       >                      Status      char(3 char),
       >                      primary key (Id) );
Command> exit;
Disconnecting...
Done.
[oracle@rac1 ~]$

Конфигурирование Active-Standby pair репликации и Oracle Clusterware

После того, как установка Oracle Clusterware и Oracle TimesTen завершена, база данных в Oracle TimesTen создана, можно приступать к конфигурации Active-Standby pair репликации.

В данном примере описывается создание простой конфигурации (basic level of availability).

Вначале добавим сущность в cluster.oracle.ini в котором пропишем узлы на которых будет запущена репликация и директория для скриптов (check, start, stop для определенной репликации) для CRS-са.
…
[ha_ds]
MasterHosts=rac1,rac2
ScriptInstallDir=/u01/app/oracle/product/11.2.1/TimesTen/tt1/info/crs_scripts
… 
Теперь нужно повторить настройки cluster.oracle.ini и sys.odbc.ini на втором узле. 
Далее регистрируем TimesTen кластер в OCR.
[root@rac1 ~]$ cd /u01/app/oracle/product/11.2.1/TimesTen/tt1/bin/
[root@rac1 bin]$ ./ttCWAdmin -ocrconfig
Oracle Clusterware home = /u01/app/oracle/product/11.1.0/crs
Запускаем агенты кластера TimesTen на обоих узлах.
[root@rac1 bin]$ ./ttCWAdmin -init
Oracle Clusterware home = /u01/app/oracle/product/11.2.1/crs, hosts = rac1,rac2
===============================================================
Registering agent resources:... Registration complete.
===============================================================
===============================================================
Registering daemon resources:... Registration complete.
===============================================================
[root@rac1 bin]$
После этого в CRS должны появиться четыре новых сервиса
[oracle@rac1 ~]$ crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
TT_A...le_RAC1 application    ONLINE    ONLINE    rac1
TT_A...le_RAC2 application    ONLINE    ONLINE    rac2
TT_D...le_RAC1 application    ONLINE    ONLINE    rac1
TT_D...le_RAC2 application    ONLINE    ONLINE    rac2
ora.rac1.gsd   application    ONLINE    ONLINE    rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
[oracle@rac1 ~]$
[oracle@rac2 ~]$ crs_stat
…
NAME=TT_Agent_tt1_oracle_RAC1
TYPE=application
TARGET=ONLINE
STATE=ONLINE on rac1

NAME=TT_Agent_tt1_oracle_RAC2
TYPE=application
TARGET=ONLINE
STATE=ONLINE on rac2

NAME=TT_Daemon_tt1_oracle_RAC1
TYPE=application
TARGET=ONLINE
STATE=ONLINE on rac1

NAME=TT_Daemon_tt1_oracle_RAC2
TYPE=application
TARGET=ONLINE
STATE=ONLINE on rac2
...
Также видим новые процессы на обоих узлах.
[oracle@rac2 ~]$ ps -ef | grep ttCRS
oracle    5007     1  0 13:18 ?        00:00:00 /u01/app/oracle/product/11.2.1/TimesTen/tt1/bin/ttCRSdaemonCmd start
oracle    5008     1  0 13:18 ?        00:00:00 /u01/app/oracle/product/11.2.1/TimesTen/tt1/bin/ttCRSAgentCmd start
Теперь создаем Active-Standby pair репликацию. Данную репликацию можно создать двумя способами: используя команду create active standby pair replication или с помощью ttCWAdmin, но не обоями сразу!!! В данном случае создавать и управлять репликацией будем с помощью ttCWAdmin. При вводе имени пользователя с привелегией ADMIN вводим имя пользователя adm (создан на этапе создания базы данных и объектов).
[root@rac1 bin]$ ./ttCWAdmin -create -dsn ha_ds
Successful connection with Oracle clusterware stack
replication DDL = create active standby pair "HA_DS" on "rac1","HA_DS" on "rac2"

Enter internal UID with ADMIN privileges: adm
Enter password for the same UID:
Enter any phrase for password encryption:
Uid/Pwd verified on host rac1
Create active standby pair scheme on this host? (Y/N)Y
Waiting for confirmation from hosts...
Active Standby pair created on host rac1
==================================================================
Warning!! Data store on host(s) rac2 may be destroyed in order to be duplicated from active after the roll out.
Please back up this data store manually if necessary, before executing
ttCWAdmin -start Command
==================================================================
Registering TimesTen Cluster with Oracle Clusterware
==================================================================
Number of unregistered dsn resources = 2
Registering dsn resources:... Registration complete.
==================================================================
==================================================================
Number of unregistered service resources = 2
Registering service resources:... Registration complete.
==================================================================
[root@rac1 bin]$
После этого в CRS появятся еще четыре сервиса, связанные непосредственно с репликацией HA_DS. Также можно увидеть что два из них не запущены - имеют статусы OFFLINE.
[oracle@rac1 info]$ crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
TT_A...e_HA_DS application    ONLINE    ONLINE    rac1
TT_A...le_RAC1 application    ONLINE    ONLINE    rac1
TT_A...le_RAC2 application    ONLINE    ONLINE    rac2
TT_D...le_RAC1 application    ONLINE    ONLINE    rac1
TT_D...le_RAC2 application    ONLINE    ONLINE    rac2
TT_M...HA_DS_0 application    OFFLINE   OFFLINE
TT_M...HA_DS_1 application    OFFLINE   OFFLINE
TT_S...e_HA_DS application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    ONLINE    ONLINE    rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
[oracle@rac1 info]$
[oracle@rac2 ~]$ crs_stat
...
NAME=TT_Activeservice_tt1_oracle_HA_DS
TYPE=application
TARGET=ONLINE
STATE=ONLINE on rac1

NAME=TT_Master_tt1_oracle_HA_DS_0
TYPE=application
TARGET=OFFLINE
STATE=OFFLINE

NAME=TT_Master_tt1_oracle_HA_DS_1
TYPE=application
TARGET=OFFLINE
STATE=OFFLINE

NAME=TT_Subservice_tt1_oracle_HA_DS
TYPE=application
TARGET=ONLINE
STATE=ONLINE on rac1
...
Также, после этого в директории, прописанной в файле конфигурации репликации (cluster.oracle.ini) появяться ряд файлов для CRS(start, stop, check) для определенной репликации.
[oracle@rac2 crs_scripts]$ ls
...
ora_tt_tt1_HA_DS_master_1.sh
ora_tt_tt1_HA_DS_master_0.sh
ora_tt_tt1_HA_DS_activeservice.sh  
ora_tt_tt1_HA_DS_subservice.sh
Теперь посмотрим состояние нашей репликации.
[root@rac1 bin]# ./ttCWAdmin -status
TimesTen Cluster status report as of Wed Apr 14 17:00:19 2010

====================================================================
TimesTen daemon monitors:
Host:RAC1 Status: online
Host:RAC2 Status: online

====================================================================
====================================================================
TimesTen Cluster agents
Host:RAC1 Status: online
Host:RAC2 Status: online

====================================================================


Status of Cluster related to DSN HA_DS:
====================================================================
1. Status of Cluster monitoring components:
Monitor Process for Master Datastore 1 on Host RAC1: NOT RUNNING
Monitor Process for Master Datastore 2 on Host RAC2: NOT RUNNING
Monitor Process for Active datastore:RUNNING on Host rac1
Monitor Process for Standby datastore:RUNNING on Host rac1

2.Status of  Datastores comprising the cluster
Master Datastore 1:
Host:RAC1
Status:AVAILABLE
State:ACTIVE
Master Datastore 2:
Host:RAC2
Status:UNAVAILABLE
State:UNKNOWN
====================================================================
The cluster containing the replicated DSN is offline
Видим также, что агенты кластера Oracle TimesTen запущены, репликация существует, но она не запущена.
Ну и теперь запустим нашу реприкацию.
[root@rac1 bin]$ ./ttCWAdmin -start -dsn ha_ds
Successful connection with Oracle clusterware stack
Starting Cluster resources with Oracle clusterware
TimesTen Cluster is starting
[root@rac1 bin]$
Проверим статусы репликации.
[root@rac1 bin]$ ./ttCWAdmin –status
TimesTen Cluster status report as of Sat Feb 27 14:49:00 2010
==================================================================
TimesTen daemon monitors:
Host:RAC1 Status: online
Host:RAC2 Status: online

==================================================================
==================================================================
TimesTen Cluster agents
Host:RAC1 Status: online
Host:RAC2 Status: online

==================================================================
Status of Cluster related to DSN HA_DS:
==================================================================
1. Status of Cluster monitoring components:
Monitor Process for Master Datastore 1 on Host rac1: RUNNING
Monitor Process for Master Datastore 2 on Host rac2: RUNNING
Monitor Process for Active datastore:RUNNING on Host rac1
Monitor Process for Standby datastore:RUNNING on Host rac2

2.Status of  Datastores comprising the cluster
Master Datastore 1:
Host:rac1
Status:AVAILABLE
State:ACTIVE
Master Datastore 2:
Host:rac2
Status:AVAILABLE
State:STANDBY
==================================================================
The cluster containing the replicated DSN is online
Как видно реплицируемая база данных находиться в состоянии online. Состояние узлов в состояниях Active и Standby. Проверим CRS.
[oracle@rac2 info]# crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
TT_A...e_HA_DS application    ONLINE    ONLINE    rac1
TT_A...le_RAC1 application    ONLINE    ONLINE    rac1
TT_A...le_RAC2 application    ONLINE    ONLINE    rac2
TT_D...le_RAC1 application    ONLINE    ONLINE    rac1
TT_D...le_RAC2 application    ONLINE    ONLINE    rac2
TT_M...HA_DS_0 application    ONLINE    ONLINE    rac1
TT_M...HA_DS_1 application    ONLINE    ONLINE    rac2
TT_S...e_HA_DS application    ONLINE    ONLINE    rac1
ora.rac1.gsd   application    ONLINE    ONLINE    rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
[oracle@rac1 info]#
Как видно, все сервисы находяться в рабочем состоянии.
На этом конфигурация Active-Standby pair репликации завершено.
Теперь если мы будем вносить изменения на Активном узле, все эти изменения будут передаваться на standby, причем standby открыт на чтение.
При возникновении сбоя на основном узле, CRS достаточно быстро (одной командой) переведет standby в состояние active, после чего пользователи смогут продолжить работу. Рассмотрение возможности client failover будут рассмотрены в следующих статьях.

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