nacos 升级指北 草履虫级教程

简介: 本文记录了Nacos从2.4.1升级至2.5.1的完整步骤,适用于使用MySQL持久化、JDK8、Linux环境及Jar包部署的情况。内容包括升级前的版本兼容性调查、数据库与配置备份、升级操作流程及回滚方案,确保升级过程安全可控。

最近公司扫描出来nacos里tomcat容器存在漏洞,要求升级nacos。在这记录一下nacos升级的步骤

前提

  • 已部署nacos 服务 (本篇文章中升级前为2.4.1 )
  • 使用mysql 作为持久化配置
  • 使用jar包部署
  • linux 环境下部署
  • java环境是jdk8

以上情况跟我一样的同学可以直接参考我这篇文章 进行升级,否则的话最好还是参考官文档进行升级操作

升级前调查与准备

  1. 查看部署环境jdk版本,选择jdk版本支持的nacos版本,本文发布时,jdk8支持nacos最新版为2.5.1 ,nacos3.x 需要jdk17

  2. 查看官网,确定版本及兼容性

统计时官网jdk8 支持最新版本为2.5.1,所有Nacos版本可升级到该版本的兼容性如下:
最新数据请参考官网 :https://nacos.io/docs/v2.5/manual/admin/upgrading/?spm=5238cd80.3b1b4e4d.0.0.53e0dcd0NhxJuk
3.X 版本 升级手册地址:https://nacos.io/docs/latest/manual/admin/upgrading/?spm=5238cd80.3b1b4e4d.0.0.53e0dcd0NhxJuk

Nacos版本 是否支持升级到2.5.1 备注
0.X ~ 1.1.X 不支持 先升级到1.2再按步骤升级
1.2.X ~ 1.4.X 不支持 先升级到2.0或2.1版本后再进行升级
2.0.X 支持 数据表结构有变化,更新表结构
2.1.X ~ 2.4.X 支持 数据表结构有变化,更新表结构

升级步骤

tips: 生产环境时,一定要在不影响业务功能的时间段进行升级
确认好升级版本后就可以按照升级步骤升级了

1. 停止服务

先停止已部署好的nacos服务,避免下面备份时写入数据

# 进入Nacos目录  
cd /path/to/nacos/bin  

# 停止Nacos服务  
sh shutdown.sh

2. 备份

  • 一定要备份
  • 一定要备份
  • 一定要备份

重要的话说三遍,大家无论在任何有风险的操作时,一定要记得备份,备份才是真正的后悔药

  1. 备份数据库
    # 备份方式很多,这里采用mysqldump 备份,如果nacos的配置文件单独存在一个库,无其他数据的话,可直接整库部分,否则只备份nacos相关的配置表
    mysqldump -uroot -p nacos > nacos_backup_$(date +%F).sql
    

    集群模式下,如果要在不影响服务的情况下升级,可以先备份数据库。最好保证升级期间没有数据写入,这样如果数据库更新出错,回退时不会丢失数据。然后在单个服务器上升级流程

  2. 备份Nacos的配置数据和服务注册信息
    # 这里我建议直接把旧服务整个目录作为备份,把旧服务的配置和数据移入新服务中,这样升级失败回退时,直接使用旧服务包就可以了
    mv /path/to/nacos /path/to/nacos_back
    

3. 下载解压升级包

  1. 下载升级包:到官网下载对应版本和环境的升级包,这里下的时zip包
  2. 上传至服务器并解压
    # 解压命令 $version 是版本号,本文是2.5.1
    unzip nacos-server-$version.zip
    # 如果时tar包,执行下面命令
    tar -xvf nacos-server-$version.tar.gz
    

4. 替换配置文件和数据

# 迁移配置文件和数据  
cp -r /path/to/nacos_back/conf /path/to/nacos/conf  
cp -r /path/to/nacos_back/data /path/to/nacos/data

5. 执行变更sql(可选,部分升级可能不需要)

-- 这是2.4.1 升级到2.5.1 时的sql脚本,实际验证过,直接执行就可以了,其他版本请参考官方文档
ALTER TABLE `his_config_info` ADD COLUMN `publish_type` varchar(50) DEFAULT 'formal' COMMENT 'publish type gray or formal';

ALTER TABLE `his_config_info` ADD COLUMN `gray_name` varchar(50) DEFAULT NULL COMMENT 'gray name';

ALTER TABLE `his_config_info` ADD COLUMN `ext_info` longtext DEFAULT NULL COMMENT 'ext info';

