【问题标题】:Geode Redis AdaptorGeode Redis 适配器
【发布时间】:2017-10-11 17:49:57
【问题描述】:

大家好,希望有人可以帮助我进行一些查询/配置以使用Geode Redis Adapter。我在确定如何/是否可以在我的 Geode 集群中配置多个 Redis 服务器以在高可用性设置中运行时遇到了一些困难。

我对 Geode 非常陌生,但了解在传统的 Geode 应用程序中,客户端与定位器进程交互以访问集群中的数据并平衡负载。鉴于此适配器的目的是作为 Redis 的替代品(即客户端不需要更改),我想它的功能会有所不同。

这是我迄今为止尝试过的:

我已根据此link 从源代码构建并成功在 2 个 CentOS 7 VM 上获得了 gfsh cli:

  • 192.168.0.10: 主机1
  • 192.168.0.15:主机2

在 host1 上,我运行以下命令:

gfsh>start locator --name=locator1 --bind-address=192.168.0.10 --port=10334
gfsh>start server --name=redis --redis-bind-address=192.168.0.10 --redis-port=11211 --J=-Dgemfireredis.regiontype=PARTITION_REDUNDANT

在 host2 上,我运行以下命令:

gfsh>start server --name=redis2 --redis-bind-address=192.168.0.15 --redis-port=11211 --J=-Dgemfireredis.regiontype=PARTITION_REDUNDANT --locators=192.168.0.10[10334]

在 host1 上,我检查当前配置:

gfsh>list members
  Name   | Id
-------- | -------------------------------------------------
locator1 | 192.168.0.10(locator1:16629:locator)<ec><v0>:1024
redis2   | 192.168.0.15(redis2:6022)<ec><v2>:1024
redis    | 192.168.0.10(redis:16720)<ec><v1>:1025

gfsh>list regions
List of regions
-----------------
__HlL
__ReDiS_MeTa_DaTa
__StRiNgS

对于每个区域,我都可以看到服务器 redis 和 redis2 作为托管成员 - 例如

gfsh>describe region --name=__StRiNgS
..........................................................
Name            : __StRiNgS
Data Policy     : normal
Hosting Members : redis2
                  redis

Non-Default Attributes Shared By Hosting Members

 Type  | Name  | Value
------ | ----- | -----
Region | size  | 0
       | scope | local

此时,我转向redis-cli 进行一些测试。鉴于之前的输出,我的期望是,如果我在一台服务器上设置一个密钥,我应该能够从另一台服务器读回它:

192.168.0.10:11211> set foo 'bar'
192.168.0.10:11211> get foo
"bar"

192.168.0.15:11211> get foo
(nil)

gfsh>describe region --name=__StRiNgS
..........................................................
Name            : __StRiNgS
Data Policy     : normal
Hosting Members : redis2
                  redis

Non-Default Attributes Shared By Hosting Members

 Type  | Name  | Value
------ | ----- | -----
Region | scope | local

Non-Default Attributes Specific To The Hosting Members

Member |  Type  | Name | Value
------ | ------ | ---- | -----
redis2 | Region | size | 0
redis  | Region | size | 1

如您所见,对 host2 的查询返回了 (nil)。我非常感谢这里的任何帮助。是否有可能实现我在这里的目标,或者 Redis 适配器是否只允许您横向扩展单个服务器?

【问题讨论】:

    标签: gemfire geode


    【解决方案1】:

    这可能不是一个答案,但评论可能太长了。

    我不熟悉你这里说的具体Geode Redis Adapter。但根据我使用 Gemfire/Geode 的经验,您可能需要检查以下内容:

    1. 您在没有定位器参数的情况下启动了第一台主机,我不确定这是否会导致集群形成问题。在 Gemfire 中有两种方式来形成集群:通过指定 mcast 端口或通过指定定位器。

    2. 您正在检查的区域范围看起来不正确。 “本地”不会复制任何更新。当你正确设置它时,我想它应该显示为 DISTRIBUTED_NO_ACK / DISTRIBUTED_ACK / GLOBAL。

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      Xiawei 是正确的,范围“本地”区域不会复制其他成员上的条目。解决方法可能是从 gfsh 创建一个名为 __StRiNgS 的区域,但由于以两个下划线开头的区域名称仅供内部使用,这是不可能的。

      我已提交此问题https://issues.apache.org/jira/browse/GEODE-1921 以解决此问题。我还附上了这个问题的补丁。应用补丁后,我看到__StRiNgS 区域现在是PARTITION

      gfsh>start locator --name=locator1
      gfsh>start server --name=redis --redis-port=11211
      gfsh>list regions
      List of regions
      -----------------
      HlL
      StRiNgS
      __ReDiS_MeTa_DaTa
      
      gfsh>describe region --name=/StRiNgS
      ..........................................................
      Name            : StRiNgS
      Data Policy     : partition
      Hosting Members : redis
      
      Non-Default Attributes Shared By Hosting Members
      
      Type  |    Name     | Value
      ------ | ----------- | ---------
      Region | size        | 0
             | data-policy | PARTITION
      

      【讨论】:

      • 只是好奇我的第一点:我的陈述不是真的吗?或者当您在与定位器相同的主机上启动服务器时,它有一些机制可以直接检测定位器?任何指向文档的指针都将受到高度赞赏,如果它具有误导性,我将编辑我的帖子。
      • 为了方便使用,当你在同一个gfsh会话中启动定位器和服务器时,定位器信息会自动提供给服务器。当您启动服务器时,会为您添加一个 -Dgemfire.default.locators 系统属性。
      【解决方案3】:

      在主机 1 上:

      start locator --name=locator1 --bind-address=192.168.0.10 --port=10334
      start server --name=redis --redis-bind-address=192.168.0.10 --redis-port=11211 --J=-Dgemfireredis.regiontype=REPLICATE
      

      注意:如果您希望将数据从一个区域复制到另一个区域,则必须使用 regiontype 作为“REPLICATE”。

      在主机 2 上:

      start server --name=redis2 --redis-bind-address=192.168.0.15 --redis-port=11211 --J=-Dgemfireredis.regiontype=REPLICATE --locators=192.168.0.10[10334]
      

      https://geode.apache.org/docs/guide/11/developing/region_options/region_types.html

      【讨论】:

        猜你喜欢
        • 2018-01-07
        • 2017-12-07
        • 1970-01-01
        • 2019-03-24
        • 1970-01-01
        • 2020-03-13
        • 2021-03-13
        • 2017-09-26
        • 1970-01-01
        相关资源
        最近更新 更多