1
〜Apache Geode 入門
Multi-site(WAN)構成による
クラスター連携
quitada
2018/2/1
2
Apache Geode? Multi-site
(WAN)構成? 何それ
おいしいの?
Apache Geode と Multi-site(WAN)構成
 Apache Geode(アパッチジオード)とは?
– インメモリデータグリッド製品 Pivotal GemFire のオープンソース版
– スケールアウト可能な分散型 Key-Value NoSQL インメモリデータベースに、
SQL の select 文みたいなクエリーとかデータドリブンなイベント処理とか
並列データ処理とかできるようにしたやつ
– Apache Ignite とか Infinispan とか Hazelcast みたいなやつ
– http://geode.apache.org/
 Multi-site(WAN)構成とは?
– 異なるサイトの Apache Geode クラスター間で、データレプリケーションを行う構成。
Oralce GoldenGate 的な?
– WAN 経由のネットワーク通信遅延を考慮した、非同期でバッチ的なデータ連携。
3
4
Apache Geode のクラスターを
2 台の MacBook 上で個別に構
築して、お互いに Multi-site
(WAN)構成で非同期データ
レプリケーションを体感してみ
ましょう!
動作確認のための簡単なアプリ
も動かしてみます!
まずこんな構成でクラスター構築してみる(1/2)
5
サーバーマシン
Locator 1
Cache Server 1
Locator 2
Cache Server 2
冗長構成
Partitioned Region x2
冗長コピー x1
ローカルディスク ローカルディスク
データ永続化 データ永続化
今回はみなさんの PC
(MacBook)をサーバーマシンと
して、まず、単一ホスト上で最小
冗長構成でのクラスターを構築し
ます。
Locator(ロケーター)は、クラ
スターへの接続ポイントならびに
クラスターのメンバー管理を行う
人です。1 ついれば動きますが、
冗長構成で皆さんの PC 上に 2 つ
用意します。
まずこんな構成でクラスター構築してみる(2/2)
6
サーバーマシン
Locator 1
Cache Server 1
Locator 2
Cache Server 2
冗長構成
Partitioned Region x2
冗長コピー x1
ローカルディスク ローカルディスク
データ永続化 データ永続化
Cache Server(キャッシュサー
バー)は、インメモリのデータス
トアの人です。複数束ねてあたか
も一つのインメモリデータストア
として使用可能です。今回は冗長
構成もかねて 2 つ用意します。
Region(リージョン)は、
RDBMS のテーブルみたいなもの
です。今回は Partitioned Region
(パーティションリージョン)と
いう、Hadoop HDFS みたいな
データの持ち方で、ローカルディ
スクにデータ永続化する設定にし
ます。異なるクラスター間でお互
いにデータ授受するため 2 つ用意
します。
Multi-site(WAN)構成によるデータ連携
7
クラスター1 クラスター2
WAN
S
R
S
R
S
R
S
R
S = Gateway Sender R = Gateway Receiver
冗長化も考慮し、Gateway
Sender と Gateway Receiver を
各キャッシュサーバーに 1 つづつ
付与・実行します。前者は、対向
クラスターへデータ送信、後者は
対向クラスターからのデータ受信
の役割となります。
対向クラスターからのデータ更新
を受信するリージョンと、対向ク
ラスターへデータ更新を送信する
リージョンをそれぞれ設定します。
8
では、まず Apache Geode 単
独クラスターを構築してみよ
う!
事前準備(1/8)
9
サーバーマシン
Locator 1
Cache Server 1
Locator 2
Cache Server 2
冗長構成
Partitioned Region x2
冗長コピー x1
ローカルディスク ローカルディスク
データ永続化 データ永続化
PC 上で、Locator や Cache
Server に必要な設定ファイル、
起動スクリプト、ログ、永続化し
たデータの格納ディレクトリ等準
備します。
事前準備(2/8)
 皆さんの MacBook を無線 LAN ルーター等に接続して、お互
いに TCP/IP 通信できるようにしてください。
 DHCP で割り当てられた IP アドレス確認:192.168.2.x
 自身 PC のホスト名確認:$ hostname
 /etc/hosts に以下のエントリー追加
– [your IP] [your hostname]
– 例)192.168.2.100 akitada-mcbk13
10
複数 NIC 環境だと、Locator
起動時の JMX Manager 接
続でこけることがあるので
念のため。
事前準備(3/8)
 サンプル設定・アプリケーションの配備
– GitHub(https://github.com/quitada41/Geode-Multisite-handson)から必要なファイル一式をダウン
ロードします。ここでは、/Users/[user name]/Geode 配下に配備します。以下配備例です。
▪ /Users/akitada/Geode/GEO130.profile – 環境変数設定プロファイル
▪ /Users/akitada/Geode/cache-wan.xml – Multi-site 構成用キャッシュ設定ファイル
▪ /Users/akitada/Geode/cache.xml - 単独クラスター用キャッシュ設定ファイル
▪ /Users/akitada/Geode/client – Multi-site(WAN)構成用動作確認クライアントアプリケーション一式ディレクトリ
— lib/GeodeCacheListenerClient.jar – クライアントアプリケーションの jar ファイル
— src/io/pivotal/akitada/GeodeCacheListenerClient.java – クライアントアプリケーションのソースコード(参考資料)
— startListener.sh – クライアントアプリケーション起動スクリプト
▪ /Users/akitada-Geode/geode-wan-diff.properties - Multi-site 構成用プロパティーファイル(単独用との差分)
▪ /Users/akitada/Geode/geode.properties – 単独クラスター用プロパティーファイル
▪ /Users/akitada/Geode/locator* – Locator 用ローカルディレクトリ
▪ /Users/akitada/Geode/server* – Cache Server 用ローカルディレクトリ
▪ /Users/akitada/Geode/startLocator*.sh – Locator 起動スクリプト
▪ /Users/akitada/Geode/startServer*.sh – Cache Server 起動スクリプト
▪ /Users/akitada/Geode/stopLocator*.sh – Locator 停止スクリプト
▪ /Users/akitada/Geode/stopServer*.sh – Cache Server 停止スクリプト
11
事前準備(4/8)
 Apache Geode バイナリを各マシンにインストール(zip ファイル解凍)
し、gfsh コマンドを実行できるように各種環境変数を設定します。
– 環境変数 JAVA_HOME 設定
– インストールディレクトリ:例)/opt/Apache/apache-geode-1.3.0
– gfsh* スクリプト実行のため環境変数 PATH に設定
– 環境変数設定サンプル(GEO130.profile)
12
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
#export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home
export GEODE_HOME=/opt/Apache/apache-geode-1.3.0
export PATH=$JAVA_HOME/bin:$GEODE_HOME/bin:$PATH
設定必須環境変数は、PATH の
みです。GEODE_HOME は動
作確認クライアントアプリ実行
時に必要な環境変数です。
*= 「ジーフィッシュ」と読む。Apache Geode の制御・設定用コマンドラインツール
事前準備(5/8)
 環境変数設定
