半年以上前に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 件のコメント:
コメントを投稿