Июль/Август 2003


Тема номера: Oracle и Linux


Вим Коекаертс

Установка Linux с разделяемой
FireWire-памятью для Oracle9i RAC

(Setting Up Linux with FireWire-Based Shared Storage for Oracle9i RAC, by Wim Coekaerts)

Источник: журнал "Oracle Magazine", раздел "Online Only Articles", 2003, http://otn.oracle.com/oramag/webcolumns/2003/
techarticles/coekaertsfirewiresetup.html

[От редакции OM/RE: История возникновения FireWire, высокоскоростной последовательной шины, обеспечивающей "горячее" подключение до 63 устройств, обеспечивая при этом полную поддержку принципа Plug-and-Play, излагается в этом номере журнала в статье “История возникновения FireWire”. ]

Если вы хотите для исследования и тестирования базы данных Oracle RAC (Real Application Clusters) построить двух узловой Linux-кластер, на котором будет задействован механизм FireWire, то настоящая статья может быть использована как руководство при начальных (QuickStart) действиях по его инсталляции и конфигурации. Но сначала необходимо сделать следующее предупреждение: в настоящее время ни Oracle, ни какой-либо другой поставщик не поддерживают этот патч (patch - заплата, исправление); он предназначен только для демонстрации и тестирования.

Следуя инструкциям этого руководства, вы проведете инсталляцию базы данных Oracle и выполните модификацию ядра (пропатчируете его), чтобы сконфигурировать Linux с опцией FireWire, с тем же успехом, как если бы инсталлировалась и конфигурировалась кластерная файловая системы Oracle (OCFS - Oracle Cluster File System) на устройстве с разделяемой FireWire-памятью. Oracle-кластер RAC использует разделяемую память в сочетании с многоузловым расширением базы данных, что обеспечивает масшабируемость (scalability) и отказоустойчивость (failover).

Обычно используемые для разделяемой памяти аппаратные средства (волоконный канал - a fibre-channel system) дороги [от ред. OM/RE: здесь автор делает ссылку на другую свою статью, которую мы также публикуем в этом выпуске журнала]. Однако, как только установлен этот патч ядра, Вы встали на путь создания Linux-кластера, всполне подходящего, чтобы ваша команда разработчиков провела тестирование демо версии и QA (quality assurance контроль качества) решения, которое стоит значительно меньше, чем традиционные.

Этот патч доступен Linux и сообществу открытых исходников (open source community) согласно GNU GPL (General Public License - общедоступная лицензия). Вы можете загрузить его со страницы Linux Open Source Projects (/technology/tech/linux/open_source.html ) или в разделе Community Code на OTN ( /technology/sample_code/commcode.html). (Для большей информации см. врезку "Инструментарий".)

Двух узловая тестовая конфигурация

Рисунок 1. Двух узловой Linux-кластер с разделяемым FireWire-диском

Следуя этому руководству, Вы установите пропатчированное ядро на каждой машине, которая станет узлом кластера. Основной вариант тестовой конфигурации, как показано на Рисунке 1: две машины, соединенных 10Base-T сетью, каждая машина связана с FireWire-диском, используемого для разделяемой памяти.

Если Вы ранее не использовали FireWire на какой-либо машине, убедитесь, что в каждой машине установлено и сконфигурировано FireWire-межсоединение (interconnect) и проверьте это же для FireWire-диска или другого устройства прежде, чем Вы начнете. Надо удостовериться, что базовая система работает. Межсоединения FireWire, которые мы проверили, построены на микросхемах от Texas Instruments (TI - один из соавторов спецификации IEEE, на которой базируется FireWire). Мы использовали Western Digital External FireWire (IEEE 1394) 120GB диск.

Таблица 1 перечисляет минимальные аппаратные требования для узлов двух узлового кластера, а также некоторые дополнительные требования для кластеров из большего число узлов. Вы можете использовать стандартный (портативный) лаптоп, оборудованный PCMCIA FireWire-картой на любом из узлов кластера. Мы успешно тестировали лаптоп-кластер, проведя тот же самый инсталляционный процесс, что описан в этой статье.

