MSE Sync menyinkronkan data layanan dan konfigurasi antara registri seperti Nacos, ZooKeeper, Eureka, dan Consul. Dibangun di atas proyek open-source NacosSync, MSE Sync mendukung sinkronisasi dua arah, penemuan layanan otomatis, dan sinkronisasi satu-klik untuk seluruh layanan, memungkinkan migrasi lancar dari registri yang dikelola sendiri ke instans Microservices Engine (MSE).
Cara kerja
MSE Sync bertindak sebagai jembatan antara registri sumber dan instans MSE target. Selama migrasi, MSE Sync terus-menerus menyinkronkan data registrasi layanan sehingga kedua registri menyajikan informasi yang identik. Aplikasi yang terhubung ke salah satu registri dapat menemukan layanan yang terdaftar di registri lainnya, memungkinkan Anda melakukan migrasi aplikasi secara bertahap.
Pada diagram berikut, pub merepresentasikan penerbit layanan dan sub merepresentasikan subscriber layanan.

MSE Sync menggunakan arsitektur penerapan multi-instans untuk ketersediaan tinggi. Jika suatu node gagal, node-node sehat menjalankan tugas pemulihan terjadwal untuk mengambil alih pekerjaan sinkronisasi dari node yang gagal tersebut.

Konsep utama
| Konsep | Deskripsi |
|---|---|
| Cluster | Instans registri sumber atau target yang didefinisikan dalam konfigurasi MSE Sync. Setiap kluster memiliki nama unik, tipe (Nacos, ZooKeeper, Eureka, atau Consul), dan satu atau lebih titik akhir koneksi. |
| Task | Pekerjaan sinkronisasi yang memindahkan data dari kluster sumber ke kluster tujuan. Setiap task menentukan tipe sinkronisasi, arah, dan filter nama layanan opsional. |
| Tipe sinkronisasi | Menentukan data apa yang disinkronkan. Service menyinkronkan data registrasi layanan. Config menyinkronkan data konfigurasi (hanya untuk Nacos dan ZooKeeper). All membuat task sinkronisasi layanan dan konfigurasi berdasarkan tipe kluster sumber. |
| Mode sinkronisasi | Unidirectional menyalin data layanan yang terdaftar secara native dari sumber ke target. Bidirectional menyinkronkan data layanan yang terdaftar secara native di kedua arah. |
Jalur migrasi yang didukung
MSE Sync kompatibel dengan logika registrasi layanan ZooKeeper, Nacos, Eureka, dan Consul.

