Postgres Pro Standard в Яндекс.Облако

Руководство по созданию и использованию Postgres Pro Standard в Яндекс.Облако

Для использования БД Postgres Pro Standard 11/12 в облаке Яндекс.Облако необходимо иметь доступ в Интернет и учетную запись в Яндекс.Облако.

Для установки используем образ виртуальной машины (VM) Postgres Pro 11/12, доступный в Яндекс.Облако Marketplace.

Требуемое ПО:

  • 'yc' в составе Яндекс.Облако CLI для управления облачными ресурсами в Яндекс.Облако
  • 'psql' или 'Pgadmin' для доступа к БД

Также можно использовать Яндекс.Облако Console https://console.cloud.yandex.ru

Установка Яндекс.Облако CLI описана в https://cloud.yandex.ru/docs/cli/quickstart

Документация Яндекс.Облако CLI доступна на https://cloud.yandex.ru/docs/cli/


Подключение к Яндекс.Облако и проверка окружения

  • Подключаемся к Яндекс.Облако и выполняем конфигурацию окружения с помощью команды:
yc init
  • Проверяем установленную версию 'yc' (рекомендуется последняя доступная версия):
yc version
  • Список географических регионов и зон доступности для размещения VM:
yc compute zone list
yc config set compute-default-zone ru-central1-a
yc config get compute-default-zone

Далее будем использовать географический регион ‘ru-central1’ и зону доступности 'ru-central1-a'.

  • Список доступных типов дисков:
yc compute disk-type list

Далее будем использовать тип диска ‘network-hdd’.

 

Создание VM

  • Создаем сетевую инфраструктуру для VM:
NET=my-vpc

yc vpc network create \
--name $NET \
--description "$NET" \
--async

yc vpc network list

yc vpc subnet create \
--name $NET-subnet \
--range 192.168.0.0/24 \
--network-name $NET \
--description "$NET-subnet" \
--async

yc vpc subnet list
  • В директории ~/.ssh создаем пару private/public ssh-ключей для подключения к VM:
ssh-keygen -t rsa -b 2048
  • Для создания VM из определённой версии образа Postgres Pro Standard 11/12, доступного в Яндекс.Облако Marketplace, используем команды:
yc compute image list --folder-id standard-images | grep -E "(NAME|pgpro)" | awk {'print $4'}

--- Postgres Pro Standard Database 11
IMAGE_NAME=$(yc compute image list --folder-id standard-images | grep -E "(NAME|pgpro)" | awk {'print $4'} | grep std1181)
или
--- Postgres Pro Standard Database 12
IMAGE_NAME=$(yc compute image list --folder-id standard-images | grep -E "(NAME|pgpro)" | awk {'print $4'} | grep std1231)

VM_NAME=myvm-std-xx

yc compute instance create \
--name $VM_NAME \
--hostname $VM_NAME \
--cores 2 \
--memory 2 \
--create-boot-disk name=$VM_NAME-osdisk,image-folder-id=standard-images,image-name=$IMAGE_NAME \
--network-interface subnet-name=$NET-subnet,nat-ip-version=ipv4 \
--ssh-key ~/.ssh/id_rsa.pub \
--async

yc compute instances show $VM_NAME
  • Для создания VM из последней версии образа Postgres Pro Standard 11/12, доступного в Яндекс.Облако Marketplace, выполняем команды:
yc compute image list --folder-id standard-images | grep -E "(FAMILY|pgpro)" | awk {'print $6'}

--- Postgres Pro Standard Database 11
IMAGE_FAMILY=pgpro-std11-centos7
или
--- Postgres Pro Standard Database 12
IMAGE_FAMILY=pgpro-std12-centos7

VM_NAME=myvm-std-xx

yc compute instance create \
--name $VM_NAME \
--hostname $VM_NAME \
--cores 2 \
--memory 2 \
--create-boot-disk name=$VM_NAME-osdisk,image-folder-id=standard-images,image-family=$IMAGE_FAMILY \
--network-interface subnet-name=$NET-subnet,nat-ip-version=ipv4 \
--ssh-key ~/.ssh/id_rsa.pub \
--async

yc compute instances show $VM_NAME

Вместо ‘xx’ используем '01', '02', '03' и т.д.


Подключение к VM

  • Подключаемся к VM с помощью private ssh-ключа, используя public IP-адрес VM ($VM_IP_ADDRESS):
yc compute instances list

VM_IP_ADDRESS=$(yc compute instance show --name $VM_NAME | grep -E ' +address' | tail -n 1 | awk '{print $2}')
echo $VM_IP_ADDRESS

ssh yc-user@$VM_IP_ADDRESS

Проверка статуса сервиса БД Postgres Pro

  • Проверяем статус сервиса БД Postgres Pro:
sudo systemctl -l status postgrespro-std-11.service
или
sudo systemctl -l status postgrespro-std-12.service
  • Чтобы остановить/стартовать сервис БД Postgres Pro используем команды:
sudo systemctl stop postgrespro-std-11.service
sudo systemctl start postgrespro-std-11.service
или
sudo systemctl stop postgrespro-std-12.service
sudo systemctl start postgrespro-std-12.service