– 以後、各種操作はこのコンソールから行うものとします。
 プロパティーファイルの編集(1/3)
– 各マシンのキャッシュディレクトリ直下(/Users/[OS user name]/Geode)に、
geode.properties というファイル名で次ページのような内容のファイルがあ
るので、各マシンの環境にあわせて編集します。
– プロパティーファイル名はデフォルトが gemfire.properties です。商用版
である GemFire の名残ですが、Locator・Cache Server 起動時に明示的に指
定すれば好きなファイル名でかまいません。
13
$ cd /Users/[your OS user name]/Geode
$ . ./GEO130.profile
事前準備(6/8)
 プロパティーファイルの編集(2/3)
– 主に各マシンの IP アドレスにそって赤字の部分を編集
▪ X = 自分のマシンの IP アドレス末尾
14
log-level=config
locators=192.168.2.x[55221],192.168.2.x[55222]
bind-address=192.168.2.x
server-bind-address=192.168.2.x
jmx-manager-bind-address=192.168.2.x
enable-cluster-configuration=false
事前準備(7/8)
 プロパティーファイルの編集(3/3)
– 各プロパティーの意味
▪ log-level : ログレベルです。config レベルに設定すると、一般的な info レベルに加えてクラスターの設定内容も
出力されるので、正しく設定されているかどうか確認のため便利です。
▪ locators : Locator 一覧(ホスト名[ポート番号])をあらかじめ設定する必要があります。
▪ bind-address : クラスター内通信用のホスト名を指定します。NIC が 1 つだけの時は設定不要ですが、意図した
ネットワークセグメントで通信しているかどうか確認のため明示的に設定することをおすすめします。
▪ server-bind-address : クライアントサーバー通信用のホスト名を指定します。NIC が 1 つだけの時は bind-address
同様設定不要です。Cache Server だけに有効なパラメーターです。
▪ jmx-manager-bind-address : JMX マネージャー通信用のホスト名を指定します。NIC が 1 つだけの時は bind-
address 同様設定不要です。JMX マネージャーサービスが稼働する Locator あるいは Cache Server にのみ有効な
パラメーターです。デフォルトでは、一番最初に起動する Locator のみに適用されるパラメーターとなります。
▪ enable-cluster-configuration : クラスターコンフィグレーションサービス実行の有無です。今回はキャッシュの設
定は xml ファイル経由で行うので、無効とします。gfsh でキャッシュの設定を行う場合は有効にすることで、
設定内容がロケーターのローカルディスクに永続化され、クラスター再起動時にもそれまで設定した内容が反
映されます。
▪ IP を指定したプロパティーに関しては、DNS 等のホスト名解決の仕組みがあればホスト名指定でもかまいませ
ん。
15
事前準備(8/8)
 各マシンで Locator や Cache Server のログや永続化ディスクストアを格
納するディレクトリがあることを確認してください。
16
$ cd /Users/[your OS user name]/Geode
$ ls –l
:
drwxr-xr-x 9 akitada staff 306 1 17 14:04 locator1/
:
drwxr-xr-x 5 akitada staff 170 1 17 14:04 server1/
:
ここでは Locator 1 用ディレクトリが locator1、
Cache Server 1 用ディレクトリが、server1 とします。
Locator 起動(1/3)
17
サーバーマシン
Locator 1
Cache Server 1
Locator 2
Cache Server 2
冗長構成
Partitioned Region
冗長コピー x1
ローカルディスク ローカルディスク
データ永続化 データ永続化 コマンドラインより gfsh を使っ
て Locator x2 を起動します。
Locator 起動(2/3)
 自身のマシンで、Locator を起動します
– 起動スクリプトの編集(startLocator*.sh):赤字の Locator 名を編集(ク
ラスター内でユニークな文字列であれば何でも良いですが、インストラク
ターの指示に適当に従ってください)
– Locator 起動
18
$ cd /Users/[your OS user name]/Geode
$ sh ./startLocator1.sh
$ sh ./startLocator2.sh
#! /bin/sh
gfsh start locator --name=**** --dir=locator --port=55221 --properties-
file=geode.properties
Locator 起動(3/3)
 “gfsh start locator” コマンドのパラメーターの意味
– --name : クラスター中の各プロセス識別のため、各 Locator と Cache Server で一意の
名前を指定します。ここでは、インストラクターの指示に従って命名してください。
– --dir : 事前準備で作成した各 Locator 用ディレクトリのパスを指定します。絶対指
定・相対指定どちらも可能です。ここでは、当該ディレクトリのあるディレクトリ
(ここでは、/Users/[your OS user name]/Geode)で gfsh コマンドを実行することを前
提に相対指定としています。
– --port : 事前準備で作成した geode.properties の Locator 一覧のポート番号にそって指
定します。ここでは、Locator 1 に 55221、Locator 2 に 55222 を適用しています。
– --properties-file : 事前準備で編集した geode.properties のパスを指定します。絶対指
定・相対指定どちらも可能です。
19
Cache Server 起動(1/4)
20
サーバーマシン
Locator 1
Cache Server 1
Locator 2
Cache Server 2
冗長構成
Partitioned Region
冗長コピー x1
ローカルディスク ローカルディスク
データ永続化 データ永続化
コマンドラインより gfsh を使っ
て、Cache Server x2 を起動しま
す。
Cache Server 起動(2/4)
 自身のマシンで、Cache Server を起動します
