【问题标题】:Need to start up all gemfire members with persisted data first and at the same time需要先用持久化数据同时启动所有 gemfire 成员
【发布时间】:2020-06-09 07:44:02
【问题描述】:

当我之前在我的开发环境中对我的 Gemfire 集群调用 GFSH 关闭命令时,我仍然需要等待其余的 Gemfire 缓存服务器成员重新启动。为什么?

我以为当我调用 GFSH 关闭命令时,所有成员都会运行,所有在线数据存储都会在关闭之前同步,因此都保存最新的数据副本。因此,所有缓存服务器成员都将拥有最新记录。

软件配置

  1. 4 缓存服务器
  2. 2 定位器
  3. Gemfire 9.8.4
  4. 持久性复制区域

例如,如果我在 Gemfire 集群上调用了 GFSH 关机命令,然后在所有机器上执行关机。然后,我启动 2 个定位器和 3 个缓存服务器。它会等待剩余的缓存服务器吗?

加法

在缓存服务器日志中:

[info ...19:27:02.327...... <main> tid=0x1] Created oplog#9 drf for disk store pdxMetaDataStore
[info ...19:27:02.327...... <main> tid=0x1] Created oplog#9 crf for disk store pdxMetaDataStore
[info ...19:27:02.327...... <main> tid=0x1] Deleted oplog#8 crf for disk store pdxMetaDataStore
[info ...19:27:02.327...... <main> tid=0x1] Deleted oplog#8 drf for disk store pdxMetaDataStore
[info ...19:27:02.329...... <main> tid=0x1] recovery region initialization took 17 ms
[info ...19:27:02.355...... <main> tid=0x1] Initializing region PdxTypes
[info ...19:31:31.509...... <unicast-receiver,gf-1> receive new view: View[148.88.88.100....
.....
[info ...19:31:31.514...... Admitting member...
[info ...19:31:31.514...... Region PdxTypes requesting initial image from 148.88.88.100...
[info ...19:31:31.514...... PdxTypes is done getting image from 148.88.88.100.

PdxTypes 初始化的区域只有在另一个缓存服务器启动时才完成。

服务器缓存.xml

<disk-store name="pdxMetaDataStore" compaction-threshold="40" auto-compact="false" allow-force-compaction="true" max-oplog-size="75" queue-size="10000" time-interval="15" write-buffer-size="65535">
<disk-dirs>
  <disk-dir dir-size="3000">/gemfire/store</disk-dir>
</disk-dirs>
</disk-store>
<pdx read-serialized="true" disk-store-name="pdxMetaDataStore" persistent="true/>

GFSH

Disk Store ID                        |  Host          | Directory
--------------------------------------------------------------------
66asdf-asdf-asdf-asdf-asdfafadfasfC  | 148.88.88.100  | /gemfire/store

sn-p 线程转储

"Asynchronous disk writer for region pdxMetaDataStore" #55 daemon prio=5 os_prio=0 tid=0x0007ffcess nid=0x225d in Object.wait() [0x001....]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:460)
    at java.util.concurrent.TimeUnti.timedWait(TimeUnit.java:348)
    at org.apache.geode.internal.cache.DiskStoreImpl$FlusherThread.waitUntilFlushIsReady(DiskStoreImpl.java:1647)
     - Locked <0x00000123123> (a java.lang.Object)
    at org.apache.geode.internal.cache.DiskStoreImpl$FlusherThread.doAsyncFlush(DiskStoreImpl.java:1706)
    at org.apache.geode.internal.cache.DiskStoreImpl$FlusherThread.run(DiskStoreImpl.java:1696)

"main" #1 prio=5........ in Object.wait() [0x......] 
  "Java.lang.Thread.State: TIMED_WAITING (on object monitor)
   at java.lang.Object.wait(Native Method)
   at org.apache.geode.internal.cache.persistence.MembershipChangeListener.waitForChange(MembershipChangeListener.java:62)
  - Locked (0x....) (a org.apache.geode.internal.cache.persistence.MembershipChangeListener)
   at org.apache.geode.internal.cache.persistence.PersistenceInitialImageAdvisor.waitForMembershipChangeForMissingDiskStores(PersistenceInitialImageAdvisor.java:218)
   at org.apache.geode.internal.cache.persistence.PersistenceInitialImageAdvisor.getAdvice(PersistenceInitialImageAdvisor.java:118)
   at org.apache.geode.internal.cache.persistence.PeristenceAdvisorImpl.getInitialImageAdvice(PeristenceAdvisorImpl.java:835)
   at org.apache.geode.internal.cache.persistence.CreatePersistentRegionProcessor.getInitialImageAdvice(CreatePersistentRegionProcessor.java:52)
   at org.apache.geode.internal.cache.DistributedRegion.getInitialImageAndRecovery(DisritubedRegion.java:1196)
   at org.apache.geode.internal.cache.DistributedRegion.initialize(DistributedRegion.java:1076)
 ......

【问题讨论】:

  • 你好 Jack,对于一个具有持久性的复制区域,最后一个退出的成员总是有最新的数据;因此,如果您使用gfsh shutdown 停止服务器,那么成员应该会正常运行。你在日志中看到异常或奇怪的东西吗?你能把它贴出来让我看看吗?
  • 你好 Juan Ramos,你的意思是如果我使用 gfsh shutdown 停止服务器,我不需要等待其他服务器成员?
  • 您好 Jack,是的,如果您有 REPLICATE_PERSISTENT 区域并且您使用 gfsh shutdown 命令关闭了集群,那么所有成员都应该正常运行。您可以查看Start Up and Shut Down with Disk Stores 了解更多详情。不过,始终建议您先启动定位器,然后并行启动服务器。
  • 即使我使用 gfsh shutdown 命令关闭了集群,我仍然需要等待其他服务器初始化区域。我写了关于这个问题的更多细节。

标签: gemfire


【解决方案1】:

我刚刚看到更新的描述和日志摘录,这些消息在 GemFire 集群中很常见,只要成员离开或加入分布式系统(内部同步机制),它们并不暗示 em> 服务器正在等待其他服务器启动并完成初始化,在这种情况下,您会看到如下内容:

Region /MyRegion has potentially stale data.
It is waiting for another member to recover the latest data.
My persistent id:

  DiskStore ID: 6893751ee74d4fbd-b4780d844e6d5ce7
  Name: server1
  Location: /192.0.2.0:/home/dsmith/server1/.

Members with potentially new data:
[
  DiskStore ID: 160d415538c44ab0-9f7d97bae0a2f8de
  Name: server2
  Location: /192.0.2.0:/home/dsmith/server2/.
]
Use the "gfsh show missing-disk-stores" command to see all disk stores
that are being waited on by other members.

您可以查看this 帖子以获取有关获取初始图像序列序列的更多信息。

干杯。

【讨论】:

  • 当我在等待区域初始化期间执行 gfsh show missing-disk-stores 时,我发现有一个丢失的磁盘存储指向我的其他缓存服务器。为什么我执行 gfsh 关闭命令后它没有指向自己的磁盘存储?
  • 我也没有在缓存服务器日志文件中发现任何“Region /MyRegion 有可能过期的数据”。它挂在“初始化区域 PdxTypes”
  • 你说的“挂起”是什么意思?,在查看成员的线程转储后,你有没有看到任何线程被卡住? PdxTypes 区域也在内部创建了一个 PERSISTENT_REPLICATE,因此在启动您的成员时应该没有任何问题,如果您使用了 gfsh shutdown 命令。
  • 我发现“19:27:02.355......
    tid=0x1] Initializing region PdxType”行之后没有新条目。结果,我执行“gfsh show missing-disk-stores”命令,我发现有一个丢失的磁盘存储属于缓存服务器148.88.88.100。然后,我尝试启动缓存服务器 148.88.88.100 [大约 19:31:31],新条目开始显示在日志文件中。
  • 我包含了与 pdxMetaDataStore 相关的线程转储的 sn-p。谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-10-27
  • 2011-12-20
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多