解决k8s MysqlCluster 无故重启问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决k8s MysqlCluster 无故重启问题相关的知识,希望对你有一定的参考价值。

参考技术A

使用 bitpoke的mysql-operator 作为k8s的mysql服务,使用的版本v0.4.0,
github地址:https://github.com/bitpoke/mysql-operator

MysqlCluster operator主要支持如下功能

建立的mysql服务每隔一段时间就重启,事件的报错信息如下

为什么心跳不通过?

貌似心跳机制不通过,查看pod信息

心跳默认20秒不通过,就重启,看源码也没有心跳配置项,坑啊,不过这只是表象,到底是什么导致心跳不通过?

mysqlCluster启动时,会启动4个容器metrices-exporter, mysql, pt-heartbeat, sidecar。看这4个容器的cpu, 内存使用情况,发现mysql内存超过,如下:

看最后状态,OOMKilled,而且当前内存使用率3.9G 接近limit 4G的设置。 找到产生的问题原因了,是因为内存超了,被容器杀掉,导致心跳不通过报错重启

为什么内存使用这么高?

思考mysql使用内存高,可能跟mysql自身缓存有关系,查内存相关参数

看到 innodb_buffer_pool_size 设置得值特别大,这个参数设置只有主要缓存innodb表的索引,数据,插入数据时的缓冲,但默认是8M。

为什么 innodb_buffer_pool_size 设置变得这么大?

翻翻mysqlCluster源码,跟innodb_buffer_pool_size 有关代码
default.go

问题就在这里,为了保证资源独占,mysql设置时是request = limit,因为自动计算导致 innodb-buffer-pool-size过大,最终导致oom,需要手动设置innodb-buffer-pool-size,就手动设置2G吧

设置 innodb-buffer-pool-size 不生效?

设置后,pod不重启? 参数没有生效设置。设另一个512M就生效了。尝试加入引号,作为字符串处理,配置开始生效。难道跟类型有关系? 继续看相关源码
default.go

看这个类型定义cluster.Spec.MysqlConf

MysqlClusterSpec

intstr

如果设置成数字,则整数是int32位
看int32位的长度
int32 the set of all signed 32-bit integers (-2147483648 to 2147483647)

至此内存使用过大的问题,解决了,内存使用也降下来了

Android Studio 打开项目后无故爆红

经常会碰到Android studio打开项目后一些代码无缘无故的爆红,找不到类这种情况。
而自己没有做任何操作改动或者检查代码没有任何的问题。
遇到过两次解决的方法都不一样。

1 删除缓存

  • ①打开File—Invidate Caches/Restart.
  • ②点击Invalidata and Restart,等待Android studio重启后就ok了

2 删除编译文件重新编译

  • 删掉project 的build
  • 删掉主module 的build
  • 清空项目缓存并且重启as
  • 删除windows 用户名下的.gradle 文件夹
  • 删除项目根目录下的.gradle 文件夹
  • 重新编译
  • 新建一个一个工程,能正常运行不报错的,查看gradle-wrapper.properties里distributionUrl 中的版本与项目下build.gradle文件中 classpath里的版本是否是对应关系,改成对对应关系即可
  • 如果还不行就试试从Android studio 里移除项目,重新导入

以上是关于解决k8s MysqlCluster 无故重启问题的主要内容,如果未能解决你的问题,请参考以下文章

解决win10无线无故断网,重启才恢复正常的情况

重启不了要怎么解决systemctl restart named-chroot

Android Studio 打开项目后无故爆红

服务器不定时无故重启

kindle无限重启怎么解决

Go服务迁到K8s后老抽风重启? 记一次完整的线上问题解决过程