一个节点发生故障时Apache Ignite数据丢失

时间:2019-04-09 13:31:30

标签: ignite

我是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>

同样,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. 三个节点全部加载时加载了500万个数据
  2. 降低一个节点
  3. 该数字显示为375万。 (数据丢失)
  4. 重新增加节点数要达到500万。

我尝试备份1,2,3均导致相同的数据丢失。根据Ignite文档,似乎不会发生数据丢失。如果此问题解决,我可以尝试在节点关闭时添加数据并检查其行为。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

基线拓扑和持久性的主要思想是防止不必要的重新平衡,并且仅在指定的服务器节点中存储数据。当基准节点停止时,预计将很快恢复,并且不会触发重新平衡过程。您可以使用api或control.sh实用工具从基线中排除该节点。

IgniteCache.size()返回主条目的数量。因此,当基准节点停止时, size()会显示一个较小的数字,表示无法访问许多主要条目。

在您的情况下,数据不会由于两个原因而丢失:
1.数据保留在活动基准节点上的备份条目中。
2.节点启动后,位于已停止节点上的主条目和备份条目将返回到群集。

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