GCEでRedisのレプリケーション組んでみた
- Redisにおけるレプリケーションとは
- master/slave 各設定ファイル
- Dockerfile
- Cloud Build でビルドし、Container Registryにプッシュする
- GCEのターミナルからdocker run
- 動作確認
GCE(Container-Optimized OS)を2台使って、Redisのレプリケーションを組んでみる。
Redisにおけるレプリケーションとは
RedisのレプリケーションはMaster・Slave型のレプリケーションモデル。
とある本番Redisサーバー(Master)のデータを、別のRedisサーバー(Slave)に完全にコピーする仕組みのこと。
master/slave 各設定ファイル
master.conf
# ログレベル loglevel debug # ログファイル logfile redis.log # http://redis-documentasion-japanese.readthedocs.io/ja/latest/topics/persistence.html save 900 1 save 300 10 save 60 10000 # AOF appendonly no # save file name dbfilename dump.rdb
slave.conf
# スレーブ設定 slaveof redis-master 6379 # ログレベル loglevel debug # ログファイル logfile redis.log # http://redis-documentasion-japanese.readthedocs.io/ja/latest/topics/persistence.html save 900 1 save 300 10 save 60 10000 # AOF appendonly no # save file name dbfilename dump.rdb
ドキュメントを見ながら書けばおk。
slave.confに masterサーバーのホストを記述してあげる。
Dockerfile
何はともあれDockerfile
を記述する。
ROLE
引数でmaster
, slave
を指定する形にした。
FROM redis:4-alpine ARG ROLE COPY ${ROLE}.conf /usr/local/etc/redis/redis.conf CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
Cloud Build でビルドし、Container Registryにプッシュする
masterサーバーのコンテナをビルドし、プッシュする。
以下、master.yaml
steps: - name: 'gcr.io/cloud-builders/docker' args: - 'build' - '--file=Dockerfile' - '--tag=asia.gcr.io/$PROJECT_ID/redis-master' - '--build-arg=ROLE=master' - '.' images: ['asia.gcr.io/$PROJECT_ID/redis-master']
gcloud container builds submit --config=master.yaml .
slaveサーバーのコンテナをビルドし、プッシュする。
以下、slave.yaml
steps: - name: 'gcr.io/cloud-builders/docker' args: - 'build' - '--file=Dockerfile' - '--tag=asia.gcr.io/$PROJECT_ID/redis-slave' - '--build-arg=ROLE=slave' - '.' images: ['asia.gcr.io/$PROJECT_ID/redis-slave']
gcloud container builds submit --config=slave.yaml .
GCEのターミナルからdocker run
わざわざリモートでdocker run
を行うことが正しいことかどうかはかなりあやしいけど、楽なのでやっちゃう。
masterサーバー起動
docker run --name redis-master -p 6379:6379 -v /home/redis/data:/data -d asia.gcr.io/${REGISTRY}/redis-master
slaveサーバー起動
docker run --name redis-slave -p 6379:6379 -v /home/redis/data:/data -d asia.gcr.io/${REGISTRY}/redis-slave
動作確認
各サーバーにリモートでログインして、データを確認するだけ。
masterサーバーで値を書き込んで、slaveサーバーにもコピーされてるか確認する。
docker exec -it redis-master /bin/sh
docker exec -it redis-slave /bin/sh