在Ubuntu上搭建MySQL集群可以通过多种方式实现,包括使用MySQL Cluster、Kubernetes的StatefulSet等。以下是使用Kubernetes的StatefulSet部署MySQL主从集群的详细步骤:
apiVersion: v1
kind: Namespace
metadata:
name: mysql
labels:
app: mysql
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
namespace: mysql
labels:
app: mysql
type: Opaque
data:
password: MTIzNDU2 # base64编码的密码,生产环境建议使用更复杂的密码
主节点配置(master.cnf)
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql
namespace: mysql
data:
master.cnf: |
[mysqld]
log-bin=mysql-bin
skip-name-resolves
从节点配置(slave.cnf)
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql
namespace: mysql
data:
slave.cnf: |
[mysqld]
super-read-only
log-bin=mysql-bin
replicate-ignore-db=mysql
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: mysql
labels:
app: mysql
spec:
ports:
- name: mysql
port: 3306
clusterIP: None
selector:
app: mysql
apiVersion: v1
kind: Service
metadata:
name: mysql-read
namespace: mysql
labels:
app: mysql
spec:
ports:
- name: mysql
port: 3306
selector:
app: mysql
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
通过以上步骤,您可以在Ubuntu上成功搭建一个MySQL主从集群。请根据实际需求和环境调整配置。