supports twemproxy

v4
vinllen 5 years ago
parent 185b8a832e
commit 71f7d7c506
  1. 3
      conf/redis-shake.conf
  2. 4
      src/redis-shake/configure/configure.go
  3. 15
      src/redis-shake/main/main.go

@ -98,6 +98,9 @@ target.tls_enable = false
# 如果是decode或者dump,这个参数表示输出的rdb前缀,比如输入有3个db,那么dump分别是:
# ${output_rdb}.0, ${output_rdb}.1, ${output_rdb}.2
target.rdb.output = local_dump
# some redis proxy like twemproxy doesn't support to fetch version, so please set it here.
# e.g., target.version = 4.0
target.version =
# use for expire key, set the time gap when source and target timestamp are not the same.
# 用于处理过期的键值,当迁移两端不一致的时候,目的端需要加上这个值

@ -15,7 +15,6 @@ type Configuration struct {
SourceAddress string `config:"source.address"`
SourcePasswordRaw string `config:"source.password_raw"`
SourcePasswordEncoding string `config:"source.password_encoding"`
SourceVersion uint `config:"source.version"`
SourceAuthType string `config:"source.auth_type"`
SourceTLSEnable bool `config:"source.tls_enable"`
SourceRdbInput []string `config:"source.rdb.input"`
@ -24,12 +23,12 @@ type Configuration struct {
TargetAddress string `config:"target.address"`
TargetPasswordRaw string `config:"target.password_raw"`
TargetPasswordEncoding string `config:"target.password_encoding"`
TargetVersion uint `config:"target.version"`
TargetDBString string `config:"target.db"`
TargetAuthType string `config:"target.auth_type"`
TargetType string `config:"target.type"`
TargetTLSEnable bool `config:"target.tls_enable"`
TargetRdbOutput string `config:"target.rdb.output"`
TargetVersion string `config:"target.version"`
FakeTime string `config:"fake_time"`
Rewrite bool `config:"rewrite"`
FilterDBWhitelist []string `config:"filter.db.whitelist"`
@ -71,7 +70,6 @@ type Configuration struct {
TargetAddressList []string // target address list
HeartbeatIp string // heartbeat ip
ShiftTime time.Duration // shift
TargetRedisVersion string // to_redis_version
TargetReplace bool // to_replace
TargetDB int // int type
Version string // version

@ -409,21 +409,24 @@ func sanitizeOptions(tp string) error {
}
if tp == conf.TypeRestore || tp == conf.TypeSync || tp == conf.TypeRump {
if conf.Options.TargetVersion == "" {
// get target redis version and set TargetReplace.
for _, address := range conf.Options.TargetAddressList {
// single connection even if the target is cluster
if v, err := utils.GetRedisVersion(address, conf.Options.TargetAuthType,
conf.Options.TargetPasswordRaw, conf.Options.TargetTLSEnable); err != nil {
return fmt.Errorf("get target redis version failed[%v]", err)
} else if conf.Options.TargetRedisVersion != "" && conf.Options.TargetRedisVersion != v {
return fmt.Errorf("target redis version is different: [%v %v]", conf.Options.TargetRedisVersion, v)
} else if conf.Options.TargetVersion != "" && conf.Options.TargetVersion != v {
return fmt.Errorf("target redis version is different: [%v %v]", conf.Options.TargetVersion, v)
} else {
conf.Options.TargetRedisVersion = v
conf.Options.TargetVersion = v
}
}
if strings.HasPrefix(conf.Options.TargetRedisVersion, "4.") ||
strings.HasPrefix(conf.Options.TargetRedisVersion, "3.") ||
strings.HasPrefix(conf.Options.TargetRedisVersion, "5.") {
}
if strings.HasPrefix(conf.Options.TargetVersion, "4.") ||
strings.HasPrefix(conf.Options.TargetVersion, "3.") ||
strings.HasPrefix(conf.Options.TargetVersion, "5.") {
conf.Options.TargetReplace = true
} else {
conf.Options.TargetReplace = false

Loading…
Cancel
Save