При достаточно активной работе в 1С рано или поздно возникает вопрос перехода с файлового на клиент-серверный вариант работы. Ограниченный бюджет малых предприятий не позволяет использовать программное обеспечение от Microsoft (Microsoft Windows Server, Microsoft SQL Server) в силу их высокой стоимости. Единственным возможным экономичным решением является максимальное использование свободного программного обеспечения.
Данная статья не является пошаговой инструкцией по установке и настройке. В ней лишь описан один из вариантов организации сервера, обеспечивающий возможность дальнейшего расширения функционала. Сервер был запущен в эксплуатацию в апреле 2017 года и доказал функциональность и отказоустойчивость решения.
Аппаратное обеспечение сервера.
На предприятии уже имелся Windows Server 2008R2. В файловом режиме работа в 1С велась в терминале, поэтому было принято решение о приобретении 1С Сервера МИНИ (на 5 подключений).
Для нового сервера (сервер баз данных) было приобретено следующее аппаратное обеспечение:
Наименование | Количество |
---|---|
Серверная материнская плата ASUS P10S-X (RTL) LGA1151 < C232 > PCI-E+SVGA+2xGbLAN SATA RAID ATX 4DDR4 |
1 |
Процессор CPU Intel Xeon E3-1230 V5 3.4 GHz / 4core / 1+8Mb / 80W / 8 GT / s LGA1151 |
1 |
Original SAMSUNG DDR4 DIMM 16Gb < PC4-17000 > ECC |
2 |
HDD 1 Tb SATA 6Gb/s Seagate Barracuda 7200.14 <ST1000DM003> 7200 rpm 64Mb |
1 |
Накопитель SSD 120 Gb SATA 6Gb / s Silicon Power Velox V70 < SP120GBSS3V70S25 > 2.5" MLC |
1 |
Жесткий диск WD Caviar Red IntelliPower WD30EFRX 3 Тб |
1 |
Программное обеспечение сервера.
- Основная операционная система сервера (хост система) - Debian (по рекомендациям разработчика Proxmox VE: http://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_Jessie)
- Окружение рабочего стола XFCE: https://xfce.org/
- Система виртуализации Proxmox Virtual Environment (Proxmox VE), которая является сервером управления виртуальными машинами основанными на QEMU/KVM и LXC контейнерами с открытым исходным кодом. Разработка Proxmox VE защищена лицензией GNU Affero General Public License version 3: https://pve.proxmox.com/wiki/Main_Page
- СУБД Postgres Pro Standard 1C: https://postgrespro.ru/products/1c_build
Установка Debian 8.7.1 stable (самый современный на момент установки).
На сегодняшний день самым современным является релиз Debian 10.2 buster от 16 Ноября 2019. Последние репозитории Proxmox Virtual Environment для этого дистрибутива опубликованы 17 декабря 2019.
При установке с установочного диска Proxmox-VE размечаем диск на 1.0TB на логические тома LVM следующим образом: 100GB под логический том «root», половину объема оперативной памяти под логический том «swap» и остальное под логический том «data».
Так как мы имеем три жестких диска разметка по умолчанию нам не подходит. Скачиваем образ диска Debian 8.7.1 stable (последняя версия на тот момент) и записываем его на диск. Дальнейшая установка будет происходить с этого диска.
В процессе установки размечаем жесткие диски следующим образом:
- На диске 1.0TB (sda) размещаем host-систему. В настройках менеджера логических томов создаем на диске sda группу томов с названием «pve» и 3 логических тома:
- логический том «swap» размером 32GB (так как в будущем возможно расширение оперативной памяти до 64GB);
- логический том «root» размером 125GB с точкой монтирования «/»;
- остальное пространство логический том «data» с точкой монтирования «/var/lib/vz».
- Диск 120GB (sdb) отдадим контейнеру с PostgreSQL для 1С, поэтому разметку не делаем. Точка монтирования «/db».
- На диске 3.0TB (sdc) создаем файловую таблицу и первичный раздел с файловой системой ext4 и точкой монтирования «/storage». Здесь будут размещаться бэкапы, шаблоны, образы ISO и прочее.
Далее установка происходит обычным образом. В конце установки будут предложены дополнительные опции установки (tasksel). Разработчики Proxmox VE допускают установку окружения рабочего стола XFCE или LXDE, при этом, после установки, нужно не забыть удалить network-manager иначе ваш кластер может не запуститься. Устанавливаем XFCE (занимает всего 318MB оперативной памяти) и SSH сервер. Для наглядного отображения параметров системы устанавливаем виджет GkrellM: http://compizomania.blogspot.com/2012/06/gkrellm-ubuntulinux-mint.html
Для дальнейшей работы с сервером с рабочего компьютера можно настроить SSH сервер:
- Основные настройки: http://help.ubuntu.ru/wiki/ssh
- Для пользователей Windows (использование PuTTY): http://dunmaksim.blogspot.ru/2014/07/ssh-debian.html
Установка ProxMox VE
Документация разработчика: http://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_Jessie
Уточняем сетевые настройки, для этого открываем на редактирование файл:
# nano /etc/hosts
и приводим его к виду:
127.0.0.1 localhost.localdomain localhost
192.168.xxx.xxx prox4m1.proxmox.com prox4m1 pvelocalhost
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
где 192.168.xxx.xxx ваш IP-адрес и prox4m1 имя хоста.
Проверяем сетевые настройки:
# getent hosts $(hostname)
должно быть
192.168.xxx.xxx prox4m1.proxmox.com prox4m1 pvelocalhost
и
# getent hosts 192.168.xxx.xxx
должно быть
192.168.xxx.xxx prox4m1.proxmox.com prox4m1 pvelocalhost
Добавляем репозитории ProxMox VE
echo "deb http://download.proxmox.com/debian jessie pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
Добавляем ключ репозитория ProxMox VE
# wget -O- "http://download.proxmox.com/debian/key.asc" | apt-key add -
Обновляем репозиторий и систему
# apt-get update && apt-get dist-upgrade
Устанавливаем ProxMox VE
# apt-get install proxmox-ve postfix ksm-control-daemon open-iscsi systemd-sysv
Если ProxMox VE установлен единственной системой удаляем os-prober
# apt-get remove os-prober
Подключаемся к установленному Proxmox VE через web интерфейс: http://192.168.xxx.xxx:8006
Для работы виртуальных машин создаем сетевой мост vmbr0 к интерфейсу eth0:
Настройка хранилищ в Proxmox VE
После установки Proxmox VE имеем только одно хранилище — local. Добавляем ещё 2 — для PostgreSQL-1C и для бэкапов.
Подключаем новый жесткий диск. Для инициализации целого диска sdb:
# pvcreate /dev/sdb
Для инициализации раздела на диске sdb:
# vgcreate db /dev/sdb
На диске sdb:
В web-интерфейсе Proxmox VE входим в Датацентр → Хранилище
добавляем хранилище LVM: ID — db-sdb (название этого хранилища — точка монтирования /db, диск sdb), Группа разделов db, Узлы — srv-pve.
На диске sdc:
добавляем хранилище Директория: ID — storage-sdc (название этого хранилища — точка монтирования /storage, диск sdc), Группа разделов storage, Узлы — srv-pve, Содержимое — все варианты, Макс. резерв. копий — 100.
Proxmox VE сам смонтирует каталог в систему.
Создание LXC контейнера в ProxMox VE
Входим в хранилище local, нажимаем «Шаблоны», выбираем debian-8.0-standard_8.6.1_amd64.tar.gz (доступный на момент установки) и дожидаемся загрузки.
В web-интерфейсе Proxmox VE входим в наш узел (srv-pve) и нажимаем Создать СТ.
Вводим Hostname (например PostgreSQL-1c) и пароль (например pgAdm), нажимаем далее.
Выбираем шаблон, нажимаем далее.
Выбираем хранилище db-sdb, размер 120GB (если потребуется позже увеличим или уменьшим), нажимаем далее.
Вводим количество ядер CPU — (например 6), нажимаем далее.
Указываем объем оперативной памяти 12288MB (12GB), своп оставляем 512MB (в дальнейшем можно изменить), нажимаем далее.
В настройках сети указываем IP адрес 192.168.xxx.xxx/24, Шлюз 192.168.xxx.1 нажимаем далее. DNS оставляем по умолчанию, нажимаем далее, Завершить.
Контейнер PostgreSQL-1c создан.
Выделяем созданный контейнер и нажимаем Запуск. Вводим логин и пароль.
Проброс каталога хоста в контейнер.
Для того, чтобы директория хоста (например /storage) была доступна из контейнера с ID 103 по пути /storage необходимо в файл конфигурации контейнера, находящийся на хосте по адресу /etc/pve/lxc/103.conf добавить строку:
mp0: /storage,mp=/storage
Альтернативный способ — в консоли (терминале) хоста выполнить команду:
#pct set 103 -mp0 /storage,mp=/storage
Установка Postgrespro-1c в Debian
Подключаем репозиторий 1c.postgrespro.ru jessie.
В файл /etc/apt/sources.list.d/postgrespro-1c.list добавляем репозиторий:
deb http://1c.postgrespro.ru/deb/ jessie main
и обновляем информацию о пакетах:
# apt-get update
Устанавливаем postgresql-pro-1c-9.6.1 (30,3 MB):
# apt-get install postgresql-pro-1c-9.6
Стартуем postgres:
# service postgresql start
Проверяем:
# service postgresql status
Первоначальная настройка PostgreSQL
Рекомендации 1С: https://its.1c.ru/db/metod8dev#content:5866:hdoc
Мне рекомендованные 1С настройки менять не пришлось.
Настраиваем параметры в файле конфигурации: /etc/postgresql/9.6/main/postgresql.conf
После изменения postgresql.conf перезапускаем PostgreSQL:
# service postgresql restart
Резервное копирование баз 1с
https://interface31.ru/tech_it/2013/07/rezervnoe-kopirovanie-bez-dannyh-postgresql.html
Для создания резервной копии воспользуемся утилитой pg_dump, которая позволяет создать дамп для указанной БД. Создание дампа происходит без блокирования таблиц и представляет собой снимок БД на момент выполнения команды. Т.е. вы можете создавать дампы во время работы пользователей, в то время как для создания резервной копии средствами 1С вам нужен монопольный доступ к базе.
# pg_dump -U postgres ИмяБазы > /storage/1c/ИмяБазы.pgsql.backup
Перед восстановлением дампа следует создать целевую БД:
# createdb -U postgres -T template0 ИмяБазы2
Базу данных создали. Теперь загружаем в нее наш бэкап 1с:
# psql -U postgres ИмяБазы2 < /storage/1c/ИмяБазы.pgsql.backup
Все что теперь остается, это через оснастку Администрирование сервера 1С:Предприятия создать новую ИБ или изменить настройки существующей, указав на новый сервер СУБД и новую базу, затем в стартовом окне 1С добавить эту базу на сервере.
Создаем скрипт, который будет создавать резервные копии указанных баз, который мы добавим в cron для регулярного бэкапа нашей базы 1С.
Создаем каталог для бэкапов и логов бэкапов:
# mkdir /storage/1c/backup
Создаем каталог для скриптов:
# mkdir /storage/1c/scripts/
Создадим файл скрипта:
# nano /storage/1c/scripts/backup-ИмяБазы.sh
Содержимое файла скрипта:
#!/bin/sh
# Прописываем имя базы
NAME_DB="ИмяБазы"
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M"`
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup $NAME_DB" >> /storage/1c/logs/backup-$NAME_DB.log
# Бэкапим базу данных NAME_DB и сразу сжимаем
/usr/bin/pg_dump -U postgres $NAME_DB | gzip > /storage/1c/backup/$DATA-$NAME_DB.pgsql.gz
echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup $NAME_DB" >> /storage/1c/logs/backup-$NAME_DB.log
# Удаляем в папке с бэкапами архивы старше 6-и дней
/usr/bin/find /storage/1c/backup -type f -mtime +6 -exec rm -rf {} \;
Сохраняем скрипт и дадим права на выполнение:
# chmod +x /storage/1c/scripts/backup-ИмяБазы.sh
Запускаем скрипт на проверку:
# bash /storage/1c/scripts/backup-ИмяБазы.sh
Настройка cron для резервного копирования баз 1с
http://help.ubuntu.ru/wiki/cron
https://www.ibm.com/developerworks/ru/library/l-job-scheduling/index.html
https://ru.hostings.info/schools/cron.html
Редактирование текущего файла расписания:
# crontab -e
Каждый день в 18:45 запускать скрипт:
# Отчет исполнения задания отправлять админу по адресу:
MAILTO= admin@ВашДомен.ru
# Запускать каждый день в 18:45
45 18 * * * bash /storage/3TB/1c/scripts/backup-ИмяБазы.sh
Каждая строка должна завершаться символом перевода каретки (строки).
Регламентное обслуживание баз 1с
Настройка регламентных операций на уровне субд, чтобы поддерживать быстродействие базы данных.
https://serveradmin.ru/bekap-i-vosstanovlenie-bazyi-1s-v-bd-postgresql/
https://postgrespro.ru/docs/postgrespro/9.5/sql-reindex.html
https://postgrespro.ru/docs/postgrespro/9.5/app-vacuumdb.html
-
Ежедневные регламентные операции (могут выполнятся параллельно с работой пользователей):
Переходим в каталог со скриптами для баз 1С:
# cd /storage/1c/scripts/
Создадим файл скрипта:
# nano service_daily-ИмяБазы.sh
Вставляем в него текст скрипта:
#!/bin/bash
# Прописываем имя базы
NAME_DB="ИмяБазы"
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M"`
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start vacuum&analyze service daily $NAME_DB" >> /storage/1c/logs/service_daily-$NAME_DB.log
# Выполняем очистку и анализ базы данных
vacuumdb --analyze --username postgres --dbname $NAME_DB
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` End vacuum&analyze service daily $NAME_DB" >> /storage/1c/logs/service_daily-$NAME_DB.log
# Ждем 30 секунд
sleep 30
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start reindex service daily $NAME_DB" >> /storage/1c/logs/service_daily-$NAME_DB.log
# Переиндексация базы
reindexdb --username postgres --dbname $NAME_DB
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` End reindex service daily $NAME_DB" >> /storage/1c/logs/service_daily-$NAME_DB.log
Сохраним скрипт и дадим права на выполнение:
# chmod +x service_daily-ИмяБазы.sh
Запустим скрипт на проверку:
# bash service_daily-ИмяБазы.sh
Если скрипт работает без ошибок прописываем расписание запуска скрипта в cron:
# Отчет исполнения задания отправлять админу по адресу:
MAILTO= admin@ВашДомен.ru
# Запускать каждый день в 23:30 с воскресенья по четверг
30 23 * * 0-4 bash /storage/1c/scripts/service_daily-ИмяБазы.sh
-
Еженедельные регламентные операции (должны выполняться при отсутствии подключенных пользователей):
Переходим в каталог со скриптами для баз 1С:
# cd /storage/1c/scripts/
Создаем файл скрипта:
# nano service_weekly-ИмяБазы.sh
Вставляем в него текст скрипта:
#!/bin/bash
# Прописываем имя базы
NAME_DB="ИмяБазы"
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M"`
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` Start vacuum full service weekly $NAME_DB" >> /storage/1c/logs/service_weekly-$NAME_DB.log
# Выполняем очистку и анализ базы данных
vacuumdb --full --analyze --username postgres --dbname $NAME_DB
# Записываем информацию в лог с секундами
echo "`date +"%Y-%m-%d_%H-%M-%S"` End vacuum full service weekly $NAME_DB" >> /storage/1c/logs/service_weekly-$NAME_DB.log
Сохраняем скрипт и дадим права на выполнение:
# chmod +x service_weekly-ИмяБазы.sh
Запускаем скрипт на проверку:
# bash service_weekly-ИмяБазы.sh
Если скрипт работает без ошибок прописываем расписание запуска скрипта в cron:
# Ошибки исполнения задания отправлять админу по адресу:
MAILTO= admin@ВашДомен.ru
# Запускать каждый понедельник в 02:01
01 02 * * 1 bash /storage/1c/scripts/service_weekly-ИмяБазы.sh
Перенос баз из файловых на СУБД PostgreSQL-1c
Создаём резервную копию:
- в конфигураторе проводим полное тестирование и исправление;
- выгружаем в ИмяБазы.dt;
- в оснастке «Администрирование серверов 1С Предприятия х86-64» создаём новую базу на сервере PostgreSQL:
Имя: ИмяБазы
Сервер баз данных: 192.168.xxx.xxx
Тип СУБД: PostgreSQL
База данных: ИмяБазы
Пользователь сервера БД: postgres
Пароль пользователя БД: ВашПароль
Добавляем созданную базу в список баз 1С Предприятия:
- Открываем созданную пустую базу (ИмяБазы) в конфигураторе и загружаем базу ИмяБазы.dt;
- Открываем загруженную базу в режиме 1С Предприятие и указываем, что база была перемещена или является основной.
Установка и настройка программного обеспечения завершены. Для эксплуатации нового программного обеспечения остается только настроить рабочие места пользователей.
Также, если мощности вашего сервера позволяют, возможно дальнейшее расширение функционала сервера как в LXC контейнерах так и в KVM машинах, например: сервер 1С, система мониторинга Zabbix, система синхронизации Resilio Sync (ранее BitTorrent Sync) с удаленными NAS и многое другое.
В приложении к статье содержатся полные пошаговые инструкции, которые я составлял для себя в процессе установки и настройки программного обеспечения со ссылками на источники информации (возможно они несколько устарели). Подобных инструкций (по отдельным темам) много в интернете, по этому я не счел нужным включать их в данную статью. Приложение отличается кратким изложением с привязкой к статье по хронологии, но при этом, по ссылкам можно каждый отдельный вопрос изучить более глубоко.
Пример:
В том числе описан процесс установки и настройки NFS сервера для доступа к хранилищу storage-sdc с других компьютеров, который далеко не всем нужен.
Объем приложения около 27 страниц в формате doc.