Автор: Худяков Андрей
Тема: Обеспечение высокой доступности сервера EM Grid Control
Источник: Russian Oracle User Group
Номер документа: 6.1
Дата публикации: 23.06.2009
Последнее изменение: 23.06.2009


В документе Note 405642.1 представленна инструкция, которая описывает конфигурацию OMS Grid Control в среде Active/Passive используя виртуальный хост и разделяемы диски.
Цель данной работы является реализация OMS Grid Control в среде Active/Passive, используя методы отказоустойчивости, предоставляемые Oracle Clusterware, при этом не используя разделяемые диски.

В качестве платформы использована ОС Enterprise Linux Server release 5.3, на которую установлен Oracle RAC 10.2.0.4 c использование ASM. Кластерная среда после установки имеет следующие параметры

			Node1			Node2
Name			Cluster1		Cluster2
Public IP 		10.1.11.234		10.1.11.235
Virtual name		Cluster1-vip		Cluster2-vip
Virtual IP		10.1.11.239		10.1.11.240
Private name		Cluster1-priv		Cluster2-priv
Private IP		10.1.10.210		10.1.10.211
Установка и настройка OMS

Перед тем, как преступить к установке ОМS, "создадим" виртуальный IP-адрес (cluster-vip 10.1.11.236), который буде служить "реальным хостом" для ОМС. Для обеспечения отказоустойчивости cluster-vip, создадим профиль для ресурса, который будет контролировать виртуальный IP, используя команду crs_profile.