Как показано в Таблице 1, для кластера, больше чем из двух узлов, нужно добавить 4-5 портовый FireWire-концентратор, чтобы обеспечить подключения дополнительных машин к диску. Следует подсоединить каждый Linux-узел и FireWire-диск к портам концентратора. Без концентратора не возможно использовать всю длину кабельной шины.

В этой статье приведены команды конфигурации двух узлового кластера. Чтобы создать кластер большим числом узлов, каждый дополнительный узел (узел 3, узел 4) конфигурируется, повторяя сделанные шаги для каждого из дополнительных узлов. Также необходимо убедиться, что выполнено следующее:

  • модифицирован синтаксис команд или файлы сценариев, чтобы объявить для каждого узла номер, имя машины и другие специфичные для него детали.
  • для каждого дополнительного узла создать дополнительный набор журнальных файлов и табличные пространства отката (undo tablespaces) в разделяемой памяти.

Наши модифицированные FireWire-драйверы пока нельзя , чтобы использовать для построения кластера, больше чем четырех узлов.

Шаг 1: Загрузите все, что может пригодиться

До начала основных действий следует потратить кое-какоее время и загрузить с OTN все программное обеспечение, в котором Вы будете нуждаться. Если Вы не являетесь членом OTN, следует сначала к OTN присоединиться. Это делается свободно и бесплатно.

Имейте в виду, что патчи FireWire-драйвера для ядра Linux являются на деле открытыми исходниками. Пока Вы придерживаетесь GPL-соглашений, Вы можете загрузить исходный текст и настроить его по своему совбственному усмотрению.

Обратитесь к врезке "Инструментарий" для ознакомления со списком программного обеспечения, которое Вы должны загрузить и иметь в наличии до начала процесса конфигурации.

Шаг 2: Инсталляция Linux

Как только Вы загрузили или купили дистрибутив Red Hat Linux Advanced Server 2.1 (или другой дистрибутив, который способен работать с базой данных Oracle9i, Release 2), надо инсталлировать Linux на локальном жестком диске каждого узла (это займет примерно 25 минут на узел). Мы сохраним основные параметры конфигурации, но Вы должны ксонфигурировать одну из сетевых карт на каждой машине для внутренней LAN (она обеспечивает межсоединение (interconnect) между узлами кластера), например:

hostname: node1
ip address: 192.168.1.50

hostname: node2
ip address: 192.168.1.51

Поскольку эта LAN - внутренняя, нет надобности "в реальных" IP-адресах. Надо только удостовериться, что эти соединения в любой из машин проходят через “живую” сеть, IP-адреса не находятся в противоречии с таковыми же на других машинах. Также надо убедиться, что загружая требуемое программное обеспечение до конфигурации внутренный сети, Вы не конфигурировали или не имели вторых сетевых интерфейсных карт (NIC - network interface card) в машинах.

Шаг 3: Инсталляция базы данных Oracle9i

Если Вы еще этого не сделали, нужно загрузить ПО базы данных Oracle9i Release 2 (9.2.0.1.0) для Linux с OTN TechTracks

Для каждой машины-узла кластера надо сделать следующее:

  • Создать точку монтирования, /oracle/home, для файлов ПО Oracle на локальном жестком диске каждой машины.
  • Создать нового пользователя, oracle (в группе или dba или oracle), с /home/oracle на каждой машине.
  • Универсальный Инсталлятор Oracle (Oracle Universal Installer) с CD или точки монтирования на локальном жестком диске, где Вы скопировали инсталляционные файлы; то есть, введите команду runInstaller. Инсталлятор Oracle выдаст меню.
  • В этом меню выберите Cluster Manager, как первый продукт инсталляции и инсталлируйте его с только его собственным именем узла, пока как общий (public) и частный (private) узел. Cluster Manager занимает всего несколько мегабайтов, поэтому его инсталяция займет одну-две минуты.
  • Когда эта инсталляция закончится, надо выйти из Oracle Universal Installer и заново его стартовать (используя скрипт runInstaller). Теперь выберите опцию инсталляции базы данных и сделайте полную инсталляцию только программного обеспечения (не создавая базы данных).

