2021年9月12日日曜日

Drone CIでRedisクラスターを使う・改

 半年以上前にDroneでRedisクラスターを使う記事を書きましたが、localhostでしか動かないRedisクラスターはテスト用とはいえ使い物にならないので、まともに動くようにしてみました。

結論から言うと、横着せずにちゃんと3台以上でクラスター作れよってことです。

こんな感じでうまくいった

こんな感じで3台サービスを立ち上げて、テスト前にクラスターを作成してやるとうまくいきました。

kind: pipeline
type: docker
name: Test

trigger:
  event:
    - push

steps:
  - name: Redis cluster
    image: redis:6-alpine
    commands: # RedisコンテナのIDを取得してクラスター作成
      - apk add bind-tools
      - sleep 5
      - export HOST1=$(host -t a redis-cluster-1 | grep -o '[^ ]*$')
      - export HOST2=$(host -t a redis-cluster-2 | grep -o '[^ ]*$')
      - export HOST3=$(host -t a redis-cluster-3 | grep -o '[^ ]*$')
      - redis-cli --cluster create "$${HOST1}:6379" "$${HOST2}:6379" "$${HOST3}:6379" --cluster-yes
  - name: test
    image: golang:1.14-alpine
    commands:
      - apk add git alpine-sdk
      - go build
      - go test ./...
      - go vet

# クラスターモードで3台作成
services:
  - name: redis-cluster-1
    image: redis:6-alpine
    command:
      - --bind
      - 0.0.0.0
      - --cluster-enabled
      - yes
      - --cluster-config-file
      - nodes.conf
      - --cluster-node-timeout
      - "5000"
  - name: redis-cluster-2
    image: redis:6-alpine
    command:
      - --bind
      - 0.0.0.0
      - --cluster-enabled
      - yes
      - --cluster-config-file
      - nodes.conf
      - --cluster-node-timeout
      - "5000"
  - name: redis-cluster-3
    image: redis:6-alpine
    command:
      - --bind
      - 0.0.0.0
      - --cluster-enabled
      - yes
      - --cluster-config-file
      - nodes.conf
      - --cluster-node-timeout
      - "5000"

プログラムからは redis-cluster-1:6379, redis-cluster-2:6379, redis-cluster-3:6379 に接続してください。

一応これで動いたんですが、servicesにほとんど同じ内容を3回も書いてるわstepsの中でさらに設定してるわで全然美しくないので納得いってません。本当は1つのコンテナの中にポート違いの3つのサーバーを立ち上げたかったんですが、servicesの中でうまくやる方法が見つかりませんでした。

いい方法が見つかったらまた更新します。

0 件のコメント:

コメントを投稿