Подключение к БД Postgres Pro

  • Переключаемся на пользователя ‘postgres’:
sudo su - postgres
  • Для подключения к БД Postgres Pro используем команду:
psql
  • Для выхода из ‘psql’ используем команду:
\q
  • Для возврата в интерфейс 'yc' дважды выполняем команду 'exit'


Внешний доступ к VM

  • При необходимости внешнего подключения к БД Postgres Pro открываем порт 5433:
ssh yc-user@$VM_IP_ADDRESS

sudo firewall-cmd --zone=public --add-port=5433/tcp
sudo firewall-cmd --zone=public --permanent --add-port=5433/tcp
sudo firewall-cmd --zone=public --list-ports

sudo systemctl restart firewalld.service
sudo systemctl -l status firewalld.service

exit
  • При необходимости внешнего подключения к серверу мониторинга БД открываем порты 80 и 443:
ssh yc-user@$VM_IP_ADDRESS

sudo firewall-cmd --zone=public --add-port=80/tcp
sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
sudo firewall-cmd --zone=public --add-port=443/tcp
sudo firewall-cmd --zone=public --permanent --add-port=443/tcp
sudo firewall-cmd --zone=public --list-ports

sudo systemctl restart firewalld.service
sudo systemctl -l status firewalld.service

exit


Внешнее подключение к БД Postgres Pro

  • Для внешнего подключения к БД Postgres Pro устанавливаем пароль пользователя 'postgres':
ssh yc-user@$VM_IP_ADDRESS

sudo su - postgres
psql -c "alter user postgres with encrypted password 'YOUR_POSTGRES_USER_PASSWORD'"
exit

exit
  • Для внешнего подключения к БД Postgres Pro с помощью 'psql' используем команду:
psql --host=$VM_IP_ADDRESS --port=5433 --username=postgres --dbname=postgres
  • Для внешнего подключения к БД Postgres Pro с помощью 'Pgadmin' при конфигурации сервера в меню ‘Pgadmin’ используем следующие параметры:
    • ‘mydb-xx’ для ‘Name'
    • ‘$VM_IP_ADDRESS’ для ‘Host’
    • '5433' для ‘Port’
    • ‘postgres’ для ‘Maintenance DB’
    • ‘postgres’ для ‘Username’

Вместо ‘xx’ используем '01', '02', '03' и т.д.

Вместо ‘$VM_IP_ADDRESS’ используем public IP-адрес VM.


Внешнее подключение к серверу мониторинга БД

  • Для подключения к серверу мониторинга БД устанавливаем пароль пользователя 'Admin':
ssh yc-user@$VM_IP_ADDRESS

sudo su - postgres
source .pgsql_profile
psql --dbname=zabbix --username=zabbix -c "update users set passwd=md5('YOUR_ZABBIX_ADMIN_PASSWORD') where alias='Admin'"
exit

exit
  • Внешнее подключение к серверу мониторинга БД по ссылке:

https://$VM_IP_ADDRESS/zabbix

Вместо ‘$VM_IP_ADDRESS’ используем public IP-адрес VM.


Изменение конфигурации VM

Рассмотрим варианты изменения конфигурации VM:

1) Необходимо изменить тип VM для увеличения вычислительной мощности VM

  • Для автоматического изменения значений параметров БД Postgres Pro перед увеличением размера VM нужно удалить файл $PGDATA/postgresql.tune.lock:
ssh yc-user@$VM_IP_ADDRESS

sudo su - postgres
cp $PGDATA/postgresql.auto.conf $PGDATA/postgresql.auto.conf.ORIG
rm $PGDATA/postgresql.tune.lock
exit

exit
  • Чтобы изменить тип VM, выполняем:
yc compute instances show $VM_NAME

yc compute instances stop $VM_NAME

yc compute instances update $VM_NAME \
--cores 4 \
--memory 4

yc compute instances start $VM_NAME

yc compute instances list

VM_IP_ADDRESS=$(yc compute instance show --name $VM_NAME | grep -E ' +address' | tail -n 1 | awk '{print $2}')
echo $VM_IP_ADDRESS

ssh yc-user@$VM_IP_ADDRESS

cat /proc/cpuinfo
cat /proc/meminfo

exit

2) Необходимо увеличить размер ОС-диска, например, до 80 ГБ

  • Получаем информацию об ОС-диске:
yc compute disks show $VM_NAME-osdisk
  • Временно останавливаем VM:
yc compute instances stop $VM_NAME
  • Увеличиваем размер ОС-диска:
yc compute disks update $VM_NAME-osdisk \
--size 80
  • Проверяем обновленную информацию об ОС-диске:
yc compute disks show $VM_NAME-osdisk
  • Стартуем VM:
yc compute instances start $VM_NAME
  • Подключаемся к VM:
yc compute instances list

VM_IP_ADDRESS=$(yc compute instance show --name $VM_NAME | grep -E ' +address' | tail -n 1 | awk '{print $2}')
echo $VM_IP_ADDRESS

ssh yc-user@$VM_IP_ADDRESS

df -h /

exit

