Подключения
Для настройки кластера 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-адресов, которые прослушивает сервер.
В Enterprise Edition 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'
Подробнее см. в ссылка.
Для локальной разработки взаимодействие между членами кластера можно обеспечить с помощью 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-сертификаты до тех пор, пока не потребуется переподключение — например, из-за истечения срока действия сертификата или проблем с сетью.