はじめに
この記事はITRC Advent Calendar 2020の10日目の記事です。
前の記事→ [Unity]ゼロプログラミングでギャルゲー風ゲームを作ろう!day1 ~MMDのモーションをUnityに入れて鑑賞会をしよう~
こんにちはRIN1208です今回はいろいろあって最近etcdに触れたのでそのことについて書いていきたいと思います。
必要環境
- docker-compose
- mac os
上記の環境で説明していきます
etcdって何?
etcd(エトセディーと読むらしい)とはOSSの分散型KVS(Key-Value Store)です
curlなどのHTTPツールを使用して読み書きすることができます。
またオプションのSSL認証をオプションで使用することも可能です
構築してみる
dockerでの構築のやり方は以下のGit Hubに書いてあります。
ただdockerコマンドで構築しようとするとコマンド長い、
複数立てるのに複数回コマンド打たなきゃいけない、
データを残さなくてもいい、
ポート変えたいと思った時に編集しづらいので今回はdocker-composeを使用してささっと構築していきたいと思います。
準備
まずはdocker-compose.ymlを書いていきます。
また今回、コマンドに関する説明は省かせていただきす。
version: "3"
services:
etcd1:
build: .
ports: ["12379:12379", "12380:12380"]
command: >-
/usr/local/bin/etcd
-name etcd1
-data-dir /etcd-data
-listen-client-urls http://0.0.0.0:12379
-advertise-client-urls http://0.0.0.0:12379
-listen-peer-urls http://172.16.0.4:12380
-initial-advertise-peer-urls http://172.16.0.4:12380
-initial-cluster etcd1=http://172.16.0.4:12380,etcd2=http://172.16.0.5:12382
-initial-cluster-token tkn
-initial-cluster-state new
networks:
etcd-network:
ipv4_address: 172.16.0.4
etcd2:
build: .
ports: ["12381:12381", "12382:12382"]
command: >-
/usr/local/bin/etcd
-name etcd2
-data-dir /etcd-data
-listen-client-urls http://0.0.0.0:12381
-advertise-client-urls http://0.0.0.0:12381
-listen-peer-urls http://172.16.0.5:12382
-initial-advertise-peer-urls http://172.16.0.5:12382
-initial-cluster etcd1=http://172.16.0.4:12380,etcd2=http://172.16.0.5:12382
-initial-cluster-token tkn
-initial-cluster-state new
networks:
etcd-network:
ipv4_address: 172.16.0.5
networks:
etcd-network:
name: etcd-network
ipam:
driver: default
config:
- subnet: 172.16.0.0/24
次にDockerfileです。こちらはdocker-compose.ymlに書いても良かったのですが。今回は書きました。
FROM gcr.io/etcd-development/etcd:v3.4.7
次にネットワークの作成です。下記のコマンドを実行してネットワークを作成してください
$ docker network create etcd-network --subnet=172.16.0.0/24 --ip-range=172.16.0.0/24
起動してみる
それでは起動してみましょう。
$ docker-compose build
$ docker-compose up -d
上記のコマンドを実行しコンテナを起動します。
書き込んでみる
それでは次に書き込んでみましょう。
$ curl -X POST -d '{"key": "hoge","value": "hogehoge"}' http://localhost:12379/v3/kv/put
上記のコマンドを実行し書き込んでみましょう
下記のように表示されれば成功です
{"header":{"cluster_id":"10899443767562795482","member_id":"10670599892879733166","revision":"2","raft_term":"2"}}%
読み込んでみる
それでは次にetcd1からデータを読み込んでみましょう。
$ curl -L http://localhost:12379/v3/kv/range -X POST -d '{"key": "hoge"}'
上記のコマンドを実行しetcd1のデータを読み込んでみましょう
下記のように表示されれば成功です。きちんとvalueのhogehogeが取得できています。
"header":{"cluster_id":"10899443767562795482","member_id":"2275886477673874084","revision":"2","raft_term":"2"},"kvs":[{"key":"hoge","create_revision":"2","mod_revision":"2","version":"1","value":"hogehoge"}],"count":"1"}%
次にetc2からデータを取得します。
$ curl -L http://localhost:12381/v3/kv/range -X POST -d '{"key": "hoge"}'
上記のコマンドを実行しetcd2のデータを読み込んでみましょう。
先ほど実行したコマンドと同じように表示されれば成功です。きちんと分散されているのが確認できました。
終わりに
気軽にetcdを試す際にdockerで構築できる時点で楽なのですがもっと楽したかったのでdocker-compose使って構築してみました。
やっぱり楽ですね。
明日はhashy0917先輩の記事になります