ignite - 如何在简单的 apache ignite 集群中的所有节点上完全复制数据?
问题描述
我正在尝试设置一个简单的 2 节点集群,其中所有数据都完全同步并保存到所有节点上的磁盘,但我无法弄清楚实现这一点的配置。
版本:apache 点燃 2.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 -->
.....
我观察到的:
我清除每个节点上的所有数据(/工作目录)以重新开始。我第一次启动两个节点,激活集群(基线拓扑为 2),使用带有 jdbc 瘦驱动程序的 JDBC 客户端(例如 DBeaver)进行连接,然后创建一个表,插入一些数据。
我可以看到所有数据都在那里,无论我连接到哪个节点。
我现在杀死其中一个节点。连接到实时节点我只看到一些数据。使用我的配置,我希望所有数据都能备份并可用。或者,由于 partitionLossPolicy,如果数据尚未同步并且我正在尝试读取它,我希望得到一个异常。
看来这应该是可能的,我在这里错过了什么?
解决方案
Ignite 有多种不同的方式来创建缓存。这里的问题是您(无意中)使用了其中两个。
首先,您创建一个名为myCache
. 这是一个复制的缓存,并且能够在服务器节点发生故障时幸存下来。
然后使用 SQL 创建缓存。这和上面的缓存不一样,即使你调用了它myCache
。默认是分区缓存,这就是您看到数据丢失的原因。
要使用 SQL 创建复制缓存,您需要使用 WITH 子句:
CREATE TABLE ignite (id LONG PRIMARY KEY, name VARCHAR) WITH “template=replicated”;
(您也可以backups=1
改为,这将为您提供一个分区缓存,该缓存可以在一个服务器节点出现故障时继续存在。)
推荐阅读
- c++ - 将 unsigned int 的最大值转换为 int 并期望结果为-1 是否可移植?
- node.js - node-windows权限被拒绝-编译后不请求权限?
- c++ - 如果服务器每秒发送大约 180,000 字节的数据包,我是否需要考虑使用 IOCP 服务器和航位推算?
- python - 如何在字段上定义带有类型提示的 Python 类
- flutter - Image.network 或 NetworkImage 中的图像故障
- eclipse - eclipse为什么在编辑文件之前java文件中的某些代码有背景色
- javascript - 用于获取数据的 mongodb api
- java - 在许多片段中使用 BroadcastReceiver
- python - 为什么 Python int 有一个 __round__ 方法?
- c# - 在 C# 中,如何允许用户根据各自的角色使用不同的方法?