在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主從集群。請根據實際需求和環境調整配置。