– 起動スクリプトの編集(startServer*.sh):赤字の Cache Server 名を編集
(クラスター内でユニークな文字列であれば何でも良いですが、インスト
ラクターの指示に適当に従ってください)
– Cache Server 起動
21
$ cd /Users/[your OS user name]/Geode
$ sh ./startServer1.sh
$ sh ./startServer2.sh
#! /bin/sh
gfsh start server --name=**** --dir=server --server-port=0 --properties-
file=geode.properties --cache-xml-file=cache.xml
Cache Server 起動(3/4)
 “gfsh start server” コマンドのパラメーターの意味
– --name : クラスター中の各プロセス識別のため、各 Locator と Cache Server で一意の名前を指定
します。ここでは、テキトーにインストラクターの指示に従って下さい。
– --dir : 事前準備で作成した各 Cache Server 用ディレクトリのパスを指定します。絶対指定・相対
指定どちらも可能です。ここでは、当該ディレクトリのあるディレクトリで gfsh コマンドを実
行することを前提に相対指定しています。
– --server-port : クライアントアプリケーションとの通信用のポートを設定します。ここでは、0 を
指定することで、起動時に空いている任意のポートを割り当てます。割り当てられたポートは、
Locator が記憶するので、クライアントアプリケーションはロケーターに問い合わせることでど
のポート経由でアクセスすべきか知ることができます。もちろん、明示的にポート番号を指定す
ることも可能です。
– --properties-file : 事前準備で編集した geode.properties のパスを指定します。絶対指定・相対指定
どちらも可能です。
– --cache-xml-file : キャッシュ設定ファイルへのパスを指定します。この設定内容に応じて Region
作成等を行います。
22
Cache Server 起動(4/4)
 (参考)キャッシュ設定ファイル(cache.xml)の設定内容について
23
<?xml version="1.0" encoding="UTF-8"?>
<cache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://geode.apache.org/schema/cache"
xsi:schemaLocation="http://geode.apache.org/schema/cache
http://geode.apache.org/schema/cache/cache-1.0.xsd"
version="1.0" lock-lease="120" lock-timeout="60" search-timeout="300"
is-server="true" copy-on-read="false">
<region name="ExRegion1" refid="PARTITION_REDUNDANT_PERSISTENT" />
<region name="ExRegion2" refid="PARTITION_REDUNDANT_PERSISTENT" />
</cache>
ExRegion1、ExRegion2 という二つの Region を作成。
PARTITION_REDUNDANT_PERSISTENT ということで、
Partitioned Region で、冗長コピー x1、ディスクストアに永続化とい
う設定。
24
Apache Geode クラスターがで
きたので、設定内容・挙動を
gfsh で確認してみよう。
gfsh によるクラスター管理(1/2)
 gfsh を引数なしで実行すると、“gfsh>” というコマンドプロンプトが現れ、インタラク
ティブに各種コマンドを実行できるモードで起動します。
 bash とかみたく、適宜 TAB キーで各コマンド一覧表示やら引数の補完、カーソルキーに
よるヒストリー参照とかやってくれます。
25
$ gfsh
_________________________ __
/ _____/ ______/ ______/ /____/ /
/ / __/ /___ /_____ / _____ /
/ /__/ / ____/ _____/ / / / /
/______/_/ /______/_/ /_/ 1.3.0
Monitor and Manage Apache Geode
gfsh>
gfsh によるクラスター管理(2/2)
 大部分のコマンドを実行するには、まず、以下のコマンドでいずれかの Locator に接続す
る必要があります。
– --locator パラメーターに、自身が起動した Locator の IP とポート番号を指定します
 以下の管理コマンドを実行してみます。
26
gfsh>connect --locator=192.168.2.x[55221]
gfsh>help
gfsh>list members
gfsh>show log --member=[your server name] --lines=100
gfsh>change loglevel --loglevel=fine –members=[your server name]
gfsh>show log --member=[your server name] --lines=100
gfsh>change loglevel --loglevel=config --members=[your server name]
gfsh>status server --name=[your server name]
gfsh>describe member --name=[your server name]
27
Apache Geode クラスターの設
定内容を確認したので、gfsh
を使って、実際にキャッシュに
データを入れたり出したり、ク
エリー実行したりしてみよう。
gfsh によるデータの出し入れ・クエリー(1/2)
 まず、キャッシュ設定ファイル経由で作成した ExRegion1 、ExRegion1 の両
Region の有無確認のため、以下のコマンドを実行してみます。
 次に、各 Region の詳細情報を以下のコマンドで確認します。
 さて、両 Region が正常に作成されていることを確認したら、いよいよデータの
出し入れ、クエリーです。
28
gfsh>list region
gfsh>describe region --name=/ExRegion1
gfsh>describe region --name=/ExRegion2
gfsh によるデータの出し入れ・クエリー(2/2)
 データの挿入です。以下の put コマンドを実行します。キー・バリュー・ペアを挿入するイメージで、ここでは--key と
--value には任意の文字列を指定します。キーやバリュー値を変えて複数エントリー挿入してみましょう。
 挿入したデータを取り出しましょう。
 挿入したデータのバリューを一覧をクエリーしてみましょう。
 挿入したデータのキー・バリュー・ペア一覧をクエリーしてみましょう。クエリー対象のエイリアス表記できます。
 Where 句も使えます。
29
gfsh>put --region=/ExRegion1 --key='<any string>' --value='<any string>'
gfsh>get --region=/ExRegion1 --key='<existing key>'
gfsh>query --query="select * from /ExRegion1"
gfsh>query --query="select ex1.key,ex1.value from /ExRegion1.entrySet ex1"
gfsh>query --query="select ex1.key,ex1.value from /ExRegion1.entrySet ex1 where
ex1.key='<existing key>'"
事後処理
 次の演習に向けて、クラスターを停止しておきます。
 参考)Locator・Cache Server 停止 gfsh コマンド
