字典数据插入,Minio数据迁移,Pod无限重启解决方案

总结了下这段时间遇到的问题。

快速生成字典表数据

在前期开发的时候,BA总是给我好几张excel,让我生成字典表,写代码又耗时,而且不同的excel字段也不一样,不可能每次都要去改代码吧,总之我不干,好在我能借助excel函数完成这样的需求。

scss 复制代码
=CONCATENATE("insert into test_claims(`id`,`code`,`name`) values('", A1, "','",B1, "','",C1,"');")

这个函数的语法是 CONCATENATE(text1, [text2], ...)
1. text1(必需):要联接的第一个项目。项目可以是文本值、数字或单元格引用;

2. Text2, ... (可选):要联接的其他文本项目。最多可以有 255 个项目,总共最多支持 8,192 个字符

Kubernetes Pod频繁重启

后台看到部署到kubernetes的pod一直在重启,但是看日志没有报错,但是一会儿它就自动重启了,最后通过describe命令看到是因为liveness接口的原因

rust 复制代码
kubelet  Liveness probe failed: Get "http://10.24.8.84:9202/actuator/health"

因为使用了springboot actuator接口,它会检测服务中使用到的其他服务是否能正常使用,从而判定当前服务是否存活,所以必然是因为这个接口返回的信息导致pod重启。

重启的这个服务主要用到了邮件以及Redis,但是不知道到底是哪个服务健康检查失败了。此时我们也无法进入到pod中访问health接口了。

所以我们先移除掉pod template的livenessProbe配置,然后重新部署服务

yaml 复制代码
livenessProbe:
  httpGet:
    path: /actuator/health
    port: 9204
  initialDelaySeconds: 60
  periodSeconds: 20
  timeoutSeconds: 10

这个时候使用exec命令进入pod

bash 复制代码
kubectl exec -it <pod name> -n <namespace> -- /bin/bash

访问 curl -i http://localhost:9202/actuator/health 可以看到response status code是503,并且还可以看到具体失败的组件是哪一个。

最终确定是redis访问超时了,于是调整了下 livenessProbe的timeoutSeconds,然后在重启就不报错了。

css 复制代码
root@noti-844567c558-2mvj8:/home/pro# curl -i http://localhost:9202/actuator/health
HTTP/1.1 200 
X-XSS-Protection: 1; mode=block
Content-Security-Policy: default-src 'self'; script-src 'self'; frame-ancestors 'self'; object-src 'none'
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Content-Type: application/vnd.spring-boot.actuator.v3+json;charset=utf-8
Transfer-Encoding: chunked
Date: Sun, 18 Feb 2024 07:36:22 GMT

{"status":"UP","components":{"discoveryComposite":{"description":"Discovery Client not initialized","status":"UNKNOWN","components":{"discoveryClient":{"description":"Discovery Client not initialized","status":"UNKNOWN"}}},"diskSpace":{"status":"UP","details":{"total":133003395072,"free":94000709632,"threshold":10485760,"exists":true}},"livenessState":{"status":"UP"},"mail":{"status":"UP","details":{"location":"xxmail:465"}},"ping":{"status":"UP"},"readinessState":{"status":"UP"},"redis":{"status":"UP","details":{"version":"6.0.14"}},"refreshScope":{"status":"UP"}},"groups":["liveness","readiness"]}

minio数据迁移到Azure blob

项目中需要将minio中保存的文件迁移到azure的blob中,然后minio中保存文件的路径是这样的 2023/11/07/20231107164256A579/Image3.jpg 相当于文件夹中包含了时间戳等信息,虽然blob不支持目录,但是它的虚拟目录可以有相同的效果,这里我们使用azure提供的azcopy命令来进行数据迁移。

首先进入到minio所在的服务器,然后执行下面的命令

arduino 复制代码
1.  sudo mkdir /home/azcopy

2.  cd /home/azcopy

3.  sudo  wget -O azcopy\_v10.tar.gz <https://aka.ms/downloadazcopy-v10-linux> &&

4.  sudo tar -xf azcopy\_v10.tar.gz --strip-components=1

5.  sudo azcopy login  // 登录azure

6.  同步minio数据到blob,将sc-dev bucket的数据迁移到blob的container

  // 这里的sc-dev是minio的bucket, saoscdev是azure blob的account name, bvsc是container name
  a. sudo /home/azcopy/azcopy copy '/data/minio/data/sc-dev/*' 'https://saoscdev.blob.core.windows.net/bvsc' --recursive

  // 将增量数据同步到blob中
  b. sudo /home/azcopy/azcopy sync '/data/minio/data/sc-dev' 'https://saoscdev.blob.core.windows.net/bvsc' --recursive

当然不要忘记了对应文件上传下载的接口也要进行相应修改。

总结

以上就是我最近遇到的问题,第一个字典表的那个当时第一反应是写代码,但是后来想到写代码的时候太长,成本太高还是需要借助工具,恰好提供给我的又是excel,于是就用excel顺带完成了这个功能,同时后面的其他字典数据如法炮制,也就变简单了。

第二个问题本来是定位重启的问题,但是看着看着就深入到了actuator的源码当中起了,这一点很不好,不过有失必有得,有顺带看了下actuator的源码,它其中的EntryPoint感觉很棒,后面针对这个写一篇。

第三个问题的话就是微软没有提供如何迁移的文档,不过好在它本生工具不少,多尝试也就成功了,这里我把迁移的步骤给出来,希望能帮助到同样有需求的人。

相关推荐
苏三的开发日记1 分钟前
linux端进行kafka集群服务的搭建
后端
苏三的开发日记20 分钟前
windows系统搭建kafka环境
后端
爬山算法30 分钟前
Netty(19)Netty的性能优化手段有哪些?
java·后端
Tony Bai30 分钟前
Cloudflare 2025 年度报告发布——Go 语言再次“屠榜”API 领域,AI 流量激增!
开发语言·人工智能·后端·golang
想用offer打牌44 分钟前
虚拟内存与寻址方式解析(面试版)
java·后端·面试·系统架构
無量1 小时前
AQS抽象队列同步器原理与应用
后端
ITHAOGE151 小时前
下载 | Win11 官方精简版,系统占用空间极少!(12月更新、Win 11 IoT物联网 LTSC版、适合老电脑安装使用)
windows·科技·物联网·microsoft·微软·电脑
9号达人1 小时前
支付成功订单却没了?MyBatis连接池的坑我踩了
java·后端·面试
用户497357337982 小时前
【轻松掌握通信协议】C#的通信过程与协议实操 | 2024全新
后端
草莓熊Lotso2 小时前
C++11 核心精髓:类新功能、lambda与包装器实战
开发语言·c++·人工智能·经验分享·后端·nginx·asp.net