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
相关文章
|
缓存 Java 容器
【Spring IOC容器加载过程】
【Spring IOC容器加载过程】
337 1
|
23天前
|
人工智能 运维 Go
Coze与Dify全面对比:为你的AI应用开发选择最佳利器
在AI技术迅猛发展的当下,Coze与Dify作为两大热门开源AI开发平台,各具特色。本文从架构设计、技术栈、功能对比、部署运维等多个维度深入解析两者差异,助你根据团队需求和技术背景做出最优选型决策,提升开发效率与应用性能。
|
芯片 异构计算 内存技术
关于SPI协议,看这一篇文章就够了!
关于SPI协议,看这一篇文章就够了!
1197 0
关于SPI协议,看这一篇文章就够了!
|
7月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
9月前
|
人工智能 自然语言处理 IDE
CodeFuse IDE 0.7 版本发布,支持 Lint Error 智能改写
CodeFuse IDE 0.7 版本发布,支持 Lint Error 智能改写和 zsh 终端自然语言生成命令。它基于蚂蚁自研大模型和 OpenSumi 框架开发,提供代码编写建议、解释、单测生成等功能,提升开发效率。内置插件升级至 VS Code 1.88.1,未来将支持更多模型服务。下载地址:[GitHub](https://github.com/codefuse-ai/codefuse-ide/releases)。
187 4
|
编译器 C# Android开发
震惊!Uno Platform 与 C# 最新特性的完美融合,你不可不知的跨平台开发秘籍!
Uno Platform 是一个强大的跨平台应用开发框架,支持 Windows、macOS、iOS、Android 和 WebAssembly,采用 C# 和 XAML 进行编程。C# 作为其核心语言,持续推出新特性,如可空引用类型、异步流、记录类型和顶级语句等,极大地提升了开发效率。要在 Uno Platform 中使用最新 C# 特性,需确保开发环境支持相应版本,并正确配置编译器选项。通过示例展示了如何在 Uno Platform 中应用可空引用类型、异步流、记录类型及顶级语句等功能,帮助开发者更好地构建高效、优质的跨平台应用。
493 59
|
移动开发 JavaScript 定位技术
百度地图开发:地图调起API(Web端)使用终点经纬度直接调用百度地图导航信息的解决方案
百度地图开发:地图调起API(Web端)使用终点经纬度直接调用百度地图导航信息的解决方案
654 0
|
数据库
仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值
仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值
1858 0
|
JSON Java Nacos
需要在你的项目中引入Nacos的依赖
需要在你的项目中引入Nacos的依赖
759 2

热门文章

最新文章