– ログ等のディレクトリを指定する一番楽なやつ
30
$ cd /Users/[your OS user name]/Geode
$ sh ./stopServer1.sh &
$ sh ./stopServer2.sh &
$ sh ./stopLocator1.sh
$ sh ./stopLocator2.sh
gfsh stop server --dir=server1
gfsh stop locator --dir=locator1
31
単体で Apache Geode クラス
ターが動いたので、それらを
Multi-site(WAN)構成にして
データ連携してみよう!
Multi-site(WAN)構成 – クラスター設定(1/2)
32
クラスター1 クラスター2
WAN
S
R
S
R
S
R
S
R
S = Gateway Sender R = Gateway Receiver
クラスター間でデータ連係するた
めに必要な設定を、プロパティー
ファイルに追加します。
Multi-site(WAN)構成 – クラスター設定(2/2)
 Multi-site(WAN)構成に追加で必要なプロパティーを設定します。
– 差分ファイル(geode-wan-diff.properteis):赤字の数値を設定します(イ
ンストラクターの指示に従ってください)。
▪ x = クラスター識別子的なものです。各クラスター内で一意の自然数を指定します。
▪ y = 対向クラスターのロケーター IP 末尾
– 既存プロパティーファイルに追記します
33
$ cd /Users/[your OS user name]/Geode
$ cat geode-wan-diff.properties >> geode.properties
distributed-system-id=x
remote-locators=192.168.2.y[55221],192.168.2.y[55221]
Multi-site(WAN)構成 – キャッシュ設定(1/2)
34
クラスター1 クラスター2
WAN
S
R
S
R
S
R
S
R
S = Gateway Sender R = Gateway Receiver
キャッシュ設定ファイルに、更新
データを対向クラスターに送信す
る Gateway Sender と、対向クラ
スターからデータを受信する
Gateway Receiver の設定を行い
ます。
Multi-site(WAN)構成 – キャッシュ設定(2/2)
 Gateway Sender/Receiver の設定を追加したキャッシュ設定ファイル(cache-
wan.xml)の編集・確認:赤字の部分を編集・確認します。
35
<?xml version="1.0" encoding="UTF-8"?>
<cache xmlns:xsi=…>
<gateway-sender id="GwSender1" enable-persistence="true"
manual-start="true" batch-size="100" batch-time-interval="1000"
remote-distributed-system-id="2" parallel="true" />
<gateway-receiver manual-start="false" start-port="41000" end-port="41999" />
<region name="ExRegion1" refid="PARTITION_REDUNDANT_PERSISTENT">
<region-attributes gateway-sender-ids="GwSender1" />
</region>
<region name="ExRegion2" refid="PARTITION_REDUNDANT_PERSISTENT"/>
</cache>
Gateway Sender 設定。対向クラ
スターへのデータ送信設定。
Gateway
Receiver 設
定。対向ク
ラスターか
ら送信され
たデータの
受信設定。
更新データを対向
クラスターに送信
したリージョンに、
Gateway Sender
を付与。
Cache Server 起動と同時に、Receiver のみ自動的に
起動するようにします(manual-start 属性)。
Multi-site(WAN)構成 – クラスター起動
 サーバー起動スクリプトから Gateway Sender/Receiver の設定を追加したキャッ
シュ設定ファイルを参照
– サーバー起動スクリプト(startServer*.sh)を、以下の赤字のように編集。
 クラスター再起動
36
#! /bin/sh
gfsh start server --name=c1s1 --dir=server --server-port=0 --properties-
file=geode.properties --cache-xml-file=cache-wan.xml
$ cd /Users/[your OS user name]/Geode
$ sh ./startLocator1.sh
$ sh ./startLocator2.sh
$ sh ./startServer1.sh &
$ sh ./startServer2.sh &
37
Apache Geode クラスター x2
が Multi-site(WAN)構成で
データ連携できたので、動作確
認してみよう!
動作確認用アプリケーション起動(1/2)
 動作確認用 Java クライアントアプリケーションを起動
– 起動スクリプト(startListener.sh)内容確認
▪ geode-dependencies.jar は、必要な Apache Geode ライブラリーへのクラスパスが列挙され
たマニフェストファイルのみ含まれている。
– 起動!
38
#!/bin/sh
java -classpath ${GEODE_HOME}/lib/geode-
dependencies.jar:./lib/GeodeCacheListenerClient.jar
io.pivotal.akitada.GeodeCacheListenerClient $1 $2 $3
$ cd /Users/[your OS user name]/Geode/client
$ sh ./startListener.sh
Usage: java io.pivotal.akitada.GeodeCacheListenerClient [region name] [locator host
name] [locator port]
$ sh ./startListener.sh ExRegion1 192.168.2.100 55221 指定する引数の内容はインストラク
ターと討議の上、決定してください。
動作確認用アプリケーション起動(2/2)
 [参考] 動作確認用 Java クライアントアプリケーション
– 詳細は、ソースコードを参照
▪ /Users/[your OS user
name]/Geode/client/src/io/pivotal/akitada/GeodeCacheListenerClient.java
– main() 関数では、指定したリージョンに接続してキャッシュリス
ナーを付与。
– 当該コード自体が CacheListenerAdapter を継承しており、キャッ
シュリスナーの実装を含んでいる。
39
Gateway Sender 起動
 対向クラスターの Gateway Receiver が起動する前に Gateway Sender を起動する
と、ログが再接続のリトライだらけになるので、本ハンズオンでは Gateway
Sender は手動による起動としています。
 gfsh コマンドを引数なしで実行し、自身が構築したクラスターに接続、Gateway
Sender を起動します。
– Gateway Sender 起動前後で 、“list gateways” コマンドで Gateway Sender/Receiver の起動状況を
確認してみましょう。
40
gfsh>connect --locator=192.168.2.100[55221]
gfsh>list gateways
gfsh>start gateway-sender --id=GwSender1
gfsh>list gateways
Multi-site(WAN)構成 – Gateway Sender 起動
 gfsh コマンドを引数なしで実行し、自身が構築したクラスターに接続、Gateway
Sender を付与したリージョンに何かデータを投入してみます。
 対向クラスターに更新内容が送信され、キャッシュリスナーを付与したクライ
アントアプリケーションが反応し、相手先のクライアントアプリ実行コンソー
ル上に以下のようなメッセージがデータ投入の都度出力されれば成功!
41
gfsh>connect --locator=192.168.2.100[55221]
gfsh>put --region=/ExRegion1 --key='Nanika' --value='Atai'
Received afterCreate event for entry: Nanika, Atai, isOriginRemote=true
42
Apache Geode クラスター x2
の Multi-site(WAN)構成構築、
動作確認を実施したよ。

