All Products
Search
Document Center

Microservices Engine:Migrate configurations from a self-managed Nacos instance to MSE Nacos

Last Updated:Mar 11, 2026

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:

  1. 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).

  2. 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

Note

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:

MethodBest forTrade-off
Cold migration (export and import)You can freeze configuration changes during migrationSimple, no additional tooling required
Hot migration (MSE Sync)Configurations must stay in sync in real timeSupports incremental synchronization with zero downtime

Option A: Cold migration with export and import

Note

Repeat this process for each namespace. Configurations from different namespaces must be exported and imported separately.

Export configurations from the self-managed instance

  1. Log on to the open source Nacos console of your self-managed instance.

  2. On the Configuration List page, select the configurations to migrate and click Export.

  3. In the Export Configurations dialog box, click Export and save the exported file.

Import configurations into MSE Nacos

  1. Log on to the MSE console.

  2. In the left-side navigation pane, choose Microservices Registry > Instances. Click the name of your MSE Nacos instance.

  3. In the left-side navigation pane, choose Configuration Management > Configurations.

  4. On the Configurations page, select the destination namespace and click Import Configuration.

  5. 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.

    Import Configuration dialog box

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.

  1. 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.

    Migration to Cloud page

  2. In the Migration configuration panel, click Next to reach the Create Configuration step. Configure the following fields:

    FieldValue
    Source instance typeNacos
    Synchronization TypeConfigure Synchronization
    Source Instance Node AddressIP address and port of your self-managed Nacos node
    Destination InstanceYour MSE Nacos instance
  3. 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.

    Create Configuration step

Important
  • 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.

Note
  • 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 / FrameworkConfig file or codeProperties to update
Spring Cloud Alibababootstrap.propertiesspring.cloud.nacos.config.server-addr, namespace
Nacos SDK for JavaJava propertiesserverAddr, namespace
Nacos Spring Bootapplication.propertiesnacos.config.server-addr, nacos.config.namespace
Goconstant.ServerConfigIpAddr
PythonClient constructorSERVER_ADDRESSES, NAMESPACE
Node.jsClient config objectserverAddr, namespace
C#JSON configServerAddresses, Namespace
C++Properties mapSERVER_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

Note

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:

  1. 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.

  2. 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.

  3. Decommission. After you confirm that no traffic reaches the self-managed instance, shut it down.