在Ubuntu上搭建mysql集群可以通過多種方式實現,包括使用mysql cluster、kubernetes的statefulset等。以下是使用kubernetes的statefulset部署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)
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主從集群。請根據實際需求和環境調整配置。