提升數據安全與性能,掌握Helm一鍵部署MySQL 8.0主從技巧
在云原生應用開發中,數據庫的高可用性和數據一致性是至關重要的。MySQL作為一種常用的關系型數據庫,在云原生環境中的部署和管理也變得愈發重要。本教程將介紹如何使用Helm一鍵部署MySQL 8.0的主從復制架構,以實現數據庫的高可用和數據備份。
架構圖
準備工作
在先前的文中,我們詳細介紹了如何利用Helm管理Kubernetes(K8S)集群,相信這已經使大家對Helm的基本使用有了初步的了解。在開始之前,確保你已經安裝了以下工具:
- Kubernetes集群
- Helm包管理器
安裝Helm Chart
首先,添加MySQL的Helm倉庫,執行如下命令:
helm repo add bitnami https://charts.bitnami.com/bitnami
然后,執行下面的命令更新本地倉庫索引:
helm repo update
搜索MySQL的版本
通過下面的命令,在倉庫搜索MySQL的版本。
controlplane $ helm search repo mysql
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/mysql 10.1.1 8.0.36 MySQL is a fast, reliable, scalable, and easy t...
bitnami/phpmyadmin 16.0.1 5.2.1 phpMyAdmin is a free software tool written in P...
bitnami/mariadb 18.0.1 11.3.2 MariaDB is an open source, community-developed ...
bitnami/mariadb-galera 13.0.0 11.3.2 MariaDB Galera is a multi-primary database clus...
配置主從復制
MySQL Helm Chart提供了簡單的配置選項來設置主從復制。你可以通過以下方式配置:
helm install mysql-cluster \
--set auth.rootPassword='mysql' \
--set global.storageClass=local-path \
--set architecture=replication \
--set auth.password='mysql' \
--set secondary.replicaCount=1 \
--set auth.replicationPassword='replpass' \
-n mysql --create-namespace \
bitnami/mysql
執行上述命令后,會返回一下結果,如下圖:
等待幾分鐘之后,執行如下命令即可查看部署的情況:
controlplane $ k get pod -n mysql -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-cluster-primary-0 1/1 Running 0 5m45s 192.168.1.7 node01 <none> <none>
mysql-cluster-secondary-0 1/1 Running 0 5m45s 192.168.0.5 controlplane <none> <none>
驗證主從同步
(1) 執行如下命令,安裝客戶端軟件。
apt install mysql-client -y
(2) 執行下面的命令,驗證主節點
# 登錄主容器
mysql -uroot -h192.168.1.7 -pmysql
# 查看主從狀態
# 查看File和Position的值,在從庫配置中會顯示。
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 157
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
(3) 執行下面的命令,驗證從節點
# 登錄從容器
mysql -uroot -h192.168.0.5 -pmysql
# 查看Slave_IO_Running和Slave_SQL_Running的值是否為Yes.
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: mysql-cluster-primary
Master_User: replicator
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 157
Relay_Log_File: mysql-relay-bin.000006
Relay_Log_Pos: 373
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
遇到的問題總結
(1) 執行完部署命令后,提示"resources" sections in the chart not set,如下:
WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs:
- primary.resources
- secondary.resources
通過上述提示信息是由于resources的資源沒有設置。
下載MySQL包到本地
通過下面的命令把MySQL包下載到本地。
controlplane $ helm pull bitnami/mysql --version=10.1.1
controlplane $ ls
filesystem get_helm.sh mysql-10.1.1.tgz snap
controlplane $
執行下面的命令解壓下載好的MySQL包:
controlplane $ tar zxvf mysql-10.1.1.tgz
mysql/Chart.yaml
mysql/Chart.lock
mysql/values.yaml
...省略...
修改mysql/values.yaml中的resources,如下:
resources:
requests:
cpu:2
memory:1024Mi
limits:
cpu:2
memory:1024Mi
修改完之后保存退出,執行如下命令重新部署。
helm install mysql-cluster \
--set auth.rootPassword='mysql' \
--set global.storageClass=local-path \
--set architecture=replication \
--set auth.password='mysql' \
--set secondary.replicaCount=1 \
--set auth.replicationPassword='replpass' \
--set useBundledSystemChart=true \
-f /root/mysql/values.yaml \
-n mysql --create-namespace \
bitnami/mysql
執行完上述的命令后,剛才那個警告就消失了。如下圖:
寫到最后
通過本教程,你學習了如何使用Helm一鍵部署MySQL 8.0的主從復制架構。這為你提供了一個簡單而強大的方法來部署可擴展的、高可用的MySQL數據庫集群,并確保了數據的備份和一致性。繼續探索更多Helm Chart的配置選項,以滿足你的特定需求,并構建穩健的云原生應用。