Dockerインフラ

Docker Compose/SwarmでRedis Clusterを構築する

簡単にRedis Clusterを構築する方法のメモ。

スポンサーリンク

Redis Clusterを扱う上で気をつける点

  • 最低3台のノード(シャード)が必要(※AWSのElastiCacheは1シャードからいけます)
  • SSHトンネリングで接続するにはNATに適応してない為、各ノードへのポートフォワードが必要などかなり厄介

本記事ではbitnami/redis-clusterのイメージを使用しています。

Docker

また、ポートフォワードめんどくさい問題を避けるために、管理用のGUIツールであるRedisInsightも付け合わせて構築します。

RedisInsight | The Best Redis GUI
RedisInsight provides an intuitive and efficient graphical interface for Redis, allowing you to interact with your datab...

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リポジトリのソースを自力ビルドすれば作れるようになっているのですが、ようやくかって感じです。

以上、おしまい!

スポンサーリンク
管理人

システムえんじにゃー🐈
趣味はエレキギターなど。作曲したい。
WoWs/プリコネ
記事に関する質問はお気軽にどうぞ。

surface0 (さーふぇす)をフォローする
surface0 (さーふぇす)をフォローする
Rain or Shine

コメント

タイトルとURLをコピーしました