diff --git a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/GovernanceServiceImpl.java b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/GovernanceServiceImpl.java
index 85d0c4e..409187f 100644
--- a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/GovernanceServiceImpl.java
+++ b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/GovernanceServiceImpl.java
@@ -54,7 +54,7 @@
         List<String> instanceIds = registryCenterService.getActivatedRegistryCenter().getChildrenKeys(getInstancesNodeFullRootPath());
         Collection<InstanceDTO> result = new ArrayList<>(instanceIds.size());
         for (String instanceId : instanceIds) {
-            String value = registryCenterService.getActivatedRegistryCenter().get(registryCenterService.getActivatedStateNode().getInstancesNodeFullPath(instanceId));
+            String value = registryCenterService.getActivatedRegistryCenter().get(registryCenterService.getActivatedStateNode().getProxyNodePath(instanceId));
             result.add(new InstanceDTO(instanceId, !RegistryCenterNodeStatus.DISABLED.toString().equalsIgnoreCase(value)));
         }
         return result;
@@ -63,7 +63,7 @@
     @Override
     public void updateInstanceStatus(final String instanceId, final boolean enabled) {
         String value = enabled ? "" : RegistryCenterNodeStatus.DISABLED.toString();
-        registryCenterService.getActivatedRegistryCenter().persist(registryCenterService.getActivatedStateNode().getInstancesNodeFullPath(instanceId), value);
+        registryCenterService.getActivatedRegistryCenter().persist(registryCenterService.getActivatedStateNode().getProxyNodePath(instanceId), value);
     }
     
     @Override
@@ -83,11 +83,11 @@
     @Override
     public void updateSlaveDataSourceStatus(final String schemaNames, final String slaveDataSourceName, final boolean enabled) {
         String value = enabled ? "" : RegistryCenterNodeStatus.DISABLED.toString();
-        registryCenterService.getActivatedRegistryCenter().persist(registryCenterService.getActivatedStateNode().getDataSourcesNodeDataSourcePath(schemaNames, slaveDataSourceName), value);
+        registryCenterService.getActivatedRegistryCenter().persist(registryCenterService.getActivatedStateNode().getDataSourcePath(schemaNames, slaveDataSourceName), value);
     }
     
     private String getInstancesNodeFullRootPath() {
-        String result = registryCenterService.getActivatedStateNode().getInstancesNodeFullPath("");
+        String result = registryCenterService.getActivatedStateNode().getProxyNodePath("");
         return result.substring(0, result.length() - 1);
     }
     
@@ -122,11 +122,11 @@
     
     private Collection<String> getDisabledSchemaDataSourceNames() {
         List<String> result = new ArrayList<>();
-        List<String> schemaNames = registryCenterService.getActivatedRegistryCenter().getChildrenKeys(registryCenterService.getActivatedStateNode().getDataSourcesNodeFullRootPath());
+        List<String> schemaNames = registryCenterService.getActivatedRegistryCenter().getChildrenKeys(registryCenterService.getActivatedStateNode().getDataNodesPath());
         for (String schemaName : schemaNames) {
-            List<String> dataSourceNames = registryCenterService.getActivatedRegistryCenter().getChildrenKeys(registryCenterService.getActivatedStateNode().getDataSourcesNodeSchemaPath(schemaName));
+            List<String> dataSourceNames = registryCenterService.getActivatedRegistryCenter().getChildrenKeys(registryCenterService.getActivatedStateNode().getSchemaPath(schemaName));
             for (String dataSourceName : dataSourceNames) {
-                String value = registryCenterService.getActivatedRegistryCenter().get(registryCenterService.getActivatedStateNode().getDataSourcesNodeDataSourcePath(schemaName, dataSourceName));
+                String value = registryCenterService.getActivatedRegistryCenter().get(registryCenterService.getActivatedStateNode().getDataSourcePath(schemaName, dataSourceName));
                 if (RegistryCenterNodeStatus.DISABLED.toString().equalsIgnoreCase(value)) {
                     result.add(Joiner.on(".").join(schemaName, dataSourceName));
                 }
diff --git a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ShardingSchemaServiceImpl.java b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ShardingSchemaServiceImpl.java
index 3aa2421..021d3ec 100644
--- a/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ShardingSchemaServiceImpl.java
+++ b/shardingsphere-ui-backend/src/main/java/org/apache/shardingsphere/ui/servcie/impl/ShardingSchemaServiceImpl.java
@@ -49,7 +49,7 @@
 
     @Override
     public Collection<String> getAllSchemaNames() {
-        return configCenterService.getActivatedConfigCenter().getChildrenKeys(configCenterService.getActivateConfigurationNode().getSchemaPath());
+        return configCenterService.getActivatedConfigCenter().getChildrenKeys(configCenterService.getActivateConfigurationNode().getSchemasPath());
     }
     
     @Override
@@ -89,10 +89,10 @@
         ConfigurationRepository configCenterRepository = configCenterService.getActivatedConfigCenter();
         String schemaNamePath = configCenterService.getActivateConfigurationNode().getSchemaNamePath(schemaName);
         configCenterRepository.delete(schemaNamePath);
-        String schemaNames = configCenterRepository.get(configCenterService.getActivateConfigurationNode().getSchemaPath());
+        String schemaNames = configCenterRepository.get(configCenterService.getActivateConfigurationNode().getSchemasPath());
         List<String> schemaNameList = new ArrayList<>(Splitter.on(",").splitToList(schemaNames));
         schemaNameList.remove(schemaName);
-        configCenterRepository.persist(configCenterService.getActivateConfigurationNode().getSchemaPath(), Joiner.on(",").join(schemaNameList));
+        configCenterRepository.persist(configCenterService.getActivateConfigurationNode().getSchemasPath(), Joiner.on(",").join(schemaNameList));
     }
 
     @Override
@@ -137,7 +137,7 @@
     
     private void persistSchemaName(final String schemaName) {
         ConfigurationRepository configCenterRepository = configCenterService.getActivatedConfigCenter();
-        String schemaPath = configCenterService.getActivateConfigurationNode().getSchemaPath();
+        String schemaPath = configCenterService.getActivateConfigurationNode().getSchemasPath();
         String schemaNames = configCenterRepository.get(schemaPath);
         List<String> schemaNameList = Strings.isNullOrEmpty(schemaNames) ? new ArrayList<>() : new ArrayList<>(Splitter.on(",").splitToList(schemaNames));
         if (!schemaNameList.contains(schemaName)) {
