在ubuntu上搭建mysql集群可以通过多种方式实现,包括使用mysql cluster、kubernetes的statefulset等。以下是使用kubernetes的statefulset部署mysql主从集群的详细步骤:
准备工作
- 创建Namespace
apiVersion: v1 kind: Namespace metadata: name: mysql labels: app: mysql
- 配置密码Secret
apiVersion: v1 kind: Secret metadata: name: mysql-secret namespace: mysql labels: app: mysql type: Opaque data: password: MTIzNDU2 # base64编码的密码,生产环境建议使用更复杂的密码
主从配置分离
- 创建ConfigMap
主节点配置(master.cnf)
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql
namespace: mysql
data:
master.cnf: |
[mysqld]
log-bin=mysql-bin
skip-name-resolves
从节点配置(slave.cnf)
eSiteGroup站群管理系统是基于eFramework低代码开发平台构建,是一款高度灵活、可扩展的智能化站群管理解决方案,全面支持SQL Server、SQLite、MySQL、Oracle等主流数据库,适配企业级高并发、轻量级本地化、云端分布式等多种部署场景。通过可视化建模与模块化设计,系统可实现多站点的快速搭建、跨平台协同管理及数据智能分析,满足政府、企业、教育机构等组织对多站点统一管控的
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql
namespace: mysql
data:
slave.cnf: |
[mysqld]
super-read-only
log-bin=mysql-bin
replicate-ignore-db=mysql
网络服务配置
- Headless Service
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: mysql
labels:
app: mysql
spec:
ports:
- name: mysql
port: 3306
clusterIP: None
selector:
app: mysql
- 读写分离Service
apiVersion: v1
kind: Service
metadata:
name: mysql-read
namespace: mysql
labels:
app: mysql
spec:
ports:
- name: mysql
port: 3306
selector:
app: mysql
核心StatefulSet部署
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
namespace: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: "mysql"
replicas: 2
template:
metadata:
labels:
app: mysql
spec:
initContainers:
- name: init-mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
command:
- bash
- "-c"
- |
set -ex
ordinal=$(hostname | awk '{print $NF}')
echo "[mysqld] > /mnt/conf.d/server-id.cnf"
echo "server-id=$((100 $ordinal))" >> /mnt/conf.d/server-id.cnf
if [ $ordinal -eq 0 ]; then
echo "server-id=100" >> /mnt/conf.d/server-id.cnf
else
echo "server-id=$((100 $ordinal))" >> /mnt/conf.d/server-id.cnf
fi
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-data
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-persistent-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
部署步骤总结
- 创建Namespace和Secret:定义用于隔离MySQL集群的环境和密码。
- 配置ConfigMap:存储主节点和从节点的配置文件。
- 配置网络服务:创建Headless Service和读写分离Service,以便正确路由流量。
- 部署StatefulSet:使用StatefulSet部署MySQL主从集群,确保每个节点有独立身份和持久化数据。
通过以上步骤,您可以在Ubuntu上成功搭建一个MySQL主从集群。请根据实际需求和环境调整配置。









