nacos zookeeper数据迁移
官网:https://nacos.io/zh-cn/docs/nacos-sync-use.html
nacos-sync:https://github.com/nacos-group/nacos-sync
nacos-sync
nacos-sync 支持迁移的数据中心
nacos <==> nacos:支持0.8到1.0及以上版本的nacos数据迁移
nacos <==> consul:只支持spring cloud注册中心数据迁移
nacos <==> euraka:只支持spring cloud注册中心数据迁移
nacos <==> zookeeper:只支持dubbo注册中心数据迁移
下载 nacos-sync,并编译jar包
git clone https://github.com/nacos-group/nacos-sync.git
cd nacosSync
mvn clean package -U
nacos-sync 配置文件:application.properties
server.port=8083
server.servlet.context-path=/
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.show_sql=false
spring.cloud.discovery.enabled=false
spring.datasource.url=jdbc:mysql://localhost:3306/nacos_sync?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=root
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
数据库建表sql:nacosSync.sql(一般会自动创建,不需要手动创建)
/******************************************/
/* DB name = nacos_sync */
/* Table name = cluster */
/******************************************/
CREATE TABLE `cluster` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cluster_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`cluster_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`cluster_type` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`connect_key_list` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`user_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`password` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
/******************************************/
/* DB name = nacos_sync */
/* Table name = system_config */
/******************************************/
CREATE TABLE `system_config` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`config_desc` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`config_key` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`config_value` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
/******************************************/
/* DB name = nacos_sync */
/* Table name = task */
/******************************************/
CREATE TABLE `task` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dest_cluster_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`group_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`name_space` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`operation_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`service_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`source_cluster_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`task_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`task_status` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`version` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`worker_ip` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
nacos-sync 启动
创建mysql,并创建nacos_sync数据库
# 创建mysql容器
docker run -it -d --net fixed --ip 172.18.0.10 -p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=root --name mysql2 mysql
# 创建nacos_sync数据库
mysql> create database nacos_sync;
Query OK, 1 row affected (0.01 sec)
nacos-sync配置文件:修改数据库配置
# 端口默认为8083
server.port=8083
server.servlet.context-path=/
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.show_sql=false
spring.cloud.discovery.enabled=false
# 数据库地址、用户名、密码
spring.datasource.url=jdbc:mysql://localhost:3307/nacos_sync?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=root
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
启动nacos-sync
huli@bogon nacosSync.0.4.7 % cd nacosSync
huli@bogon nacosSync % ls
LICENSE bin logs
NOTICE conf nacosSync-server.jar
# 启动nacos-sync
huli@bogon nacosSync % bin/startup.sh start
=============JAVA_HOME:/Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home
=============BASE_DIR:/Users/huli/mysql/nacos/nacos-sync/nacossync-distribution/target/nacosSync.0.4.7/nacosSync
=============JAVA:/Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/bin/java
nacossync is starting,you can check the /Users/huli/mysql/nacos/nacos-sync/nacossync-distribution/target/nacosSync.0.4.7/nacosSync/logs/nacossync_start.out
查看启动日志
huli@bogon nacosSync % cat logs/nacossync_start.out
/Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/bin/java -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/huli/mysql/nacos/nacos-sync/nacossync-distribution/target/nacosSync.0.4.7/nacosSync/nacossync_java_heapdump.hprof -XX:-UseLargePages -Dspring.config.location=/Users/huli/mysql/nacos/nacos-sync/nacossync-distribution/target/nacosSync.0.4.7/nacosSync/conf/application.properties -DnacosSync.home=/Users/huli/mysql/nacos/nacos-sync/nacossync-distribution/target/nacosSync.0.4.7/nacosSync -Xlog:gc*:file=/Users/huli/mysql/nacos/nacos-sync/nacossync-distribution/target/nacosSync.0.4.7/nacosSync/logs/nacossync_gc.log:time,tags:filecount=10,filesize=102400 -jar /Users/huli/mysql/nacos/nacos-sync/nacossync-distribution/target/nacosSync.0.4.7/nacosSync/nacosSync-server.jar --logging.config=/Users/huli/mysql/nacos/nacos-sync/nacossync-distribution/target/nacosSync.0.4.7/nacosSync/conf/logback-spring.xml
_ _ _____
| \ | | / ___| Nacos-Sync 0.4.7
| \| | __ _ ___ ___ ___ _____\ `--. _ _ _ __ ___ Port: 8083
| . ` |/ _` |/ __/ _ \/ __|______`--. | | | | '_ \ / __| Pid: 1296
| |\ | (_| | (_| (_) \__ \ /\__/ | |_| | | | | (__ Console: http://127.0.0.1:8083
\_| \_/\__,_|\___\___/|___/ \____/ \__, |_| |_|\___|
__/ |
|___/
2022-03-15 10:33:17.639 [background-preinit] INFO org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator 6.1.7.Final
2022-03-15 10:33:17.653 [main] INFO com.alibaba.nacossync.NacosSyncMain - Starting NacosSyncMain v0.4.7 using Java 17.0.2 on bogon with PID 1296 (/Users/huli/mysql/nacos/nacos-sync/nacossync-distribution/target/nacosSync.0.4.7/nacosSync/nacosSync-server.jar started by huli in /Users/huli/mysql/nacos/nacos-sync/nacossync-distribution/target/nacosSync.0.4.7/nacosSync)
2022-03-15 10:33:17.654 [main] INFO com.alibaba.nacossync.NacosSyncMain - No active profile set, falling back to default profiles: default
2022-03-15 10:33:19.597 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2022-03-15 10:33:19.934 [main] INFO o.s.d.r.config.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 321 ms. Found 3 JPA repository interfaces.
2022-03-15 10:33:20.296 [main] INFO o.springframework.cloud.context.scope.GenericScope - BeanFactory id=90b9c9aa-25e5-34da-92af-68692576cbac
2022-03-15 10:33:20.958 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 8083 (http)
2022-03-15 10:33:20.976 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8083"]
2022-03-15 10:33:20.976 [main] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat]
2022-03-15 10:33:20.977 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.45]
2022-03-15 10:33:21.076 [main] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
2022-03-15 10:33:21.077 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 3348 ms
2022-03-15 10:33:21.532 [main] INFO org.hibernate.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2022-03-15 10:33:21.662 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 5.4.30.Final
2022-03-15 10:33:21.910 [main] INFO org.hibernate.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2022-03-15 10:33:22.107 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
2022-03-15 10:33:22.474 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
2022-03-15 10:33:22.505 [main] INFO org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2022-03-15 10:33:23.469 [main] INFO o.h.e.t.jta.platform.internal.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2022-03-15 10:33:23.479 [main] INFO o.s.orm.jpa.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
2022-03-15 10:33:24.518 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2022-03-15 10:33:24.815 [main] INFO o.s.b.actuate.endpoint.web.EndpointLinksResolver - Exposing 16 endpoint(s) beneath base path '/actuator'
2022-03-15 10:33:24.972 [main] INFO o.s.b.a.web.servlet.WelcomePageHandlerMapping - Adding welcome page: class path resource [static/index.html]
2022-03-15 10:33:25.198 [main] INFO o.s.c.n.e.c.DiscoveryClientOptionalArgsConfiguration - Eureka HTTP Client uses RestTemplate.
2022-03-15 10:33:25.299 [main] WARN o.s.c.l.c.LoadBalancerCacheAutoConfiguration$LoadBalancerCaffeineWarnLogger - Spring Cloud LoadBalancer is currently working with the default cache. You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath.
2022-03-15 10:33:25.321 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8083"]
2022-03-15 10:33:25.350 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8083 (http) with context path ''
2022-03-15 10:33:25.776 [main] INFO com.alibaba.nacossync.NacosSyncMain - Started NacosSyncMain in 9.311 seconds (JVM running for 10.243)
localhost:8083
数据迁移
**********
服务信息
zooinspector 可视化界面
HelloService
public interface HelloService {
String hello();
}
Hello2Service
public interface Hello2Service {
String hello();
}
HelloServiceImpl
@DubboService(group = "a", version = "1.0.0")
public class HelloServiceImpl implements HelloService {
@Override
public String hello() {
System.out.println("hello provider");
return "success";
}
}
Hello2ServiceImpl
@DubboService
public class Hello2ServiceImpl implements Hello2Service {
@Override
public String hello() {
System.out.println("hello provider 2");
return "success 2";
}
}
**********
迁移操作
添加集群配置
nacos-sync 添加同步任务
nacos 查看服务列表
服务同步成功