VMware GemFireにはVMware GemFire Management Console(以下GFMC)というGemFireの管理をGUIから一元管理する製品が提供されている。
これはGemFireのライセンスがあれば追加ライセンスなしで自由に使える製品となっている。
これがまた非常に便利なので、今回はKubernetes上に展開して使ってみる。
GFMCのインストール
v1.1でのインストール方法は、JAR、OVA、dockerの3種類が用意されているが、Kubernetes向けのものは用意されていない。
なので、dockerのインストール手順に載っているイメージを使ってKubernetes向けにインストールする。
まず、インストール先のNamespaceを作成する。
export GFMC_NS=gemfire-mc
kubectl create ns $GFMC_NS
Tanzu Network用の認証情報をSecretとして登録し、defaultのServiceAccountからも参照できるようにしておく。
export TANZUNET_USERNAME=xxx@yyy.zzz
export TANZUNET_PASSWORD=xxxxx
kubectl create secret docker-registry image-pull-secret --namespace=$GFMC_NS --docker-server=registry.tanzu.vmware.com --docker-username=$TANZUNET_USERNAME --docker-password=$TANZUNET_PASSWORD
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "image-pull-secret"}]}' -n $GFMC_NS
Deploymentを作成する。
kubectl create deploy gemfire-management-console --image registry.tanzu.vmware.com/gemfire-management-console/gemfire-management-console:1.1.0 -r 1 -n $GFMC_NS
Serviceを公開する。ここではtype: LoadBalancer
を利用する。
kubectl expose deploy gemfire-management-console --port 8080 --type LoadBalancer -n $GFMC_NS
以上でインストールは完了となる。
GFMCの利用
クラスタの登録
アクセスすると以下のような画面になる。現時点ではID Providerとの連携はしていないので、NONEのままENABLE DEVELOPER MODE
をクリックする。
するとGFMCで管理対象とするGemFireクラスタを聞いてくるので入力する。
ここでは事前にkind: GemFireCluster
でクラスタを作成していたので、このクラスタのLocatorのServiceを入力した。
無事接続できると、以下のようにクラスタが表示され、GemFireのVersionやLocator、Serverの数が確認できる。
クラスタの状態確認
Dashboard
から登録したクラスタをクリックすると、以下のようにMember一覧と使用リソース、稼働時間などが確認できる。
また、Monitoring
のタブをクリックすると、メトリクスが取得できる。
ただし、デフォルトではメトリクスの取得が有効化されていないため、Metrics Enabled
をクリックして有効化する必要がある。
加えて、GemFire for KubernetesではなくStandalone版を使っている場合はメンバーの起動時に--classpath
でJARを読み込ませる必要がある(こちら参照)。
今回はKubernetes版を利用したため、特に手を加えず以下のようなグラフが表示されるようになった。
なお、Monitoring
では以下のダッシュボードが用意されている。(誤りがあるかも)
- get/putのスループット
- get/putのレイテンシの平均値Latency
- Cacheのヒット・ミス率
- Function Executionのキューサイズと失敗の比率
- ClientのputのRPS
- 容量を超えたPERSISTENTのRegion
- メッセージキューサイズ
- クライアントのQPS
- 平均クエリ時間
- Regionの詳細
- Serverが利用可能なメモリの割合、
- ディスクの状態
- CPU利用率
- Serverへ接続しているConnection数
- ServerのDuration時間
- クラスタ内のメンバー間の通信の遅延
- I0 wait
- 廃棄した1秒あたりのRead数
- CPUの待ち時間の割合
- WAN構成でのGateway Receiverのスループット
- WAN構成でのGateway Senderの1秒あたりのメッセージ数
なお、ダッシュボードのインフォメーションボタンをクリックすると、ダッシュボードの詳細説明が表示されるため、どういうものかはここの説明を参考にするとよい。
Regionの確認
Regionの状態はDashboard
のRegion
から確認できる。
作成したRegionのType、エントリ数、メンバや、データの有効期限やEviction設定等細かな設定が確認できる。
gfshの実行
Dashboard
のgfsh
からgfshコマンドを叩くことも出来る。
特にKubernetes環境とかではgfshを叩くPodとかを用意するのは面倒だったりするので、ちょっとした作業には非常に便利。
また、よく使うコマンドはQuick Commands
の横のEDIT
から追加して、ワンクリックで実行することも出来る。
削除する際は、同じくEDIT
からプルダウンで登録したコマンドを選んでDELETE
で削除する。
Logの確認
ログもGFMCから確認できる。
メンバーを選んでログ表示し、フィルタ出力させることも可能。
また、DOWNLOAD
からログをダウンロードできるが、この際開始・終了日やログレベルなども絞って出力させることが出来る。かなり便利。
データの確認
クラスタ情報のImport・Export
登録したクラスタの情報はjson形式でExportすることが出来る。
試しに利用する。
左サイドバーのExport Connections
をクリックし、対象クラスタを選択してEXPORT
をクリックする。
すると、ブラウザ上でダウンロードが始まる。
ダウンロードが完了すると、exportConnection_YYYYMMDD.json
という形式のjsonファイルを確認することが出来る。
これの中身は以下のようになっている。
[
{
"connectionNumber": 1,
"clusterNickname": "test-gem-cluster",
"clusterHost": "gemfire1-locator.gemfire-dev.svc",
"clusterPort": 7070,
"clusterSecurityType": "None"
}
]
これを使ってクラスタの登録状況が元に戻せるかを確認する。
Dashboard
からクラスタの左のハンバーガーをクリックし、Remove Connection
を選択する。
クラスタの一覧が空になった状態で、先程のjsonをImportする。
Import Connections
で先程のjsonファイルを選択して、IMPORT CLUSTER CONNECTIONS
を選択する。
Dashboard
から先程削除したクラスタが見えるようになっていることが確認できた。
まとめ
VMware GemFire Management Consoleは、GemFire単品だと基本CLIであるが故に弱かった可視化のところを非常に助けてくれるかなり有用なツールだった。
GUIは他にもPulseがあるが、PulseはLocator上で動かすことが多く負荷が気になるのと、ここまでやれることは多くなかったので、Pulseの上位製品と考えて問題ない。
GemFire使う際は、まずはこれを入れて連携すると、CLIばっかりで挫けそうになった時に助けになると思われる。
おまけ:GFMCのデータ取得の挙動
Locatorのログを見ると、3分間隔で以下のコマンドを実行していることが分かる。
[info 2023/11/28 16:52:17.731 JST locator1 <qtp1148735023-205> tid=0xcd] Executing command: list members
[info 2023/11/28 16:52:17.919 JST locator1 <qtp1148735023-181> tid=0xb5] Executing command: describe member --name=server1
[info 2023/11/28 16:52:18.106 JST locator1 <qtp1148735023-173> tid=0xad] Executing command: describe config --member=server1
[info 2023/11/28 16:52:18.317 JST locator1 <qtp1148735023-173> tid=0xad] Executing command: describe member --name=locator1
[info 2023/11/28 16:52:18.504 JST locator1 <qtp1148735023-204> tid=0xcc] Executing command: describe config --member=locator1
[info 2023/11/28 16:52:18.695 JST locator1 <qtp1148735023-207> tid=0xcf] Executing command: describe member --name=server2
[info 2023/11/28 16:52:18.861 JST locator1 <qtp1148735023-173> tid=0xad] Executing command: describe config --member=server2
list members
を実行してメンバーの一覧取得後、取得したメンバーに対してdescribe member
とdescribe config
を実行して設定を取得している模様。