当前位置: 首页 > news >正文

k8s1.27集群部署mysql8.0双主双从

环境介绍:
#节点分配
159m--->两个master,生产环境建议,一个master一个节点。

160n-->slave-0

161n-->slaves-0
#存储卷
pv-->放在节点上,没用nfs/云存储。hostpath方式存储。pv的资源分配1G,较小,用来测试环境

-----------------kind资源

159m节点创建目录并授权:mkdir -p /data/mysql-masters && chmod 755 -R /data/mysql-masters

                                           mkdir -p /data/mysql-master && chmod 755 -R /data/mysql-master

160n节点创建目录并授权: mkdir -p /data/mysql-slave-0 && chmod 755 -R /data/mysql-slave-0

161n节点创建目录并授权: mkdir -p /data/mysql-slave-1 && chmod 755 -R /data/mysql-slave-1

master节点:

mkdir -p /kind/mysql-kind

cd /kind/mysql-kind

vim mysql-pv.yaml

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: local1
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:name: mysql-master-pvlabels:type: local
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/mysql-masternodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- 159m  # 替换为你的主节点名称,kubectl get nodes获取,也可以放在其他节点。例如158n
---
apiVersion: v1
kind: PersistentVolume
metadata:name: mysql-masters-pvlabels:type: local
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/mysql-mastersnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- 159m  # 替换为你的主节点名称
---
apiVersion: v1
kind: PersistentVolume
metadata:name: mysql-slave-pv-0labels:type: local
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local1local:path: /data/mysql-slave-0nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- 160n  # 替换为你的第一个从节点名称
---
apiVersion: v1
kind: PersistentVolume
metadata:name: mysql-slave-pv-1labels:type: local
spec:capacity:storage: 1GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local1local:path: /data/mysql-slave-1nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- 161n  # 替换为你的第二个从节点名称,

vim mysql-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-master-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: local-storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-masters-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: local-storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-slave-pvc-0
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: local-storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-slave-pvc-1
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: local-storage

vim mysql-sts-master.yaml
注意这里configmap有一个插件参数,需要先让podruning起来,再增加插件配置。

apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql-master
spec:serviceName: mysql-masterreplicas: 1selector:matchLabels:app: mysql-mastertemplate:metadata:labels:app: mysql-masterspec:tolerations:- key: "node-role.kubernetes.io/control-plane"operator: "Exists"effect: "NoSchedule"containers:- name: mysqlimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/gcr.io/ml-pipeline/mysql:8.0.26env:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretkey: MYSQL_ROOT_PASSWORDports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-storagemountPath: /var/lib/mysql- name: mysql-configmountPath: /etc/mysql/conf.d/my.cnfsubPath: my.cnfvolumes:- name: mysql-configconfigMap:name: mysql-master-config- name: mysql-storagepersistentVolumeClaim:claimName: mysql-master-pvc
---
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-master-config
data:my.cnf: |[mysqld]server-id=1  # 保证id唯一read-only=0 # 允许读写#binlog-ignore-db=mysql # 忽略数据,指不需要同步的数据库#binlog-do-db=db01 # 指定同步的数据库log_bin=mysql-bin  # 开binlogbind-address = 0.0.0.0default-storage-engine = INNODBinnodb_buffer_pool_size = 512mb#mysql_native_password=ON #这里!先让podrunning起来再添加配置,不然会报插件错误
---
apiVersion: v1
kind: Service
metadata:name: mysql-master-headless
spec:clusterIP: Noneselector:app: mysql-master

vim mysql-sts-masters.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql-masters
spec:serviceName: mysql-mastersreplicas: 1selector:matchLabels:app: mysql-masterstemplate:metadata:labels:app: mysql-mastersspec:tolerations:- key: "node-role.kubernetes.io/control-plane"operator: "Exists"effect: "NoSchedule"containers:- name: mysqlimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/gcr.io/ml-pipeline/mysql:8.0.26env:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretkey: MYSQL_ROOT_PASSWORDports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-storagemountPath: /var/lib/mysql- name: mysql-configmountPath: /etc/mysql/conf.d/my.cnfsubPath: my.cnfvolumes:- name: mysql-configconfigMap:name: mysql-masters-config- name: mysql-storagepersistentVolumeClaim:claimName: mysql-masters-pvc
---
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-masters-config
data:my.cnf: |[mysqld]server-id=4  # 保证id唯一read-only=0 # 允许读写#binlog-ignore-db=mysql # 忽略数据,指不需要同步的数据库#binlog-do-db=db01 # 指定同步的数据库log_bin=mysql-bin  # 开binlogbind-address = 0.0.0.0default-storage-engine = INNODBinnodb_buffer_pool_size = 512mb#mysql_native_password=ON#等podrunning起来之后,在更新这个配置,不然初始化直接报错
---
apiVersion: v1
kind: Service
metadata:name: mysql-masters-headless
spec:clusterIP: Noneselector:app: mysql-masters

vim mysql-sts-slave.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql-slave
spec:serviceName: mysql-slavereplicas: 1selector:matchLabels:app: mysql-slavetemplate:metadata:labels:app: mysql-slavespec:volumes:- name: mysql-configconfigMap:name: mysql-slave0-config- name: mysql-storagepersistentVolumeClaim:claimName: mysql-slave-pvc-0containers:- name: mysqlimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/gcr.io/ml-pipeline/mysql:8.0.26env:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretkey: MYSQL_ROOT_PASSWORDports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-storagemountPath: /var/lib/mysql- name: mysql-configmountPath: /etc/mysql/conf.d/my.cnfsubPath: my.cnf
---
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-slave0-config
data:my.cnf: |[mysqld]server-id=2 #保证id唯一read-only=1 #允许读,普通用户bind-address = 0.0.0.0default-storage-engine = INNODBinnodb_buffer_pool_size = 512mb

