В этой статье мы рассмотрим процедуру развёртывания сервера "1С:Предприятие 8.1" под управлением операционной системы Linux. За основу будет взят дистрибутив CentOS 5.3.
Необходимо сразу определиться с тем, что нам потребуется.
- Сервер установленным дистрибутивом CentOS.
- Архиватор unrar, который можно получить на официальном сайте программы – http://www.rarlab.com/rar_add.htm.
- Дистрибутивы серверной части "1С:Предприятие 8.1" (setuprh.rar1) и СУБД PostgreSql (setuppln833.rar1), полученные с официального сайта компании "1C" – http://users.v8.1c.ru.
- Драйвер и менеджер HASP-ключей, полученный с официального сайта компании "Aladdin" и инсталлятор для него (HASP_SRM_LINUX_ 3.50_RedHat_RPM_Run-time_Installer.tar.gz) – http://www.aladdin.com/support/hasp/vendor.aspx.
- Установите имя узла для вашей операционной системы. Здесь мы будем использовать buh.example.com.
- На время установки и настройки отключите сетевой фильтр
Имена файлов могут различаться.
Применимо только для USB-ключей; имя файла может варьироваться в зависимости от версии продукта.
Договоримся, что все полученные пакеты были скопированы в каталог /root/1c и, если не сказано иное, все действия должны выполняться от имени суперпользователя root.
Процедуру развёртывания можно разделить на два этапа, а именно:
- Установка и настройка.
- Оптимизация работы.
Как ни странно, но процедуру развёртывания информационной системы мы начнём именно с серверной части "1C:Предприятие". Для начала распакуем полученный архив и произведём установку:
Код: Выделить всё
# mkdir /root/1c/tp && unrar x /root/1c/setuprh.rar /root/1c/tp
# yum --nogpgcheck localinstall /root/1c/tp/*.rpm
Код: Выделить всё
# service srv1cv81 start
# chkconfig add srv1cv81
Код: Выделить всё
# mkdir /root/1c/psql && unrar x /root/1c/setuppln833.rar /root/1c/psql
# yum --nogpgcheck localinstall /root/1c/psql/*.rpm
Код: Выделить всё
# chkconfig postgresql on
Код: Выделить всё
# cd /root/1c
# tar xf HASP_SRM_LINUX_ 3.50_RedHat_RPM_Run-time_Installer.tar.gz
# cd HASP_SRM_LINUX_3.50_RedHat_RPM_Run-time_Installer
# yum localinstall aksusbd-redhat-1.14-3.i386.rpm
Код: Выделить всё
# chkconfig --list aksusbd
Теперь, когда все необходимые элементы установлены, самое время заняться настройкой PostgreSql. И первое, что требуется сделать, – инициализировать кластер баз данных (man initdb). При инициализации кластера будут использованы текущие настройки локали (locale) пользователя postgres. Для работоспособности "1С:Предприятие" необходимо установить русскую локаль и кодировку UTF-8. Сделать это можно любым удобным способом. Например, можно добавить следующую строку в файл .bash_profile, находящийся в домашнем каталоге пользователя postgres (/var/lib/pgsql):
Код: Выделить всё
LANG=ru_RU.UTF-8
Код: Выделить всё
# service postgresql initdb
Первое, что необходимо сделать, – создать нового пользователя для доступа к базам данных и предоставить ему необходимые права доступа, а также настроить подсистему аутентификации кластера баз данных. Серверу "1C:Предприятие" необходимы права доступа, дающие возможность создавать новые базы данных; исходя из этого создаваемой учётной записи будет присвоена роль superuser. Для добавления пользователя переключитесь в учётную запись postgres и из-под неё выполните команду:
Код: Выделить всё
$ createuser 1cadmin
Код: Выделить всё
alter user "1cadmin" with password 'password';
Убедитесь, что в файле pg_hba.conf присутствует строка, которая означает, что возможны подключения любых зарегистрированных пользователей к любым базам данных, и в качестве метода аутентификации будет использоваться md5.
Код: Выделить всё
host all all 0.0.0.0/0 md5
Перейдём к настройке основных параметров, определяющих работу кластера баз данных. Здесь необходимо отметить, что перечень параметров огромен, и в этой статье мы рассмотрим лишь основные из них, которые наиболее сильно влияют на общий уровень производительности сервера "1С:Предприятие". Рассмотрим эти параметры.
shared_buffers. PostgreSql не читает данные и не записывает их напрямую на диск. Вся информация, необходимая PostgreSql, загружается в буфер сервера, который находится в разделяемой памяти (shared memory). Соответственно, работа с данными происходит путём обращения к разделяемой памяти. Если памяти будет недостаточно, то какие-то данные будут "сброшены" на диск для её высвобождения. Учитывая объёмы данных, с которыми обычно приходится работать серверу "1С:Предприятие", недостаток выделенной памяти может привести к существенному снижению производительности.
По умолчанию для параметра установлено значение 32MБ, что зачастую является недостаточным для достижения максимальной производительности. Но не забывайте, что выделение слишком большого объёма памяти может привести к её нехватке другим процессам, работающим в операционной системе.
Память выделяется при запуске PostgreSql, и в некоторых случаях вы можете получить в логах ошибку, сообщающую о невозможности создания буфера указанного размера из-за ограничений операционной системы. В этом случае вам необходимо увеличить значение параметра ядра kernel.shmmax, который определяет максимальный объём разделяемой памяти. Это можно сделать с помощью конфигурационного файла /etc/sysctl.conf.
При объёме оперативной памяти 2–4 ГБ имеет смысл установить значение:
Код: Выделить всё
shared_buffers = 256 MБ
effective_cache_size. Значением параметра является объём оперативной памяти, который используется операционной системой для кэширования файлов. Этот параметр является одним из наиболее важных, так как на его значение опирается планировщик запросов PostgreSql. Значение вычисляется как 50–75% от общего объёма оперативной памяти.
work_mem. Параметр указывает максимальный объём памяти, который может быть использован внутренними операциями сортировки и хэширования перед тем как будут использованы временные файлы. Важно помнить, что этот параметр лишь ограничивает объём памяти, потребляемый каждой операцией сортировки. Если в запросе параллельно выполняется несколько операций хэширования и сортировки, то и объём реально потреблённой памяти может оказаться существенно выше указанного значения.
При объёме оперативной памяти 2–4 ГБ имеет смысл установить значение:
Код: Выделить всё
work_mem = 64 MБ
При объёме оперативной памяти 2–4 ГБ имеет смысл установить значение:
Код: Выделить всё
maintenance_work_mem = 256 MБ
Код: Выделить всё
autovacuum = on
Для решения обозначенной выше проблемы в PostgreSql определён ряд параметров, влияющих на поведение команды VACUUM
vacuum_cost_limit. Значение суммарной стоимости, при достижении которого процесс VACUUM должен "заснуть". По умолчанию установлено значение 200, используйте его в качестве начального. В дальнейшем, наблюдая за работой PostgreSql и сервера "1С:Предприятие", вы сможете более точно определить необходимое значение.
vacuum_cost_delay. Время в миллисекундах, по истечении которого процесс VACUUM должен "пробудиться" после "засыпания", вызванного достижением значения параметра vacuum_cost_limit. Устанавливайте значение, кратное 10, в зависимости от интенсивности изменения записей в базе данных.
fsync. Принцип, по которому PostgreSql осуществляет запись данных на диск, схож с принципом функционирования журналируемых файловых систем. Изменяемые данные помещаются сначала в журнал транзакций, из которого они принудительно перемещаются на устройство хранения информации. Естественно, что этот принцип приводит к временным издержкам, связанным с выполнением операций записи на диск. Установка параметра в значение No поможет существенно повысить производительность в случае, когда данные базы данных интенсивно изменяются, но есть и обратная сторона медали. В случае возникновения сбоя в работе операционной системы и/или оборудования целостность базы данных будет нарушена, что повлечёт за собой восстановление из резервных копий и соответствующий простой в работе предприятия. Учитывая, что в "1С:Предприятие", как правило, размещаются очень важные данные, рекомендуется устанавливать параметр в значение Yes.
Как говорилось ранее, данные записываются на диск не сразу, попадая сначала в журнал транзакций. Возникает вопрос, а по какому алгоритму PostgreSql определяет момент, когда необходимо записать данные из журнала на диск. Этот алгоритм зависит от контрольных точек, а контрольные точки определяются двумя параметрами: checkpoint_segments и checkpoint_timeout. Важно помнить, что запись данных на диск начинается либо при заполнении максимального количества сегментов (checkpoint_segments), либо по истечении времени, определяемого параметром checkpoint_timeout.
checkpoint_segments. Параметр определяет количество сегментов между контрольными точками. Размер каждого сегмента составляет 16 МБ, а общий объём дискового пространства, которое может занять журнал транзакций, определяется по формуле (checkpoint_segments * 2 + 1) * 16 МБ.
Во время работы вы можете обнаружить в файлах кластера баз данных подобные сообщения:
Код: Выделить всё
LOG: checkpoints are occurring too frequently (17 seconds apart)
HINT: Consider increasing the configuration parameter "checkpoint_segments".
checkpoint_timeout. Параметр определяет время в миллисекундах, по истечении которого запускается процедура записи данных из журнала на диск.
max_locks_per_transaction. Параметр определяет максимально возможное количество блокировок за одну транзакцию. Для "1С:Предприятие" установите значение:
Код: Выделить всё
max_locks_per_transaction = 400
Перенос журналов транзакций может быть осуществлён очень просто. Допустим, что мы подключили второй жесткий диск, отформатировали его в файловую систему ext3 и подключили в каталог /mnt/hdd2. Теперь вам необходимо выполнить всего несколько команд, и журналы транзакций будут перемещены:
Код: Выделить всё
# service postgresql stop
# mv /var/lib/pgsql/data/pg_xlog /mnt/hdd2
# ln -s /mnt/hdd2/pg_xlog /var/lib/pgsql/data/pg_xlog
# service postgresql start
Код: Выделить всё
$ psql -A -q -t -c "select oid from pg_database where datname='DBNAME'"
Запуск
Теперь вы можете перезапустить Postgresql. Запустите клиентскую часть "1С:Предприятие". Перед вами появится окно со списком баз данных "1С:Предприятие" (если до этого вы не работали с программным комплексом, то список может быть пуст). Итак, далее выполняйте следующие действия.
- 1 Нажмите кнопку Добавить.
- 2 Выберите пункт "Создание новой информационной базы" и нажмите Далее.
- 3 Если у вас установлены конфигурации "1С:Предприятие", выберите "Создание информационной базы из шаблона", в списке выберите нужный шаблон и нажмите Далее.
- 4 Выберите "На сервере "1С:Предприятие".
- 5 Перед вами форма для ввода реквизитов доступа к серверу "1С:Предприятие", давайте заполним их:
- кластер серверов "1С:Предприятие" – buh.example.com;
- имя информационной базы в кластере – testdb;
- защищённое соединение – Выключено;
- тип СУБД – PostgreSQL;
- сервер баз данных – buh.example.com;
- имя базы данных – testdb;
- пользователь базы данных – 1cadmin;
- пароль пользователя – password.
- 6 Нажмите кнопку Готово.
Что дальше?
Дальше всё очень просто. Первое, что вы должны сделать, – настроить автоматическое резервирование баз данных и определить правила фильтрации сетевого трафика. Имея минимальные навыки программирования в bash, вы сможете написать скрипт, который будет резервировать базы данных стандартными средствами, входящими в состав PostgreSQL.
В конце сентября 2009 года была выпущена новая версия платформы "1С:Предприятие 8.2". Из основных нововведений: поддержка Oracle и возможность работы посредством протокола HTTP, т. е. "через браузер". Будем надеяться, что это ещё один качественный шаг вперёд на пути к той диверсификации, которой так не хватает рынку программного обеспечения.