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
相关文章
|
Oracle Java 关系型数据库
Linux环境安装配置JDK11
Linux环境安装配置JDK11
1575 0
|
应用服务中间件 nginx C语言
3分钟教你搞定 nginx 编译安装报错:error: the HTTP rewrite module requires the PCRE library.
3分钟教你搞定 nginx 编译安装报错:error: the HTTP rewrite module requires the PCRE library.
5319 0
3分钟教你搞定 nginx 编译安装报错:error: the HTTP rewrite module requires the PCRE library.
|
4月前
|
人工智能 Java API
Nacos 3.1.0 正式发布,支持 A2A 注册中心与 MCP 注册协议增强
3.1.0 发布核心全新功能-Agent 注册中心,助力构建基于 A2A 协议的多 Agent 协作的AI应用,同时 MCP 注册中心适配最新 MCP 官方注册中心协议及升级优化多项核心功能。
1124 43
|
11月前
|
NoSQL 数据库 Redis
如何保证MQ幂等性?或 如何防止消息重复消费?
如何保证MQ幂等性?或 如何防止消息重复消费?
|
8月前
|
NoSQL 测试技术 Redis
Redis批量删除Key的三种方式
Redis批量删除Key是优化数据库性能的重要操作,本文介绍三种高效方法:1) 使用通配符匹配(KEYS/SCAN+DEL),适合不同数据规模;2) Lua脚本实现原子化删除,适用于需要事务保障的场景;3) 管道批量处理提升效率。根据实际需求选择合适方案,注意操作不可逆,建议先备份数据,避免内存溢出或阻塞。
|
Kubernetes 搜索推荐 网络协议
使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案
使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案
1161 8
|
Oracle 关系型数据库 测试技术
《Oracle数据库管理员的利器:一键自动清理过期日志脚本详解》
【8月更文挑战第13天】在Oracle数据库管理中,日志文件的积累是一个需谨慎处理的问题。日志文件对故障恢复至关重要,但也可能占用大量磁盘空间。本文提供一个自动清理日志的脚本,帮助维护数据库健康。脚本通过定义日志路径和保留天数,使用`find`命令查找并删除过期日志,同时记录清理操作。使用前,请确认日志路径正确,并根据备份策略设置保留天数。通过给予脚本执行权限和配置定时任务(如cron),可实现自动清理,保持文件系统整洁,避免因日志文件过多引发的问题。务必在理解脚本原理并做好备份的情况下使用。
265 0
|
前端开发 网络协议
netty整合websocket(完美教程)
本文是一篇完整的Netty整合WebSocket的教程,介绍了WebSocket的基本概念、使用Netty构建WebSocket服务器的步骤和代码示例,以及如何创建前端WebSocket客户端进行通信的示例。
1899 2
netty整合websocket(完美教程)