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.pswp.cn/pingmian/81739.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81739.shtml
英文地址,請注明出處:http://en.pswp.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 關鍵路…