首次使用Apache Geode

首先

本文将重点介绍首次使用分散式键值存储系统Apache Geode的主要内容。我不打算在此处详细讲解原理,请有兴趣的人自行查阅官方文档。或者,在其他机会我可能会详细解释。请访问http://geode.apache.org。

安裝

我们将在Linux环境下进行。
此外,需要Java运行环境才能运行。
请参考以下链接以获取最新模块:
https://geode.apache.org/releases/

wget -O - http://ftp.meisei-u.ac.jp/mirror/apache/dist/geode/1.6.0/apache-geode-1.6.0.tgz | tar zxvf -

将路径添加到PATH中根据您的喜好

启动GFSH

在本地中文环境下,将下面的句子进行改写,只需要一种选项:
通过下载[Geode的安装目录]/bin/gfsh并启动,可以在命令行中操作Geode。
在启动时,启动目录将成为Geode的工作目录。(虽然可以选择使用指定地点的选项)这点非常重要,并且我曾因忘记这一点而陷入困境。

$ gfsh
    _________________________     __
   / _____/ ______/ ______/ /____/ /
  / /  __/ /___  /_____  / _____  / 
 / /__/ / ____/  _____/ / /    / /  
/______/_/      /______/_/    /_/    1.6.0

Monitor and Manage Apache Geode

gfsh>

启动 Locator 和 Server

Geode有两个机制,Locator和Server。
简单地说,Locator是客户端入口,而Server实际上保存数据,可以类比为DNS和Web服务器的关系。
现在让我们启动locator吧。

gfsh>start locator --name=locator
Starting a Geode Locator in /xxxx/geode/locator...
........
Locator in /xxxx/geode/locator on xxxxx01.yahoo.co.jp[10334] as locator is currently online.
Process ID: 14799
Uptime: 8 seconds
Geode Version: 1.6.0
Java Version: 1.8.0_161
Log File: /xxxx/geode/locator/locator.log
JVM Arguments: -Dgemfire.enable-cluster-configuration=true -Dgemfire.load-cluster-configuration-from-dir=false -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806
Class-Path: /xxx/apache-geode-1.6.0/lib/geode-core-1.6.0.jar:/xxxx/apache-geode-1.6.0/lib/geode-dependencies.jar

Security Manager is enabled - unable to auto-connect. Please use "connect --locator=xxxxx01.yahoo.co.jp[10334]" to connect Gfsh to the locator.

定位器已启动,接下来将启动服务器。

gfsh>start server --name=server
Starting a Geode Server in /xxxx/geode/server...
........
Server in /xxxx/geode/server on xxxxx01.yahoo.co.jp[40404] as server is currently online.
Process ID: 15301
Uptime: 6 seconds
Geode Version: 1.6.0
Java Version: 1.8.0_161
Log File: /xxxx/geode/server/server.log
JVM Arguments: -Dgemfire.start-dev-rest-api=false -Dgemfire.use-cluster-configuration=true -Dgemfire.launcher.registerSignalHandlers=true -Djava.awt.headless=true -Dsun.rmi.dgc.server.gcInterval=9223372036854775806
Class-Path: /xxx/apache-geode-1.6.0/lib/geode-core-1.6.0.jar:/xxx/apache-geode-1.6.0/lib/geode-dependencies.jar

服务器已经启动。这样,Geode的基本启动就结束了。
然而,仅仅这样不能作为KVS(键值存储)使用。

创建Region

Region是在Geode中存储数据的区域,在这个Region的级别上可以设置过期策略、持久性设置等。可以说类似于在Oracle中创建实体。那么接下来就开始创建吧。

gfsh>create region --name=region1 --type=REPLICATE
Member | Status
------ | -------------------------------------
server | Region "/region1" created on "server"

我创建了一个名为region1的区域。请确保给它起一个容易识别的名字。

执行Put和Get

让我们将数据设置到Geode中。要设置数据,需要使用put命令。
把之前创建的region1设置为put的目标,然后设置键和值。

gfsh>put --region=region1 --key=key1 --value=value1
Result      : true
Key Class   : java.lang.String
Key         : key1
Value Class : java.lang.String
Old Value   : <NULL>

这次,我们将使用get命令来指定key并提取出对应的value。

gfsh>get --region=region1 --key=key1
Result      : true
Key Class   : java.lang.String
Key         : key1
Value Class : java.lang.String
Value       : value1

Geode重新连接

在关闭gfsh之后,我也会提供连接到Geode的重新连接方法。

按下”ctl+d”离开gfsh,并重新运行gfsh。

gfsh>
Exiting... 

$ gfsh

直接获取该值是不可能的,就像下面所示。

gfsh>get --region=region1 --key=key1
Command 'get --region region1 --key key1' was found but is not currently available (type 'help' then ENTER to learn about this command)

请使用connect命令连接到正在运行的Geode实例。
请注意,如果您执行gfsh的位置与上次不同,则可能无法成功。

gfsh>connect
Connecting to Locator at [host=localhost, port=10334] ..
Connecting to Manager at [host=dev-xxxx01.yahoo.co.jp, port=1099] ..
Successfully connected to: [host=dev-xxxx01.yahoo.co.jp, port=1099]

您可以使用list members命令来确认连接目标的定位器(locator)和服务器(server)。

 Name   | Id
------- | ----------------------------------------------------------------
locator | xxx.xxx.xxx.xxx(locator:17639:locator)<ec><v0>:1024 [Coordinator]
server  | xxx.xxx.xxx.xxx(server:17858)<v1>:1025

如果处于这种状态,get命令将会被执行。

gfsh>get --region=region1 --key=key1
Result      : true
Key Class   : java.lang.String
Key         : key1
Value Class : java.lang.String
Value       : value1

最后,让我们试试使用移除命令来删除它。

gfsh>remove --region=region1 --key=key1
Result    : true
Key Class : java.lang.String
Key       : key1

停止Locator和Server。

停止定位器和服务器。

gfsh>stop server --name=server
Stopping Cache Server running in /xxxx/geode/server on xxx01.yahoo.co.jp[40404] as server...
Process ID: 17858
Log File: /home/mkatsube/geode/server/server.log
...
gfsh>stop locator --name=locator
Stopping Locator running in /xxxx/geode/locator on xxx01.yahoo.co.jp[10334] as locator...
Process ID: 17639
Log File: /home/mkatsube/geode/locator/locator.log
...

建议在停止时按照服务器→定位器的顺序执行。我没有确认过当前版本,但以前由于顺序错误而导致无法重新启动。

总结

我先简单地尝试了一下使用Geode,并进行了记录。
与Redis等进行比较时,可能会觉得有些复杂,但通过细分设置,如locator、server、Region等,随着运营规模的增大,会带来更多优势。

M1版本推出至今,我们一直在系统中使用并运营,但从未发生过任何故障情况。它不仅能够处理大量访问和大容量数据,而且还展现出非常出色的性能。感觉它是一个非常优秀的体系结构。

接下来,我希望能够写一些关于集群配置方式、区域的解释以及我们面临的运营挑战的内容。