Установка и настройка DB2 под Linux для работы с 1С:Предприятием 8.1/8.2

Краткое содержание:

В статье даны подробные инструкции по установке и конфигурированию IBM DB2 при развертывании на операционной системе Linux для работы с 1С:Предприятием 8.1/8.2

Общие рекомендации:

    Инструкция по установке DB2 под Linux

    Все действия выполняются под пользователем root, если не сказано иное.


    Сначала необходимо настроить параметры ядра Linux для работы DB2.  Согласно документации для этого необходимо отредактировать /etc/sysctl.conf, чтобы он содержал следующие строки:

    kernel.msgmax=65535
    kernel.msgmnb=65535

    Также немаловажно сконфигурировать параметр kernel.shmmax, который отвечает за максимальный размер сегмента выделяемой памяти. Практика показала, что для приложений на базе платформы 1С:Предприятие критичным является размер оперативной памяти, использьзуемый в качестве кэша базы данных, т.е. занимаемый буферпулами. (Об устройстве и табличных пространств и буферпулов см. статью на developerWorks. Также рекомендуется прочитать статью о модели памяти DB2). В свою очередь, рост буферпулов приводит к тому, что при перезапуске базы данных DB2 для размещения буферпулов может запрашивать сегмент памяти большого объема, что значительно превосходит параметры конфигурации, указанные в документации.

    # Параметры конфигурации ядра, рекомендованные в документации

    # Это значение для Linux 64-bit
    kernel.shmmax=1073741824
    # Это значение
    для Linux 32-bit
    kernel.shmmax=268435456

     

    Рекомендуется установить значение максимального размера сегмента памяти равное 2Гб, т.е.

    kernel.shmmax=2147483648

    Для коммерческих редакций DB2 возможно его придется устанавливать даже в большую величину.

    После редактирования файла необходимо запустить

    sysctl -p

    Внесенные изменения вступили в силу.

    Приведенные выше значения - рекомендованны в документации по DB2. Опыт инсталляций 1С на DB2 показал, что размер сегмента памяти, который может запрашиваться разово, может превосходить рекомендованные значения.

    Рекомендации, независимо от разрядности операционной системы, выставить максимальный размер сегмента памяти равный 2Гб, т.е.следующие

    kernel.shmmax=2147483648

    Подробная информация о назначении этих параметров

    Данные настройки были проверены для следующих версий Linux:

    После этого можно приступать к установке DB2.

    Прежде чем начать инсталляцию, убедитесь, что у вас установлены пакеты обратной совместимости для libstdc++. В частности, для FC6 необходимы пакеты

    compat-libstdc++-33-3.2.3-61
    compat-libstdc++-296-2.96-138

    Можно также при установке Linux для "разработчика" выбрать поддержку старых программ, в этот раздел входят указанные пакеты.

    Берем архив с дистрибутивом DB2 и распаковываем его. Например :

    tar xfz db2exc_912_1Cspecial17705_LNX_x86_64.tar.gz
    cd exp/disk1

    Запускаем

    ./db2_install

    Принимаем по-умолчанию каталог установки (/opt/ibm/db2/V9.1)

    После чего ставим сам продукт (пишем в строке вопроса: EXP - т.е. DB2 Express)

    Создаем пользователей, необходимых для работы DB2

    useradd das
    useradd db2inst
    useradd db2fenc

    Внимание! При использовании Ubuntu по-умолчанию команда useradd не создает домашний каталог пользователя. Необходимо в командной строке указать ключ -m, чтобы этот каталог создавался автоматически:

    useradd -m das
    useradd -m db2inst
    useradd -m db2fenc
    cd /opt/ibm/db2/V9.1/instance

    Создаем DB2 Administration Server (DAS).

    ./dascrt das

    Сервер автоматически запустится от имени пользователя das

    Создаем экземпляр DB2, настроенный на работу через порт 50000 (порт DB2 по-умолчанию)

    ./db2icrt -u db2fenc -p 50000 db2inst

    su - db2inst

    Конфигурируем DB2 для работы с 1С

    db2set DB2_WORKLOAD=1C

    Запускаем экземпляр DB2

    db2start

    Возвращаемся в root через Ctrl-D (logout)

    Если необходимо, чтобы DB2 запускалась автоматчески при старте системы, выполняем команду:

    /opt/ibm/db2/V9.1/instance/db2iauto -on db2inst

    Установка и конфигурирование сервера 1С:Предприятия 

    Для начала необходимо установить 1С:Предприятие: 

    rpm -i *.rpm

    После этого необходимо добавить пользователя usr1cv81 в группу доступа, которая является основной для запущенного экземпляра DB2. Основную группу доступа можно получить при помощи команды:

    id db2inst

    При этом будет получена, например, следующая информация:

    uid=501(db2inst) gid=501(db2inst) groups=501(db2inst),500(das)  

    Это означает, что основной группой доступа для запущенного экземпляра DB2 является группа db2inst с идентификатором 501.

    Добавляем пользователя usr1cv81 в эту группу:

    usermod -G 501 usr1cv81

    На этом конфигурирование закончено.

    Более подробная информация по установке DB2

    Запуск 1С:Предприятия

    После того, как вы установили сервер 1С:Предприятия под Linux, при каждом перезапуске системы он будет стартовать автоматически. Но сразу после инсталляции сервер еще не запущен. При запуске системы автоматически запускается скрипт /etc/rc.d/init.d/srv1cv81 с параметром start, т.е. выполняется команда

    /etc/rc.d/init.d/srv1cv81 start

    Выполнив данную команду (от имени пользователя root), получаем примерно следующее:

    [root@rhel41c ~]# /etc/rc.d/init.d/srv1cv81 start

    Starting 1C:Enterprise 8.1 server:                         [  OK  ]

    [root@rhel41c ~]#

    Сервер запущен, и можно приступать к работе.

    Однако при попытке создания базы данных в DB2 появляется следующая ошибка:

    Модуль libdb2.so не найден

    Получается, что  сервер 1С:Предприятия не видит динамических библиотек DB2 и нам надо их как-то добавить в пути поиска.

    На этой проблеме остановимся более подробно, нежели просто опишем решение.

    Есть 2 варианта решения данной задачи.

    Вариант 1. Использовать файл /etc/ld.so.conf

    Вариант 2. Использовать переменную среды LD_LIBRARY_PATH (в подразделе Быстрая настройка используется именно этот вариант)

    Если хочетя в деталях понять как что работает, можете изучить детальное рассмотрение вариантов, приведенное ниже.

    Если не хотите забивать себе голову подробностями, то подраздел "Быстрая настройка" это ваше все :)

    Быстрая настройка

    Все параметры настройки среды для работы с DB2, в т.ч. и настройки LD_LIBRARY_PATH прописываются для каждого инстанса автоматически в файле ~db2inst/sqllib/db2profile, который и используется для настройки среды.

    Все, что вам надо сделать, чтобы настроить сервер 1С на тот или иной инстанс, добавить строку 

    . /home/db2inst/sqllib/db2profile
     в ~usr1cv81/.profile  

    После чего надо перезапустить сервер 1С.

    Таким образом, если у вас в системе (например, тестовой) есть 2 инстанса DB2, то перенастройка сервера 1С на тот или иной инстанс заключается в подключении соотвествующего файла db2profile, в профиль пользователя usr1cv81.

    Подсказка! Проще всего будет, если в качестве имени пользователя инстанса DB2 вы укажите не 'db2inst', a 'usr1cv81'. Почему? Догадайтесь сами! :-)

    А теперь более подробное рассмотрение вариантов.

    Вариант 1.

    Файл /etc/ld.so.conf служит для указания динамическому линковщику путей поиска динамических библиотек. Посмотрим на его содержимое.

    [root@rhel41c ~]# cat /etc/ld.so.conf
    include ld.so.conf.d/*.conf
    /usr/ofed/lib64
    [root@rhel41c ~]#
    Видим, что помимо самого ld.so.conf пути могут быть прописаны в файлах c расширением .conf в каталоге /etc/ld.so.conf.d/

    Нам надо добавить к путям поиска два каталога (один, в случае 32 битной установки). Занесем эти каталоги в новый файл /etc/ld.so.conf.d/db2.conf и сохраним его

    /opt/ibm/db2/V9.1/lib32
    /opt/ibm/db2/V9.1/lib64

    Для того, чтобы динамический линковщик обновил пути поиска, необходимо выполнить команду ldconfig.

    Теперь достаточно перезапустить сервер 1С:Предприятия и убедиться, что данный подход работает.

    Останавливаем сервер, используя уже известный нам скрипт

    [root@rhel41c ~]# /etc/rc.d/init.d/srv1cv81 stop
    Stopping 1C:Enterprise 8.1 server: ragent                  [  OK  ]
    [root@rhel41c ~]#

    И запускаем заново. Хотя можно было бы воспользоваться и командой скрипта restart

    [root@rhel41c ~]# /etc/rc.d/init.d/srv1cv81 restart
    Stopping 1C:Enterprise 8.1 server: ragent                  [  OK  ]
    Starting 1C:Enterprise 8.1 server:                         [  OK  ]
    [root@rhel41c ~]#
     

    Проверяем, как функционирует сервер 1С:Предприятия.

    Но что будет, если в рамках системы установлено два экзеспляра DB2? Какие пути прописывать в данном случае?

    Давайте вернем конфигурацию системы в исходное положение (удалим /etc/ld.so.conf.d/db2.conf и запустим ldconfig, чтобы исключить пути к библиотекам DB2 из глобального поиска) и рассмотрим вариант 2.

    Вариант 2.

    Задание путей поиска динамических библиотек через /etc/ld.so.conf имеет один недостаток - пути поиска являются глобальными. Например, если у вас установлены DB2 9.1 и DB2 9.5, то настроить два экземпляра сервера 1С:Предприятия для работы с разными версиями DB2 через /et/ld.so.conf не получится.

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

    Казалось бы, что проще всего добавить строчку

    LD_LIBRARY_PATH=/opt/ibm/db2/V9.1/lib32:/opt/ibm/db2/V9.1/lib64

    в скрипт запуска сервера 1С  /etc/rc.d/init.d/srv1cv81

    Однако этот способ не проходит, поскольку при запуске сервера сбрасываются все настройки перменных окружения.

    Единственный правильный способ установки LD_LIBRARY_PATH - это добавление в профайл пользователя, т.е. скрипт .bash_profile, расположенный в домашнем каталоге пользователя usr1cv81 (пользователя, от имени которого запускается сервер 1С:Предприятие).

    Добавляем в ~usr1cv81/.bash_profile строчки

    LD_LIBRARY_PATH=/opt/ibm/db2/V9.1/lib32:/opt/ibm/db2/V9.1/lib64

    export  LD_LIBRARY_PATH

    Перезапускаем сервер 1С. Теперь все готово к работе.


    ПРИМЕЧАНИЕ
    Для того чтобы узнать какие продукты DB2 установлены на вашей машине, можно воспользоваться командой db2ls
    Вот пример вывода команды
    [root@rhel41c ~]# db2ls

    Install Path                        Level   Fix Pack  Special Install Number  Install Date
    --------------------------------------------------------------------------------------------
    /opt/ibm/db2/V9.1                 9.1.0.3        3a                      7    Wed Apr 23 16:09:56 2008 MSD