vim mysql-sts-slaves.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql-slaves
spec:serviceName: mysql-slavesreplicas: 1selector:matchLabels:app: mysql-slavetemplate:metadata:labels:app: mysql-slavespec:volumes:- name: mysql-configconfigMap:name: mysql-slaves-config- name: mysql-storagepersistentVolumeClaim:claimName: mysql-slave-pvc-1containers:- name: mysqlimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/gcr.io/ml-pipeline/mysql:8.0.26env:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretkey: MYSQL_ROOT_PASSWORDports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-storagemountPath: /var/lib/mysql- name: mysql-configmountPath: /etc/mysql/conf.d/my.cnfsubPath: my.cnf
---
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-slaves-config
data:my.cnf: |[mysqld]server-id=3 #保证id唯一read-only=1 #允许读,普通用户bind-address = 0.0.0.0default-storage-engine = INNODBinnodb_buffer_pool_size = 512mb

vim mysql-secret.yaml

apiVersion: v1
kind: Secret
metadata:name: mysql-secret
type: Opaque
data:MYSQL_ROOT_PASSWORD: cm9vdA==  #base64编码,密码为root

kubectl apply -f .   #应用整个文件夹

vim mysql-sts-master.yaml mysql-sts-masters.yaml

configmap.mysql_native_password=ON 去掉注释

kubectl apply -f mysql-sts-master.yaml mysql-sts-masters.yaml


身份划分--做主从:

master的从节点为slave-0

1.首先进入master容器创建用户及授权,还有slave授权。

CREATE USER 'itcast'@'%' IDENTIFIED BY '1';GRANT ALL PRIVILEGES ON *.* TO 'itcast'@'%' WITH GRANT OPTION;grant replication slave on *.* to 'itcast'@'%';show master status; #查看binlog日志坐标,本次演示为mysql-bin.000003,2458mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |     2458 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

2.然后进入slave-0,添加master主节点信息,然后开启slave;

#mysql-master做了无头服务,通过coredns会在集群内部解析mysql-masters-headless.default.svc.cluster.localCHANGE MASTER TOMASTER_HOST='mysql-master-headless.default.svc.cluster.local',MASTER_PORT=3306,MASTER_USER='itcast',MASTER_PASSWORD='1',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=2458;start slave;  #开启从服务show slave status\G;  #两个yes标识成功Slave_IO_Running: YesSlave_SQL_Running: Yes

masters的从节点为slaves-0

同上操作,注意无头服务为mysql-masters-headless.default.svc.cluster.local

双主操作

master和masters两个互为主从,master给masters做从,masters给master做从。和master与slave操作一致。

此时:

当从两个master写入的时候,两个从节点都会记录数据增删改数据,master建库删库,slave一同跟着操作,但是在slave中创建数据库和数据,master节点看不到。

报错:

  Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
 Error 'You are not allowed to create a user with GRANT' on query. Default database: ''. Query: 'GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%''
  Replicate_Ignore_Server_Ids: 
8.0版本不支持创建用户和授权一条命令。

mysql> create user 'itcast'@'%' identified with mysql_nactive_password by '1';
ERROR 1524 (HY000): Plugin 'mysql_nactive_password' is not loaded
命令错误,应该是native。不然就是my.cnf没有启用插件

主从不成功,注意查看show slave status\G;中last_io_error报错

相关文章:

  • 第二道re
  • UE 材质基础第二天
  • 线光谱共焦传感器:复杂材质检测
  • 【盈达科技】GEO优化实战策略
  • 基于PetaLinux的Zynq PS应用自启动全攻略
  • 浙江大学python程序设计(陈春晖、翁恺、季江民)习题答案-第五章
  • 大模型(1)——基本概念
  • 达梦数据库对json字段进行操作
  • C++开源库argh使用教程
  • Qt Widgets模块功能详细说明,基本控件:QCheckBox(三)
  • JAVA Web 期末速成
  • DeepSeek 赋能机器人研发:从技术革新到场景落地
  • 【C/C++】C语言内存操作与字符串处理汇总
  • 简单实现网页加载进度条
  • Bootstrap 5 容器与网格系统详解
  • Java中的流详解
  • 2025ICPC邀请赛南昌游记
  • 【C语言基础语法入门】通过简单实例快速掌握C语言核心概念
  • 安防综合管理系统EasyCVR视频融合平台安防知识:门禁系统与视频监控系统如何联动?
  • 【Qwen开源】WorldPM: 扩展人类偏好建模
  • 学人、学术、学科、学脉:新时代沾溉下的中国西方史学史
  • 左手免费午餐右手花开岭,邓飞14年公益之路的中国贡献
  • 《习近平新时代中国特色社会主义思想学习论丛》第十一辑至第十五辑出版发行
  • 以色列称“将立即允许恢复”人道主义物资进入加沙
  • 世卫大会中国代表团:中国深入参与全球卫生治理,为构建人类卫生健康共同体贡献中国力量
  • 牛市早报|持续推进城市更新行动意见印发,证监会强化上市公司募资监管