ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

etcd clusterをVagrantで立ち上げる

はじめに

立ち上げた。

github.com

vagrant upしてサービス起動すればいいようにはなっている。

coreosにしたかったがboxが見つからなかったのでubuntuにした。

雑記

  • systemdの設定ファイル内で環境変数を使うために EnvironmentFile でファイル指定した。IPが違うのでそれはinit処理でいれておくことで対処した。
[Unit]
Description=etcd key-value store
Documentation=https://github.com/etcd-io/etcd
After=network.target

[Service]
User=etcd
Type=notify
Environment=ETCD_DATA_DIR=/var/lib/etcd
Environment=ETCD_NAME=%m
EnvironmentFile=/etc/default/etcd
ExecStart=/usr/local/bin/etcd --name ${ETCD_NAME} --data-dir /var/lib/etcd --initial-advertise-peer-urls http://${ETCD_HOST_IP}:2380 --listen-peer-urls http://${ETCD_HOST_IP}:2380 --listen-client-urls http://${ETCD_HOST_IP}:2379,http://127.0.0.1:2379 --advertise-client-urls http://${ETCD_HOST_IP}:2379 --initial-cluster-token etcd-cluster-1 --initial-cluster etcd0=http://192.168.33.200:2380,etcd1=http://192.168.33.201:2380,etcd2=http://192.168.33.202:2380 --initial-cluster-state new
Restart=always
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target
  • systemdのファイル内で改行ってどうするの?ExecStartを改行したい。。。
  • 最初の1台目をスタートするとき、他のホストが立ち上がっていない場合起動に失敗するため、init処理ではサービス起動を行わず、3台立ち上がったあとにコマンドでスタートするようにしたが、なんとかならないのか。
  • ubuntu、ドキュメントにそって手動でインストールしたけどaptで入ることにあとで気づいた、がまぁsystemdファイルいじりたかったしいいか。。。
  • ちゃんと1台でvalue setしたりremoveしたら他でも反映された。すごい。

今後

  • Raftの概要と動きを学んで動かす。このへんか。

raft.github.io

  • なんらかの言語のクライアントライブラリがあればそれ使って動かしてみる。実際に使いたくなるときに使えるように。

  • 2台が落ちたときの復旧方法・動作を確認しておく。1台になるとunhealthyで書き込めなくなるはず。

  • 3台落ちたときの復旧方法・動作を確認しておく。1台だけあげようとすると他がいないのであがらないような気も?(timeout時間内に他もあがろうとすると仲間をみつけてあがるような挙動にみえる。これもraftの仕様を学べばわかるか)
  • データのバックアップ、リストア方法について。データディレクトリをコピってそのままそこにおけばそれだけで復元するのか、どうなのか。
  • etcdctlでできること見ておく