K8s上快速部署MySQL集群指南
k8s部署mysql 集群

首页 2025-06-30 17:07:34



K8S部署MySQL集群:打造高效稳定的数据库环境 在当今的云计算和容器化时代,Kubernetes(K8s)已成为管理容器化应用的首选平台

    MySQL作为广泛使用的开源关系型数据库管理系统,如何在K8s上高效地部署MySQL集群,以充分利用K8s的弹性伸缩、自我修复和高可用性特性,成为许多开发者和运维人员关注的焦点

    本文将详细介绍如何在K8s上部署MySQL集群,涵盖前期准备、主从节点配置、存储管理等多个方面,旨在为读者提供一个全面、实用的操作指南

     一、前期准备 1. 搭建NFS服务器 在K8s中部署MySQL集群时,为了确保数据持久化,需要搭建一个NFS(Network File System)服务器来存储MySQL的数据文件

    以下是搭建NFS服务器的步骤: 安装NFS和rpcbind服务

     - 创建一个用于挂载NFS的目录,例如`/nfs/mysql`

     - 配置NFS共享目录,将/nfs/mysql目录共享给K8s集群中的节点

     启动NFS和rpcbind服务,并设置开机自启动

     - 使用showmount -e命令验证NFS服务器配置是否生效

     2. 创建K8s命名空间 为了将MySQL集群部署在单独的命名空间中,可以使用`kubectl create namespace`命令创建一个新的命名空间,例如`deploy-test`

     3. 创建MySQL密码的Secret 在K8s中,Secret用于存储敏感信息,如密码、OAuth令牌和ssh密钥等

    为了安全地存储MySQL的root密码,可以创建一个Secret对象

    使用以下YAML配置创建一个名为`mysql-password`的Secret: yaml apiVersion: v1 kind: Secret metadata: name: mysql-password namespace: deploy-test type: Opaque data: mysql_root_password: 将`    ="" 二、部署mysql主节点="" 1.="" 创建主节点配置文件="" mysql主节点的配置文件(如`my.cnf`)需要包含一些关键的配置参数,以确保主从复制能够正常工作

    以下是一个示例配置文件:="" ini="" 【mysqld】="" skip-host-cache="" skip-name-resolve="" datadir="/var/lib/mysql" socket="/var/run/mysqld/mysqld.sock" secure-file-priv="/var/lib/mysql-files" pid-file="/var/run/mysqld/mysqld.pid" user="mysql" server-id="1" log-bin="master-bin" log_bin_index="master-bin.index" binlog_do_db="xiaohh_user" binlog_ignore_db="information_schema" binlog-format="ROW" 注意,`server-id`必须唯一,且`log-bin`参数用于启用二进制日志,这是主从复制的基础

    ="" 2.="" 创建configmap="" 将mysql主节点的配置文件存储为configmap,以便在k8s中使用

    使用以下命令创建configmap:="" bash="" kubectl="" create="" configmap="" mysql-master-cm="" -n="" deploy-test="" --from-file="my.cnf" --dry-run="client" -o="" yaml="" |="" apply="" -f="" -="" 3.="" 创建主节点的statefulset和service="" statefulset用于部署有状态的应用,如数据库

    它保证了pod的稳定性和唯一性,且每个pod都有一个稳定的网络标识符和持久存储

    以下是创建mysql主节点statefulset和service的yaml配置:="" statefulset配置="" apiversion:="" apps="" v1="" kind:="" statefulset="" metadata:="" name:="" deploy-mysql-master="" namespace:="" spec:="" selector:="" matchlabels:="" app:="" mysql-master="" servicename:="" deploy-mysql-master-svc="" replicas:1="" template:="" labels:="" terminationgraceperiodseconds:10="" containers:="" mysql="" image:="" registry.cn-shenzhen.aliyuncs.com="" xiaohh-docker="" mysql:8.0.34="" args:="" --character-set-server="utf8mb4" --collation-server="utf8mb4_unicode_ci" --lower_case_table_names="1" --default-time_zone="+8:00" env:="" mysql_root_password="" valuefrom:="" secretkeyref:="" key:="" mysql-password="" ports:="" containerport:3306="" volumemounts:="" mysql-data="" mountpath:="" var="" lib="" mysql-conf="" etc="" my.cnf="" readonly:="" true="" subpath:="" volumes:="" persistentvolumeclaim:="" claimname:="" deploy-mysql-master-nfs-pvc="" configmap:="" items:="" mode:0644="" path:="" ---="" service配置="" service="" port:3306="" targetport:3306="" nodeport:30306="" type:="" nodeport="" sessionaffinity:="" clientip="" 使用`kubectl="" -f`命令应用上述yaml配置,即可创建mysql主节点的statefulset和service

    ="" 三、部署mysql从节点="" 创建从节点的pv和pvc="" 为了存储mysql从节点的数据文件,需要创建persistentvolume(pv)和persistentvolumeclaim(pvc)

    以下是创建pv和pvc的yaml配置示例:="" pv配置="" persistentvolume="" deploy-mysql-slave-01-nfs-pv="" capacity:="" storage:1gi="" accessmodes:="" readwritemany="" nfs:="" server:="" path: /data/nfs/mysql-slaver-01 storageClassName: nfs --- PVC配置 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: deploy-mysql-slave-01-nfs-pvc namespace: deploy-test spec: accessModes: - ReadWriteMany storageClassName: nfs resources: requests: storage:1Gi volumeName: deploy-mysql-slave-01-nfs-pv 将`

nat123映射怎么用?超详细步骤,外网访问内网轻松搞定
nat123域名怎么用?两种方式轻松搞定
nat123怎么用?简单几步实现内网穿透
内网穿透工具对比:nat123、花生壳与轻量新选择
远程访问内网很简单:用对工具,一“箭”穿透
ngrok下载完全指南:从入门到获取客户端
内网远程桌面软件:穿透局域网边界的数字窗口
从外网远程访问内网服务器的完整方案
Windows Server 2008端口转发完全教程:netsh命令添加/查看/删除/重置
为什么三层交换机转发比Linux服务器快?转发表硬件加速的秘密