3) Необходимо использовать выделенный диск для хранения файлов БД Postgres Pro, например, с целью повышения производительности

  • Создаем новый диск размером 200 ГБ и подключаем его к VM:
yc compute disks create \
--name $VM_NAME-datadisk \
--size 200 \
--type network-hdd \
--async

yc compute disks list

yc compute instances attach-disk \
--name $VM_NAME \
--disk-name $VM_NAME-datadisk \
--async

yc compute disks list
  • Подключаемся к VM:
ssh yc-user@$VM_IP_ADDRESS
  • Останавливаем сервис БД Postgres Pro и проверяем его статус:
sudo systemctl stop postgrespro-std-11.service
sudo systemctl -l status postgrespro-std-11.service
или
sudo systemctl stop postgrespro-std-12.service
sudo systemctl -l status postgrespro-std-12.service
  • Создаем точку монтирования новой файловой системы:
sudo mkdir /PGDATA
  • С помощью утилиты 'fdisk' определяем имя устройства, назначенного новому диску (в нашем случае это /dev/vdb):
sudo fdisk -l
  • На этом диске создаем один раздел максимального размера, на разделе создаем файловую систему:
(echo n; echo p; echo 1; echo ; echo ; echo w) | sudo fdisk /dev/vdb
sudo mkfs -t ext4 /dev/vdb1
  • Для файловой системы раздела выделенного диска создаем запись в файле /etc/fstab и монтируем файловую систему:
sudo sh -c "echo '`sudo blkid -o export /dev/vdb1 | grep UUID` /PGDATA ext4 defaults,nofail,barrier=0 1 2' >> /etc/fstab"
sudo mount /PGDATA
  • Создаем директорию 'data' на новой файловой системе и устанавливаем для нее необходимые разрешения:
sudo mkdir /PGDATA/data
sudo chown postgres:postgres /PGDATA/data
sudo chmod 0700 /PGDATA/data
  • Переключаемся на пользователя ‘postgres’ и переносим файлы БД Postgres Pro на новую файловую систему:
sudo su - postgres
mv /var/lib/pgpro/std-11/data/* /PGDATA/data; rmdir /var/lib/pgpro/std-11/data; ln -s /PGDATA/data /var/lib/pgpro/std-11/data
или
mv /var/lib/pgpro/std-12/data/* /PGDATA/data; rmdir /var/lib/pgpro/std-12/data; ln -s /PGDATA/data /var/lib/pgpro/std-12/data
exit
  • Стартуем сервис БД Postgres Pro и проверяем его статус:
sudo systemctl start postgrespro-std-11.service
sudo systemctl -l status postgrespro-std-11.service
или
sudo systemctl start postgrespro-std-12.service
sudo systemctl -l status postgrespro-std-12.service
  • Выполняем перезагрузку VM, проверяем автоматическое монтирование файловой системы и статус сервиса БД Postgres Pro:
sudo reboot

ssh yc-user@$VM_IP_ADDRESS

sudo mount | grep /PGDATA
sudo df -h /PGDATA

sudo systemctl -l status postgrespro-std-11.service
или
sudo systemctl -l status postgrespro-std-12.service

Вместо ‘xx’ используем '01', '02', '03' и т.д.

4) Автоматический перезапуск сервиса базы данных в случае аварии

  • Добавляем настройку автоматического перезапуска сервиса базы данных в конфигурационном файле systemd и перезапускаем сервис базы данных:
sudo sed -i '/KillSignal=/a Restart=on-failure' /usr/lib/systemd/system/postgrespro-std-11.service
sudo systemctl daemon-reload
sudo systemctl restart postgrespro-std-11.service
sudo systemctl -l status postgrespro-std-11.service
или
sudo sed -i '/KillSignal=/a Restart=on-failure' /usr/lib/systemd/system/postgrespro-std-12.service
sudo systemctl daemon-reload
sudo systemctl restart postgrespro-std-12.service
sudo systemctl -l status postgrespro-std-12.service


Резервное копирование VM

 


Состав VM Postgres Pro Standard 11/12:

ОС - Linux CentOS 7.x (64-бит)

  • учетная запись 'postgres'
  • учетная запись 'zabbix'
  • учетная запись 'mamonsu'

Размер ОС-диска - 10 ГБ

  • файловая система xfs ‘/’ (/dev/vda1) - 10 ГБ

Основная БД Postgres Pro Standard

  • версия БД: 11/12
  • TCP-порт: 5433 (открыт на firewall)
  • конфигурация: /var/lib/pgsql/.pgpro_profile
  • учетная запись: 'postgres'

Мониторинг БД (сервер)

  • версия zabbix-server: 4.x
  • TCP-порты: 80/443 (открыт на firewall)
  • учетная запись: 'Admin'

Мониторинг БД (агент)

  • версия zabbix-agent: 4.x
  • версия mamonsu-agent: 2.x
  • конфигурация: /etc/mamonsu/agent.conf

Вспомогательная БД PostgreSQL (в качестве БД для zabbix-server)

  • версия БД: 11/12
  • TCP-порт: 5432
  • конфигурация: /var/lib/pgsql/.pgsql_profile
  • учетная запись: 'postgres'


Ссылки на документацию