簡単にRedis Clusterを構築する方法のメモ。
Redis Clusterを扱う上で気をつける点
- 最低3台のノード(シャード)が必要(※AWSのElastiCacheは1シャードからいけます)
- SSHトンネリングで接続するにはNATに適応してない為、各ノードへのポートフォワードが必要などかなり厄介
本記事ではbitnami/redis-clusterのイメージを使用しています。
また、ポートフォワードめんどくさい問題を避けるために、管理用のGUIツールであるRedisInsightも付け合わせて構築します。
compose.yaml例
以下はCompose用のものです。
services:
redis-cluster-0: &redis-cluster-common
image: docker.io/bitnami/redis-cluster:7.0
volumes:
- redis-cluster-0_data:/bitnami/redis/data
environment: &redis-cluster-environment
ALLOW_EMPTY_PASSWORD: "yes"
REDIS_CLUSTER_REPLICAS: 0
REDIS_NODES: redis-cluster-0 redis-cluster-1 redis-cluster-2
REDIS_CLUSTER_DYNAMIC_IPS: "no"
REDIS_CLUSTER_ANNOUNCE_IP: redis-cluster-0
redis-cluster-1:
<<: *redis-cluster-common
environment:
<<: *redis-cluster-environment
REDIS_CLUSTER_ANNOUNCE_IP: redis-cluster-1
volumes:
- redis-cluster-1_data:/bitnami/redis/data
redis-cluster-2:
<<: *redis-cluster-common
hostname: redis-cluster
volumes:
- redis-cluster-2_data:/bitnami/redis/data
depends_on:
- redis-cluster-0
- redis-cluster-1
environment:
<<: *redis-cluster-environment
REDIS_CLUSTER_ANNOUNCE_IP: redis-cluster-2
REDIS_CLUSTER_CREATOR: "yes"
redisinsight:
image: redislabs/redisinsight:latest
ports:
- "18001:8001"
volumes:
- redisinsight_db:/db
volumes:
redis-cluster-0_data:
redis-cluster-1_data:
redis-cluster-2_data:
redisinsight_db:
Swarmモードでもほぼ同じ構成で大丈夫です。
ちなみに、bitnami/redis-clusterはComposeで動かす際に、コンテナ再構築した際のIP変動に対応できるような仕組みが入っているのですが、
overlayネットワークでは正常に機能しない為、正式にはSwarmモードをサポートしていません。
しかしながら、REDIS_CLUSTER_ANNOUNCE_IP
にホスト名を指定しても問題ないことに気づき、動的IP対応を無効にしてホスト名で固定にしたところすんなり動作しました。
もともとIPアドレスでしかノード間のやり取りができない前提だと認識していたのですが、最近のRedisバージョンで寛容になったのでしょうか?よくわかりません。
RedisInsightでの設定
http://localhost:18001/にアクセスしたら、EULA(使用許諾)に同意する必要があります。
一番上のトグルスイッチをオンにして、右下のCONFIRM
をクリックでOKです。
それ以外は必要ありません。
次にクラスターを登録しましょう。
Connect to a Redis Database
をクリックすると下記のようなダイアログが表示されます。
代表のノードのホスト名redis-cluster
を入力し、デフォルトの6379ポートを指定します。
名前はお好きなものをどうぞ。
クラスターに所属するノードが一覧で出てきますので、全部にチェックを入れてADD CLUSTER DATABASE
をクリックで完了です。
あとは特筆することも無いと思いますので、存分にエンジョイしてください。
ちなみに年内ぐらいにRedisInsight 2.xのイメージも正式リリースされるみたいですね。
一応だいぶ前からGitリポジトリのソースを自力ビルドすれば作れるようになっているのですが、ようやくかって感じです。
以上、おしまい!
コメント