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报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vivado fpga程序固化

一般下载到fpga上的程序在掉电之后就会丢失,如果想要掉电之后程序不丢失,就需要将比特流文件固化到板载的flash上。 以下以我的7a100t开发板为例,介绍程序固化的流程 点击OK就可以下载了。

RabbitMQ Topic RPC

Topics(通配符模式) Topics 和Routing模式的区别是: topics 模式使⽤的交换机类型为topic(Routing模式使⽤的交换机类型为direct)topic 类型的交换机在匹配规则上进⾏了扩展, Binding Key⽀持通配符匹配(direct类型的交换机路 由规则是BindingKey和RoutingKey完全匹配) 在top…

服务器死机了需要检查哪些问题

在这个数字化的时代,服务器就像是我们信息世界的“大管家”,可要是它突然死机了,那可真是让人头疼。今天咱们就来聊聊,服务器死机了,到底需要检查哪些问题。 一、硬件问题 电源供应:检查电源是否稳定&…

【MySQL成神之路】运算符总结

MySQL运算符总结 MySQL提供了丰富的运算符,用于在SQL语句中进行各种计算和比较操作。这些运算符可以分为算术运算符、比较运算符、逻辑运算符、位运算符等几大类。合理使用这些运算符可以构建复杂的查询条件和计算表达式。 一、算术运算符 MySQL支持基本的算术运…

自用Vscode 配置c++ debug环境

前言 使用vscode配置c debug环境的好处 1、可以借助vscode方便轻量的扩展和功能 2、避免了传统使用gdb 复杂按键以及不够直观的可视化 3、方便一次运行,断点处查看变量,降低找bug难度 4、某大公司项目采用类似配置,经过实践检验 配置c运行环…

创建一个使用 GPT-4o 和 SERP 数据的 RAG 聊天机器人

亮数据-网络IP代理及全网数据一站式服务商屡获殊荣的代理网络、强大的数据挖掘工具和现成可用的数据集。亮数据:网络数据平台领航者https://www.bright.cn/?promogithub15?utm_sourceorganic-social-cn&utm_campaigncsdn 本指南将解释如何使用 Python、GPT-4…

吴恩达 Deep Learning(1-36)ppt逐行理解

课程地址:(超爽中英!) 2024公认最好的【吴恩达深度学习】教程!附课件代码 Professionalization of Deep Learning_哔哩哔哩_bilibili 1.目录 2.什么是神经网络 3.用神经网络进行监督学习 4.为什么深度学习会兴起 7.二分分类 适用于二元分类问题的函数&…

三维点云的处理

1 点云原理 https://zh.wikipedia.org/wiki/%E9%BB%9E%E9%9B%B2 点云(英语:point cloud)是空间中点的数据集,可以表示三维形状或对象,通常由三维扫描仪获取。点云中每个点的位置都由一组笛卡尔坐标(X,Y,Z)描述[1]&…

鸿蒙HarmonyOS多设备流转:分布式的智能协同技术介绍

随着物联网和智能设备的普及,多设备间的无缝协作变得越来越重要。鸿蒙(HarmonyOS)作为华为推出的新一代操作系统,其分布式技术为实现多设备流转提供了强大的支持。本文将详细介绍鸿蒙多设备流转的技术原理、实现方式和应用场景。 …

Spring Boot- 2 (数万字入门教程 ):数据交互篇

JDBC交互框架: Spring的JDBC操作工具: 依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> JDBC的模版类:JdbcTemplate 引入Mysql的依赖 <depe…

在 Kotlin 中,什么是内联函数?有什么作用?

在 Kotlin 中&#xff0c;内联函数是一种通过 inline 关键字声明的函数&#xff0c;其主要目的是优化高阶函数&#xff08;即以函数作为参数或返回值的函数&#xff09;的性能。 内联函数的函数体会在编译时直接插入到调用处&#xff0c;从而避免函数调用的开销&#xff0c;并…

LLM笔记(五)概率论

1. 随机变量与概率分布&#xff1a;模型输出的基础 在LLM中&#xff0c;随机变量最直观的体现就是模型预测的下一个token。每个时刻&#xff0c;模型都会输出一个概率分布&#xff0c;表示词汇表中每个token可能是"下一个词"的概率。 直观理解 想象模型在处理句子…

LeetCode-滑动窗口-找到字符串中所有字母异位词

LeetCode-滑动窗口-找到字符串中所有字母异位词 ✏️ 关于专栏&#xff1a;专栏用于记录 prepare for the coding test。 文章目录 LeetCode-滑动窗口-找到字符串中所有字母异位词&#x1f4dd; 找到字符串中所有字母异位词&#x1f3af;题目描述&#x1f50d; 输入输出示例&am…

PostgreSQL 初体验

目录 一、PostgreSQL 1. 简介 2. 特点 &#xff08;1&#xff09; 开源免费&#xff08;Open Source&#xff09; &#xff08;2&#xff09;标准兼容&#xff08;SQL Compliance&#xff09; &#xff08;3&#xff09; 丰富的数据类型&#xff08;Data Types&#xff09…

05_核支持向量机

描述 核支持向量机&#xff08;通常简称为SVM&#xff09;可以推广到更复杂模型的扩展&#xff0c;这些模型无法被输入空间的超平面定义。 SVM 的核心思想是找到一个最优的超平面&#xff0c;将不同类别的数据分开。这个超平面不仅要能够正确分类数据&#xff0c;还要使得两个…

Java + 鸿蒙双引擎:ZKmall开源商城如何定义下一代B2C商城技术标准?

在 B2C 电商领域持续革新的当下&#xff0c;技术架构的优劣成为决定商城竞争力的核心要素。ZKmall开源商城以其创新融合的 Java 与鸿蒙双引擎&#xff0c;为下一代 B2C 商城技术标准勾勒出全新蓝图&#xff0c;在性能、兼容性、拓展性等关键维度实现了重大突破。 一、Java 技术…

关于 Web 漏洞原理与利用:3. CSRF(跨站请求伪造)

一、原理&#xff1a; 利用用户登录态伪造操作 CSRF&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09;是攻击者“借刀杀人”&#xff0c;借用用户浏览器中已有的登录状态&#xff0c;诱导用户完成攻击者指定的操作。 1. 基本机制分解 1&#xf…

【HTML5】【AJAX的几种封装方法详解】

【HTML5】【AJAX的几种封装方法详解】 AJAX (Asynchronous JavaScript and XML) 封装是为了简化重复的异步请求代码&#xff0c;提高开发效率和代码复用性。下面我将介绍几种常见的 AJAX 封装方式。 方法1. 基于原生 XMLHttpRequest 的封装 XMLHttpRequest。其主要特点如下…

C++ - 网络编程之初始连接(Winsock2 概述、初始连接案例、初始连接案例解读)

一、Winsock2 概述 Winsock2&#xff08;Windows Sockets 2&#xff09;是微软提供的 Windows 平台网络编程库 二、初始连接案例 1、Server #include <winsock2.h> #include <ws2tcpip.h> #include <iostream>#pragma comment(lib, "ws2_32.lib&quo…

Spring Cloud Gateway深度解析:原理、架构与生产实践

文章目录 前言一、概述二、核心架构设计及设计原理2.1 分层架构模型网络层&#xff08;I/O模型&#xff09;核心处理层 2.2 核心组件协作流程路由定位阶段过滤器执行阶段 2.3 响应式编程模型实现Reactor上下文传递背压处理机制 2.4 动态路由设计原理2.5 异常处理体系2.6 关键路…