Skip to content

Commit 55b98a7

Browse files
xiepaupiSecloud
authored andcommitted
fix(redis): 切换同步检查加入自己的心跳机制 #14397
1 parent e04b31f commit 55b98a7

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

dbm-services/redis/db-tools/dbactuator/pkg/atomjobs/atomredis/redis_switch.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -929,7 +929,10 @@ func (job *RedisSwitchPreCheck) checkReplicationSync(newMasterConn *myredis.Redi
929929
var masterTime, masterDbsize, slaveTime int64
930930
oldMasterAddr := fmt.Sprintf("%s:%d", storagePair.MasterInfo.IP, storagePair.MasterInfo.Port)
931931
newMasterAddr := fmt.Sprintf("%s:%d", storagePair.SlaveInfo.IP, storagePair.SlaveInfo.Port)
932-
932+
if err := job.trySetHeartBeatWhenDbmonStoped(storagePair); err != nil {
933+
time.Sleep(time.Second * 2)
934+
job.trySetHeartBeatWhenDbmonStoped(storagePair)
935+
}
933936
if err := newMasterConn.SelectDB(1); err != nil {
934937
return fmt.Errorf("[%s] select db 1, exec cmd err:%+v", newMasterAddr, err)
935938
}
@@ -976,6 +979,30 @@ func (job *RedisSwitchPreCheck) checkReplicationSync(newMasterConn *myredis.Redi
976979
return nil
977980
}
978981

982+
// setHeartBeatWhenDbmonStoped # here we just set on the master heartbeat:
983+
func (job *RedisSwitchPreCheck) trySetHeartBeatWhenDbmonStoped(storagePair InstanceSwitchParam) error {
984+
oldMasterAddr := fmt.Sprintf("%s:%d", storagePair.MasterInfo.IP, storagePair.MasterInfo.Port)
985+
oldMasterConn, err := myredis.NewRedisClientWithTimeout(oldMasterAddr,
986+
job.params.ClusterMeta.StoragePassword, 0, job.params.ClusterMeta.ClusterType, time.Second*10)
987+
if err != nil {
988+
job.runtime.Logger.Warn("[%s] conntect 2 old master failed :%+v", oldMasterAddr, err)
989+
return err
990+
}
991+
defer oldMasterConn.Close()
992+
993+
if err := oldMasterConn.SelectDB(1); err != nil {
994+
job.runtime.Logger.Warn("[%s] select db 1 on master failed :%+v", oldMasterAddr, err)
995+
return err
996+
}
997+
job.runtime.Logger.Info("[%s] try reset dbmon heartbeat key [%s] value 2 current", oldMasterAddr, fmt.Sprintf("%s:time", oldMasterAddr))
998+
rst := oldMasterConn.InstanceClient.Set(context.TODO(), fmt.Sprintf("%s:time", oldMasterAddr), time.Now().Unix(), 0)
999+
if rst.Err() != nil {
1000+
job.runtime.Logger.Warn("[%s] set on old master failed :%+v", oldMasterAddr, err)
1001+
return err
1002+
}
1003+
return nil
1004+
}
1005+
9791006
// precheckStorageLogin make sure all todo switch redis can login
9801007
func (job *RedisSwitchPreCheck) precheckStorageLogin() error {
9811008
wg := &sync.WaitGroup{}

dbm-ui/backend/flow/consts.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,10 @@
5757
DEFAULT_REDIS_INSTANCE_DATABASES = 2
5858
DEFAULT_REDIS_CLUSTER_DATABASES = 1
5959

60-
# 切换时, 默认允许多久心跳
61-
DEFAULT_MASTER_DIFF_TIME = 61
62-
# 切换时, 允许多少秒丢失
63-
DEFAULT_LAST_IO_SECOND_AGO = 100
60+
# 切换时, 默认允许多久心跳 61->11 @20251121
61+
DEFAULT_MASTER_DIFF_TIME = 11
62+
# 切换时, 允许多少秒丢失 100->30 @20251121
63+
DEFAULT_LAST_IO_SECOND_AGO = 30
6464

6565
# 默认Riak端口
6666
DEFAULT_RIAK_PORT = 8087

0 commit comments

Comments
 (0)