Шаг 4: Конфигурация FireWire (IEEE 1394)

Если Вы еще этого не сделали, загрузите пропатчированный файл ядра Linux (fw-test-kernel-2.4.20-image.tar.gz) с Community Code ( OTN’s Community Code area) на OTN.

Предполагая, что файл fw-test-kernel-2.4.19-image.tar.gz уже имеется на каждом узле в точке монтирования root, надо выполнить следующее:

  • Подключиться к каждой машине, как пользователь root и выполнить три команды для декомпрессии и распаковки файлов, которые включают модули:
cd /
tar zxvf /fw-test-kernel-2.4.19-image.tar.gz
modify /etc/grub.conf

Если Вы используете утилиту-загрузчик lilo, а не grub, замените grub.conf в последнем предложении предыдущего текста на /etc/lilo.conf.

  • В конце файла /etc/grub.conf или /etc/lilo.conf добавьте имя нового ядра:
title FireWire Kernel (2.4.19)
      root (hd0,0)
      kernel /vmlinuz-2.4.19 ro root=/dev/hda3
  • Теперь перезагрузите систему, используя это ядро на обоих узлах. Для упрощения процесса запуска с тем, чтобы ненадо было каждый раз изменять команды начальной загрузки, нужно добавить следующие инструкции к файлу /etc/modules.conf на каждом узле:
options sbp2 sbp2_exclusive_login=0
post-install sbp2 insmod sd_mod
post-remove sbp2 rmmod sd_mod

В процессе каждой системной начальной загрузки, надо загрузить FireWire-драйверы на каждом узле; например :

modprobe ohci1394
modprobe sbp2

Если используется команда dmesg (display messages from the kernel ring buffer – отображать сообщения из кольцевого буфера ядра), Вы увидите журнальное сообщение, подобное следующему:

Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
SCSI device sda: 35239680 512-byte hdwr sectors (18043 MB)
 sda: sda1 sda2 sda3

Это специфическое сообщение указывает, что ядро Linux распознало 18GB диск с тремя разделами.

В первый раз, когда Вы получаете доступ к FireWire-диску, выполните с одного из узлов команду fdisk и разделите диск по своему усмотрению. (Если оба узла имеют модули, каоторые были загружены, пока выполнялась команда fdisk на одном из них, необходимо перезагрузить другую систему или разгрузить и перезагрузить все FireWire- и SCSI- модули, чтобы удостовериться, что загружена новая таблица разделов.)

Шаг 5: Конфигуррирование OCFS

Мы настоятельно рекомендуем Вам использовать OCFS вместе с пропатчированным ядром, чтобы не пришлось разбивать диски вручную. Если Вы еще не сделали этого, загрузите прекомпилированные модули (fw-kernel-ocfs.tar.gz) с Community Code на OTN. (См. врезку "Инструментарий" для более подробной информации.)

Распакуйте это файл на каждом узле и запустите команду ocfsformat на одном из них, чтобы отформатировать файловую систему на разделяемом диске, как показано на следующем примере:

ocfsformat -f -l /dev/sda1 -c 128 -v ocfsvol
 -m /ocfs -n node1  -u 1011 -p 755 -g 1011

где:
  • 1011 – это UID и GID учетной записи Oracle,
  • 755 – это маска прав доступа к директории.
  • /dev/sda1 - раздел, который Вы захотели использовать,
  • -c 128 означает, что мы будем использовать размер кластера (cluster size) 128KB. Размер кластера может быть равен 4, 8, 16, 32, 128, 256, 512 или 1,024KB.

Как пользователь root, создайте на каждом узле /ocfs – точку монтирования директории.

Для того, чтобы сконфигурировать и загрузитьмодуль ядра на каждом узле, создайте конфигурационный файл /etc/ocfs.conf. Например:

ipcdlm:
      ip_address = 192.168.1.50 
      ip_port = 9999
      subnet_mask = 255.255.252.0
      type = udp
      hostname = node1 (on node2, put node2’s hostname here)
      active = yes