/******************************************/
/*   表名称 = config_info  since 2.5.0                */
/******************************************/
CREATE TABLE `config_info_gray` (
                                    `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
                                    `data_id` varchar(255) NOT NULL COMMENT 'data_id',
                                    `group_id` varchar(128) NOT NULL COMMENT 'group_id',
                                    `content` longtext NOT NULL COMMENT 'content',
                                    `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
                                    `src_user` text COMMENT 'src_user',
                                    `src_ip` varchar(100) DEFAULT NULL COMMENT 'src_ip',
                                    `gmt_create` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_create',
                                    `gmt_modified` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_modified',
                                    `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
                                    `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
                                    `gray_name` varchar(128) NOT NULL COMMENT 'gray_name',
                                    `gray_rule` text NOT NULL COMMENT 'gray_rule',
                                    `encrypted_data_key` varchar(256) NOT NULL DEFAULT '' COMMENT 'encrypted_data_key',
                                    PRIMARY KEY (`id`),
                                    UNIQUE KEY `uk_configinfogray_datagrouptenantgray` (`data_id`,`group_id`,`tenant_id`,`gray_name`),
                                    KEY `idx_dataid_gmt_modified` (`data_id`,`gmt_modified`),
                                    KEY `idx_gmt_modified` (`gmt_modified`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='config_info_gray';

6. 启动nacos服务

# 以集群模式为例
cd path/to/nacos/bin
sh startup.sh

# 启动Nacos服务 单机模式  
sh startup.sh -m standalone

7. 验证升级

查看日志:

tail -f /path/to/nacos_new/logs/start.out

回滚

升级失败,回滚步骤

# 新服务服务是否启动,若启动,停止服务
sh shutdown.sh

# 数据库回滚
mysql -uroot -p nacos < nacos_backup_$(date +%F).sql

# 删除升级后目录
rm -rf path/to/nacos
# 备份目录重命名
mv path/to/nacos_back path/to/nacos
# 启动旧服务
cd path/to/nacos/bin
sh startup.sh
相关文章
|
云栖大会 开发者
收到阿里云【乘风者计划】博主证书和奖励
收到阿里云【乘风者计划】博主证书和奖励 2023年2月对我来说是一个很好的开端,因为我在1号就收到了阿里云寄给我的【乘风者计划】博主证书和奖励。好兆头啊! 我收到的是我获得的【技术博主】【星级博主】【专家博主】三个的奖品和证书,一快给我寄过来哒!
3001 2
收到阿里云【乘风者计划】博主证书和奖励
|
存储
【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?
【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?
7026 1
【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?
|
4月前
|
监控 安全 Java
Spring AOP实现原理
本内容主要介绍了Spring AOP的核心概念、实现机制及代理生成流程。涵盖切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)等关键概念,解析了JDK动态代理与CGLIB代理的原理及对比,并深入探讨了通知执行链路和责任链模式的应用。同时,详细分析了AspectJ注解驱动的AOP解析过程,包括切面识别、切点表达式匹配及通知适配为Advice的机制,帮助理解Spring AOP的工作原理与实现细节。
|
3月前
|
Java 关系型数据库 MySQL
【Spring】【事务】初学者直呼学会了的Spring事务入门
本文深入解析了Spring事务的核心概念与使用方法。Spring事务是一种数据库事务管理机制,通过确保操作的原子性、一致性、隔离性和持久性(ACID),维护数据完整性。文章详细讲解了声明式事务(@Transactional注解)和编程式事务(TransactionTemplate、PlatformTransactionManager)的区别与用法,并探讨了事务传播行为(如REQUIRED、REQUIRES_NEW等)及隔离级别(如READ_COMMITTED、REPEATABLE_READ)。
219 1
|
9月前
|
监控 NoSQL Java
若依RuoYi项目环境搭建教程(RuoYi-Vue + RuoYi-Vue3版本)
若依(RuoYi)是一款基于Spring Boot和Vue.js的开源Java快速开发脚手架,支持OAuth2、JWT鉴权,集成多种安全框架和持久化框架。它提供了系统管理、监控管理、任务调度、代码生成等常用功能模块,适合中小型公司快速搭建Web应用。本文主要介绍若依框架的特点、版本发展、优缺点及项目部署步骤,帮助开发者快速上手并部署若依项目。
10986 3
若依RuoYi项目环境搭建教程(RuoYi-Vue + RuoYi-Vue3版本)
EMQ
|
Linux 网络性能优化 数据安全/隐私保护
MQTT 5.0 报文解析 01:CONNECT 与 CONNACK
如果我们想要使用 MQTT 进行通信,第一步必然是建立一个 MQTT 连接,而建立 MQTT 连接需要用到两个控制报文,它们分别是 CONNECT 报文与 CONNACK 报文。CONNECT 报文是客户端与服务端建立网络连接后,向服务端发送的第一个控制报文,用来发起连接请求。服务端将返回 CONNACK 报文告知客户端连接结果。
EMQ
1337 90
MQTT 5.0 报文解析 01:CONNECT 与 CONNACK
|
10月前
|
安全 Java 编译器
什么是AOP面向切面编程?怎么简单理解?
本文介绍了面向切面编程(AOP)的基本概念和原理,解释了如何通过分离横切关注点(如日志、事务管理等)来增强代码的模块化和可维护性。AOP的核心概念包括切面、连接点、切入点、通知和织入。文章还提供了一个使用Spring AOP的简单示例,展示了如何定义和应用切面。
1145 1
什么是AOP面向切面编程?怎么简单理解?
|
11月前
|
XML Java 应用服务中间件
SpringMvc的具体操作,如何配置springMvc(完整教程)
一个完整的Spring MVC配置教程,包括引入依赖、配置Tomcat、设置DispatcherServlet、编写Spring配置文件、创建Controller以及测试结果。
1116 0
SpringMvc的具体操作,如何配置springMvc(完整教程)
|
11月前
|
人工智能 安全 机器人
Dify开发Agent对接钉钉机器人
这篇文章详细讲解了如何在Dify平台上开发一个Agent并与钉钉机器人集成,实现自动化消息处理和响应功能。
1393 0
|
安全 Java 数据库连接
Springboot中启动器及自定义启动器
Springboot中启动器及自定义启动器
429 0