繁体   English   中英

使用 k8s StatefulSet 配置 MySQL 复制

[英]Configure MySQL Replication with k8s StatefulSet

规格

  1. k8s集群
    1. AKS
    2. 版本:1.18.14
  2. 存储类
    1. azure 文件动态

信息

参考官方文档,努力在k8s中实现MySQL Replication。

但是,当我尝试以与官方文档相同的方式实现它时,出现错误。

错误

在 StatefulSet 的索引 0 mysql-0 pod处发生Warning BackOff 3m32s (x26 over 8m27s) kubelet Back-off restarting failed container错误。

确认容器内部发生的错误后,结果显示内部日志,如下图所示。

2021-04-06 13:36:34+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.33-1debian10 started.
2021-04-06 13:36:35+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-04-06 13:36:35+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.33-1debian10 started.
2021-04-06 13:36:35+00:00 [Note] [Entrypoint]: Initializing database files
2021-04-06T13:36:35.449017Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-04-06T13:36:35.465160Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2021-04-06T13:36:35.465207Z 0 [ERROR] Aborting

你在训练过程中遇到过错误吗? 或者你知道为什么会这样吗?

通过官方文档似乎有一个成功的案例,但我一直无法找出它有什么问题。

为了解决 mysql 容器内部出现的错误,我升级了 mysql 镜像版本并添加了args: ["--ignore-db-dir=lost+found"]并尝试了很多类似的操作。 我找不到它。

由于它是官方文档的摘录,我认为上面的代码本身没有问题。 我怀疑的是 StorageClass。

实验室使用的代码在github中。

除了一个小的名称更改之外,与官方文档没有什么不同。

任何帮助,将不胜感激。 我绝对想实现它。

您遇到的错误:

[ERROR] --initialize specified but the data directory has files in it. Aborting.

表示您的数据目录不为空。 为了解决它,您可以:

  • 删除数据目录的内容

  • 选择另一个数据目录或重命名它

  • 确保/var/lib/mysql之前的目录也是空的,例如: /empty-folder:/var/lib/mysql

根据您提供的链接文档,实际数据目录是指/var/lib/mysql ,因此您应该在那里检查。

至于警告:

[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

我找到:

explicit_defaults_for_timestamp本身已被弃用,因为它的唯一目的是允许控制将在 MySQL 的未来版本中删除的弃用TIMESTAMP行为。 当删除这些行为时, explicit_defaults_for_timestamp不再有任何用途,您也可以期望它也被删除。

此处记录了更多详细信息。

根据我的经验,这个问题是由 StorageClass 引起的,但不是它本身。 这是关于 Azure 文件共享的已知问题。 当文件共享安装到容器时,它具有root所有者,而不是所需的用户mysql ,这会导致问题。 解决方案是使用托管磁盘 StorageClass。 在 AKS 中,默认 StorageClass 用于托管磁盘:

在此处输入图像描述

所以只需使用默认的 StorageClass。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM