Kembali ke Beranda
Networking

Troubleshooting MySQL InnoDB Cluster pada OpenStack Charm

Tutorial troubleshooting MySQL InnoDB Cluster pada OpenStack Charm ketika cluster tidak sehat, mulai dari identifikasi error, reboot cluster dari complete outage, pengecekan status cluster, backup menggunakan mysqldump, pengambilan leader data, instalasi MySQL Shell, akses cluster menggunakan mysqlsh, remove instance bermasalah, membersihkan metadata group replication, menambahkan node kembali ke cluster, menjalankan command SQL pengecekan replication, hingga pengecekan ulang Vault jika ikut terdampak setelah incident MySQL.

Tutorial ini troubleshooting incident MySQL InnoDB Cluster yang tidak sehat pada OpenStack Charm.

1. Gejala

Contoh error:

Error : MySQL InnoDB Cluster not healthy: None

2. Coba Reboot Cluster dari Complete Outage

juju run-action mysql-innodb-cluster/0 reboot-cluster-from-complete-outage
juju run-action mysql-innodb-cluster/1 reboot-cluster-from-complete-outage
juju run-action mysql-innodb-cluster/2 reboot-cluster-from-complete-outage

3. Cek Status Cluster

juju run-action mysql-innodb-cluster/0 cluster-status
juju run-action mysql-innodb-cluster/1 cluster-status
juju run-action mysql-innodb-cluster/leader --wait cluster-status
juju show-action-output XX

Backup/dump jika diperlukan:

juju run-action mysql-innodb-cluster/0 mysqldump

4. Ambil Leader Data

juju run --unit mysql-innodb-cluster/1 leader-get

Data penting yang dicari:

cluster-password: <CLUSTER_PASSWORD>
mysql.passwd: <MYSQL_ROOT_PASSWORD>

5. Install MySQL Shell

wget https://dev.mysql.com/get/Downloads/MySQL-Shell/mysql-shell_8.0.34-1ubuntu22.04_amd64.deb
sudo dpkg -i mysql-shell_8.0.34-1ubuntu22.04_amd64.deb

6. Masuk ke Node Leader dengan mysqlsh

mysqlsh clusteruser@<MYSQL_NODE_IP> --js

Setelah login:

var cluster = dba.getCluster("jujuCluster")

7. Remove Instance Bermasalah dari Cluster

Pastikan node mana yang bermasalah, lalu remove dengan force:

cluster.removeInstance('root@<MYSQL_NODE_IP_1>:3306',{force: true})
cluster.removeInstance('root@<MYSQL_NODE_IP_2>:3306',{force: true})
cluster.removeInstance('root@<MYSQL_NODE_IP_3>:3306',{force: true})

8. Bersihkan Node Bermasalah

Masuk ke node bermasalah, login MySQL:

mysql -u root -p

Jalankan SQL:

set GLOBAL super_read_only = OFF;
STOP GROUP_REPLICATION;
RESET SLAVE ALL;
DROP DATABASE mysql_innodb_cluster_metadata;

9. Tambahkan Instance Kembali ke Cluster

Masuk ke MySQL Shell lagi, lalu tambahkan node:

cluster.addInstance({user: "clusteruser", host: "<MYSQL_NODE_IP_1>", port: 3306, password: "<CLUSTER_PASSWORD>"});
cluster.addInstance({user: "clusteruser", host: "<MYSQL_NODE_IP_2>", port: 3306, password: "<CLUSTER_PASSWORD>"});
cluster.addInstance({user: "clusteruser", host: "<MYSQL_NODE_IP_3>", port: 3306, password: "<CLUSTER_PASSWORD>"});

10. Command SQL Tambahan

select * from performance_schema.replication_group_members;
show master status;
SHOW REPLICAS;

Jika perlu bootstrap group replication manual:

dba.configureInstance();
SET GLOBAL group_replication_bootstrap_group = ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group = OFF;

11. Jika Vault Ikut Error

Setelah MySQL sehat, biasanya Vault perlu dicek/unseal ulang:

juju ssh vault/0
export VAULT_TOKEN=<VAULT_TOKEN>
vault operator unseal <UNSEAL_KEY_1>
vault operator unseal <UNSEAL_KEY_2>
vault operator unseal <UNSEAL_KEY_3>
vault status
mysqlmysql innodb clusteropenstackopenstack charmjujumysql-innodb-clustercluster outagegroup replicationmysqlshcluster-statusmysqldumpleader-getvaultunseal vaultdatabase recoverycloud databasehigh availabilitytroubleshootingincident handlingopenstack deployment
Nirantara Logo

Published by Nirantara

Nirantara is an Indonesian Enterprise AI company specializing in Enterprise AI, RAG, Intelligent Search, and AI Automation. Article written by jsturana.

Learn more about Nirantara