Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在简单的ApacheIgnite集群中的所有节点上完全复制数据?_Ignite - Fatal编程技术网

如何在简单的ApacheIgnite集群中的所有节点上完全复制数据?

如何在简单的ApacheIgnite集群中的所有节点上完全复制数据?,ignite,Ignite,我正在尝试设置一个简单的2节点集群,其中所有数据都完全同步并持久化到所有节点上的磁盘,但我无法确定实现这一点的配置 版本:ApacheIgnite2.8.0 以下是我努力实现的目标: 我的应用程序实例可以连接到群集中的任何节点并执行CRUD操作。如果ignite集群中的一个节点死亡,应用程序应该能够连接到另一个节点,并且所有数据都应该在那里可用。 这是一个流量最小的小数据集,所以我不担心性能,也不担心一致性 以下是我的配置: ..... ..... <bean id

我正在尝试设置一个简单的2节点集群,其中所有数据都完全同步并持久化到所有节点上的磁盘,但我无法确定实现这一点的配置

版本:ApacheIgnite2.8.0

以下是我努力实现的目标: 我的应用程序实例可以连接到群集中的任何节点并执行CRUD操作。如果ignite集群中的一个节点死亡,应用程序应该能够连接到另一个节点,并且所有数据都应该在那里可用。 这是一个流量最小的小数据集,所以我不担心性能,也不担心一致性

以下是我的配置:

    .....
    .....
    <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration"><property name="cacheConfiguration">
        <bean class="org.apache.ignite.configuration.CacheConfiguration">              
            <property name="name" value="myCache"/>
            <property name="cacheMode" value="REPLICATED"/>
            <property name="backups" value="1"/>
            <property name="rebalanceMode" value="SYNC"/>
            <property name="writeSynchronizationMode" value="FULL_SYNC"/>
            <property name="partitionLossPolicy" value="READ_ONLY_SAFE"/>
        </bean>
    </property>

    <!-- Enabling Apache Ignite Persistent Store. -->
    <property name="dataStorageConfiguration">
        <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
            <property name="defaultDataRegionConfiguration">
                <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                    <property name="persistenceEnabled" value="true"/>
                </bean>
            </property>
            <property name="walMode" value="FSYNC"/>
        </bean>
    </property>
    .....
    <!-- left out the discoverySpi config for brevity, it's just a multicast ip finder setup -->
    .....
。。。。。
.....
.....
.....
我观察到:

我清除每个节点上的所有数据(/work directory)以重新开始。我第一次启动两个节点,激活集群(基线拓扑为2),使用JDBC客户机(例如DBeaver)和JDBC精简驱动程序连接,创建一个表,插入一些数据

我可以看到所有的数据,我连接到哪个节点

我现在杀死其中一个节点。连接到活动节点时,我只能看到部分数据。 通过我的配置,我希望所有数据都能备份并可用。或者,由于partitionLossPolicy,如果数据还没有同步,并且我正在尝试读取数据,我希望得到一个异常


这似乎是可能的,我在这里遗漏了什么?

Ignite有多种不同的创建缓存的方法。这里的问题是您(无意中)使用了其中两个

首先,创建一个名为
myCache
的缓存。这是一个复制缓存,能够在服务器节点出现故障时生存下来

然后使用SQL创建缓存。这与上面的缓存不同,即使您将其称为
myCache
。默认情况下是分区缓存,这就是您看到数据丢失的原因

要使用SQL创建复制缓存,需要使用WITH子句:

创建带有“template=replicated”的表ignite(id长主键,名称VARCHAR);

(您也可以将
backups=1
改为,这将为您提供一个分区缓存,可以在一个服务器节点出现故障时生存下来。)

Ignite有多种不同的创建缓存的方法。这里的问题是您(无意中)使用了其中两个

首先,创建一个名为
myCache
的缓存。这是一个复制缓存,能够在服务器节点出现故障时生存下来

然后使用SQL创建缓存。这与上面的缓存不同,即使您将其称为
myCache
。默认情况下是分区缓存,这就是您看到数据丢失的原因

要使用SQL创建复制缓存,需要使用WITH子句:

创建带有“template=replicated”的表ignite(id长主键,名称VARCHAR);

(您也可以将
backups=1
改为,这将为您提供一个分区缓存,可以在一个服务器节点出现故障时生存。)

这可能与基线拓扑有关,您是否尝试在节点加入或离开时调整基线拓扑?您所说的“我激活集群,我创建表”是什么意思?您可以在XML中创建一个复制缓存,该缓存应该能够在节点出现故障时生存。您是说您创建了另一个缓存(可能使用SQL?),而这就是您在中看到的数据丢失的缓存?@Alamar-据我所知,BLT确定哪些节点将实际将数据持久化到磁盘,因此,这两个节点应该在BLT中。如果一个节点死了,我希望(死的节点的)所有数据都已复制到另一个节点。@StephenDarlington-我应该更清楚这一点。因此:1-第一次启动两个节点后,您必须手动“激活”集群(如果我理解正确,这也会设置BLT,这是一项1次手动任务)。2-我连接一个jdbc客户机(jdbc瘦驱动程序)并使用sql创建一个表。我还插入了一些记录。然后,我可以使用jdbc连接到任意一个节点,查询该表,然后查看所有记录。3-如果我现在杀死任何节点,并且再次连接到“活动”节点,我将只看到一些记录。因此,并非所有数据都被复制。这可能与基线拓扑有关,您是否尝试在节点加入或离开时调整基线拓扑?您所说的“我激活集群,我创建表”是什么意思?您可以在XML中创建一个复制缓存,该缓存应该能够在节点出现故障时生存。您是说您创建了另一个缓存(可能使用SQL?),而这就是您在中看到的数据丢失的缓存?@Alamar-据我所知,BLT确定哪些节点将实际将数据持久化到磁盘,因此,这两个节点应该在BLT中。如果一个节点死了,我希望(死的节点的)所有数据都已复制到另一个节点。@StephenDarlington-我应该更清楚这一点。因此:1-第一次启动两个节点后,您必须手动“激活”集群(如果我理解正确,这也会设置BLT,这是一项1次手动任务)。2-我连接一个jdbc客户机(jdbc瘦驱动程序)并使用sql创建一个表。我还插入了一些记录。然后,我可以使用jdbc连接到任意一个节点,查询该表,然后查看所有记录。3-如果我现在杀死任何节点,并且再次连接到“活动”节点,我将只看到一些记录。因此,并不是所有的数据都被复制。这正是我所需要的,它与您的建议完美地结合在一起。非常感谢你,你为我节省了很多时间!对于遇到这种情况的其他人,如果您仔细阅读CREATE表格上的说明,这正是我所需要的,它与您的建议完美配合。T