Убедитесь, что каждый узел имеет правильные значения IP-адресов, масок подсетей и имя узла. Предположим, что Вы используете конфигурацию примера: узел 1 использует IP-адрес 192.168.1.50; а на узле 2 - 192.168.1.51 .

Используйте команду insmod, чтобы загрузить OCFS-драйвер на каждом узле. Основной синтаксис команды:

insmod ocfs.o name=<nodename>

Например:

insmod /root/ocfs.o name=node1

Каждый раз при начальной загрузке системы модуль должен быть загружен на каждом узле, из которых состоит кластер.

Для того, чтобы смонтировать раздел OCFS введите следующую команду на каждом узле:

mount -t ocfs /dev/sda1 /ocfs

Терерь Вы получили разделяемую файловую систему, которой владееь пользователь oracle, которая смонтирована на каждом узле. Разделяемая файловая система будет использоваться для всех файлов [базы]: данных, журнала и управляющих. Модули были уже загружены, программное обеспечение базы данных Oracle было установлено.

Вы теперь готовы к заключительным шагам - конфигурированию ПО Cluster Manager и созданию базы данных. Чтобы упростить этот процесс, можно [заранее] создать небольшой сценарий (env.sh) в домашней директории Oracle, который определит среду следующим образом:

export ORACLE_HOME=/home/Oracle/9i
export ORACLE_SID=node1

export LD_LIBRARY_PATH=/home/Oracle/9i/lib
export PATH=$ORACLE_HOME/bin:$PATH

Вы можете сделать то же самое на втором узле, заменив только вторую строчку сверху, чтобы указать:

export ORACLE_SID=node2

Выполните (команда source) этот файл (env.sh), когда Вы входите (log in) в систему как oracle или root, или [включите его на выполнение] из скрипта .login.

Шаг 6: Конфигурирование Cluster Manager

Утилита Cluster Manager управляет состоянием узлов и экземпляров Oracle в кластере, она должна быть запущена на каждом его узле.

Зайдите как пользователь oracle или root в директорию $ORACLE_HOME/oracm/admin каждого узла и создайте или измените файлы cmcfg.ora и ocmargs.ora, как показано на Листинге 1.

Листинг 1: Новый вид файлов cmcfg.ora и ocmargs.ora

# cmcfg.ora
HeartBeat=10000
ClusterName=Oracle Cluster Manager, version 9i
PollInterval=300
MissCount=20

PublicNodeNames=node1 node2
ServicePort=9998 
WatchdogSafetyMargin=3000
WatchdogTimerMargin=6000
HostName=node1

#ocmargs.ora
# Sample configuration file $ORACLE_HOME/oracm/admin/ocmargs.ora
watchdogd -d /dev/null -l 0
oracm /a:0

Необходимо удостовериться, что параметр HostName задан правильно в файле cmcfg.ora для данной машины. То есть, Узел 1 содержит файл с node1, а Узел 2 - node2.

Перед стартом базы данных надо проверить, что утилита Cluster Manager запущена. Для удобства следует добавить [запуск] Cluster Manager в rc-скрипт. Как пользователь oracle или root на каждом узле, установите переменные среды Oracle (source env.sh):

cd $ORACLE_HOME/oracm/bin

./ocmstart.sh

Файл ocmstart.sh - это типовой сценарий запуска демон-процесса Watchdog и утилиты Cluster Manager.

Шаг 7: Конфигуррирование файла init.ora и создание базы данных Oracle

Листинг 2 содержит пример файла init.ora в директории $ORACLE_HOME/dbs. Его можно использовать для созданания на сответствующих узлах файлов initnode1.ora и initnode2.ora, заменяя, естественно, node1 на node2 в приведенном листинге.

Теперь следующим образом нужно создать директории для журнальных файлов на Узле 1:

cd $ORACLE_HOME
mkdir admin ; cd admin ; mkdir node1 ; cd node1 ;
 mkdir udump ; mkdir bdump ; mkdir cdump

Для Узла 2 надо сделать то же самое заменив в этом примере node1 на node2.

