O MSE Sync sincroniza dados de serviços e configurações entre registros como Nacos, ZooKeeper, Eureka e Consul. Baseado no projeto de código aberto NacosSync, o MSE Sync oferece sincronização bidirecional, descoberta automática de serviços e sincronização completa com um clique, facilitando a migração de registros autogerenciados para instâncias do Microservices Engine (MSE).
Como funciona
O MSE Sync conecta um registro de origem a uma instância MSE de destino sincronizando continuamente os dados de registro de serviço durante a migração. Como ambos os registros fornecem informações idênticas, as aplicações conectadas a qualquer um dos lados conseguem descobrir serviços no outro. Isso permite migrar aplicações de forma incremental.
No diagrama a seguir, pub representa um publicador de serviço e sub representa um assinante de serviço.

Para garantir alta disponibilidade, o MSE Sync implanta múltiplas instâncias com suporte de um banco de dados compartilhado. Se ocorrer falha em um nó, os nós íntegros executarão automaticamente uma tarefa de recuperação para assumir o trabalho de sincronização do nó defeituoso.

Conceitos principais
|
Conceito |
Descrição |
|
Cluster |
Instância de registro de origem ou destino definida na configuração do MSE Sync. Cada cluster possui um nome exclusivo, um tipo (Nacos, ZooKeeper, Eureka ou Consul) e um ou mais endpoints de conexão. |
|
Task |
Trabalho de sincronização que transfere dados de um cluster de origem para um cluster de destino. Cada tarefa especifica o tipo de sincronização, a direção e um filtro opcional de nome de serviço. |
|
Sync type |
Define quais dados serão sincronizados. |
|
Sync mode |
|
Caminhos de migração compatíveis
O MSE Sync é compatível com a lógica de registro de serviços do ZooKeeper, Nacos, Eureka e Consul.

