Подключения
Для настройки кластера Tarantool необходимо обеспечить взаимодействие между его экземплярами, независимо от того, работают ли они на одном или на разных хостах. Для этого требуется настроить параметры подключения, включающие:
- Один или несколько URI для прослушивания входящих запросов.
- URI для объявления экземпляра другим членам кластера. Этот URI сообщает другим членам кластера, как подключиться к текущему экземпляру Tarantool.
- (Необязательно) Параметры SSL для защиты подключений между экземплярами.
Настройка параметров подключения также требуется для обеспечения взаимодействия кластера Tarantool с внешними системами. Например, это может быть администрирование членов кластера с помощью tt, управление кластерами с помощью Tarantool Cluster Manager или использование коннекторов для разных языков программирования.
В этом разделе описано, как задать параметры подключения в разделе iproto конфигурации YAML.
Чтобы настроить URI для прослушивания входящих запросов, используйте параметр конфигурации iproto.listen.
В примере ниже показано, как задать IP-адрес прослушивания
127.0.0.1:3301 для instance001:
instance001:iproto:listen:- uri: '127.0.0.1:3301'
В этом примере instance001 прослушивает два IP-адреса:
instance001:iproto:listen:- uri: '127.0.0.1:3301'- uri: '127.0.0.1:3302'
В iproto.listen можно передать только значение порта:
instance001:iproto:listen:- uri: '3301'
В этом случае данный порт используется для всех IP-адресов, которые прослушивает сервер.
SSL для подключения можно включить с помощью раздела params указанного URI:
instance001:iproto:listen:- uri: '127.0.0.1:3301'params:transport: 'ssl'ssl_cert_file: 'certs/server.crt'ssl_key_file: 'certs/server.key'
Подробнее см. в Защита подключений с помощью SSL.
Для локальной разработки взаимодействие между членами кластера можно обеспечить с помощью Unix-сокетов:
instance001:iproto:listen:- uri: 'unix/:./var/run/{{ instance_name }}/tarantool.iproto'
URI для объявления (iproto.advertise.*) сообщает другим членам кластера или клиентам, как подключиться к текущему экземпляру Tarantool:
iproto.advertise.peerопределяет, как объявить экземпляр другим членам кластера.iproto.advertise.shardingопределяет, как объявить экземпляр роутеру и ребалансировщику.iproto.advertise.clientпринимает URI, используемый для объявления экземпляра клиентам.
iproto.advertise.<peer_or_sharding> может
включать учетные данные, необходимые для подключения к этому экземпляру,
URI для прослушивания входящих запросов и параметры SSL.
Если iproto.advertise.<peer_or_sharding>.uri не задан явно,
используется URI для прослушивания этого
экземпляра. В этом случае необходимо как минимум указать учетные данные
для подключения к этому экземпляру.
В примере ниже параметр iproto.advertise.peer используется, чтобы
сообщить другим членам набора реплик, что для подключения к текущему
экземпляру следует использовать пользователя replicator:
iproto:advertise:peer:login: replicator
В шардированном кластере iproto.advertise.sharding указывает, что
роутер и ребалансировщик должны использовать пользователя storage для
подключения к хранилищам:
iproto:advertise:peer:login: replicatorsharding:login: storage
При необходимости URI для объявления можно задать явно с помощью
параметра iproto.advertise.
В примере ниже iproto.listen включает два URI, которые можно использовать для
подключения к instance001, но только второй используется для
объявления этого экземпляра другим членам набора реплик:
instance001:iproto:listen:- uri: '127.0.0.1:3301'- uri: '127.0.0.1:4401'advertise:peer:uri: '127.0.0.1:4401'
Параметр iproto.advertise.<peer_or_sharding>.uri может также принимать
FQDN вместо IP-адреса:
instance001:iproto:listen:- uri: '192.168.0.101:3301'advertise:peer:uri: 'server001.example.com:3301'
Об особенностях настройки параметров SSL для URI для объявления см. Особенности URI для объявления.
Tarantool поддерживает использование SSL-подключений для шифрования
обмена данными между клиентом и сервером в целях повышения безопасности.
Чтобы включить SSL, используйте параметры (uri.params.*), которые
можно применять как к URI для прослушивания, так и к URI для объявления.
В примере ниже показано, как включить шифрование трафика с помощью самоподписанного сертификата сервера. Для каждого экземпляра указаны следующие параметры:
- ssl_cert_file: путь к файлу SSL-сертификата.
- ssl_key_file: путь к файлу закрытого SSL-ключа.
instances:
Полный пример доступен здесь: ssl_without_ca.
В примере ниже показано, как включить шифрование трафика с помощью сертификата сервера, подписанного доверенным центром сертификации. В этом случае все члены набора реплик проверяют подлинность друг друга.
Для каждого экземпляра указаны следующие параметры:
- ssl_ca_file: путь к файлу доверенных центров сертификации (CA).
- ssl_cert_file: путь к файлу SSL-сертификата.
- ssl_key_file: путь к файлу закрытого SSL-ключа.
- ssl_password (
instance001): пароль для зашифрованного закрытого SSL-ключа. - ssl_password_file (
instance002иinstance003): текстовый файл, содержащий пароли для зашифрованных SSL-ключей. - ssl_ciphers: разделенный двоеточиями список наборов шифров SSL, которые могут использоваться для подключения.
instances:instance001:iproto:listen:- uri: '127.0.0.1:3301'params:transport: 'ssl'ssl_ca_file: 'certs/root_ca.crt'ssl_cert_file: 'certs/instance001/server001.crt'ssl_key_file: 'certs/instance001/server001.key'ssl_password: 'qwerty'ssl_ciphers: 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256'instance002:iproto:listen:- uri: '127.0.0.1:3302'params:transport: 'ssl'ssl_ca_file: 'certs/root_ca.crt'ssl_cert_file: 'certs/instance002/server002.crt'ssl_key_file: 'certs/instance002/server002.key'ssl_password_file: 'certs/ssl_passwords.txt'ssl_ciphers: 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256'instance003:iproto:listen:- uri: '127.0.0.1:3303'params:transport: 'ssl'ssl_ca_file: 'certs/root_ca.crt'ssl_cert_file: 'certs/instance003/server003.crt'ssl_key_file: 'certs/instance003/server003.key'ssl_password_file: 'certs/ssl_passwords.txt'ssl_ciphers: 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256'
Полный пример доступен здесь: ssl_with_ca.
Параметры SSL для URI для объявления следует задавать только в том случае, если URI для объявления указан явно. В противном случае используются параметры SSL URI для прослушивания, и дополнительная настройка не требуется.
Настройка параметров SSL для URI для объявления зависит от того, задан
ли файл доверенных центров сертификации (CA). Без файла CA достаточно
задать для параметра
iproto.advertise.<peer_or_sharding>.params.transport значение ssl,
как показано ниже:
instance001:iproto:listen:- uri: '192.168.0.101:3301'params:transport: 'ssl'ssl_cert_file: 'certs/server.crt'ssl_key_file: 'certs/server.key'advertise:peer:uri: 'server.example.com:3301'params:transport: 'ssl'
Если для URI для прослушивания задан файл CA, также необходимо настроить
ssl_cert_file и ssl_key_file для этого URI для объявления:
instance001:iproto:listen:- uri: '192.168.0.101:3301'params:transport: 'ssl'ssl_ca_file: 'certs/root_ca.crt'ssl_cert_file: 'certs/instance001/server001.crt'ssl_key_file: 'certs/instance001/server001.key'advertise:peer:uri: 'server001.example.com:3301'params:transport: 'ssl'ssl_cert_file: 'certs/instance001/server001.crt'ssl_key_file: 'certs/instance001/server001.key'
Чтобы перезагрузить файлы SSL-сертификатов, указанные в конфигурации, откройте административную консоль и перезагрузите конфигурацию с помощью config.reload():
require('config'):reload()
Новые сертификаты будут использоваться для новых подключений. Существующие подключения продолжат использовать старые SSL-сертификаты до тех пор, пока не потребуется переподключение — например, из-за истечения срока действия сертификата или проблем с сетью.
Since: 3.9.0
Tarantool периодически проверяет файлы SSL-сертификатов, используемых для зашифрованных соединений, и выдает предупреждение для каждого сертификата, который невозможно прочитать, срок действия которого истекает или уже истек. Проверка выполняется сразу после применения конфигурации, а затем каждые 12 часов. Предупреждение появляется не позднее чем за 30 дней до истечения срока действия сертификата и остается актуальным после истечения срока действия. Проверяется только первый сертификат в PEM-файле.
Отслеживаются следующие файлы сертификатов:
iproto.ssl.ssl_cert— используется как SSL-сертификат по умолчанию для URIiproto.listenиiproto.advertise.*, для которыхssl_cert_fileне задан явно в собственныхparams.- (только Enterprise Edition)
config.etcd.ssl.ssl_cert, если в config.etcd.endpoints настроена конечная точка (endpoint) с включенным SSL. - (только Enterprise Edition)
ssl_cert_fileкаждой конечной точки с включенным SSL в config.storage.endpoints. - (только Enterprise Edition) SSL-сертификат, который координатор управляемого переключения при отказе использует для подключения к экземпляру набора реплик, если peer URI этого экземпляра SSL-включен. Эта проверка выполняется независимо от описанной выше и формирует отдельное оповещение о переключении при отказе (failover alert), а не предупреждение о некорректной конфигурации (configuration alert).
Если один и тот же файл сертификата используется более чем одним из перечисленных выше источников, в одном предупреждении перечисляются все они, например:
SSL certificate "/etc/tarantool/certs/server.crt" expires at2026-11-29T00:00:00Z (components: config_etcd, iproto)
Выданное предупреждение автоматически снимается, как только соответствующий файл сертификата заменяется, становится доступным для чтения или перестает использоваться всеми отслеживаемыми источниками. Чтобы обновить сертификат до истечения срока его действия, замените файл сертификата и перезагрузите конфигурацию с помощью config:reload() — проверка также выполняется сразу после перезагрузки, поэтому не нужно дожидаться следующей плановой проверки.