Сделайте на каждом узле линк-ссылку на парольный (password) файл Oracle (эти файлы могут еще не существовать):

cd $ORACLE_HOME/dbs
ln -sf /ocfs/orapw orapw 

Теперь, когда прописана вся обстановка, на следующем шаге уже можно создать базу данных. Чтобы упростить этот процесс, следует использовать скрипт оболочки (create.sh), приведенный на Листинге 3. Убедитесь, что Вы [собираетесь] выполнить этот скрипт только на Узле 1 и только однократно. Выполните этот скрипт как пользователь oracle, и если все прошло успешно, то Вы создли базу данных, добавили второе табличное пространство отката (undo) и вторую цепочну (thread) журнальных файлов.

Вы можете стартовать базу дангных на любом узле кластера следующим образом:

sqlplus ’/ as sysdba’

startup

Наконец, необходимо сконфигурировать Oracle-листенер (listener) в директории $ORACLE_HOME/network/admin/listener.ora, и также как обычно на обоих узлах стартовать его.

У Вас все установлено правильно!


Wim Coekaerts ( wim.coekaerts@oracle.com ) ведущий сотрудник отдела развития корпоративной архитектуры ( Corporate Architecture, Development). Его группа работает над дальнейшими расширениями ядра Linux, публикуя исходные тексты под гидой GPL в разделе Community Code на OTN. Для получения большей информации об Oracle и Linux рекомендуется посетить OTN Linux Center (/technology/tech/linux/index.html ) и Linux Forum.


 

Инструментарий

Если Вы только знакомитесь с Linux и Oracle, не стоит начинать с построения кластера. Эта статья кратка и не обеспечивает детальные, методичные команды для новичков. Вы должны быть хорошо знакомы с операционной системой UNIX и процедурой инсталляции базы данных Oracle в среде UNIX. Вам потребуются все элементы программного обеспечения и оборудования, перечисленные в этом списке:

  • ЭЮ База данных Oracle9i Release 2 (9.2.0.1.0) для Linux (Intel). Загрузите версию Enterprise Edition, которая требуется для работы Oracle RAC.
  • Дистрибутив Linux. Мы рекомендуем Red Hat Linux Advanced Server 2.1, но можно использовать Red Hat 8.0, свободно распространяемый Red Hat. (Однако, пожалуйста, обратите внимание, что Red Hat не поддерживает разгружаемую [свобобно] версию.)
  • Патч ядра Linux для поддержки FireWire-драйвера, доступного в секции Firewire Patches. (Обратите внимание, что мы постоянно их обновляем, так что точное название, возможно, уже изменилось.)
  • Кластерная файловая система OCFS для Linux. OCFS – не требуется в обязательном порядке, но мы рекомендуем ее использовать для упрощения инсталляции и каонфигурвации памяти кластера. Имя требуемого - fw-kernel-ocfs.tar.gz.
  • Два персональных Intel-комппьютера.
  • По две сетевые карты (NIC) на каждой машире (хотя нас интересует только построение внутренней локальной сети (LAN), которая обеспечивает тактовую коммуникацию (heartbeat – букв. "биение сердца”) между узлами кластера).
  • Две карты межсоединения (interconnect) FireWire.
  • Один большой FireWire-диск для разделяемой памяти.

В дополнение к этому QuickStart (руководство “быстрого старта”) Вам следует также обратиться к документации поддержки, особенно к следующим материалам:

 Таблица 1: Опись оборудования для FireWire-кластера

Рекомендуемое оборудование: Особенности Вашей конфигурации:
Минимально для узла Узел 1 Узел 2
Минимум CPU 500 MHz (Celeron, AMD, Pentium)
Минимум RAM 256 MB
Локальный жесткий диск (свободная память) 3 GB
Карта FireWire 1 (TI chipset)
Сетевая интерфейсная карта 2 (1 for node interconnect; 1 for public network)
Минимально для кластера: Особенности Вашей конфигурации:
Жесткий FireWire-диск 1 300-GB
4-портовый FireWire hub Требуется для 3-узлового кластера
5-портовый FireWire hub Требуется для 4-узлового кластера

E-mail this page