|
Registro de origem |
Registro de destino |
Dados sincronizados |
|
Nacos |
Nacos |
Dados nativos de serviço do Nacos |
|
ZooKeeper |
ZooKeeper |
Serviços e configurações persistentes |
|
Eureka |
Nacos |
Dados nativos de serviço do Eureka |
|
Consul |
Nacos |
Dados nativos de serviço do Consul (apenas instâncias íntegras) |
ZooKeeper
Não modifique o mesmo Znode nos clusters de origem e destino simultaneamente. Escritas concorrentes podem causar perda de dados durante a migração. Não utilize a sincronização de configuração para sincronizar serviços ou nós efêmeros.
Ao sincronizar nós persistentes, o MSE Sync registra um watch no cluster de origem para cada Znode. Se o cluster de origem contiver muitos nós, isso gera uma grande quantidade de watches e consome memória significativa. Certifique-se de que a contagem de Znodes e os recursos do cluster de origem suportem os listeners de watch adicionais do MSE Sync.
Eureka para Nacos
Por padrão, o Eureka registra nomes de serviço em letras maiúsculas (por exemplo, SERVICE-1). O MSE Sync converte esses nomes para minúsculas ao sincronizar com o Nacos (por exemplo, service-1).
Essa conversão pode causar problemas com nomes que misturam maiúsculas e minúsculas. Por exemplo, se um serviço chamado Service-1 for registrado diretamente no Nacos junto com o service-1 sincronizado, o Nacos os tratará como dois serviços separados. Instâncias sob um nome não conseguirão descobrir instâncias sob o outro.
Para evitar esse problema, padronize todos os nomes de serviço para letras minúsculas antes de iniciar a migração.
Consul para Nacos
O MSE Sync sincroniza apenas instâncias íntegras do Consul. Ele não detecta nem sincroniza alterações de metadados. Dados de configuração do Consul não são compatíveis.
Etapa 1: Implantar o MSE Sync
Antes de implantar, verifique se:
O ambiente de implantação do MSE Sync tem conectividade de rede com os registros de origem e destino (por exemplo, implante o MSE Sync na mesma Virtual Private Cloud (VPC) ou garanta acesso à internet pública para ambos os clusters).
(Se usar MySQL) Um serviço MySQL está disponível com um banco de dados e uma conta de usuário com permissões de leitura e escrita.
O MSE Sync precisa se conectar aos registros de origem e destino. Se não conseguir alcançar ambos, a migração falhará.
Escolher um backend de armazenamento
O MSE Sync é compatível com dois backends de armazenamento:
|
Backend |
Quando usar |
Suporte a múltiplas instâncias |
|
MySQL (obrigatório para implantação multi-instância) |
Ao executar várias instâncias do MSE Sync para alta disponibilidade |
Sim -- múltiplas instâncias compartilham um banco de dados MySQL |
|
Derby incorporado |
Para testes ou implantações de nó único |
Não -- apenas máquina única |
O MSE Sync seleciona automaticamente o backend com base nas variáveis de ambiente. Se MYSQL_URL, MYSQL_USER_NAME e MYSQL_PASSWORD estiverem definidas, ele se conecta ao MySQL. Caso contrário, utiliza o banco de dados Derby incorporado.
|
Variável |
Descrição |
Exemplo |
|
|
String de conexão MySQL |
|
|
|
Nome de usuário com permissões de leitura e escrita |
-- |
|
|
Senha da conta |
-- |
Configurar parâmetros da JVM
Adicione parâmetros da JVM no arquivo conf/java.env usando a variável JAVA_OPT:
JAVA_OPT="$JAVA_OPT -Xms2048m -Xmx2048m"
Implantar no Kubernetes
-
Salve a configuração a seguir como
mse-sync-deployment.yaml. Substitua os detalhes de conexão do MySQL e ajustereplicasconforme necessário.NotaPara acessar a interface web do MSE Sync, crie um Serviço Kubernetes que direcione o tráfego para a porta 8000.
apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/name: mse-sync name: mse-sync-svc spec: replicas: 3 selector: matchLabels: app.kubernetes.io/name: mse-sync template: metadata: labels: app.kubernetes.io/name: mse-sync spec: containers: - name: mse-sync image: msecrinstance-registry.cn-hangzhou.cr.aliyuncs.com/mse-demo/mse-sync:latest ports: - containerPort: 8000 env: - name: MYSQL_URL value: "jdbc:mysql://192.xx.xx.xx:3306/sync" - name: MYSQL_USER_NAME value: "mse-sync" - name: MYSQL_PASSWORD value: password -
Implante o MSE Sync:
kubectl apply -f mse-sync-deployment.yaml
Implantar no Elastic Compute Service (ECS)
-
Baixe o binário do MSE Sync:
curl https://msesync.oss-cn-hangzhou.aliyuncs.com/MseSync.zip --output msesync.zip -
Extraia o pacote:
unzip ./msesync.zip -
(Opcional) Se usar MySQL, defina as variáveis de ambiente do banco de dados:
export MYSQL_URL="" export MYSQL_USER_NAME="" export MYSQL_PASSWORD="" -
Inicie o MSE Sync:
./MseSync/bin/startup.sh start
Etapa 2: Configurar clusters e tarefas de sincronização
O MSE Sync oferece três métodos de configuração:
|
Método |
Mais indicado para |
Detalhes |
|
Arquivo de configuração (recomendado) |
Migrações automatizadas ou em grande escala |
Defina clusters e tarefas em YAML; importe via CLI ou carregue automaticamente na inicialização |
|
Interface Web |
Migrações ad-hoc ou de pequena escala |
Importe a configuração pela interface baseada em navegador |
|
Console MSE |
Gerar arquivos de configuração iniciais |
A página Cloud Migration gera automaticamente arquivos de configuração YAML |
Opção A: Configurar com um arquivo YAML
Um arquivo de configuração contém duas seções: clusters (detalhes de conexão do registro) e tasks (trabalhos de sincronização).
O exemplo a seguir sincroniza todos os serviços dos namespaces public e test no cluster de origem para o cluster de destino, usando sincronização bidirecional:
clusters:
- clusterName: src
connectKeyList:
- mse-xxxxx-nacos-ans.mse.aliyuncs.com:8848
clusterType: NACOS
namespace: public,test
- clusterName: dst
connectKeyList:
- mse-xxxxxx-nacos-ans.mse.aliyuncs.com:8848
clusterType: NACOS
tasks:
- source: src
destination: dst
type: Service
mode: Bidirectional
serviceMatchPattern: ".*"
autoScanAndAddService: true
Importe a configuração usando a CLI:
./bin/msesyncCMD.sh apply -f {path_to_configuration_file}
Alternativamente, coloque o arquivo em MseSync/conf/config.yaml. O MSE Sync o carrega automaticamente na inicialização.
Ao importar um arquivo de configuração, serviços recém-adicionados são automaticamente descobertos e sincronizados.
Opção B: Configurar pela interface web
Abra a interface web do MSE Sync.
No painel de navegação à esquerda, clique em Service Sync.
Clique em Import Configuration.
Na caixa de diálogo Import Configuration, cole a configuração YAML e clique em OK.
Referência de configuração
Campos de cluster
|
Campo |
Descrição |
Exemplo |
|
|
Nome exclusivo para o cluster. Uma vez definido, não altere este valor. |
|
|
|
Tipo de registro: |
|
|
|
Nome do namespace do Nacos. Separe múltiplos namespaces com vírgulas. Se deixado em branco em um cluster de origem, os dados de todos os namespaces serão sincronizados. |
|
|
|
Lista de endpoints de conexão para o cluster. |
Veja o exemplo abaixo |
|
|
Nome de usuário do Nacos (se a autenticação estiver ativada). |
-- |
|
|
Senha do Nacos (se a autenticação estiver ativada). |
-- |
|
|
AccessKey ID para autenticação com uma instância MSE Nacos na nuvem. |
|
|
|
AccessKey secret para autenticação com uma instância MSE Nacos na nuvem. |
|
**Exemplo de connectKeyList:**
connectKeyList:
- localhost:8848
- localhost1:8848
Campos de tarefa
|
Campo |
Descrição |
Padrão |
|
|
Nome do cluster de origem (deve corresponder a um |
-- |
|
|
Nome do cluster de destino. O namespace de destino é mantido automaticamente consistente com a origem. Se o namespace não existir no destino, o MSE Sync o criará. |
-- |
|
|
Tipo de sincronização: |
-- |
|
|
Direção da sincronização: |
-- |
|
|
Expressão regular para filtrar quais serviços sincronizar. |
|
|
|
Descobre e sincroniza automaticamente novos serviços adicionados ao cluster de origem. |
|
Implantação multi-instância
Para ambientes de produção, implante múltiplas instâncias do MSE Sync com suporte de um banco de dados MySQL compartilhado. Se um nó falhar, os nós íntegros detectarão a falha e assumirão seu trabalho de sincronização automaticamente.
Intervalo de varredura de recuperação
O intervalo de varredura de recuperação controla a frequência com que os nós íntegros verificam a existência de nós com falha. Defina-o com o seguinte parâmetro da JVM por meio da variável de ambiente JAVA_OPT:
-Dmsesync.daemon.refresh.interval=60 // Unit: seconds
Exemplo:
JAVA_OPT="$JAVA_OPT -Dmsesync.daemon.refresh.interval=10"
O intervalo padrão é de 60 segundos. Não defina um valor muito baixo — um intervalo curto aumenta a carga tanto no servidor quanto nos nós do MSE Sync. O valor mínimo recomendado é 10 segundos.
Não use implantação multi-instância para tarefas de sincronização de configuração.
Durante o intervalo entre a falha de um nó e a próxima varredura de recuperação agendada, a lista de instâncias do cliente pode ficar temporariamente vazia.
Observações de uso
Sincronização bidirecional e status offline: Durante a sincronização bidirecional, se você colocar um provedor de serviço offline pelo console da instância de destino, o status offline não será propagado de volta para a instância de origem.
Imutabilidade do nome do cluster: Após definir um
clusterNamena configuração, não o altere. A alteração pode impedir que as tarefas de sincronização sejam retomadas após uma reinicialização.
Perguntas frequentes
Uma tarefa de sincronização foi adicionada pela interface ou arquivo YAML, mas não aparece na lista de tarefas.
Verifique se existem serviços no namespace do cluster de origem. O MSE Sync cria tarefas de sincronização apenas para serviços que consegue descobrir. Confirme os seguintes pontos:
Os detalhes de conexão do cluster estão corretos (endpoints, credenciais de autenticação).
O ID do namespace corresponde a um namespace existente no cluster de origem.
Pelo menos uma instância de serviço (provedor de serviço) está registrada no namespace especificado.
Durante a sincronização bidirecional, colocar um provedor de serviço offline pelo console de destino não sincroniza de volta para a origem.
Este é o comportamento esperado. O status offline definido pelo console da instância de destino não é sincronizado com a instância de origem.
Descrição de campos adicionais de configuração YAML
-
Campo Clusters:
Campo
Descrição
Valor de exemplo
namespace
Nome do namespace do Nacos.
Observação: Você pode inserir múltiplos namespaces, separados por vírgulas. Se este campo for deixado vazio e a instância for a origem da sincronização, os dados de todos os namespaces da instância serão sincronizados.
-
public
-
test
-
test1
ak
O AccessKey para autenticação da instância MSE Nacos na nuvem.
LTAI5*dXai6
sk
O AccessKey secret para autenticação da instância MSE Nacos na nuvem.
Jdvdj***6vs7wBEKO
-