18.11. RDMA-соединения
Postgres Pro Enterprise обеспечивает поддержку клиент-серверных соединений с использованием технологии RDMA (Remote Direct Memory Access, Удалённый прямой доступ к памяти). Для этого вы должны настроить механизмы RDMA на стороне клиента и сервера.
Технология RDMA даёт возможность передавать данные напрямую в память удалённого компьютера, минуя ядро операционной системы. Это позволяет снизить нагрузку на процессор, сократить сетевые задержки в распределённых системах, и, как следствие, увеличить производительность.
18.11.1. Активизация в Postgres Pro Enterprise клиент-серверных соединений RDMA
Для клиент-серверных соединений RDMA в Postgres Pro Enterprise используется libpq с API rsocket. Чтобы включить поддержку соединений RDMA для вашей СУБД Postgres Pro Enterprise через rsocket, вы должны настроить и клиентскую, и серверную систему следующим образом:
- Отключите выгрузку памяти в системах, к которым вы намерены подключаться. Например, если вы запускаете Postgres Pro Enterprise в виде службы systemd, выполните следующее: - Добавьте следующую строку в файл службы - postgrespro-ent-11.service:- LimitMEMLOCK=infinity 
- Перезагрузите конфигурацию systemd, чтобы изменение вступило в силу: - systemctl daemon-reload 
 
- На стороне сервера добавьте GUC-переменную listen_rdma_addresses в файл конфигурации - postgresql.confи укажите в ней IP-адреса, по которым сервер будет принимать RDMA-подключения через- rsocketот клиентских приложений. Например:- listen_rdma_addresses = 'server1,172.17.3.21' - Вы можете задать в ней список имён или IP-адресов сетевых интерфейсов через запятую. Если присвоить ей - *, RDMA-подключения через- rsocketбудут приниматься по всем доступным IP-интерфейсам.- Важно- Так как для всех подключений используется один порт, задаваемый переменной - port, во избежание конфликтов в параметрах- listen_addressesи- listen_rdma_addressesнеобходимо задать различные IP-адреса.
- На стороне клиента измените параметры подключения libpq для использования API - rsocket. Это можно сделать одним из следующих способов:- Добавьте следующие параметры - rsocketв файл соединений служб libpq,- pg_service.conf:- # конфигурация rsocket [rsocket] host= - серверport=5433 user=- имя_пользователяwith_rsocket=true- Когда клиент подключается к серверу через libpq, имя службы, указанное в квадратных скобках в файле - pg_service.conf, должно быть задано в параметре- serviceили в соответствующей переменной окружения- PGSERVICE. Этот подход позволяет динамически управлять типом подключения клиента к серверу.
- Также вы можете установить переменную окружения - WITH_RSOCKET:- export WITH_RSOCKET=true - В этом случае API - rsocketбудет использоваться для всех соединений клиента с сервером.
 
18.11.2. Использование RDMA с pg_dump
Чтобы подключить pg_dump к серверу, используя RDMA через rsocket, выполните:
- Настройте сервер, как описано в Подразделе 18.11.1. 
- Установите переменную окружения - WITH_RSOCKET:- export WITH_RSOCKET=true 
После завершения настройки запустите pg_dump как обычно. Например:
pg_dumpбаза_данных-hсервер> db.sql
18.11.3. Использование RDMA для репликации ведущий-ведомый
Для запуска репликации ведущий-ведомый с использованием RDMA-соединений через rsocket необходимо настроить ведущий и ведомый узлы. Например, чтобы разрешить клиентские подключения к серверу 172.17.3.21 с адресов 172.17.3.0/24 от имени пользователя postgres, нужно проделать следующее:
Чтобы настроить ведущий узел для репликации с использованием соединений RDMA rsocket:
- Отредактируйте файл - pg_hba.confтак, чтобы сервер принимал подключения с определённых IP-адресов. Например:- host all postgres 172.17.3.0/24 md5 host replication postgres 172.17.3.0/24 md5 
- Отредактируйте файл - postgresql.conf:- listen_rdma_addresses = '172.17.3.21' wal_level = hot_standby hot_standby = on max_wal_senders = 1 - В переменной - listen_rdma_addressesзадаются IP-адреса, по которым сервер будет принимать RDMA-подключения через- rsocket.
- Перезапустите ведущий узел. 
Подсказка
Если вы установите GUC-переменные log_connections и log_disconnections, в файл журнала будет выводиться подробная информации обо всех подключениях и отключениях клиентов, соответственно. Например: 
LOG: connection received: host=172.17.3.22 port=37709 with_rsocket=true LOG: disconnection: session time: 0:00:00.622 user=postgres database= host=172.17.3.22 port=37709 with_rsocket=true
Для настройки ведомого узла выполните:
- Установите переменную окружения - WITH_RSOCKET:- export WITH_RSOCKET=true 
- Скопируйте данные с ведущего узла, используя pg_basebackup: - pg_basebackup -D - каталог_данных-x -R -h 172.17.3.21 -U postgres- Все данные должны оказаться на ведомом узле в пути, который определяет параметр - каталог_данных.
- Убедитесь в том, что в файле - каталог_данных/recovery.conf- with_rsocket.- standby_mode = 'on' primary_conninfo = 'user=postgres host=172.17.3.21 port=5432 with_rsocket=true' 
- Очистите параметр - listen_rdma_addressesв файле- postgresql.conf:- listen_rdma_addresses = '' 
Завершив настройку, запустите ведомый узел. После этого репликация будет выполняться через RDMA с использованием API rsocket.