| Registri sumber | Registri target | Apa yang disinkronkan |
|---|---|---|
| Nacos | Nacos | Data layanan Nacos native |
| ZooKeeper | ZooKeeper | Layanan dan konfigurasi persisten |
| Eureka | Nacos | Data layanan Eureka native |
| Consul | Nacos | Data layanan Consul native (hanya instans yang sehat) |
ZooKeeper
Jangan memodifikasi Znode yang sama di kedua kluster sumber dan target secara bersamaan. Penulisan konkuren dapat menyebabkan kehilangan data selama migrasi. Jangan gunakan sinkronisasi konfigurasi untuk menyinkronkan layanan atau node ephemeral.
Saat menyinkronkan node persisten, MSE Sync mendaftarkan watch pada kluster sumber untuk setiap Znode. Jika kluster sumber berisi banyak node, hal ini akan menghasilkan jumlah watch yang besar dan mengonsumsi memori signifikan. Pastikan jumlah Znode dan sumber daya kluster sumber mampu menangani listener watch tambahan dari MSE Sync.
Eureka ke Nacos
Eureka mendaftarkan nama layanan dalam huruf kapital secara default (misalnya, SERVICE-1). MSE Sync mengonversi nama-nama ini menjadi huruf kecil saat menyinkronkan ke Nacos (misalnya, service-1).
Konversi ini dapat menyebabkan masalah interoperabilitas dengan nama campuran (mixed-case). Misalnya, jika layanan bernama Service-1 terdaftar langsung di Nacos bersamaan dengan service-1 yang disinkronkan, Nacos menganggapnya sebagai dua layanan terpisah. Instans yang terdaftar di bawah satu nama tidak dapat menemukan instans di bawah nama lainnya.
Untuk menghindari masalah ini, standarisasikan semua nama layanan menjadi huruf kecil sebelum memulai migrasi.
Consul ke Nacos
MSE Sync hanya menyinkronkan informasi instans yang sehat dari Consul. Perubahan metadata tidak terdeteksi atau disinkronkan secara otomatis. Data konfigurasi Consul tidak didukung.
Langkah 1: Penerapan MSE Sync
Sebelum menerapkan, pastikan bahwa:
Lingkungan penerapan MSE Sync memiliki konektivitas jaringan ke registri sumber dan target (misalnya, terapkan MSE Sync di Virtual Private Cloud (VPC) yang sama atau pastikan MSE Sync memiliki akses internet publik ke kedua kluster)
(Jika menggunakan MySQL) Layanan MySQL tersedia dengan database dan akun pengguna yang memiliki izin baca dan tulis
MSE Sync harus terhubung ke registri sumber dan target. Jika tidak dapat mencapai keduanya, migrasi akan gagal.
Pilih backend penyimpanan
MSE Sync mendukung dua backend penyimpanan:
| Backend | Gunakan saat | Dukungan multi-instans |
|---|---|---|
| MySQL (wajib untuk penerapan multi-instans) | Menjalankan beberapa instans MSE Sync untuk ketersediaan tinggi | Ya -- beberapa instans berbagi satu database MySQL |
| Embedded Derby | Pengujian atau penerapan single-node | Tidak -- hanya satu mesin |
MSE Sync secara otomatis memilih backend berdasarkan variabel lingkungan. Jika MYSQL_URL, MYSQL_USER_NAME, dan MYSQL_PASSWORD semuanya diatur, MSE Sync terhubung ke MySQL. Jika tidak, MSE Sync menggunakan database embedded Derby.
| Variabel | Deskripsi | Contoh |
|---|---|---|
MYSQL_URL | String koneksi MySQL | jdbc:mysql://localhost:3306/sync |
MYSQL_USER_NAME | Username dengan izin baca dan tulis | -- |
MYSQL_PASSWORD | Password untuk akun tersebut | -- |
Konfigurasi parameter JVM
Tambahkan parameter JVM dalam file conf/java.env menggunakan variabel JAVA_OPT:
JAVA_OPT="$JAVA_OPT -Xms2048m -Xmx2048m"Terapkan di Kubernetes
Simpan konfigurasi berikut sebagai
mse-sync-deployment.yaml. Ganti detail koneksi MySQL dan sesuaikanreplicassesuai kebutuhan.CatatanUntuk mengakses antarmuka web MSE Sync, buat Service Kubernetes yang mengarahkan traffic ke port 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: passwordTerapkan MSE Sync:
kubectl apply -f mse-sync-deployment.yaml
Terapkan di Elastic Compute Service (ECS)
Unduh biner MSE Sync:
curl https://msesync.oss-cn-hangzhou.aliyuncs.com/MseSync.zip --output msesync.zipEkstrak paket:
unzip ./msesync.zip(Opsional) Jika menggunakan MySQL, atur variabel lingkungan database:
export MYSQL_URL="" export MYSQL_USER_NAME="" export MYSQL_PASSWORD=""Jalankan MSE Sync:
./MseSync/bin/startup.sh start
Langkah 2: Konfigurasi kluster dan task sinkronisasi
MSE Sync mendukung tiga metode konfigurasi:
| Metode | Paling cocok untuk | Detail |
|---|---|---|
| File konfigurasi (direkomendasikan) | Migrasi otomatis atau skala besar | Definisikan kluster dan task dalam YAML; impor melalui CLI atau muat otomatis saat startup |
| Web UI | Migrasi ad-hoc atau skala kecil | Impor konfigurasi melalui antarmuka berbasis browser |
| MSE console | Menghasilkan file konfigurasi awal | Halaman Cloud Migration menghasilkan otomatis file konfigurasi YAML |
Opsi A: Konfigurasi dengan file YAML
File konfigurasi berisi dua bagian: clusters (detail koneksi registri) dan tasks (pekerjaan sinkronisasi).
Contoh berikut menyinkronkan semua layanan dari namespace public dan test di kluster sumber ke kluster tujuan, menggunakan sinkronisasi dua arah:
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: trueImpor konfigurasi menggunakan CLI:
./bin/msesyncCMD.sh apply -f {path_to_configuration_file}Atau, letakkan file tersebut di MseSync/conf/config.yaml. MSE Sync akan memuatnya secara otomatis saat startup.
Saat mengimpor file konfigurasi, layanan yang baru ditambahkan akan secara otomatis ditemukan dan disinkronkan.
Opsi B: Konfigurasi melalui antarmuka web
Buka antarmuka web MSE Sync.
Pada panel navigasi kiri, klik Service Sync.
Klik Import Configuration.
Pada kotak dialog Import Configuration, tempel konfigurasi YAML dan klik OK.
Referensi konfigurasi
Bidang kluster
| Bidang | Deskripsi | Contoh |
|---|---|---|
clusterName | Nama unik untuk kluster. Setelah diatur, jangan ubah nilai ini. | sourceCluster |
clusterType | Tipe registri: NACOS, ZOOKEEPER, EUREKA, atau CONSUL | NACOS |
namespace | Nama namespace Nacos. Pisahkan beberapa namespace dengan koma. Jika dibiarkan kosong pada kluster sumber, data dari semua namespace akan disinkronkan. | public,test |
connectKeyList | Daftar titik akhir koneksi untuk kluster. | Lihat contoh di bawah |
userName | Username Nacos (jika autentikasi diaktifkan). | -- |
password | Password Nacos (jika autentikasi diaktifkan). | -- |
ak | ID AccessKey untuk autentikasi dengan instans Nacos MSE cloud. | LTAI5***dXai6 |
sk | Rahasia AccessKey untuk autentikasi dengan instans Nacos MSE cloud. | Jdvdj***6vs7wBEKO |
Contoh connectKeyList:
connectKeyList:
- localhost:8848
- localhost1:8848Bidang task
| Bidang | Deskripsi | Default |
|---|---|---|
source | Nama kluster sumber (harus sesuai dengan clusterName di bagian clusters). | -- |
destination | Nama kluster target. Namespace target secara otomatis dipertahankan konsisten dengan sumber. Jika namespace tidak ada di target, MSE Sync akan membuatnya. | -- |
type | Tipe sinkronisasi: Service (data layanan), Config (data konfigurasi, hanya untuk Nacos dan ZooKeeper), atau All (keduanya). | -- |
mode | Arah sinkronisasi: Unidirectional (hanya dari sumber ke target) atau Bidirectional (kedua arah). | -- |
serviceMatchPattern | Ekspresi reguler untuk memfilter layanan mana yang akan disinkronkan. | .* (semua layanan) |
autoScanAndAddService | Secara otomatis menemukan dan menyinkronkan layanan baru yang ditambahkan ke kluster sumber. | true |
Penerapan multi-instans
Untuk lingkungan produksi, terapkan beberapa instans MSE Sync yang didukung oleh database MySQL bersama. Jika satu node gagal, node-node sehat yang tersisa mendeteksi kegagalan melalui tugas terjadwal dan mengambil alih pekerjaan sinkronisasi dari node yang gagal tersebut.
Interval pemindaian pemulihan
Interval pemindaian pemulihan mengontrol seberapa sering node sehat memeriksa kegagalan node. Konfigurasikan dengan parameter Java Virtual Machine (JVM) berikut, yang diatur melalui variabel lingkungan JAVA_OPT:
-Dmsesync.daemon.refresh.interval=60 // Satuan: detikContoh:
JAVA_OPT="$JAVA_OPT -Dmsesync.daemon.refresh.interval=10"Interval default adalah 60 detik. Jangan atur terlalu rendah — interval pendek meningkatkan beban pada server dan node MSE Sync. Nilai minimum yang direkomendasikan adalah 10 detik. Sesuaikan berdasarkan beban kluster dan volume sinkronisasi.
Jangan gunakan penerapan multi-instans untuk task sinkronisasi konfigurasi.
Selama interval antara kegagalan node dan pemindaian pemulihan terjadwal berikutnya, daftar instans klien mungkin sementara kosong.
Catatan penggunaan
Sinkronisasi dua arah dan status offline: Selama sinkronisasi dua arah, jika penyedia layanan di-offline dari konsol instans target, status offline tersebut tidak disebarkan kembali ke instans sumber.
Imutabilitas nama kluster: Setelah
clusterNamediatur dalam konfigurasi, jangan ubah nilainya. Mengubahnya dapat mencegah task sinkronisasi dilanjutkan setelah restart.
FAQ
Task sinkronisasi telah ditambahkan melalui UI atau file YAML, tetapi tidak muncul di daftar task.
Periksa apakah layanan ada di namespace kluster sumber. MSE Sync hanya membuat task sinkronisasi untuk layanan yang dapat ditemukan. Verifikasi:
Detail koneksi kluster benar (titik akhir, kredensial autentikasi).
ID namespace sesuai dengan namespace yang ada di kluster sumber.
Setidaknya satu instans layanan (penyedia layanan) terdaftar di namespace yang ditentukan.
Selama sinkronisasi dua arah, menonaktifkan penyedia layanan dari konsol target tidak disinkronkan kembali ke sumber.
Ini adalah perilaku yang diharapkan. Status offline yang diatur melalui konsol instans target tidak disinkronkan ke instans sumber.
Deskripsi bidang konfigurasi YAML tambahan
Bidang clusters:
Bidang
Deskripsi
Nilai contoh
namespace
Nama namespace Nacos.
Catatan: Anda dapat memasukkan beberapa namespace, dipisahkan koma. Jika bidang ini dibiarkan kosong dan instans tersebut merupakan sumber sinkronisasi, data dari semua namespace di instans tersebut akan disinkronkan.
public
test
test1
ak
AccessKey untuk autentikasi instans Nacos MSE cloud.
LTAI5***********dXai6
sk
Rahasia AccessKey untuk autentikasi instans Nacos MSE cloud.
Jdvdj*************6vs7wBEKO