-bash-3.2$  crs_profile -create oms_ip -t application -a /u01/app/crs/bin/usrvip -o oi=eth0,ov=10.1.11.236,on=255.255.255.0
Команда создаст файл oms_ip.cap в директории $ORA_CRS_HOME/crs/public с параметрами, которые будут нужны для регистрации ресурса oms_ip. Проверяем на наличие и соответствующие права
-bash-3.2$ ls -la /u01/app/crs/crs/public/oms_ip.cap
-rw-r--r-- 1 oracle oinstall 771 May 22 16:03 /u01/app/crs/crs/public/oms_ip.cap
Параметры команды следующие:
/u01/app/crs/bin/usrvip -  определяет, каким скриптом будет контролироваться сетевой интерфейс
oi=eth1,ov=192.168.23.20,on=255.255.255.0 - определяют параметры интерфейса.
После конфигурации регистрируем ресурс
bash-3.2$  crs_register oms_ip
После регистрации ресурса изменяем владельца ресурса, а также даем права на выполнение данного «скрипта» пользователю oracle. (as root)
bash-3.2$  $ORA_CRS_HOME/bin/crs_setperm oms_ip  -o root 
bash-3.2$  $ORA_CRS_HOME/bin/crs_setperm oms_ip -u user:oracle:r-x 
После того, как ресурс зарегистрирован, необходимо перенести конфигурационные файлы на остальные ноды кластера.
bash-3.2$ scp  $ORA_CRS_HOME/crs/public/* cluster2:$ORA_CRS_HOME/crs/public/
Далее стартуем ресурс на ноде cluster1
bash-3.2$  crs_start oms_ip -с cluster1

Attempting to start `oms_ip` on member `cluster2`
Start of `oms_ip` on member `cluster2` succeeded.. 
The resource is started. 
После того, как cluster-vip поднят, подсоединяемся к этому адресу, и устанавливаем OMS.
В качестве хоста, на которой расположена БД репозитория, указываем cluster1-vip. После того как, установка OMS и агента завершена, останавливаем сервисы агента и OMS.
bash-3.2$  $AGENT_HOME/bin/emctl stop agent
bash-3.2$  $OMS_HOME/opmn/bin/opmnctl stopall
После успешной остановки производим обновление OMS до 10.2.0.5 (optional) , а так же производим удаление агента, который был установлен вместе с OMS. После обновления опять останавливаем все сервисы OMS. После того как все операции на Cluster1 завершены, «опускаем» cluster-vip и поднимаем его на ноде Cluster2.
bash-3.2$ crs_relocate oms_ip
Далее опять подсоединяемся к cluster-vip и устанавливаем Additional OMS (чтобы не уничтожить уже существующий репозиторий). В качестве хоста, на котором расположена БД репозитория, указываем cluster2-vip. После того как, установка OMS и агента завершена, останавливаем сервисы агента и OMS.

После успешной остановки производим обновление OMS до 10.2.0.5(Additional и Main OMS должны быть одной версии) , и производим удаление агента, который был установлен вместе с OMS. После обновления опять останавливаем все сервисы OMS. После того, как OMS успешно установлен на обоих нодах кластера, необходимо реконфигурировать secure OMS на виртуальный хост (cluster-vip) используя команду

bash-3.2$  emctl secure oms -sysman_pwd _sysman_pwd -reg_pwd _agent_reg_pwd - host _slb_full_name -secure_port _port_num 

_sysman_pwd 	- пароль пользователя SYSMAN
_agent_reg_pwd 	- пароль для доступа к https-порту OMS для агента
_slb_full_name 	- виртуальный хост (cluster-vip)
_port_num 	- порт для https доступа
Данную команду необходимо запустить поочередно на каждой из нод, предварительно подняв на ней cluster-vip и запустив OMS ($OMS_HOME/opmn/bin/opmnctl startall).
То есть, выполняем следующие шаги:
1. bash-3.2$  shh oracle@cluster1
2. bash-3.2$  crs_relocate oms_ip #последний раз ресурс был поднят на ноде cluster2
3. bash-3.2$  $OMS_HOME/opmn/bin/opmnctl startall
4. bash-3.2$  emctl secure oms -sysman_pwd _sysman_pwd -reg_pwd _agent_reg_pwd -host cluster-vip -secure_port 1159
5. bash-3.2$  $OMS_HOME/opmn/bin/opmnctl stopall
6. bash-3.2$  crs_relocate oms_ip
7. bash-3.2$  shh oracle@cluster2
8. ………(пункты 3, 4)
После того, как OMS переконфигурирован на виртуальный хост, устанавливаем на ноды Cluster1 и Cluster2 агентов (в Local installation), и в качестве хоста OMS указываем cluster-vip.

Регистрация OMS в Clusterware

Создадим профиль для регистрации сервисов OMS

bash-3.2$   crs_profile -create oms-grid -t application -B $OMS_HOME/opmn/bin/opmn -d \ 
"OMS Grid Control" -r oms_ip  -p favored -h "cluster1 cluster2" -a oms.scr -o ci=30,ra=5,st=200
После создания профиля, в папке $ORA_CRS_HOME/crs/public появился файл oms.scr, который генерируется автоматически CRS-ом из шаблона при условии указания параметра -В Редактируем oms.scr следующим образом

export OMS_HOME=.... #указываем полный путь к OMS home

PROBE_PROCS="HTTP_Server home OC4J_EMPROV OC4J_EM OCMRepeater WebCache WebCacheAdmin" # перечень копонентов, необходимых для функционирования OMS
  
START_APPCMD="$OMS_HOME/opmn/bin/opmnctl startall" #необходимо прописать полный путь без переменных
  
STOP_APPCMD="$OMS_HOME/opmn/bin/opmnctl stopall" #необходимо прописать полный путь без переменных

#-- закоментируем дефолтную функцию getpid и определим собственную
#getpid () {
#    if [ -n "$1" ]; then
#        GETMYPID=$1
#        shift
#        /bin/ps -e -o pid,comm | while read mypid command args
#        do
#           if [ "$command" = "$GETMYPID" ]; then
#                echo "$mypid"
#            fi
#        done
#    fi
#}

getpid () {
 if [ -n "$1" ]; then
        process=$1
                pid=`$OMS_HOME/opmn/bin/opmnctl status  process-type=$process -fmt %pid -noheaders | tr -d ' '`
                echo "$pid"
 fi
}

#-- функцию checkdaemon также закоментируем. Вместо нее будет использоваться фунция checkprocess

#checkdaemon () {
#    R=`getpid $1 | wc -l`
#    return $R
#}


checkprocess ()
{
proc=$1
comp=`$OMS_HOME/opmn/bin/opmnctl status  process-type=$proc -fmt %prt%sta -noheaders`
case "$comp" in
  "$proc | Alive" ) R=0 ;;
  "$proc | Down"  ) R=1 ;;
  *) R=666 ;;
esac
return $R
}

# функцию zapdaemon отредактируем основываясь на изменениях, внесенных ранее

zapdaemon () {
    typeset ret=0

    for i in ${1}
    do
		#checkdaemon ${i}
	checkprocess ${i}
		#if [ $? -ne 0 ]; then
        if [ $? -eq 0 ]; then
            kill `getpid ${i}`
		#checkdaemon ${i}
            checkprocess ${i}
		#if [ $? -ne 0 ]; then
            if [ $? -eq 0 ]; then
                kill -9 `getpid ${i}`
			#checkdaemon ${i}
		checkprocess ${i}
			#if [ $? -ne 0 ]; then
                if [ $? -eq 0 ]; then
                    postevent $ERROR_PRIORITY "${i}: stuck - could not kill -KILL"
                    ret=1
                else
                    postevent $ERROR_PRIORITY "${i}: killed with -KILL"
                fi
            else
                postevent "" "${i}: killed"
            fi
        fi
   done
    return $ret
}

# функцию probeapp так же отредактируем

probeapp () {
    #checkdaemon $1 
    checkprocess $1
#if [ $? -ne 0 ]; then
if [ $? -eq 0 ]; then 
        postevent $DEBUG_PRIORITY "$1 check OK"
        return 0
    else
        postevent $DEBUG_PRIORITY "$1 check failed"
        return 1
    fi
}



После регистрируем oms-grid
bash-3.2$   crs_register oms-grid
И изменяем права и владельца ресурса
bash-3.2$  $ORA_CRS_HOME/bin/crs_setperm oms-grid -o root 
  
bash-3.2$  $ORA_CRS_HOME/bin/crs_setperm oms-grid -u user:oracle:r-x 
После того, как ресурс зарегистрирован, необходимо перенести конфигурационные файлы на остальные ноды кластера.
bash-3.2$ scp  $ORA_CRS_HOME/crs/public/* cluster2:$ORA_CRS_HOME/crs/public/
Перед тем как предпринимать старт ресурса, необходимо что все сервисы ompn остановлены. То есть, необходимо выполнить $OMS_HOME/opmn/bin/opmnctl stopall на каждой ноде. Так же, предварительно можно «потушить» виртуальный хост cluster-vip После чего запускаtv ресурс oms-grid
bash-3.2$ crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
oms-grid       application    OFFLINE   OFFLINE
oms_ip         application    OFFLINE   OFFLINE
ora....P1.inst application    ONLINE    ONLINE    cluster1
ora....P2.inst application    ONLINE    ONLINE    cluster2
ora.REP.db     application    ONLINE    ONLINE    cluster2
ora....SM1.asm application    ONLINE    ONLINE    cluster1
ora....R1.lsnr application    ONLINE    ONLINE    cluster1
ora....er1.gsd application    ONLINE    ONLINE    cluster1
ora....er1.ons application    ONLINE    ONLINE    cluster1
ora....er1.vip application    ONLINE    ONLINE    cluster1
ora....SM2.asm application    ONLINE    ONLINE    cluster2
ora....R2.lsnr application    ONLINE    ONLINE    cluster2
ora....er2.gsd application    ONLINE    ONLINE    cluster2
ora....er2.ons application    ONLINE    ONLINE    cluster2
ora....er2.vip application    ONLINE    ONLINE    cluster2

bash-3.2$ crs_start oms-grid
Attempting to start `oms_ip` on member `cluster1`
Start of `oms_ip` on member `cluster1` succeeded.
Attempting to start `oms-grid` on member `cluster1`
Start of `oms-grid` on member `cluster1` succeeded.

bash-3.2$ crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
oms-grid       application    ONLINE    ONLINE    cluster1
oms_ip         application    ONLINE    ONLINE    cluster1
ora....P1.inst application    ONLINE    ONLINE    cluster1
ora....P2.inst application    ONLINE    ONLINE    cluster2
ora.REP.db     application    ONLINE    ONLINE    cluster2
ora....SM1.asm application    ONLINE    ONLINE    cluster1
ora....R1.lsnr application    ONLINE    ONLINE    cluster1
ora....er1.gsd application    ONLINE    ONLINE    cluster1
ora....er1.ons application    ONLINE    ONLINE    cluster1
ora....er1.vip application    ONLINE    ONLINE    cluster1
ora....SM2.asm application    ONLINE    ONLINE    cluster2
ora....R2.lsnr application    ONLINE    ONLINE    cluster2
ora....er2.gsd application    ONLINE    ONLINE    cluster2
ora....er2.ons application    ONLINE    ONLINE    cluster2
ora....er2.vip application    ONLINE    ONLINE    cluster2  


Дополнительные материалы: Пример управляющего скрипта