在启用本机持久性的情况下重新启动集群后,点燃搜索查询不返回结果

Ignite search query not returning results after Cluster restart with native persistence enabled

我们使用的是 GridGain 社区版:8.8.10,并使用 Apache Ignite 运算符在 Kubernetes 中创建了 Ignite 集群。我们还启用了本机持久性。

https://ignite.apache.org/docs/latest/installation/kubernetes/gke-deployment

在开发环境中,我们在夜间关闭集群并在早上启动。当集群出现时,它包含先前存储的数据。如果我们使用 key 搜索缓存,那么它 returns 结果,但是如果我们使用 Query API 进行部分搜索,那么它不会返回结果。我们检查了缓存大小,它与数据源记录大小相匹配。同样在我们使用缓存键搜索缓存之后,该条目在查询搜索结果中可用。

如果我们关闭 Ignite 集群的一个节点或客户端节点。 TextSearch 仍然有效。 TextSearch 仅在集群的所有节点都缩小然后使用现有磁盘放大时才起作用。

在冷启动 Ignite 集群后启用查询搜索是否需要任何配置?

<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
        <property name="metricsLogFrequency" value="300000"/>
        <property name="peerClassLoadingEnabled" value="true"/>
        <property name="clientMode" value="true"/>
        <property name="sqlConfiguration">
            <bean class="org.apache.ignite.configuration.SqlConfiguration">
                <property name="sqlGlobalMemoryQuota" value="300M"/>
                <property name="sqlQueryMemoryQuota" value="30M"/>
                <property name="sqlOffloadingEnabled" value="true"/>
            </bean>
        </property>
        <property name="workDirectory" value="/gridgain/work"/>

        <property name="dataStorageConfiguration">
            <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
                <!-- set the size of wal segments to 128MB -->
                <property name="walSegmentSize" value="#{128 * 1024 * 1024}"/>
                <!-- Set the page size to 8 KB -->
                <property name="pageSize" value="#{8 * 1024}"/>
                <property name="defaultDataRegionConfiguration">
                    <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                        <property name="name" value="Default_Region"/>
                        <!-- Memory region of 20 MB initial size. -->
                        <property name="initialSize" value="#{20 * 1024 * 1024}"/>
                        <!-- Memory region of 8 GB max size. -->
                        <property name="maxSize" value="#{8L * 1024 * 1024 * 1024}"/>
                        <!-- Enabling eviction for this memory region. -->
                        <property name="pageEvictionMode" value="RANDOM_2_LRU"/>
                        <property name="persistenceEnabled" value="true"/>
                        <property name="warmUpConfiguration">
                            <bean class="org.apache.ignite.configuration.LoadAllWarmUpConfiguration"/>
                        </property>
                        <!-- Increasing the buffer size to 1 GB. -->
                        <property name="checkpointPageBufferSize" value="#{1024L * 1024 * 1024}"/>
                    </bean>
                </property>
                <property name="walPath" value="/gridgain/wal"/>
                <property name="walArchivePath" value="/gridgain/wal"/>
            </bean>
        </property>
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder">
                        <property name="namespace" value="cache"/>
                        <property name="serviceName" value="cache-service"/>
                    </bean>
                </property>
                <property name="NetworkTimeout" value="30000"/>
            </bean>
        </property>
        <property name="communicationSpi">
            <bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
                <property name="slowClientQueueLimit" value="2000"/>
            </bean>
        </property>
        <property name="cacheConfiguration" ref="igniteCacheDefinition"/>
    </bean>

A​​pache Ignite 使用 A​​pache Lucene(目前是 7.4.0)在引擎盖下进行文本查询。一般来说,基于 Lucene 的索引利用 org.apache.lucene.store.Directory. In Apache Ignite it's a custom one. In turn it uses RAM-based GridLuceneOutputStream 的各种实现。基本上这意味着 Ignite 本机持久性目前不会对这些类型的索引起作用。

UPD:在为分区缓存配置备份的情况下,它应该作为常规索引工作。例如,如果您向基线拓扑添加一个附加节点,您会在新节点上看到 rebalance happening. Rebalance uses regular cache operations to insert entries. Lucene index would be built。相反,如果您从集群中删除一个节点,您仍将拥有包括文本索引在内的完整数据副本。