Microservices Engine (MSE) Nacos provides a fully managed configuration center with built-in encryption, decryption, and push tracking. Compared to a self-managed Nacos cluster, MSE Nacos delivers higher availability, better performance, and lower operational overhead.
This guide walks you through migrating configuration data from a self-managed Nacos instance to MSE Nacos and updating your applications to connect to the new instance.
Migration overview
A Nacos configuration migration has two phases:
Migrate configuration data -- Transfer all configuration entries across all namespaces from the self-managed instance to MSE Nacos. Choose either cold migration (export/import) or hot migration (live sync with MSE Sync).
Update application connection parameters -- Point each application to the MSE Nacos endpoint and redeploy.
After both phases are complete, validate the migration and decommission the self-managed instance.
Prerequisites
Before you begin, make sure that you have:
An MSE Nacos instance. For details, see Create a Nacos engine
The required namespaces in the MSE Nacos instance. For details, see the "(Optional) Create a namespace" section of Create resources
If your self-managed instance uses multiple namespaces, create matching namespaces in MSE Nacos with the same namespace IDs and names. This prevents application-side namespace ID changes during migration.
Step 1: Migrate configuration data
Choose one of the following methods based on your tolerance for downtime:
| Method | Best for | Trade-off |
|---|---|---|
| Cold migration (export and import) | You can freeze configuration changes during migration | Simple, no additional tooling required |
| Hot migration (MSE Sync) | Configurations must stay in sync in real time | Supports incremental synchronization with zero downtime |
Option A: Cold migration with export and import
Repeat this process for each namespace. Configurations from different namespaces must be exported and imported separately.
Export configurations from the self-managed instance
Log on to the open source Nacos console of your self-managed instance.
On the Configuration List page, select the configurations to migrate and click Export.
In the Export Configurations dialog box, click Export and save the exported file.
Import configurations into MSE Nacos
Log on to the MSE console.
In the left-side navigation pane, choose Microservices Registry > Instances. Click the name of your MSE Nacos instance.
In the left-side navigation pane, choose Configuration Management > Configurations.
On the Configurations page, select the destination namespace and click Import Configuration.
In the Import Configuration dialog box, configure the import policy. If a conflict exists with the same configuration, you can select Stop Import, Skip, or Overwrite. Upload the exported file and click OK.

Keep configurations in sync during the transition
Before you cut over your applications, keep the self-managed and MSE Nacos instances in sync:
SDK-based updates -- Write every configuration change to both instances simultaneously (doublewrite).
Console-based updates -- Manually apply the same changes in both consoles.
Option B: Hot migration with MSE Sync
MSE Sync provides real-time configuration synchronization between the self-managed instance and MSE Nacos. For deployment instructions, see Migration solution based on MSE Sync.
After MSE Sync is deployed, log on to the MSE console. In the left-side navigation pane, choose Microservices Registry > Migration to Cloud. Click Migration configuration.

In the Migration configuration panel, click Next to reach the Create Configuration step. Configure the following fields:
Field Value Source instance type Nacos Synchronization Type Configure Synchronization Source Instance Node Address IP address and port of your self-managed Nacos node Destination Instance Your MSE Nacos instance Click Next to reach the Implement migration step. Click Download and save the configuration that you want to migrate. to import the configurations into MSE Sync.

