Overview
docker上にテスト用のredis sentinelを動かして、ホスト上で動いているプログラムから接続する
Problem
sentinel get-master-addr-by-name
で返却されるマスタのIPはdocker環境上のIPなので、ホストからは繋げない。
解決
- hostモードで動かす => macosは対応していない?後日ドキュメント確認
- lo0にループバックアドレスにエイリアスを追加 => 暫定対応
エイリアス追加
sudo ifconfig lo0 alias ${DOCKER_SUBNET}
テスト
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
func main() {
opt := redis.FailoverOptions{}
opt.MasterName = "master"
opt.SentinelAddrs = []string{"127.0.0.1:26379"}
opt.Password = "xxxx"
r := redis.NewFailoverClient(&opt)
ctx := context.TODO()
r.Ping(ctx)
err := r.Set(ctx, "test", "yeah!", 0).Err()
if err != nil {
panic(err)
}
val, err := r.Get(ctx, "test").Result()
if err != nil {
panic(err)
}
fmt.Println("key", val)
}