〜Apache Geode 入門 Multi-site(WAN)構成による クラスター連携

  • 1.
  • 2.
  • 3.
    Apache Geode とMulti-site(WAN)構成  Apache Geode(アパッチジオード)とは? – インメモリデータグリッド製品 Pivotal GemFire のオープンソース版 – スケールアウト可能な分散型 Key-Value NoSQL インメモリデータベースに、 SQL の select 文みたいなクエリーとかデータドリブンなイベント処理とか 並列データ処理とかできるようにしたやつ – Apache Ignite とか Infinispan とか Hazelcast みたいなやつ – http://geode.apache.org/  Multi-site(WAN)構成とは? – 異なるサイトの Apache Geode クラスター間で、データレプリケーションを行う構成。 Oralce GoldenGate 的な? – WAN 経由のネットワーク通信遅延を考慮した、非同期でバッチ的なデータ連携。 3
  • 4.
    4 Apache Geode のクラスターを 2台の MacBook 上で個別に構 築して、お互いに Multi-site (WAN)構成で非同期データ レプリケーションを体感してみ ましょう! 動作確認のための簡単なアプリ も動かしてみます!
  • 5.
    まずこんな構成でクラスター構築してみる(1/2) 5 サーバーマシン Locator 1 Cache Server1 Locator 2 Cache Server 2 冗長構成 Partitioned Region x2 冗長コピー x1 ローカルディスク ローカルディスク データ永続化 データ永続化 今回はみなさんの PC (MacBook)をサーバーマシンと して、まず、単一ホスト上で最小 冗長構成でのクラスターを構築し ます。 Locator(ロケーター)は、クラ スターへの接続ポイントならびに クラスターのメンバー管理を行う 人です。1 ついれば動きますが、 冗長構成で皆さんの PC 上に 2 つ 用意します。
  • 6.
    まずこんな構成でクラスター構築してみる(2/2) 6 サーバーマシン Locator 1 Cache Server1 Locator 2 Cache Server 2 冗長構成 Partitioned Region x2 冗長コピー x1 ローカルディスク ローカルディスク データ永続化 データ永続化 Cache Server(キャッシュサー バー)は、インメモリのデータス トアの人です。複数束ねてあたか も一つのインメモリデータストア として使用可能です。今回は冗長 構成もかねて 2 つ用意します。 Region(リージョン)は、 RDBMS のテーブルみたいなもの です。今回は Partitioned Region (パーティションリージョン)と いう、Hadoop HDFS みたいな データの持ち方で、ローカルディ スクにデータ永続化する設定にし ます。異なるクラスター間でお互 いにデータ授受するため 2 つ用意 します。
  • 7.
    Multi-site(WAN)構成によるデータ連携 7 クラスター1 クラスター2 WAN S R S R S R S R S =Gateway Sender R = Gateway Receiver 冗長化も考慮し、Gateway Sender と Gateway Receiver を 各キャッシュサーバーに 1 つづつ 付与・実行します。前者は、対向 クラスターへデータ送信、後者は 対向クラスターからのデータ受信 の役割となります。 対向クラスターからのデータ更新 を受信するリージョンと、対向ク ラスターへデータ更新を送信する リージョンをそれぞれ設定します。
  • 8.
    8 では、まず Apache Geode単 独クラスターを構築してみよ う!
  • 9.
    事前準備(1/8) 9 サーバーマシン Locator 1 Cache Server1 Locator 2 Cache Server 2 冗長構成 Partitioned Region x2 冗長コピー x1 ローカルディスク ローカルディスク データ永続化 データ永続化 PC 上で、Locator や Cache Server に必要な設定ファイル、 起動スクリプト、ログ、永続化し たデータの格納ディレクトリ等準 備します。
  • 10.
    事前準備(2/8)  皆さんの MacBookを無線 LAN ルーター等に接続して、お互 いに TCP/IP 通信できるようにしてください。  DHCP で割り当てられた IP アドレス確認:192.168.2.x  自身 PC のホスト名確認:$ hostname  /etc/hosts に以下のエントリー追加 – [your IP] [your hostname] – 例)192.168.2.100 akitada-mcbk13 10 複数 NIC 環境だと、Locator 起動時の JMX Manager 接 続でこけることがあるので 念のため。
  • 11.
    事前準備(3/8)  サンプル設定・アプリケーションの配備 – GitHub(https://github.com/quitada41/Geode-Multisite-handson)から必要なファイル一式をダウン ロードします。ここでは、/Users/[username]/Geode 配下に配備します。以下配備例です。 ▪ /Users/akitada/Geode/GEO130.profile – 環境変数設定プロファイル ▪ /Users/akitada/Geode/cache-wan.xml – Multi-site 構成用キャッシュ設定ファイル ▪ /Users/akitada/Geode/cache.xml - 単独クラスター用キャッシュ設定ファイル ▪ /Users/akitada/Geode/client – Multi-site(WAN)構成用動作確認クライアントアプリケーション一式ディレクトリ — lib/GeodeCacheListenerClient.jar – クライアントアプリケーションの jar ファイル — src/io/pivotal/akitada/GeodeCacheListenerClient.java – クライアントアプリケーションのソースコード(参考資料) — startListener.sh – クライアントアプリケーション起動スクリプト ▪ /Users/akitada-Geode/geode-wan-diff.properties - Multi-site 構成用プロパティーファイル(単独用との差分) ▪ /Users/akitada/Geode/geode.properties – 単独クラスター用プロパティーファイル ▪ /Users/akitada/Geode/locator* – Locator 用ローカルディレクトリ ▪ /Users/akitada/Geode/server* – Cache Server 用ローカルディレクトリ ▪ /Users/akitada/Geode/startLocator*.sh – Locator 起動スクリプト ▪ /Users/akitada/Geode/startServer*.sh – Cache Server 起動スクリプト ▪ /Users/akitada/Geode/stopLocator*.sh – Locator 停止スクリプト ▪ /Users/akitada/Geode/stopServer*.sh – Cache Server 停止スクリプト 11
  • 12.
    事前準備(4/8)  Apache Geodeバイナリを各マシンにインストール(zip ファイル解凍) し、gfsh コマンドを実行できるように各種環境変数を設定します。 – 環境変数 JAVA_HOME 設定 – インストールディレクトリ:例)/opt/Apache/apache-geode-1.3.0 – gfsh* スクリプト実行のため環境変数 PATH に設定 – 環境変数設定サンプル(GEO130.profile) 12 export JAVA_HOME=`/usr/libexec/java_home -v 1.8` #export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home export GEODE_HOME=/opt/Apache/apache-geode-1.3.0 export PATH=$JAVA_HOME/bin:$GEODE_HOME/bin:$PATH 設定必須環境変数は、PATH の みです。GEODE_HOME は動 作確認クライアントアプリ実行 時に必要な環境変数です。 *= 「ジーフィッシュ」と読む。Apache Geode の制御・設定用コマンドラインツール
  • 13.
    事前準備(5/8)  環境変数設定 – 以後、各種操作はこのコンソールから行うものとします。 プロパティーファイルの編集(1/3) – 各マシンのキャッシュディレクトリ直下(/Users/[OS user name]/Geode)に、 geode.properties というファイル名で次ページのような内容のファイルがあ るので、各マシンの環境にあわせて編集します。 – プロパティーファイル名はデフォルトが gemfire.properties です。商用版 である GemFire の名残ですが、Locator・Cache Server 起動時に明示的に指 定すれば好きなファイル名でかまいません。 13 $ cd /Users/[your OS user name]/Geode $ . ./GEO130.profile
  • 14.
    事前準備(6/8)  プロパティーファイルの編集(2/3) – 主に各マシンのIP アドレスにそって赤字の部分を編集 ▪ X = 自分のマシンの IP アドレス末尾 14 log-level=config locators=192.168.2.x[55221],192.168.2.x[55222] bind-address=192.168.2.x server-bind-address=192.168.2.x jmx-manager-bind-address=192.168.2.x enable-cluster-configuration=false
  • 15.
    事前準備(7/8)  プロパティーファイルの編集(3/3) – 各プロパティーの意味 ▪log-level : ログレベルです。config レベルに設定すると、一般的な info レベルに加えてクラスターの設定内容も 出力されるので、正しく設定されているかどうか確認のため便利です。 ▪ locators : Locator 一覧(ホスト名[ポート番号])をあらかじめ設定する必要があります。 ▪ bind-address : クラスター内通信用のホスト名を指定します。NIC が 1 つだけの時は設定不要ですが、意図した ネットワークセグメントで通信しているかどうか確認のため明示的に設定することをおすすめします。 ▪ server-bind-address : クライアントサーバー通信用のホスト名を指定します。NIC が 1 つだけの時は bind-address 同様設定不要です。Cache Server だけに有効なパラメーターです。 ▪ jmx-manager-bind-address : JMX マネージャー通信用のホスト名を指定します。NIC が 1 つだけの時は bind- address 同様設定不要です。JMX マネージャーサービスが稼働する Locator あるいは Cache Server にのみ有効な パラメーターです。デフォルトでは、一番最初に起動する Locator のみに適用されるパラメーターとなります。 ▪ enable-cluster-configuration : クラスターコンフィグレーションサービス実行の有無です。今回はキャッシュの設 定は xml ファイル経由で行うので、無効とします。gfsh でキャッシュの設定を行う場合は有効にすることで、 設定内容がロケーターのローカルディスクに永続化され、クラスター再起動時にもそれまで設定した内容が反 映されます。 ▪ IP を指定したプロパティーに関しては、DNS 等のホスト名解決の仕組みがあればホスト名指定でもかまいませ ん。 15
  • 16.
    事前準備(8/8)  各マシンで Locatorや Cache Server のログや永続化ディスクストアを格 納するディレクトリがあることを確認してください。 16 $ cd /Users/[your OS user name]/Geode $ ls –l : drwxr-xr-x 9 akitada staff 306 1 17 14:04 locator1/ : drwxr-xr-x 5 akitada staff 170 1 17 14:04 server1/ : ここでは Locator 1 用ディレクトリが locator1、 Cache Server 1 用ディレクトリが、server1 とします。
  • 17.
    Locator 起動(1/3) 17 サーバーマシン Locator 1 CacheServer 1 Locator 2 Cache Server 2 冗長構成 Partitioned Region 冗長コピー x1 ローカルディスク ローカルディスク データ永続化 データ永続化 コマンドラインより gfsh を使っ て Locator x2 を起動します。
  • 18.
    Locator 起動(2/3)  自身のマシンで、Locatorを起動します – 起動スクリプトの編集(startLocator*.sh):赤字の Locator 名を編集(ク ラスター内でユニークな文字列であれば何でも良いですが、インストラク ターの指示に適当に従ってください) – Locator 起動 18 $ cd /Users/[your OS user name]/Geode $ sh ./startLocator1.sh $ sh ./startLocator2.sh #! /bin/sh gfsh start locator --name=**** --dir=locator --port=55221 --properties- file=geode.properties
  • 19.
    Locator 起動(3/3)  “gfshstart locator” コマンドのパラメーターの意味 – --name : クラスター中の各プロセス識別のため、各 Locator と Cache Server で一意の 名前を指定します。ここでは、インストラクターの指示に従って命名してください。 – --dir : 事前準備で作成した各 Locator 用ディレクトリのパスを指定します。絶対指 定・相対指定どちらも可能です。ここでは、当該ディレクトリのあるディレクトリ (ここでは、/Users/[your OS user name]/Geode)で gfsh コマンドを実行することを前 提に相対指定としています。 – --port : 事前準備で作成した geode.properties の Locator 一覧のポート番号にそって指 定します。ここでは、Locator 1 に 55221、Locator 2 に 55222 を適用しています。 – --properties-file : 事前準備で編集した geode.properties のパスを指定します。絶対指 定・相対指定どちらも可能です。 19
  • 20.
    Cache Server 起動(1/4) 20 サーバーマシン Locator1 Cache Server 1 Locator 2 Cache Server 2 冗長構成 Partitioned Region 冗長コピー x1 ローカルディスク ローカルディスク データ永続化 データ永続化 コマンドラインより gfsh を使っ て、Cache Server x2 を起動しま す。
  • 21.
    Cache Server 起動(2/4) 自身のマシンで、Cache Server を起動します – 起動スクリプトの編集(startServer*.sh):赤字の Cache Server 名を編集 (クラスター内でユニークな文字列であれば何でも良いですが、インスト ラクターの指示に適当に従ってください) – Cache Server 起動 21 $ cd /Users/[your OS user name]/Geode $ sh ./startServer1.sh $ sh ./startServer2.sh #! /bin/sh gfsh start server --name=**** --dir=server --server-port=0 --properties- file=geode.properties --cache-xml-file=cache.xml
  • 22.
    Cache Server 起動(3/4) “gfsh start server” コマンドのパラメーターの意味 – --name : クラスター中の各プロセス識別のため、各 Locator と Cache Server で一意の名前を指定 します。ここでは、テキトーにインストラクターの指示に従って下さい。 – --dir : 事前準備で作成した各 Cache Server 用ディレクトリのパスを指定します。絶対指定・相対 指定どちらも可能です。ここでは、当該ディレクトリのあるディレクトリで gfsh コマンドを実 行することを前提に相対指定しています。 – --server-port : クライアントアプリケーションとの通信用のポートを設定します。ここでは、0 を 指定することで、起動時に空いている任意のポートを割り当てます。割り当てられたポートは、 Locator が記憶するので、クライアントアプリケーションはロケーターに問い合わせることでど のポート経由でアクセスすべきか知ることができます。もちろん、明示的にポート番号を指定す ることも可能です。 – --properties-file : 事前準備で編集した geode.properties のパスを指定します。絶対指定・相対指定 どちらも可能です。 – --cache-xml-file : キャッシュ設定ファイルへのパスを指定します。この設定内容に応じて Region 作成等を行います。 22
  • 23.
    Cache Server 起動(4/4) (参考)キャッシュ設定ファイル(cache.xml)の設定内容について 23 <?xml version="1.0" encoding="UTF-8"?> <cache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://geode.apache.org/schema/cache" xsi:schemaLocation="http://geode.apache.org/schema/cache http://geode.apache.org/schema/cache/cache-1.0.xsd" version="1.0" lock-lease="120" lock-timeout="60" search-timeout="300" is-server="true" copy-on-read="false"> <region name="ExRegion1" refid="PARTITION_REDUNDANT_PERSISTENT" /> <region name="ExRegion2" refid="PARTITION_REDUNDANT_PERSISTENT" /> </cache> ExRegion1、ExRegion2 という二つの Region を作成。 PARTITION_REDUNDANT_PERSISTENT ということで、 Partitioned Region で、冗長コピー x1、ディスクストアに永続化とい う設定。
  • 24.
  • 25.
    gfsh によるクラスター管理(1/2)  gfshを引数なしで実行すると、“gfsh>” というコマンドプロンプトが現れ、インタラク ティブに各種コマンドを実行できるモードで起動します。  bash とかみたく、適宜 TAB キーで各コマンド一覧表示やら引数の補完、カーソルキーに よるヒストリー参照とかやってくれます。 25 $ gfsh _________________________ __ / _____/ ______/ ______/ /____/ / / / __/ /___ /_____ / _____ / / /__/ / ____/ _____/ / / / / /______/_/ /______/_/ /_/ 1.3.0 Monitor and Manage Apache Geode gfsh>
  • 26.
    gfsh によるクラスター管理(2/2)  大部分のコマンドを実行するには、まず、以下のコマンドでいずれかのLocator に接続す る必要があります。 – --locator パラメーターに、自身が起動した Locator の IP とポート番号を指定します  以下の管理コマンドを実行してみます。 26 gfsh>connect --locator=192.168.2.x[55221] gfsh>help gfsh>list members gfsh>show log --member=[your server name] --lines=100 gfsh>change loglevel --loglevel=fine –members=[your server name] gfsh>show log --member=[your server name] --lines=100 gfsh>change loglevel --loglevel=config --members=[your server name] gfsh>status server --name=[your server name] gfsh>describe member --name=[your server name]
  • 27.
  • 28.
    gfsh によるデータの出し入れ・クエリー(1/2)  まず、キャッシュ設定ファイル経由で作成したExRegion1 、ExRegion1 の両 Region の有無確認のため、以下のコマンドを実行してみます。  次に、各 Region の詳細情報を以下のコマンドで確認します。  さて、両 Region が正常に作成されていることを確認したら、いよいよデータの 出し入れ、クエリーです。 28 gfsh>list region gfsh>describe region --name=/ExRegion1 gfsh>describe region --name=/ExRegion2
  • 29.
    gfsh によるデータの出し入れ・クエリー(2/2)  データの挿入です。以下のput コマンドを実行します。キー・バリュー・ペアを挿入するイメージで、ここでは--key と --value には任意の文字列を指定します。キーやバリュー値を変えて複数エントリー挿入してみましょう。  挿入したデータを取り出しましょう。  挿入したデータのバリューを一覧をクエリーしてみましょう。  挿入したデータのキー・バリュー・ペア一覧をクエリーしてみましょう。クエリー対象のエイリアス表記できます。  Where 句も使えます。 29 gfsh>put --region=/ExRegion1 --key='<any string>' --value='<any string>' gfsh>get --region=/ExRegion1 --key='<existing key>' gfsh>query --query="select * from /ExRegion1" gfsh>query --query="select ex1.key,ex1.value from /ExRegion1.entrySet ex1" gfsh>query --query="select ex1.key,ex1.value from /ExRegion1.entrySet ex1 where ex1.key='<existing key>'"
  • 30.
    事後処理  次の演習に向けて、クラスターを停止しておきます。  参考)Locator・CacheServer 停止 gfsh コマンド – ログ等のディレクトリを指定する一番楽なやつ 30 $ cd /Users/[your OS user name]/Geode $ sh ./stopServer1.sh & $ sh ./stopServer2.sh & $ sh ./stopLocator1.sh $ sh ./stopLocator2.sh gfsh stop server --dir=server1 gfsh stop locator --dir=locator1
  • 31.
    31 単体で Apache Geodeクラス ターが動いたので、それらを Multi-site(WAN)構成にして データ連携してみよう!
  • 32.
    Multi-site(WAN)構成 – クラスター設定(1/2) 32 クラスター1クラスター2 WAN S R S R S R S R S = Gateway Sender R = Gateway Receiver クラスター間でデータ連係するた めに必要な設定を、プロパティー ファイルに追加します。
  • 33.
    Multi-site(WAN)構成 – クラスター設定(2/2) Multi-site(WAN)構成に追加で必要なプロパティーを設定します。 – 差分ファイル(geode-wan-diff.properteis):赤字の数値を設定します(イ ンストラクターの指示に従ってください)。 ▪ x = クラスター識別子的なものです。各クラスター内で一意の自然数を指定します。 ▪ y = 対向クラスターのロケーター IP 末尾 – 既存プロパティーファイルに追記します 33 $ cd /Users/[your OS user name]/Geode $ cat geode-wan-diff.properties >> geode.properties distributed-system-id=x remote-locators=192.168.2.y[55221],192.168.2.y[55221]
  • 34.
    Multi-site(WAN)構成 – キャッシュ設定(1/2) 34 クラスター1クラスター2 WAN S R S R S R S R S = Gateway Sender R = Gateway Receiver キャッシュ設定ファイルに、更新 データを対向クラスターに送信す る Gateway Sender と、対向クラ スターからデータを受信する Gateway Receiver の設定を行い ます。
  • 35.
    Multi-site(WAN)構成 – キャッシュ設定(2/2) Gateway Sender/Receiver の設定を追加したキャッシュ設定ファイル(cache- wan.xml)の編集・確認:赤字の部分を編集・確認します。 35 <?xml version="1.0" encoding="UTF-8"?> <cache xmlns:xsi=…> <gateway-sender id="GwSender1" enable-persistence="true" manual-start="true" batch-size="100" batch-time-interval="1000" remote-distributed-system-id="2" parallel="true" /> <gateway-receiver manual-start="false" start-port="41000" end-port="41999" /> <region name="ExRegion1" refid="PARTITION_REDUNDANT_PERSISTENT"> <region-attributes gateway-sender-ids="GwSender1" /> </region> <region name="ExRegion2" refid="PARTITION_REDUNDANT_PERSISTENT"/> </cache> Gateway Sender 設定。対向クラ スターへのデータ送信設定。 Gateway Receiver 設 定。対向ク ラスターか ら送信され たデータの 受信設定。 更新データを対向 クラスターに送信 したリージョンに、 Gateway Sender を付与。 Cache Server 起動と同時に、Receiver のみ自動的に 起動するようにします(manual-start 属性)。
  • 36.
    Multi-site(WAN)構成 – クラスター起動 サーバー起動スクリプトから Gateway Sender/Receiver の設定を追加したキャッ シュ設定ファイルを参照 – サーバー起動スクリプト(startServer*.sh)を、以下の赤字のように編集。  クラスター再起動 36 #! /bin/sh gfsh start server --name=c1s1 --dir=server --server-port=0 --properties- file=geode.properties --cache-xml-file=cache-wan.xml $ cd /Users/[your OS user name]/Geode $ sh ./startLocator1.sh $ sh ./startLocator2.sh $ sh ./startServer1.sh & $ sh ./startServer2.sh &
  • 37.
    37 Apache Geode クラスターx2 が Multi-site(WAN)構成で データ連携できたので、動作確 認してみよう!
  • 38.
    動作確認用アプリケーション起動(1/2)  動作確認用 Javaクライアントアプリケーションを起動 – 起動スクリプト(startListener.sh)内容確認 ▪ geode-dependencies.jar は、必要な Apache Geode ライブラリーへのクラスパスが列挙され たマニフェストファイルのみ含まれている。 – 起動! 38 #!/bin/sh java -classpath ${GEODE_HOME}/lib/geode- dependencies.jar:./lib/GeodeCacheListenerClient.jar io.pivotal.akitada.GeodeCacheListenerClient $1 $2 $3 $ cd /Users/[your OS user name]/Geode/client $ sh ./startListener.sh Usage: java io.pivotal.akitada.GeodeCacheListenerClient [region name] [locator host name] [locator port] $ sh ./startListener.sh ExRegion1 192.168.2.100 55221 指定する引数の内容はインストラク ターと討議の上、決定してください。
  • 39.
    動作確認用アプリケーション起動(2/2)  [参考] 動作確認用Java クライアントアプリケーション – 詳細は、ソースコードを参照 ▪ /Users/[your OS user name]/Geode/client/src/io/pivotal/akitada/GeodeCacheListenerClient.java – main() 関数では、指定したリージョンに接続してキャッシュリス ナーを付与。 – 当該コード自体が CacheListenerAdapter を継承しており、キャッ シュリスナーの実装を含んでいる。 39
  • 40.
    Gateway Sender 起動 対向クラスターの Gateway Receiver が起動する前に Gateway Sender を起動する と、ログが再接続のリトライだらけになるので、本ハンズオンでは Gateway Sender は手動による起動としています。  gfsh コマンドを引数なしで実行し、自身が構築したクラスターに接続、Gateway Sender を起動します。 – Gateway Sender 起動前後で 、“list gateways” コマンドで Gateway Sender/Receiver の起動状況を 確認してみましょう。 40 gfsh>connect --locator=192.168.2.100[55221] gfsh>list gateways gfsh>start gateway-sender --id=GwSender1 gfsh>list gateways
  • 41.
    Multi-site(WAN)構成 – GatewaySender 起動  gfsh コマンドを引数なしで実行し、自身が構築したクラスターに接続、Gateway Sender を付与したリージョンに何かデータを投入してみます。  対向クラスターに更新内容が送信され、キャッシュリスナーを付与したクライ アントアプリケーションが反応し、相手先のクライアントアプリ実行コンソー ル上に以下のようなメッセージがデータ投入の都度出力されれば成功! 41 gfsh>connect --locator=192.168.2.100[55221] gfsh>put --region=/ExRegion1 --key='Nanika' --value='Atai' Received afterCreate event for entry: Nanika, Atai, isOriginRemote=true
  • 42.
    42 Apache Geode クラスターx2 の Multi-site(WAN)構成構築、 動作確認を実施したよ。