MSE Sync does not support canary configuration synchronization. If the canary release scope of either instance includes the synchronization tool, canary configurations are synced as regular configurations.
Do not modify configurations in both the source and destination instances at the same time.
Step 2: Update application connection parameters
After the configuration data is migrated, update each application to connect to the MSE Nacos endpoint and redeploy.
Find the MSE Nacos endpoint on the Basic Information page of your instance in the MSE console. Use the internal endpoint for applications within the same Virtual Private Cloud (VPC), or the public endpoint for external access.
If you use a public endpoint, add the public IP addresses of your Nacos clients to the whitelist. For details, see Configure a public IP address whitelist.
If the whitelist is empty, all public IP addresses are allowed by default.
The following table summarizes the changes for each SDK or framework. Detailed examples follow.
| SDK / Framework | Config file or code | Properties to update |
|---|---|---|
| Spring Cloud Alibaba | bootstrap.properties | spring.cloud.nacos.config.server-addr, namespace |
| Nacos SDK for Java | Java properties | serverAddr, namespace |
| Nacos Spring Boot | application.properties | nacos.config.server-addr, nacos.config.namespace |
| Go | constant.ServerConfig | IpAddr |
| Python | Client constructor | SERVER_ADDRESSES, NAMESPACE |
| Node.js | Client config object | serverAddr, namespace |
| C# | JSON config | ServerAddresses, Namespace |
| C++ | Properties map | SERVER_ADDR, NAMESPACE |
Spring Cloud Alibaba
Check whether the following dependency exists in your pom.xml:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>If it does, update bootstrap.properties:
# Replace with the MSE Nacos endpoint (internal or public)
spring.cloud.nacos.config.server-addr=<mse-nacos-endpoint>If the namespace ID has changed, update it as well. Leave it blank for the default namespace. Find the namespace ID on the Namespace page of your MSE Nacos instance.
Nacos SDK for Java
Check whether the following dependency exists in your pom.xml:
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>If it does, update the connection properties and redeploy:
// Replace with the MSE Nacos endpoint
properties.put("serverAddr", "<mse-nacos-endpoint>");
// Replace with the MSE Nacos namespace ID (leave blank for the default namespace)
properties.put("namespace", "<namespace-id>");Nacos Spring Boot
Update application.properties:
# Replace with the MSE Nacos endpoint
nacos.config.server-addr=<mse-nacos-endpoint>
# Replace with the MSE Nacos namespace ID
nacos.config.namespace=<namespace-id>Go
Before you call any API operation, configure the MSE_AK (AccessKey ID) and MSE_SK (AccessKey secret) environment variables.
Update the server configuration in your Go application:
sc := []constant.ServerConfig{
{
IpAddr: "<mse-nacos-endpoint>",
Port: 8848,
},
}For a complete example, see nacos-sdk-go.
Python
Update the server address and namespace:
SERVER_ADDRESSES = "<mse-nacos-endpoint>"
NAMESPACE = "<namespace-id>"
client = nacos.NacosClient(SERVER_ADDRESSES, namespace=NAMESPACE)Node.js
Update the client configuration:
const configClient = new NacosConfigClient({
serverAddr: '<mse-nacos-endpoint>',
namespace: '<namespace-id>',
accessKey: 'MSE_AK',
secretKey: 'MSE_SK',
requestTimeout: 6000,
});C#
Update the NacosConfig section in your configuration file:
{
"NacosConfig": {
"Listeners": [
{
"Optional": false,
"DataId": "common",
"Group": "DEFAULT_GROUP"
},
{
"Optional": false,
"DataId": "demo",
"Group": "DEFAULT_GROUP"
}
],
"Namespace": "<namespace-id>",
"ServerAddresses": [ "http://<mse-nacos-endpoint>:8848/" ],
"UserName": "<username>",
"Password": "<password>",
"AccessKey": "MSE_AK",
"SecretKey": "MSE_SK",
"EndPoint": "acm.aliyun.com",
"ConfigFilterAssemblies": ["YouPrefix.AssemblyName"],
"ConfigFilterExtInfo": "some ext information"
}
}C++
Update the server address and namespace:
Properties props;
props[PropertyKeyConst::SERVER_ADDR] = "<mse-nacos-endpoint>:8848";
props[PropertyKeyConst::NAMESPACE] = "<namespace-id>";Step 3: Validate and decommission the self-managed instance
After all applications are running on MSE Nacos:
Stop synchronization. If you used MSE Sync (Option B), terminate the synchronization task. If you used doublewrite (Option A), stop writing to the self-managed instance.
Monitor the self-managed instance. Check traffic on the self-managed instance and verify the following:
No remaining client connections exist.
No query records of configuration pushes are found.
Decommission. After you confirm that no traffic reaches the self-managed instance, shut it down.