Apache Ignite потеря данных, когда один узел выходит из строя - PullRequest
1 голос
/ 09 апреля 2019

Я новичок в Ignite и пытаюсь проверить качество данных и доступность кластера Ignite.

Я использую приведенную ниже конфигурацию xml для настройки кластера,

<property name="discoverySpi">
        <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
            <property name="socketTimeout" value="50000" />
            <property name="networkTimeout" value="50000" />
            <property name="reconnectCount" value="5" />
            <property name="ipFinder">
                <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
                    <property name="addresses">
                        <list>
                            <value>x.x.x.1:47500..47509</value>
                            <value>x.x.x.2:47500..47509</value>
                        </list>
                    </property>
                </bean>
            </property>
        </bean>
    </property>
</bean>

Такжеи j CacheConfiguration -

<bean id="cache-template-bean" class="org.apache.ignite.configuration.CacheConfiguration">
                <property name="name" value="CACHE_TEMPLATE*"/>
                <property name="cacheMode" value="PARTITIONED" />
                <property name="backups" value="1" />
             <!--   <property name="backups" value="2" />
                <property name="backups" value="3" /> -->
                <property name="atomicityMode" value="TRANSACTIONAL" />
                <property name="writeSynchronizationMode" value="PRIMARY_SYNC" />
                <property name="rebalanceBatchSize" value="#{4 * 1024 * 1024}" />
                <property name="rebalanceMode" value="ASYNC" />
                <property name="statisticsEnabled" value="true" />
                <property name="rebalanceBatchesPrefetchCount" value="4" />
                <property name="defaultLockTimeout" value="5000" />
                <property name="readFromBackup" value="true" />
                <property name="queryParallelism" value="6" />
                <property name="nodeFilter">
                 <bean class="org.apache.ignite.util.AttributeNodeFilter">
                        <constructor-arg>
                            <map>
                                <entry key="ROLE" value="data.compute"/>
                            </map>
                        </constructor-arg>
                    </bean>
                </property>
            </bean>

Мои сценарии:

  1. Загрузка 5 миллионов данных, когда все 3 узла
  2. Сброс одного узла
  3. Количество показывает 3,75 миллиона.(Потеря данных)
  4. Увеличение количества узлов снова составляет 5 миллионов.

Я попытался выполнить резервное копирование 1,2,3, все привело к той же потере данных.Согласно документам Ignite, похоже, что потеря данных не должна произойти.Если это исправлено, я могу попробовать добавить данные, когда узел не работает, и проверить, как он себя ведет.

Есть предложения, пожалуйста?

Ash

1 Ответ

0 голосов
/ 10 апреля 2019

Основная идея базовой топологии и постоянства состоит в том, чтобы предотвратить ненужную перебалансировку и хранить данные только на указанных узлах сервера.Когда базовый узел остановился, ожидается, что он скоро вернется, и процесс перебалансировки не будет запущен.Вы можете исключить узел из базовой линии, используя утилиту api или control.sh.

IgniteCache.size () возвращает количество первичных записей.Поэтому, когда базовый узел остановлен, size () показывает меньшее число, указывающее, что число первичных записей недоступно.

В вашем случае данные не теряются по двум причинам:1. Данные сохраняются в резервных записях на живых базовых узлах.2. Первичные и резервные записи, расположенные на остановленном узле, вернутся в кластер после запуска узла.

[1] https://apacheignite.readme.io/docs/baseline-topology

...