Настройка сети#
IPv4 и IPv6#
DataGrid поддерживает одновременно IPv4 и IPv6. Это может привести к проблемам, из-за которых узлы кластера утрачивают сетевую связанность. Чтобы избежать подобных проблем, ограничьте DataGrid на использование только IPv4 — для этого нужно установить JVM-параметр -[Djava.net](http://djava.net/).preferIPv4Stack=true.
Обнаружение узлов кластера#
В разделе описаны сетевые параметры механизма Discovery по умолчанию, в котором используется протокол TCP/IP для обмена сообщениями. Механизм реализован в классе TcpDiscoverySpi.
Пример, как изменить свойства механизма Discovery:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="localPort" value="8300"/>
</bean>
</property>
</bean>
</beans>
IgniteConfiguration cfg = new IgniteConfiguration();
TcpDiscoverySpi discoverySpi = new TcpDiscoverySpi().setLocalPort(8300);
cfg.setDiscoverySpi(discoverySpi);
Ignite ignite = Ignition.start(cfg);
Важные свойства TcpDiscoverySpi:
Внимание
Инициализируйте параметр IgniteConfiguration.localHost или TcpDiscoverySpi.localAddress с помощью адреса сетевого интерфейса, который будет использоваться для межузлового взаимодействия. По умолчанию узел слушает все доступные IP-адреса среды, в которой он запущен. Это может увеличить время обнаружения сбоев узла, если некоторые из его адресов недоступны для других узлов кластера.
Свойство |
Описание |
Значение по умолчанию |
|---|---|---|
|
Локальный IP-адрес хоста, который используется для обнаружения. При установке переопределяет параметр |
По умолчанию узел связывается со всеми доступными сетевыми адресами. Если доступен не замыкающийся адрес (non-loopback address), используется значение |
|
Локальный порт, к которому привязан узел. Если значение установлено не по умолчанию, другие узлы кластера должны знать этот порт, чтобы иметь возможность обнаружить узел |
|
|
Диапазон портов, с которыми узлы связываются, пока не найдут свободный. |
|
|
Задает время задержки при закрытии сокетов TCP, которые используются Discovery SPI. Подробности по настройке этого параметра можно посмотреть в Java |
|
|
Количество попыток узла установить или восстановить соединение с другим узлом |
|
|
Максимальное время ожидания для сетевых операций, мс |
|
|
Тайм-аут операций сокета. Используется для ограничения времени соединения и записи данных в сокет |
|
|
Тайм-аут определяет время для подтверждения сообщений об обнаружении. Если в течение этого времени подтверждение не получено, Discovery SPI пытается отправить сообщение повторно |
|
|
Тайм-аут определяет время, в течение которого узел ждет присоединения к кластеру. Если используется несовместимый IP Finder и узел не может подключиться ни к одному адресу из него, узел продолжает попытки до окончания тайм-аута. Если все адреса не отвечают, генерируется исключение и узел отключается. |
|
|
Определяет, как часто узел выводит статистику обнаружения в файлы журнала (logs). |
|
Обмен сообщениями между узлами#
Когда узлы обнаружили друг друга и сформировали кластер, они обмениваются сообщениями с помощью Communication SPI. Сообщения реализуют распределенные операции кластера, например выполнение задач, запросы, операции по изменению данных и так далее. Реализация Communication SPI по умолчанию использует протокол TCP/IP для обмена сообщениями (TcpCommunicationSpi).
Каждый узел открывает локальный порт для подключения и адрес, с которым соединяются и отправляют сообщения другие узлы. При запуске узел пытается связаться с указанным портом для подключения (значение по умолчанию — 47100). Если порт уже используется, узел увеличивает номер порта, пока не найдет свободный. Количество попыток связи устанавливается свойством localPortRange (значение по умолчанию — 100).
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="communicationSpi">
<bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
<property name="localPort" value="4321"/>
</bean>
</property>
</bean>
</beans>
TcpCommunicationSpi commSpi = new TcpCommunicationSpi();
// Установите локальный порт.
commSpi.setLocalPort(4321);
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setCommunicationSpi(commSpi);
// Запустите узел.
Ignite ignite = Ignition.start(cfg);
var cfg = new IgniteConfiguration
{
CommunicationSpi = new TcpCommunicationSpi
{
LocalPort = 1234
}
};
Ignition.Start(cfg);
В таблице ниже описаны некоторые важные свойства TcpCommunicationSpi. Полный список есть в официальной документации Apache Ignite.
Свойство |
Описание |
Значение по умолчанию |
|---|---|---|
|
Локальный адрес, с которым связывается Communication SPI. При установке переопределяет параметр |
— |
|
Локальный порт, который узел использует для коммуникации |
|
|
Диапазон портов, с которыми узлы пытаются последовательно связаться, пока не найдут свободный |
|
|
Устанавливает значение для опции сокета |
|
|
Максимальное время простоя соединения, после которого оно закрывается, мс |
|
|
Определяет необходимость принудительной установки двухсокетного соединения между узлами. Если задано значение |
|
|
Указывает, что вместо буфера heap-распределения NIO нужно выделить буфер прямого распределения NIO. Хотя у буферов прямого распределения лучше показатели по производительности, в некоторых случаях (особенно на Windows) они могут вызывать сбои JVM. Если в среде есть такая проблема, установите значение свойства |
|
|
Указывает, что при отправке сообщений вместо буфера heap-распределения NIO нужно использовать буфер прямого распределения NIO |
|
|
Размер буфера приема для сокетов, которые создал или принял Communication SPI. |
|
|
Размер буфера отправки для сокетов, которые создал или принял Communication SPI. |
|
Тайм-ауты подключения#
Свойства, которые определяют тайм-ауты подключения:
Свойство |
Описание |
Значение по умолчанию |
|---|---|---|
|
Тайм-аут для основных сетевых операций серверных узлов, мс |
|
|
Тайм-аут для основных сетевых операций клиентских узлов, мс |
|
В примере ниже показано, как установить тайм-аут обнаружения сбоев в конфигурации узла. Значения по умолчанию обеспечивают надежную работу механизма Discovery SPI в большинстве развертываний в локальных системах и контейнерах. В стабильных сетях с низкими показателями задержки можно установить значение параметра на примерно 200 мс, чтобы быстрее обнаруживать сбои и реагировать на них.
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="failureDetectionTimeout" value="5000"/>
<property name="clientFailureDetectionTimeout" value="10000"/>
</bean>
</beans>
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setFailureDetectionTimeout(5_000);
cfg.setClientFailureDetectionTimeout(10_000);