Показаны сообщения с ярлыком PostgreSQL. Показать все сообщения
Показаны сообщения с ярлыком PostgreSQL. Показать все сообщения

пятница, 8 августа 2014 г.

Postgresql 9.2.4 для 1С в контейнере Docker и решение с shmmax

Новые технологии, новые задачи.


Давно хотел погонять технологию docker в работе, но, случая не предоставлялось. А тут возникла необходимость переместить кучу файловых баз 1С от Зарплаты и Управление персоналом в базу данных.

Ну и соответственно, звезды сложились. Проблема в том, что ЗУП 3.0 работает с Postrgesql 9.2, а предыдущие не работают, точнее, им нужен postgress собранный с другой опцией, либо версией ниже. Плодить кучу серверов БД не хотелось, Хотелось красиво все завернуть в виртуалки с минимальных оверхедом. И тут я вспомнил про docker. Попробовал, получилось, были и проблемы, но они решены. Этими решениями и хотел поделиться.

Приступим и посмотрим, что получится:

1. Свежеустановленная Ubuntu 14.04.


Качаем, ставим, ничего сверхестественного.

2. Подготовка


docker можно взять из репо убунты, но я взял из репо самого проекта. Инструкция здесь:

Кратко:

Добавляем ключ:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

Добавляем репозитарий
$ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list"

$ sudo apt-get update

$ sudo apt-get install lxc-docker

3. Установка


Чистый образ:

sudo docker run -i -t ubuntu:precise /bin/bash

В контейнере:

apt-get update apt-get install nano wget bzip2 exit

Зафиксируем образ:

sudo docker commit CONTAINER_ID stormbp/precise-clean

CONTAINER_ID легко брать из командной строки когда работаете внутри контейнера:

он выглядит так:

root@af40b772abbf:/data/main#

Хеш после root@ и есть ID контейнера.

Имя контейнера (stormbp/precise-clean) поставьте свое, главное обойтись без заглавных букв, будет ошибка.


Запустим новый экземпляр из шаблона:
sudo docker run -i -t stormbp/precise-clean /bin/bash
Внутри контейнера:
cd /root
Качаем дистрибутив postgres с сайта 1с.
wget http://downloads.v8.1c.ru/get/Info/AddCompPostgre/9_2_4_1_1S/postgresql_9_2_4_1_1C_amd64_deb_tar.bz2
Предварительно зайдите туда со своими учетными данными, чтоб авторизоваться. Это можно сделать с любого компьютера в локальной сети.
Распаковываем
tar jxf postgresql_9_2_4_1_1C_amd64_deb_tar.bz2
rm postgresql_9_2_4_1_1C_amd64_deb_tar.bz2
ставим:
dpkg -i *.deb
apt-get -f install
не обращайте внимание, что сервер не инициализировался, сейчас будет творить магию.
exit
Коммитим контейнер
sudo docker commit CONTAINER_ID stormbp/precise-postgress-9.2.4-1c
Создаем в домашней директории хранилище для самой базы:
mkdir -p $HOME/postgresdata
и запускаем экземпляр
sudo docker run -v="$HOME/postgresdata":"/data" -i -t -p 5432 stormbp/precise-postgress-9.2.4-1c /bin/bash

4. Магия, как она есть

А теперь еще немного магии:
Posgresql не запустится, так как по умолчанию, параметр ядра shmmax установлен меньше необходимого. А внутри контейнера поменять его просто так невозможно, /proc/sys смонтирована только на чтение и перемонтировать ее просто так нельзя.
Надо залезть из хостовой системы в контейнер и переписать значение переменной ядра. Для этого есть такой замечательный инструмент nsenter. Но вот разработчики ubuntu усложняют жизнь тем, что не включают его в поставку и в репах его нет.
Будем компилять? - спросите вы.
Зачем? - спрошу я. Ведь у нас есть докер, пусть сам себе накомпиляет в контейнере и удалится, оставив нам только бинарник nsenter на память.
Все просто, в соседнем терминале, на хост системе (не в контейнере с postgress) запускаем:
sudo docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter
docker отработает минут за 5 и удалит все следы оставив нам бинарник nsenter в /usr/local/bin
Теперь снова черная магия:
На хосте отключаем apparmor (на всякий, у некоторых не получается с ним)
/etc/init.d/apparmor stop
узнаем pid запущенного контейнера с postgres
PID=$(docker inspect --format '{{ .State.Pid }}' ID)
ID - подставить из соседнего терминала.
Далее лезем в пространство имен контейнера:
nsenter --target $PID --mount --uts --ipc --net --pid bash
mount -o remount rw /proc/sys
echo 1073741824 > /proc/sys/kernel/shmmax
mount -o remount ro /proc/sys
все, можно инициализировать базу
mkdir -p /data/main chown postgres /data/* chgrp postgres /data/* chmod 700 /data/main
su postgres --command "/usr/lib/postgresql/9.2/bin/initdb -D /data/main --locale=ru_RU.UTF-8"

5. Результат

Получите и распишитесь: база лежит в /data контейнера, или в домашней папке $HOME/postgresdata, доступна локально по сети. Правьте hba как и раньше.
Выходим из контейнера и коммитим образ для множественного развертывания баз данных
sudo docker commit CONTAINER_ID stormbp/1с-9.2.4
Кто работал с постгрессом далее разберется, если не разберетесь, спрашивайте.
На очереди контейнерная виртуализация сервера предприятия для 1с, чтобы жить было совсем весело, а потом статья о том, как же всем этим управлять-то.

вторник, 30 августа 2011 г.

Установка сервера для 1С:Предприятие 8.2

Обобщив весь опыт и все, что нашлось в Интернете описываю установку

1. Система
Базовая система CentOS 6.0 (свежее пока нет, чего-то индусы задерживаются)
Ставим все на SuperMicro X8DTU
2 x Xeon E5620
4 x SATA WD RE4 250Gb
3 x 4Gb DDR3 ECC (немного не оптимально, но планка уже едет))

2. Что хотим получить
Как обычно получить надо все и быстро, поэтому определяемся:
1. Сервер 1С:Предприятия
2. Сервер баз данных
3. Сервер виртуализации
4. Терминальный сервер
5. Сетевая инфраструктура
Многовато конечно, но вот такие задачи. По поводу целесообразности установки всего этого на один сервак можно спорить, но нежелательно, так как других вариантов пока нет. Объясняю: 1С - лицензия, ключ на сервер куплен, но вот незадача 32 битный, лишних денег (порядка 36кр) сейчас в обрез, надо заставить работать как есть. А ставить в наш век 32 разрядную систему на 12 гигов оперативы - изврат, да и для базы данных полегче. Получаем: Centos 6 x86_64 на котором стоит Postgres и всякие dhcpd, bind, а также гипервизор KVM в котором крутится Centos 6.0 32bit в котором крутится Сервер Предприятия. Вот так.
Начнем, пожалуй.