Невозможно запустить подчиненный экземпляр MySQL на GKE - PullRequest
0 голосов
/ 08 января 2020

У меня есть служба MySQL, работающая в Google Kubernetes Engine, настроенная со стратегией репликации Master-Slave. К сожалению, до сих пор только мне удалось запустить только основной экземпляр (mysql -0). Ведомые экземпляры (mysql -n) всегда застревают на CrashLoopBackOff.

Текущие модули:

Here is the screenshot of my current pods

Когда я проверяю журнал на mysql - 1 экземпляр, напечатаны следующие строки:

2020-01-08 08:11:20+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.18-1debian9 started.
2020-01-08 08:11:20+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-01-08 08:11:20+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.18-1debian9 started.
2020-01-08 08:11:20+00:00 [Note] [Entrypoint]: Initializing database files
2020-01-08T08:11:20.787668Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2020-01-08T08:11:20.787780Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.18) initializing of server in progress as process 45
2020-01-08T08:11:20.789731Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
2020-01-08T08:11:20.789739Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2020-01-08T08:11:20.790259Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-01-08T08:11:20.791368Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.18)  MySQL Community Server - GPL.

На мастере MySQL Экземпляр (mysql -0) напечатаны следующие строки:

2020-01-08 08:08:02+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.18-1debian9 started.
2020-01-08 08:08:03+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-01-08 08:08:03+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.18-1debian9 started.
2020-01-08T08:08:03.605134Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2020-01-08T08:08:03.605280Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.18) starting as process 1
2020-01-08T08:08:05.939722Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2020-01-08T08:08:05.945787Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2020-01-08T08:08:06.069048Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.18'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
2020-01-08T08:08:06.303012Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060

Разница в ключах между два журнала, на экземпляре ведомого устройства, печатаются строки Initializing database files, указывающие на mysqld попытку инициализировать уже существующий каталог данных mysql (/var/lib/mysql), тогда как при инициализации главного экземпляра этого не происходит.

Я следовал этому руководству по kubernetes , но оно не работает на MySQL версии 8. Поэтому я изменяю развертывание StatefulSet. Вот фрагмент кода yaml

У кого-нибудь есть идеи, как решить эту проблему? Очень признателен:)

ОБНОВЛЕНИЕ : Решение, предоставляемое @BinaryBullet, на самом деле работает с некоторыми изменениями, позволяющими репликацию нескольких ведомых устройств. Этот файл yaml является конечным результатом.

1 Ответ

0 голосов
/ 08 января 2020

Я вижу, что это проблема с вашим volumemount, так как у вас есть один VolumeClaimTemplate для файлов master и slave mysql -bin, схем, ib_buffer_pool, et c для всех остальных mysql связанные файлы конфликтуют друг с другом и пытаются сохранить в том же месте. Из-за этого происходит сбой одного из ваших экземпляров базы данных, т. Е. Сбой, который когда-либо запускается позже, в вашем случае подчиненный db.

Этого можно избежать, добавив отдельные PV и PV C для вашего главного и подчиненного.

Добавление чего-то вроде этого в ваш набор состояний

volumeClaimTemplates:
    - metadata:
        name: slave-data
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 10Gi

и volumemount для подчиненного модуля это что-то вроде

   volumeMounts:
        - name: slave-data
          mountPath: /var/lib/mysql
          subPath: mysql
        - name: conf
          mountPath: /etc/mysql/conf.d

Но убедитесь, что у вас есть отдельный постоянный том для вашего ведомого. Все ваши подчиненные файлы mysql -bin, ib_buffer_pool, schemas и т. Д. c mysql связанные файлы сохраняются в другом месте, чем master.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...