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
相关文章
|
2月前
|
人工智能 Java API
Nacos 3.1.0 正式发布,支持 A2A 注册中心与 MCP 注册协议增强
3.1.0 发布核心全新功能-Agent 注册中心,助力构建基于 A2A 协议的多 Agent 协作的AI应用,同时 MCP 注册中心适配最新 MCP 官方注册中心协议及升级优化多项核心功能。
740 28
|
9月前
|
NoSQL 数据库 Redis
如何保证MQ幂等性?或 如何防止消息重复消费?
如何保证MQ幂等性?或 如何防止消息重复消费?
|
2月前
|
监控 Java BI
《深入理解Spring》定时任务——自动化调度的时间管理者
Spring定时任务通过@Scheduled注解和Cron表达式实现灵活调度,支持固定频率、延迟执行及动态配置,结合线程池与异常处理可提升可靠性,适用于报表生成、健康检查等场景,助力企业级应用自动化。
|
应用服务中间件 nginx
Nginx:怎么携带参数重定向
通过合理配置Nginx的 `rewrite`指令和 `return`指令,可以实现携带参数的重定向。这不仅可以确保用户请求被正确重定向,还可以保留原始查询参数,满足更多复杂的重定向需求。
818 1
|
算法 数据库 数据安全/隐私保护
rsa加密解密,使用rsa对密码加密
rsa加密解密,使用rsa对密码加密
|
jenkins Devops 机器人
【DevOps】(五)Jenkins构建给企业微信推送消息
【DevOps】(五)Jenkins构建给企业微信推送消息
656 1
|
前端开发
|
XML JSON Java
springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显
本文介绍了在Spring Boot中如何实现文件上传,包括单文件和多文件上传的实现,文件上传的表单页面创建,接收上传文件的Controller层代码编写,以及上传成功后如何在页面上遍历并显示上传的文件。同时,还涉及了`MultipartFile`类的使用和`@RequestPart`注解,以及在`application.properties`中配置文件上传的相关参数。
springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显