# 10: настройка сервера баз данных

#### Задание:

4\. Установка и настройка сервера баз данных

* a) В качестве серверов баз данных используйте сервера SRV-HQ и SRVBR
* b) Разверните сервер баз данных на базе Postgresql
  * a. Создайте базы данных prod, test, dev
    * i. Заполните базы данных тестовыми данными при помощи утилиты pgbench. Коэффицент масштабирования сохраните по умолчанию.
  * Создайте пользователей produser, testuser, devuser, каждому из пользователей дайте доступ к соответствующей базе данных.
  * b. Разрешите внешние подключения для всех пользователей.
  * c. Сконфигурируйте репликацию с SRV-HQ на SRV-BR

#### Выполнение:

**SVR-HQ:**

* Установка пакетов базы данных:

```
apt-get install -y postgresql16 postgresql16-server postgresql16-contrib
```

* Создаём системные базы данных:

```
/etc/init.d/postgresql initdb
```

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image.png)

* Включаем и добавляе в автозагрузку PostgreSQL:

```
systemctl enable --now postgresql
```

* Разрешаем доступ к PostgreSQL из сети:

```
vim /var/lib/pgsql/data/postgresql.conf
```

* * в конфигурационном файле находим строку "**listen\_addresses = 'localhost'**" и приводим её к следующему виду:

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%281%29.png)

* Перезапускаем PostgreSQL:

```
systemctl restart postgresql
```

* Проверяем:

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%282%29.png)

**Создаём базы данных и пользователей с необходимыми правами:**

* Для заведения пользователей и создания баз данных, необходимо переключиться в учётную запись "**postgres**":

```
psql -U postgres
```

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%283%29.png)

* * зададим пароль для пользователя "**postgres**":

```
ALTER USER postgres WITH ENCRYPTED PASSWORD 'P@ssw0rd';
```

* * Создаём базы данных "**prod**","**test**" и "**dev**":

```
CREATE DATABASE prod;
```

```
CREATE DATABASE test;
```

```
CREATE DATABASE dev;
```

* * Создаём пользователей "**produser**","**testuser**" и "**devuser**":

```
CREATE USER produser WITH PASSWORD 'P@ssw0rd';
```

```
CREATE USER testuser WITH PASSWORD 'P@ssw0rd';
```

```
CREATE USER devuser WITH PASSWORD 'P@ssw0rd';
```

* * Назначаем для каждой базы данных соответствующего владельца:
    * для базы данных "**prod**" назначаем владельцем пользователя "**produser**":

```
GRANT ALL PRIVILEGES ON DATABASE prod to produser;
```

* * * для базы данных "**test**" назначаем владельцем пользователя "**testuser**":

```
GRANT ALL PRIVILEGES ON DATABASE test to testuser;
```

* * * для базы данных "**dev**" назначаем владельцем пользователя "**devuser**":

```
GRANT ALL PRIVILEGES ON DATABASE dev to devuser;
```

* Заполняем базы данных тестовыми данными при помощи утилиты **pgbench:**

```
pgbench -U postgres -i prod
```

```
pgbench -U postgres -i test
```

```
pgbench -U postgres -i dev
```

* Проверяем:

```
psql -U postgres
```

```
\c prod
```

```
\dt+
```

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%284%29.png)

* * Аналогично и для других баз данных:

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%285%29.png)

* Настраиваем парольную аутентификацию для удалённого доступа:

```
vim /var/lib/pgsql/data/pg_hba.conf
```

* * добавляем следующую запись:

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%2814%29.png)

* перезапускаем PostgreSQL:

```
systemctl restart postgresql
```

**SRV-BR:**

* Установка пакетов базы данных:

```
apt-get install -y postgresql16 postgresql16-server postgresql16-contrib
```

* Проверяем:
  * подключаемся с **SRV-BR** к **SRV-HQ**:
    * из под пользователя "**produser**" к базе данных "**prod**":

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%287%29.png)

* * * из под пользователя "**testuser**" к базе данных "**test**":

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%288%29.png)

* * * из под пользователя "**devuser**" к базе данных "**dev**":

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%289%29.png)

**Настраиваем репликацию с SRV-HQ на SRV-BR:**

**SRV-HQ:**

* Открываем конфигурационный файл "**/var/lib/pgsql/data/postgresql.conf**":

```
vim /var/lib/pgsql/data/postgresql.conf
```

* * редактируем следующие параметры:

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%2810%29.png)

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%2811%29.png)

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%2812%29.png)

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%2813%29.png)

где:

**wal\_level** указывает, сколько информации записывается в WAL (журнал операций, который используется для репликации);

**max\_wal\_senders** — количество планируемых слейвов;

**max\_replication\_slots** — максимальное число слотов репликации;&#x20;

**hot\_standby** — определяет, можно или нет подключаться к postgresql для выполнения запросов в процессе восстановления;

**hot\_standby\_feedback** — определяет, будет или нет сервер slave сообщать мастеру о запросах, которые он выполняет.

* Перезапускаем службу postgresql:

```
systemctl restart postgresql
```

**SRV-BR:**

* Останавливаем службу postgres:

```
systemctl stop postgresql
```

* Удаляем содержимое каталога с данными:

```
rm -rf /var/lib/pgsql/data/*
```

* И реплицируем данные с **SRV-HQ** сервера:

```
pg_basebackup -h 10.0.10.2 -U postgres -D /var/lib/pgsql/data --wal-method=stream --write-recovery-conf
```

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%2815%29.png)

* Назначаем владельца:

```
chown -R postgres:postgres /var/lib/pgsql/data/
```

* Снова запускаем сервис postgresql:

```
systemctl start postgresql
```

**Проверяем репликацию:**

**SRV-HQ:**

* Создаём тестовую базу данных:

```
psql -U postgres
```

```
CREATE DATABASE test_replica;
```

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%2816%29.png)

**SRV-BR:**

* Смотрим список всех баз данных:

![](https://sysahelper.ru/pluginfile.php/250/mod_page/content/4/image%20%2817%29.png)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://seraphim.gitbook.io/volodyazetkin2024gitbook/2024-modul-b-1.-bazovaya-nastroika/10-nastroika-servera-baz-dannykh.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
