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