Nacos2.0.3版本线上bug导致整个集群挂掉从而导致业务系统挂掉的解决办法
文章目录
- @[toc]
- 一.问题
- 二.解决办法
- 三.项目升级demo及项目nacos配置
- 3.1 dubbo-demo-producer生产者端项目POM配置
- 3.2 dubbo-demo-consumer消费者端项目POM配置
- 3.3 生产者端nacos配置
- 3.4 消费者端nacos配置
- 3.5 服务启动dubbo调用接口验证
- 3.6 demo代码下载地址
- 四.源码启动nacos
- 4.1. 下载源码
- 4.2. idea的maven配置
- 4.2.1 maven的线程数和仓库配置
- 4.2.2 maven的Importing配置
- 4.2.3 maven的Runner配置
- 4.2.4 maven的jvm参数如下
- 4.2.5 maven编译跳过测试配置
- 4.2.6 install项目
- 4.3.源码配置
- 4.4. 启动
- 4.4.1 单机启动
- 4.4.2 集群启动
- 五.nacos镜像制作和使用
- Common property configuration
一.问题
nacos官网:
https://nacos.io/zh-cn/docs/what-is-nacos.html
问题nacos版本:2.0.3
https://github.com/alibaba/nacos/issues/5343
原因:由于之前使用的nacos版本是1.4.x,会出k8s中的服务启动后挂掉然后又被拉起又挂掉这种奇葩的问题,后面领导升级到2.0.3之后就出了好几次线上的问题,都是用于部署在k8s中的nacos集群的节点重启之后导致pod的ip改变了,nacos2.x的JRaft选主失败了,导致nacos脑裂成多个个集群,集群数据不同步,最后应用服务发现不了服务,业务系统就挂了一上午或者一下午,临时的解决办法就是重新启动nacos集群和k8s集群中报错的服务。
官方已经关闭了这个两个issues,1.4.x和2.0.x都有这个问题。
二.解决办法
官方的修复思路:
下面这位大佬提交了一段代码,被官方合并到最新的分支上去了,看说明就知道这个是一个极限的操作,降低集群失败的几率
/*** resetPeers. ## nacos-enhance ##.* <p>只有在非常紧急并且可用性更为重要的情况下使用:https://www.bookstack.cn/read/sofa-jraft/3.md#6.3%20多数节点故障</p>*/RESET_PEERS(JRaftConstants.RESET_PEERS) {@Overridepublic RestResult<String> execute(CliService cliService, String groupId, Node node, Map<String, String> args) {final Configuration newConf = new Configuration();String peers = args.get(JRaftConstants.COMMAND_VALUE);for (String peer : peers.split(",")) {newConf.addPeer(PeerId.parsePeer(peer.trim()));}final PeerId nodePeerId = node.getNodeId().getPeerId();Status status = cliService.resetPeer(groupId, nodePeerId, newConf);if (status.isOk()) {return RestResultUtils.success();}return RestResultUtils.failed(status.getErrorMsg());}};
由此办法只有一个就是升级nacos的版本,这个是改动最小的,如果把nacos换成zk/cousle或者其它注册中心的话,那么这种代价是非常的大,学习成本和运维成本都将增大,项目上的改动来说是非常的大。
三.项目升级demo及项目nacos配置
首先要参看nacos官方版本对应关系,不然又是一堆的坑
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
上面SpringCloudAlibaba2.2.9. 2.2.9.RELEASE 对应的Dubbo的版本没有写,我还纳闷了,在项目demo中试了好久,是支持的,之前是一个dubbo的包没有写版本pom依赖导不会自动拉取这个包导致的maven报错。
3.1 dubbo-demo-producer生产者端项目POM配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.dy</groupId><artifactId>dubbo-demo-producer</artifactId><version>0.0.1-SNAPSHOT</version><name>dubbo-demo-producer</name><description>dubbo-demo-producer</description><packaging>pom</packaging><modules><module>producer-api</module><module>producer-service</module></modules><repositories><repository><id>nexus</id><url>xxxxxxxx</url><releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository></repositories><distributionManagement><repository><id>nexus-snapshots</id><name>Nexus snapshots</name><url>xxxxxx</url></repository><snapshotRepository><id>nexus-snapshots</id><url>xxxxxxx</url></snapshotRepository></distributionManagement><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring.boot.version>2.3.12.RELEASE</spring.boot.version><spring-cloud.version>Hoxton.SR12</spring-cloud.version><spring-cloud-alibaba.version>2.2.9.RELEASE</spring-cloud-alibaba.version><dubbo.version>2.7.15</dubbo.version><mybatisplus-version>3.4.2</mybatisplus-version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatisplus-version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.version}</version></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version><configuration><skipTests>true</skipTests></configuration></plugin><!-- 要将源码放上去,需要加入这个插件 --><plugin><artifactId>maven-source-plugin</artifactId><version>3.0.1</version><configuration><attach>true</attach></configuration><executions><execution><phase>compile</phase><goals><goal>jar</goal></goals></execution></executions></plugin></plugins></build></project>
3.2 dubbo-demo-consumer消费者端项目POM配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.dy</groupId><artifactId>dubbo-demo-consumer</artifactId><version>0.0.1-SNAPSHOT</version><name>dubbo-demo-consumer</name><description>dubbo-demo-consumer</description><packaging>pom</packaging><modules><module>consumer-api</module><module>consumer-service</module></modules><repositories><repository><id>nexus</id><url>xxxxx</url><releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository></repositories><distributionManagement><repository><id>nexus-snapshots</id><name>Nexus snapshots</name><url>xxxxxx</url></repository><snapshotRepository><id>nexus-snapshots</id><url>xxxxxxxx</url></snapshotRepository></distributionManagement><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring.boot.version>2.3.12.RELEASE</spring.boot.version><spring-cloud.version>Hoxton.SR12</spring-cloud.version><spring-cloud-alibaba.version>2.2.9.RELEASE</spring-cloud-alibaba.version><dubbo.version>2.7.15</dubbo.version><mybatisplus-version>3.4.2</mybatisplus-version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatisplus-version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.version}</version></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version><configuration><skipTests>true</skipTests></configuration></plugin><!-- 要将源码放上去,需要加入这个插件 --><plugin><artifactId>maven-source-plugin</artifactId><version>3.0.1</version><configuration><attach>true</attach></configuration><executions><execution><phase>compile</phase><goals><goal>jar</goal></goals></execution></executions></plugin></plugins></build>
</project>
3.3 生产者端nacos配置
server:port: 9998
dubbo:consumer:check: falsecloud:subscribed-services: 'dubbo-demo-producer'scan:base-packages: com.dy.producer.service.service.dubboprotocol:name: dubboport: -1registry:address: spring-cloud://localhostapplication:version: 1.0.0spring:cloud:config:#相同配置 本地优先override-none: true redis:host: xxxxxxport: 6379pass: xxxxxdatabase: 5jedis:pool:max-active: 200max-idle: 20max-wait: 2000min-idle: 5servlet:multipart:max-file-size: 50MBmax-request-size: 50MBmanagement:health:rabbit:enabled: false logger:level:root: infooos:endpoint: xxxxxaccessKeyId: xxxxxxxaccessKeySecret: xxxxxxxbucketName: xxxxxx
3.4 消费者端nacos配置
server:port: 9999
dubbo:consumer:check: falsecloud:subscribed-services: 'dubbo-demo-producer'scan:base-packages: com.dy.consumer.service.service.dubboprotocol:name: dubboport: -1registry:address: spring-cloud://localhostapplication:version: 1.0.0spring:cloud:config:#相同配置 本地优先override-none: true redis:host: xxxxxport: 6379pass: xxxxxxdatabase: 5jedis:pool:max-active: 200max-idle: 20max-wait: 2000min-idle: 5servlet:multipart:max-file-size: 50MBmax-request-size: 50MBmanagement:health:rabbit:enabled: false logger:level:root: infooos:endpoint: xxxxxxxxxxxaccessKeyId: xxxxxxxxaccessKeySecret: xxxxxxxxxbucketName: xxxxxxx
3.5 服务启动dubbo调用接口验证
3.6 demo代码下载地址
链接:https://pan.baidu.com/s/1EzG8aasLOVRzbeO1JDAWEg
提取码:z6mm
四.源码启动nacos
4.1. 下载源码
https://github.com/alibaba/nacos/releases
4.2. idea的maven配置
4.2.1 maven的线程数和仓库配置
4.2.2 maven的Importing配置
4.2.3 maven的Runner配置
4.2.4 maven的jvm参数如下
-Xmx1024m -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=1024m -Xss2m -Dmaven.test.skip=true -Dmaven.compile.fork=true
4.2.5 maven编译跳过测试配置
4.2.6 install项目
4.3.源码配置
console模块的配置
# nacos.core.member.lookup.type=[file,address-server]
nacos.core.member.lookup.type=file
distribution中有nacos的mysql库文件要事先导入自己的mysql库中
4.4. 启动
4.4.1 单机启动
单机启动参数
-Dnacos.standalone=true
4.4.2 集群启动
cluster.conf的内容如下:
这个几个目录是各个节点启动的家目录的位置,集群启动的时候从cluster.conf里面读取各自节点的ip和端口信息然后用来组建集群
启动参数
-Dserver.port=8848 -Dnacos.home=D:\Downloads\n8848
-Dserver.port=8847 -Dnacos.home=D:\Downloads\n8847
-Dserver.port=8846 -Dnacos.home=D:\Downloads\n8846
然后同时点击配置好的Nacos8848/Nacos8847/Nacos8846的debug启动启动集群,最后启动后集群是可以正常使用,但是有个很奇怪的问题就是,第二个几点启动会失败,只用两个节点启动起来了,报错绑定ip绑定失败了,不知道咋个搞的,估计是个bug,要不要给官方提个bug?哈哈
五.nacos镜像制作和使用
https://nacos.io/zh-cn/docs/quick-start-docker.html
参考官网,先clone项目
git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
然后进入到build目录下执行:xxx是版本号
docker build -t nacos/nacos-server-xxxx .
这个构建千万不要在windows环境下安装的docker环境里构建,否则,构建好的镜像会报找不到sh启动脚本的错误,所以要在Linux环境下构建,最好是centOs上,其它Linux也行。
如果不想构建可以去docker官网搜索,就是会很慢:
docker search nacos/nacos-server:v2.1.0docker pull nacos/nacos-server:v2.1.0
我为大家准备了两个镜像,可以直接拉取使用,并且拉取速度很快:
registry.cn-hangzhou.aliyuncs.com/bigfei/zlf:nacos-server2.1.1
registry.cn-hangzhou.aliyuncs.com/bigfei/zlf:nacos-server2.1.0
启动命令:
# nacos-server2.1.0
docker run -d --name nacos2.1.0 -e MYSQL_SERVICE_HOST=xxxxx -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=xxx!@#xxx -e MYSQL_SERVICE_DB_NAME=nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 registry.cn-hangzhou.aliyuncs.com/bigfei/zlf:nacos-server2.1.0#nacos-server2.1.1
docker run -d --name nacos2.1.0 -e MYSQL_SERVICE_HOST=xxxxx -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=xxx!@#xxx -e MYSQL_SERVICE_DB_NAME=nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 registry.cn-hangzhou.aliyuncs.com/bigfei/zlf:nacos-server2.1.1
在云服务上启动MYSQL_SERVICE_PASSWORD=xxx!@#xxx数据库的密码含有特殊字符需要转义处理:
MYSQL_SERVICE_PASSWORD=xxx\!\@\#xxx
不然执行不成功,在windows环境中可以不用转义可以正常运行。
https://nacos.io/zh-cn/docs/quick-start-docker.html
官网docker章节有如下启动配置参数可以给我们配置,参考配置即可:
Common property configuration
属性名称 | 描述 | 选项 |
---|---|---|
MODE | 系统启动方式: 集群/单机 | cluster/standalone默认 cluster |
NACOS_SERVERS | 集群地址 | p1:port1空格ip2:port2 空格ip3:port3 |
PREFER_HOST_MODE | 支持IP还是域名模式 | hostname/ip 默认 ip |
NACOS_SERVER_PORT | Nacos 运行端口 | 默认 8848 |
NACOS_SERVER_IP | 多网卡模式下可以指定IP | |
SPRING_DATASOURCE_PLATFORM | 单机模式下支持MYSQL数据库 | mysql / 空 默认:空 |
MYSQL_SERVICE_HOST | 数据库 连接地址 | |
MYSQL_SERVICE_PORT | 数据库端口 | 默认 : 3306 |
MYSQL_SERVICE_DB_NAME | 数据库库名 | |
MYSQL_SERVICE_USER | 数据库用户名 | |
MYSQL_SERVICE_PASSWORD | 数据库用户密码 | |
MYSQL_SERVICE_DB_PARAM | 数据库连接参数 | default : characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false |
MYSQL_DATABASE_NUM | 数据库编号 | 默认 :1 |
JVM_XMS | -Xms | 默认 :1g |
JVM_XMX | -Xmx | 默认 :1g |
JVM_XMN | -Xmn | 默认 :512m |
JVM_MS | -XX:MetaspaceSize | 默认 :128m |
JVM_MMS | -XX:MaxMetaspaceSize | 默认 :320m |
NACOS_DEBUG | 是否开启远程DEBUG | y/n 默认 :n |
TOMCAT_ACCESSLOG_ENABLED | server.tomcat.accesslog.enabled | 默认 :false |
NACOS_AUTH_SYSTEM_TYPE | 权限系统类型选择,目前只支持nacos类型 | 默认 :nacos |
NACOS_AUTH_ENABLE | 是否开启权限系统 | 默认 :false |
NACOS_AUTH_TOKEN_EXPIRE_SECONDS | token 失效时间 | 默认 :18000 |
NACOS_AUTH_TOKEN | token | 默认 :SecretKey012345678901234567890123456789012345678901234567890123456789 |
NACOS_AUTH_CACHE_ENABLE | 权限缓存开关 ,开启后权限缓存的更新默认有15秒的延迟 | 默认 : false |
MEMBER_LIST | 通过环境变量的方式设置集群地址 | 例子:192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809 |
EMBEDDED_STORAGE | 是否开启集群嵌入式存储模式 |
embedded 默认 : none
|
NACOS_AUTH_CACHE_ENABLE | nacos.core.auth.caching.enabled | default : false |
NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE | nacos.core.auth.enable.userAgentAuthWhite | default : false |
NACOS_AUTH_IDENTITY_KEY | nacos.core.auth.server.identity.key | default : serverIdentity |
NACOS_AUTH_IDENTITY_VALUE | nacos.core.auth.server.identity.value | default : security |
NACOS_SECURITY_IGNORE_URLS | nacos.security.ignore.urls |
default : /,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
|
k8s相关的可以参考k8s章节
https://nacos.io/zh-cn/docs/use-nacos-with-kubernetes.html
Nacos2.0.3版本线上bug导致整个集群挂掉从而导致业务系统挂掉的解决办法相关推荐
- Kubernetes 纳管节点卡住导致加入集群失败问题解决
问题现象 之前自己搭建了一个k8s集群,配置如下: os: centos8 master: 8U8G 192.168.2.106 worker1: 4U4G 192.168.2.240 worker2 ...
- 线上BUG 处理并分析原因
昨天下午大神把组内几十号人召集在一起开Online bug分析大会,主要是针对近期线上事故从事故原因和解决方案两个维度来分析 对金融软件来说,每一次的线上事故都有可能给公司带来重大的损失,少扣了用户的 ...
- 测试金融软件出现线上bug的原因及解决方法
小编热衷于收集整理资源,记录踩坑到爬坑的过程.希望能把自己所学,实际工作中使用的技术.学习方法.心得及踩过的一些坑,记录下来.也希望想做软件测试的你一样,通过我的分享可以少走一些弯路,可以形成一套自己 ...
- 走完线上 BUG 定位最后一公里
简介:因为线上线下环境隔离的问题,线上的输入很多时候难以在日常环境中构造,定位 bug 效率低下.是否有简单快捷的办法呢? 一个小故事 周末12点的闹钟在回龙观均价3000的出租屋急促的响起,程序员小 ...
- 听说”双11”是这么解决线上bug的
听说"双11"是这么解决线上bug的 --Android线上热修复的使用与原理 预备知识和开发环境 Android NDK编程 AndFix浅析 Android线上热修复的原理大同 ...
- OpenV2X Beihai版本线上分享会
12月6日下午,OpenV2X Beihai版本线上分享会成功举办.共有32名来自社区的小伙伴参加了本次线上会议交流.OpenV2X社区的小伙伴为大家带来了4个方面的主题分享:Beihai新版本功能d ...
- JAVA计算机毕业设计政府采购线上招投标平台Mybatis+源码+数据库+lw文档+系统+调试部署
JAVA计算机毕业设计政府采购线上招投标平台Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计政府采购线上招投标平台Mybatis+源码+数据库+lw文档+系统+调试部署 ...
- java毕业设计线上花店购物商城源码+lw文档+mybatis+系统+mysql数据库+调试
java毕业设计线上花店购物商城源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计线上花店购物商城源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技术栈 ...
- java毕业设计线上旅行信息管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
java毕业设计线上旅行信息管理系统源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计线上旅行信息管理系统源码+lw文档+mybatis+系统+mysql数据库+调试 本源 ...
最新文章
- ACMNO.10打印出所有水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该本身。 例如:153是一个水仙花数,因为153=1^3+5^3+3^3。 Output: 153 ???
- Android短信拦截
- UIGraphicsBeginImageContext系列知识
- 同步、异步、阻塞、非阻塞、BIO、NIO、AIO
- php smarty安装,php smarty 安装 、配置、使用 及缓存cache的配置使用
- 【Ubuntu】 Ubuntu 16.04 安装经典菜单 0.10
- python做图片浏览器_python操作浏览器及截图小结
- 八皇后(N皇后)问题算法程序(回溯法)
- 【数论】—— 多边形数的计算(三角形数,五边形数)
- 关于MD5加密,及linux环境获取文件MD5值的脚本
- 栈——栈的定义及基本操作(初始化、判空、进栈、出栈、遍历栈、销毁栈等)
- jquery版本之间的冲突
- GPS同步时钟(NTP时钟服务器)常见故障解决与价格差异分析
- 使用CPN Tools工具做简单的登录模型(初学者)
- 信号完整性(SI)电源完整性(PI)学习笔记(二十)传输线的串扰(四)
- Stanford Alpaca (羊驼):ChatGPT 学术版开源实现
- 捉迷藏之二-第10届蓝桥杯Scratch国赛真题第6题程序2
- SQL查询------模糊查询
- 优化问题---最优性条件
- SHU语义网与知识图谱