Создание второго кластера
На одном сервере может работать два кластера, для этого создаём каталог для второго кластера. И инициализируем его:
postgres@s-pg13:~$ exit # mkdir /usr/local/pgsql/data2/ # chown postgres:postgres /usr/local/pgsql/data2/ # chmod 750 /usr/local/pgsql/data2/ # su - postgres postgres@s-pg13:~$ initdb -k -D /usr/local/pgsql/data2/
При инициализация кластера, если путь к каталогу PGDATA отличается от переменной $PGDATA или если такая переменная не задана. То нужно с помощью ключа -D указать путь к этому каталогу.
Чтобы запустить второй кластер одновременно с первым, нужно поменять порт, на котором работает PostgreSQL. По умолчанию порт – 5432. Изменим этот порт для второго кластера:
postgres@s-pg13:~$ nano /usr/local/pgsql/data2/postgresql.conf port = 5433
Теперь можем запустить второй кластер:
postgres@s-pg13:~$ pg_ctl -w -D /usr/local/pgsql/data2/ -l /home/postgres/logfile2 start waiting for server to start.... done server started
Посмотрим на процессы:
postgres@s-pg13:~$ ps ax | grep bin/postgres 24119 ? Ss 0:00 /usr/local/pgsql/bin/postgres 24480 ? Ss 0:00 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data2
Первый кластер запущен без ключа -D и используется переменная PGDATA, а во втором кластере путь к PGDATA прописан в строке запуска.
Сводка
Имя статьи
Установка PostgreSQL 13 из исходников и управление им
Описание
В этой статье я покажу как собрать PostgreSQL из исходников, инициализировать кластер и запустить его на сервере Ubuntu 20.04. А также установим из исходников одно из расширений PostgreSQL.
6.5 Конфигурация
Создайте каталог для хранения файлов базы данных, каталогов журналов и измените разрешения
Измените PGDATA и PGLOG в файле конфигурации базы данных postgresql (/etc/rc.d/init.d/postgresql-10) в каталог, созданный нами самими.
После сохранения продолжайте запрашивать место хранения файла initdb:
моя:
Укажите место хранения базы данных и метод кодирования и инициализируйте базу данных:
Моя ошибка:
Примечание. Приведенная выше ошибка указывает на то, что Postgresql не может быть инициализирован как root и должен быть запущен как пользователь postgres, поэтому пользователь linux postgres и группа postgres должны быть созданы выше.
Переключить пользователя postgres для выполнения начальной операции с базой данных
Запросить содержимое каталога после успешной инициализации базы данных
Отредактируйте файл postgresql.conf и измените адрес прослушивания и параметры порта, которые база данных получает по умолчанию:
моя:
Измените значение listen_addresses:
Затем продолжайте изменять файл pg_hba.conf, чтобы сообщить серверу базы данных, каким типам клиентов он позволит подключаться к себе:
Добавьте строку под строкой 86, чтобы любой клиент мог получить доступ к себе с правильным именем пользователя и паролем:
Примечания: Чтобы установить доверие, вы можете использовать psql -U postgres для прямого входа на сервер; чтобы установить одноранговый узел, вы можете использовать psql -h 127.0.0.1 -d postgres -U postgres для прямого входа на сервер;
Создать новую роль
В настоящее время в базе данных настроена только роль postgres. Вы можете создавать новые роли из командной строки с помощью команды «Создать их». Параметр —interactive спросит у вас имя новой роли и следует ли включить права суперпользователя.
Если у вас все еще активна подсказка postgres, введите:
Если вы вошли в систему с учетной записью postgres, вы можете создать нового пользователя с помощью следующей команды:
Если вы вошли в систему с другой учетной записью, еще не связанной с postgres, используйте следующую команду:
Вам будет предложено ввести имя для новой роли и назначить ей права суперпользователя.
8. Создание и добавление базы на 1С сервер
Для создании базы на ПК под управление OC Windows требуется записать в файл
C:\Windows\System32\drivers\etc\hosts
строку:
ip address UbuntuServerName (к примеру 192.168.0.110 Ubuntu)
Для добавления базы непосредственно с сервера можно воспользоваться консольными утилитами ras и rac входящих в комплект сервера 1С.
Перейдем в каталог платформы:
cd /opt/1C/v8.3/x86_64
Запустим сервер удаленного администрирования кластера серверов:
sudo ./ras –daemon cluster
Прочитаем информацию о кластере сервер 1С:
./rac cluster list
Получим список баз по данному кластеру (CLUSTER_UID — идентификатор кластера с предыдущего шага):
./rac infobase –cluster=%CLUSTER_UID% summary list
Добавить администратора кластера:
./rac cluster admin –cluster=%CLUSTER_UID% register –name=admin –pwd=%password% –auth=pwd
Добавить базу:
-
./rac infobase create –cluster %CLUSTER_UID% –create-database –name=demo –dbms=PostgreSQL –db-server=loclahost –db-name=demo –locale=ru –db-user=postgres –db-pwd=%password% –cluster-user=admin –cluster-pwd=%password% –license-distribution=allow
Где:
- CLUSTER_UID — идентификатор кластера 1С;
- name — имя базы по желанию, к примеру demo;
- Db-server — расположение сервера Postgresql;
- db-name — имя базы данных в Postgresql;
- db-user — логин пользователя Postgresql;
- db-pwd — пароль пользователя Postgresql;
- cluster-user — администратор кластера 1С;
- Cluster-pwd — пароль администратора 1С.
Если на сервере доступен графический интерфейс, то добавление можно произвести следующим образом:
Запустить 1С:
Выполнить следующие действия:
Добавить → Создать infobase → выбрать шаблон или создание пустой базы → Указать «сервер 1С» → ввести данные сервера:
- Где:
- кластер — localhost или 127.0.0.1;
- имя базы — по желанию, к примеру demo;
- безопасное соединение — отключено;
- тип БД — PostgreSQL;
- сервер БД — localhost или 127.0.0.1;
- имя БД — по желанию, к примеру demo;
- пользователь БД — postgres;
- пароль пользователя (назначаемый при установке postgresql) если пароль не назначался, то оставить поле пустым.
Если в процессе создания базы появилась ошибка региональных стандартов, то необходимо запустить 1С с русской локалью командой в консоли:
LANG=ru_RU. UTF-8 /opt/1C/v8.3/x86_64/1cv8
Для создания базы с удалённого ПК требуется заменить localhost (или 127.0.0.1) на ip-адрес UbuntuServer.
Установка PostgreSQL
Не буду сильно заострять внимание непосредственно на установке, так как по ней есть миллион инструкций в интернете, но вкратце опишу, чтобы показать насколько это просто. Сейчас у большинства наших клиентов мы используем в качестве ОС CentOS 7
Просто так исторически сложилось, хотя у некоторых используются и Debian, и Ubuntu, и там тоже все работает нормально. Единственная проблема у нас возникала у двух клиентов только с CentOS 8. Там почему-то производительность была процентов на 30 ниже чем с CentOS 7 за счет возникающего высокого system time при активной работе со временными таблицами. Анализ perf и исходников PostgreSQL не дал быстрых результатов, а из-за ограничения времени и давления со стороны клиентов пришлось просто откатиться на CentOS 7, после чего проблема ушла
Сейчас у большинства наших клиентов мы используем в качестве ОС CentOS 7. Просто так исторически сложилось, хотя у некоторых используются и Debian, и Ubuntu, и там тоже все работает нормально. Единственная проблема у нас возникала у двух клиентов только с CentOS 8. Там почему-то производительность была процентов на 30 ниже чем с CentOS 7 за счет возникающего высокого system time при активной работе со временными таблицами. Анализ perf и исходников PostgreSQL не дал быстрых результатов, а из-за ограничения времени и давления со стороны клиентов пришлось просто откатиться на CentOS 7, после чего проблема ушла.
Установка CentOS делается с минимального образа, скачанного с официального сайта. Там есть графический инсталятор, и с установкой прекрасно справлялись даже системные администраторы, которые ранее в глаза не видели Linux. Естественно, установка ОС идет не на голое железо, а на виртуальную машину.
Единственная рекомендация, которую мы стараемся давать при установке ОС — чтобы под базу данных подключали отдельный диск (лучше даже без LVM). Это удобно тем, что потом можно легко при необходимости менять ОС, просто подключая диск с базой данных к другой виртуальной машине.
После того, как ОС установлена, и к ней получен SSH-доступ, делается установка как описано на официальном сайте PostgreSQL. В частности, на Redhat-based Linux, которой и является CentOS, в консоле нужно запустить следующие команды :
Эти команды добавляют в общий список yum-репозиторий, и устанавливают программные файлы PostgreSQL.
Дальше нужно создать саму базу данных. Часто в документации PostgreSQL используется терминология кластер базы данных, который более правильный, так как в кластере может быть много баз. Но в дальнейшем, для упрощения, я буду часто называть ее просто базой данных (так как в рабочих окружениях, кроме системных мы держим только одну базу данных).
Перед инициализацией базы данных рекомендуется проверить и установить часовой пояс и регион (так как они запишутся в настройки самой базы из настроек ОС) :
По умолчанию, база данных будет установлена по пути /var/lib/pgsql/14/data. Но если под базу данных был выделен отдельный диск, то можно перед инициализацией кластера задать путь, куда будет установлена база данных следующим образом :
В появившемся окне редактора указать следующие параметры :
Если диск с базой был смонтирован по пути /data, то лучше помещать кластер в подкаталог /data/14, чтобы потом было легче делать pg_upgrade базы данных до 15й и последующих версий.
Наконец, создаем сам кластер БД при помощи следующей команды :
Помимо создания самой базы данных эта команда создает в ОС службу postgresql-14. Ее дальше нужно добавить в автозагрузку при помощи команды :
Запуск и остановка службы осуществляется соответственно следующим образом :
Этап второй. Настройка системы и установка PostgreSQL
После того, как система загрузилась — необходимо подключится к этой виртуальной машине для дальнейших настроек. Так как у нее нет графического интерфейса, то подключиться по обычному RDP — не получится. Вместо этого — мы можем подключиться по SSH в режиме командной строки. И все дальнейшие операции мы будем выполнять через нее.
Для этого необходимо скачать Putty Это специальная утилита как раз для таких подключений. Настраиваем подключение:
Где надо указать IP адрес ВМ, порт по-умолчанию 22. Для соединения нажать кнопку Open, а тип подключения SSH.
Во время установки был создан отдельный пользователь, под которым и будем подключатся к системе:
Удаленный доступ под пользователем root по-умолчанию запрещен.
Первым делом — поставим последние обновления ОС. Для этого необходимо переключиться на пользователя root и обновиться, выполнив команды:
Следующий шаг — изменение локали системы.
Так как ранее устанавливали систему «по-умолчанию» и выбрали английскую локаль, а в подавляющем большинстве разработчики и пользователи 1С работают на русском языке, то перед установкой PostgreSQL и его настройкой, необходимо изменить локаль системы также на русскую. Для этого необходимо ввести следующую команду:
тут выбрано en_US.UTF-8 и надо выбрать еще ru_RU.UTF-8, выбрав ее основной и после это необходимо перезагрузить ОС для принятия изменений
Конфигурация сервера
В заключении пару слов хотелось бы написать про то оборудование, которой используется под PostgreSQL. Несмотря на то, что обычно используется виртуализация, машина с PostgreSQL устанавливается единственной на всем физическом сервере.
Например, один из наших клиентов использует сервер с двумя процессорами Intel Gold с 24 ядрами в каждом (что дает 96 виртуальных ядер) и 256ГБ памяти. В сервер напрямую через PCI express воткнуты 4 NVME диска по 3ТБ каждый, которые собраны в RAID-10 объемом около 5.8ТБ. Сейчас база данных там занимает около 3ТБ, с которой работают около 1000 одновременных пользователей. Рыночная стоимость такого сервера на данный момент составляет около 12K$ (и еще 12К$ стоят диски такого размера).
Такая конфигурация дает очень высокую скорость как дисковых операций, так и большой запас по CPU. В частности, график использования CPU на этом сервере выглядит следующим образом :
В пиковые моменты времени скорость чтения на таком сервере достигает 1.5ГБайт/секунду без существенного увеличения времени waiting :
С таким запасом производительности сервера будет достаточно при увеличении количества пользователей в 2-3 раза, прежде чем нужно будет начинать использовать кластеризацию.
4. Настройка Postgres
Для начала нужно задать пароль для пользователя БД postgres, под которым будет работать 1С сервер.
sudo -u postgres /usr/bin/psql -U postgres -c «alter user postgres with password ‘superpassword’;»
1 | sudo-upostgresusrbinpsql-Upostgres-c»alter user postgres with password ‘superpassword’;» |
Далее перенесём хранение временной статистики с жёсткого диска в память. Для этого создадим раздел в оперативной памяти на 512 Mb.
Создаем директорию куда будем монтировать Ram диск и даем ей права
mkdir /var/lib/pgsql_stats_tmp
1 | mkdirvarlibpgsql_stats_tmp |
chown postgres:postgres /var/lib/pgsql_stats_tmp
1 | chown postgrespostgresvarlibpgsql_stats_tmp |
Теперь добавляем /etc/fstab строчку
nano /etc/fstab
1 | nanoetcfstab |
tmpfs /var/lib/pgsql_stats_tmp tmpfs size=512M,uid=postgres,gid=postgres 0 0
1 | tmpfsvarlibpgsql_stats_tmp tmpfs size=512M,uid=postgres,gid=postgres |
И монтируем
mount /var/lib/pgsql_stats_tmp
1 | mountvarlibpgsql_stats_tmp |
Открываем конфиг postgress и правим параметр
nano /var/lib/pgpro/1c-13/data/postgresql.conf
1 | nanovarlibpgpro1c-13datapostgresql.conf |
stats_temp_directory = ‘/var/lib/pgsql_stats_tmp’
1 | stats_temp_directory=’/var/lib/pgsql_stats_tmp’ |
systemctl restart postgrespro-1c-13
1 | systemctl restart postgrespro-1c-13 |
Рассмотрим установку PostgreSQL от команды Postgrespro
Заходим на сайт https://postgrespro.ru/ где нас интересует раздел «СУБД для работы платформы 1С:Предприятие».
В разделе есть «Генератор инструкций», который позволяет выбрать необходимый пакет СУБД для загрузки и установки:
На данной странице собраны все сборки PostgreSQL, которые работают с 1С для различных операционных систем. Экспериментальные и архивные. Также есть отдельный раздел рекомендованных версий для установки и работы с 1С «Поддерживаемые версии PostgreSQL для 1C»
Я остановил свой выбор на версии PostgreSQL 1C 11.1 для ОС Debian. НО по данной инструкции можно установить любую версию PSQL, которая есть на ресурсе.
Итак. Снова проверяем что в системе стоит по-умолчанию поддержка русской локали. Для этого набираем команду:
Начинаем процесс установки:
Весь процесс установки необходимо производить от имени пользователя root. Иначе можно получить ошибки при установке.
После установки и запуска службы PostgreSQL можно проверить статус этой службы, введя команду:
Если появилась надпись «ALTER ROLE» — значит все хорошо, все получилось.
ВАЖНО.
Если используется сервер 1С на другой машине и будет выполняться подключение к серверу БД по сети, то есть 2 момента:
1. По-умолчанию, PostgreSQL настроен на подключение только с локального хоста (localhost) по порту 5432. Поэтому необходимо в файле конфигурации postgresql.conf указать адрес, на котором будет приниматься соединения (в моём случае это локальный IP адрес машины, на которой установлен PostgreSQL):
В нашем случае файл конфигурации находится /var/lib/pgpro/1c-11/data. Чтобы его открыть, вводим команду
Файл откроется в режиме редактирования.
2
Второй момент на который необходимо обратить внимание, это правила авторизации пользователей к базам данных и правила разрешающие подключения к этим базам «из вне». Есть файл конфигурации клиентской аутентификации pg_hba.conf
В нем необходимо разрешить следующее:
Файл находится в той же папке и запустить его можно той же командой.
Я добавил в блок «IPv4 local connections» строку, которая предоставляет доступ ко всем БД, всем пользователям с адреса 192.168.154.137 — это IP адрес сервера 1С: Предприятие.
На этом настройка сервера Postgresql закончена и можно начать создавать БД в 1С на сервере Postgresql, используя следующие данные:
Сервер баз данных — IP адрес сервера Postgresql
Тип СУБД — Postgresql
Пользователь сервера БД — postgres и пароль тот, который был назначен ранее.
Замена pg_ctl
pg_ctl это команда для управления PostgreSQL из командной строки, которая используется для управления базой данных. Debian имеет Perl-обёртку для pg_ctl, которая вызывается из /usr/bin/pg_ctlcluster. Используйте pg_ctlcluster, когда вам потребуется использовать pg_ctl. Файл настроек находится в /etc/postgresql///pg_ctl.conf
Debian устанавливает SysV-init-совместимый (стандартный) скрипт автозагрузки в /etc/init.d/postgresql-. Скрипт может использоваться для запуска, остановки, перезапуска и перезагрузки настроек без перезапуска системы. Скрипт вызывает pg_ctlcluster через внутренние вызовы.
Выгрузка баз 1С в dt из командной строки
Частенько бывает нужно сделать выгрузку базы 1С в dt файл. Это можно сделать прямо из консоли ubuntu server с помощью автономного сервера 1С. При этом даже пользователей не придётся выгонять из базы.
sudo /opt/1cv8/x86_64/8.3.19.1264/ibcmd infobase dump --db-server=localhost --dbms=postgresql --db-name=basa1 --db-user=postgres --db-pwd=parol /mnt/backup/basa1.dt
Так же через консоль можно загрузить данные в базу 1С из dt файла. К примеру, загрузим предыдущую выгрузку в новую базу — basa2:
sudo /opt/1cv8/x86_64/8.3.19.1264/ibcmd infobase create --db-server=localhost --dbms=postgresql --db-name=basa2 --db-user=postgres --db-pwd=parol --create-database --restore=/mnt/backup/basa1.dt
С помощью автономного сервера можно проверить базу 1С на ошибки. Опять же, прямо в консоли linux:
sudo /opt/1cv8/x86_64/8.3.19.1264/ibcmd infobase config check --db-server=localhost --dbms=postgresql --db-name=basa2 --db-user=postgres --db-pwd=parol
Все возможности автономного сервера можно посмотреть в руководстве администратора.
Разметка дисков
1. Выберите пункт “Вручную” и нажмите кнопку “Продолжить”
2. Вы увидите список разделов, выберите “Свободное место” и нажмите кнопку “Продолжить”.
Естественно, у Вас список разделов будет отличатся, главное выделить освобожденное нами пространство.
3. Выберите пункт “Автоматически разметить свободное место” и нажмите кнопку “Продолжить”.
4. Выберите пункт “Все файлы в одном разделе” и нажмите кнопку “Продолжить”.
Оптимальным для Linux, считается создание нескольких разделов, но для новичков рекомендуется размещать все файлы в одном разделе. Это как-раз то, что нам и нужно, в случаи каких-либо проблем мы просто удалим или отформатируем этот раздел.
Установщик, автоматически создал два раздела из свободного места.
5. Выберите пункт “Закончить разметку и записать изменения на диск” и нажмите кнопку “Продолжить”.
Обратите особое внимание на номер и название устройства корневого каталога, куда будут установлены все файлы и с которого будет загружаться операционная система Linux Debian. Эта строчка “/dev/sda5” путь к корневому разделу, которая нам понадобится при установке загрузчика GRUB
Естественно, у Вас номер и название разделов может отличатся
Эта строчка “/dev/sda5” путь к корневому разделу, которая нам понадобится при установке загрузчика GRUB. Естественно, у Вас номер и название разделов может отличатся.
6. Выберите точку “Да” и нажмите кнопку “Продолжить”. После нажатия, все изменения будут применены, то есть физически в таблицу разделов будут внесены записи.
Мы пропустим этапы выбора программного обеспечения, если не уверены в себе, просто оставляйте все по умолчанию и нажимайте кнопку “Продолжить”.
Установка PostgreSQL #
На момент написания этой статьи последней версией PostgreSQL, доступной из репозиториев Debian по умолчанию, была PostgreSQL версии 11.5.
Чтобы установить PostgreSQL на ваш сервер Debian, выполните следующие действия как root или пользователь с привилегии sudo
:
-
Начните с обновления индекса пакета APT:
-
Установите сервер PostgreSQL и пакет contrib, который предоставляет дополнительные функции для базы данных PostgreSQL:
-
После завершения установки запустится служба PostgreSQL. Чтобы проверить установку, используйте инструмент для печати версия сервера
:Результат должен выглядеть примерно так:
это интерактивная программа терминала, которая позволяет вам взаимодействовать с сервером PostgreSQL.
Настройка ежедневных ночных бэкапов баз на NAS
В папке 1c на NAS предварительно созданы папки:
base — там будут ночные бэкапы баз;
chpt — сюда сохраняются WAL-файлы в течение дня, которые ночью архивируются и кидаются в папку chp
chp — папка с архивированными WAL-файлами
Монтируем сетевую шару для бэкапов:
nano /etc/fstab //10.10.10.22/backup/10.10.10.17/1c /mnt/backup cifs username=backup,password=password,iocharset=utf-8,file_mode=0777,dir_mode=0777,noperm 0 0 mkdir /mnt/backup chmod 777 /mnt/backup mount -a
(не монтировалась шара при загрузке если dhcp, статический ip -ок)
Включаем archive_mode в конфиге постгреса.
nano /var/lib/pgpro/1c-12/data/postgresql.conf
archive_mode = on archive_command = 'test ! -f /mnt/backup/chpt/%f.gz && gzip -c %p > /mnt/backup/chpt/%f.gz'
(Архивирование WAL-файлов на NAS в предварительно созданную папку chpt)
Перезапуск 1с и postgres:
/etc/init.d/monit stop /etc/init.d/srv1cv83 stop service postgrespro-1c-12 restart /etc/init.d/srv1cv83 start /etc/init.d/monit start
Создаем скрипт ночного бэкапа:
mkdir /home/scripts touch /home/scripts/back_1s.sh chmod +x /home/scripts/back_1s.sh nano /home/scripts/back_1s.sh #!/bin/bash BS="/mnt/backup" DT="$(date +%Y-%m-%d)" CPDir="$BS/chp/$DT" BackFile="$BS/base/$DT.backup" SLink="$BS/chpt" host_ip="127.0.0.1" # Создаем новый каталог для заархивированных WAL-файлов mkdir $CPDir chown postgres $CPDir #PGPASSWORD= пароль пользователя postgres, заданный выше PGPASSWORD=password /opt/pgpro/1c-12/bin/psql -h 127.0.0.1 -U postgres -c "select pg_start_backup('$DT');" # архивируем WAL-файлы в каталог chp/дата/ tar -cvf $CPDir/chp.tar.gz $SLink rm $SLink/* # Функция бэкапа баз в папку base backups () { BackFile="$BS/base/$DT$baza.backup" PGPASSWORD=password /opt/pgpro/1c-12/bin/pg_dump -U postgres -h $host_ip -C -c -b -F c -f $BackFile $baza } baza=name_bd1 backups baza=name_bd2 backups PGPASSWORD=password /opt/pgpro/1c-12/bin/psql -h $host_ip -U postgres -c "select pg_stop_backup();" exit
И добавляем скрипт бэкапа в планировщик (будет запускаться в 22:00 каждый день):
crontab -u root -e 0 22 * * * /home/scripts/back_1s.sh