1

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

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

这是我到目前为止所尝试的:

我根据此链接从源代码构建并成功gfsh在 2 个 CentOS 7 VM 上安装了 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

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

4

3 回答 3

1

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

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

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

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

希望这可以帮助

于 2016-09-21T08:03:52.687 回答
0

在主机 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

于 2017-10-11T09:49:57.977 回答
0

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

我已经提交了这个问题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
于 2016-09-21T20:06:35.207 回答