LoginSignup
4
4

More than 5 years have passed since last update.

はじめに

分散型のKVSである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という2つの機構が存在します。
簡単に説明すると、クライアントからの入口となる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.

locator起動しました。続いてseverを起動します。

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

serverが起動しました。これで、Geodeとしての基本的な起動は終わりました。
しかし、これだけではKVSとしては機能しません。

Regionの作成

RegionはGeodeにおけるデータを保持する領域で、このRegionの単位で、expireの方針や、永続化の設定などを設定します。Oracleでいえばエンティティを作成している感覚でしょうか。
それでは作っていきます。

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

region1という名前のregionを作成しました。実際には識別しやすい名前を付けましょう。

PutとGetの実行

データをGeodeへ設定してみましょう。データを設定するにはputコマンドを使います。
先程作成した、region1をput先に設定し、keyとvalueを設定します。

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

そのまま、値をgetしようとしても下記のように取得はできません。

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

最後にremoveコマンドで消してみましょう。

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

LocatorとServerの停止

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
...

停止する時は、server→locatorの順番で実行する事をおすすめします。
現バージョンは確認してませんが、以前は、順番を間違えたため、再起動できなくなりました。

まとめ

Geodeをまずは簡単に試めせるよう記載してみました。
Redisなどと比べると、少しまどろっこしく感じるかもしれませんが、locator、server、Regionなど細かく設定を分けれることで、運用の規模が大きくなればなるほど、メリットが出てきます。

バージョンがM1の頃からシステムに採用して運用していますが、一度も障害が起きたことがなく、大量アクセス、大容量データに耐え続けており、非常に優秀な仕組みに感じています。
次回は、クラスタ構成の方法、Regionの解説、直面した運用課題について書いていければと思います。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4