diff --git a/dbm-ui/backend/flow/engine/bamboo/scene/mysql/mysql_restore_slave_remote_flow.py b/dbm-ui/backend/flow/engine/bamboo/scene/mysql/mysql_restore_slave_remote_flow.py index 08439c6298..c475611b0a 100644 --- a/dbm-ui/backend/flow/engine/bamboo/scene/mysql/mysql_restore_slave_remote_flow.py +++ b/dbm-ui/backend/flow/engine/bamboo/scene/mysql/mysql_restore_slave_remote_flow.py @@ -15,9 +15,11 @@ from django.utils.translation import ugettext as _ +from backend.components import DRSApi from backend.configuration.constants import DBType from backend.constants import IP_PORT_DIVIDER, IP_PORT_DIVIDER_FOR_DNS from backend.db_meta.enums import ClusterType, InstanceInnerRole, InstancePhase, InstanceStatus +from backend.db_meta.exceptions import InstanceNotExistException from backend.db_meta.models import Cluster from backend.db_package.models import Package from backend.flow.consts import MediumEnum @@ -433,6 +435,20 @@ def restore_local_slave_flow(self): machine__ip=self.data["slave_ip"], port=self.data["slave_port"], ) + + res = DRSApi.rpc( + { + "addresses": [target_slave.ip_port], + "cmds": ["select version()"], + "force": False, + "bk_cloud_id": target_slave.machine.bk_cloud_id, + } + ) + if res[0]["error_msg"]: + raise InstanceNotExistException( + _("请检查实例 {} 是否存活,是否正常可访问,slave原地重建是实例级别的,且必须保证实例存活方可提单进行").format(target_slave.ip_port) + ) + master = cluster_model.storageinstance_set.get(instance_inner_role=InstanceInnerRole.MASTER.value) self.data["new_slave_ip"] = target_slave.machine.ip self.data["bk_biz_id"] = cluster_model.bk_biz_id diff --git a/dbm-ui/backend/flow/engine/bamboo/scene/spider/remote_local_slave_recover.py b/dbm-ui/backend/flow/engine/bamboo/scene/spider/remote_local_slave_recover.py index bf4598e488..a1daac3976 100644 --- a/dbm-ui/backend/flow/engine/bamboo/scene/spider/remote_local_slave_recover.py +++ b/dbm-ui/backend/flow/engine/bamboo/scene/spider/remote_local_slave_recover.py @@ -16,8 +16,10 @@ from django.utils.crypto import get_random_string from django.utils.translation import ugettext as _ +from backend.components import DRSApi from backend.configuration.constants import DBType from backend.db_meta.enums import InstancePhase, InstanceStatus +from backend.db_meta.exceptions import InstanceNotExistException from backend.db_meta.models import Cluster from backend.flow.engine.bamboo.scene.common.builder import Builder, SubBuilder from backend.flow.engine.bamboo.scene.common.get_file_list import GetFileList @@ -115,6 +117,20 @@ def tendb_remote_slave_local_recover(self): self.data["master_port"] = shard.storage_instance_tuple.ejector.port self.data["slave_port"] = shard.storage_instance_tuple.receiver.port target_slave = cluster_class.storageinstance_set.get(id=shard.storage_instance_tuple.receiver.id) + # 检查slave是否存活 + res = DRSApi.rpc( + { + "addresses": [target_slave.ip_port], + "cmds": ["select version()"], + "force": False, + "bk_cloud_id": target_slave.machine.bk_cloud_id, + } + ) + if res[0]["error_msg"]: + raise InstanceNotExistException( + _("请检查实例 {} 是否存活,是否正常可访问,slave原地重建是实例级别的,且必须保证实例存活方可提单进行").format(target_slave.ip_port) + ) + master = cluster_class.storageinstance_set.get(id=shard.storage_instance_tuple.ejector.id) cluster = { "phase": InstancePhase.TRANS_STAGE.value,