K8s 部署 MySQL 8.0.20 主从复制结构

一、K8s 部署 MySQL

安装规划

组件replicas类型
mysql-master1StatefulSet
mysql-slave1StatefulSet

使用 k8s 版本为:v1.18.0

本次使用 OpenEBS 来作为存储引擎,OpenEBS 是一个开源的、可扩展的存储平台,它提供了一种简单的方式来创建和管理持久化存储卷。它支持各种存储后端,包括但不限于 ZFSBtrfsXFS 等。同时,OpenEBS 具有高度的可扩展性和可配置性,可以满足不同的存储需求。

安装 OpenEBS

kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml

验证OpenEBS是否正确安装:

kubectl get pods -n openebs

在这里插入图片描述
所有的 OpenEBS pods 都处于Running状态表示正常。

1. 创建命名空间

vi mysql-ns.yml
apiVersion: v1
kind: Namespace
metadata:name: mysqllabels:name: mysql
kubectl apply -f mysql-ns.yml

2. 创建一个默认的存储卷:

vi mysql-local-storage.yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: mysql-local-storageannotations:openebs.io/cas-type: localcas.openebs.io/config: |- name: StorageTypevalue: hostpath- name: BasePathvalue: /data/openebs/mysql
provisioner: openebs.io/local
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
kubectl apply -f mysql-local-storage.yml

3. 部署 MySQL 主节点:

vi mysql-master.yml
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-master-confignamespace: mysqllabels:app: mysql-master-config
data:my.cnf: |+     [client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]init_connect='SET collation_connection = utf8_unicode_ci'init_connect='SET NAMES utf8'character-set-server=utf8lower_case_table_names=1sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONcollation-server=utf8_unicode_ciskip-character-set-client-handshakeskip-name-resolvepid-file        = /var/run/mysqld/mysqld.pidsocket          = /var/run/mysqld/mysqld.sockdatadir         = /var/lib/mysqlsecure-file-priv= NULL# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0# 主从同步server-id = 1log-bin = mysql-binsync_binlog = 1binlog_checksum = nonebinlog_format = mixedslave-skip-errors = allevent_scheduler = 1max_allowed_packet = 64M# Custom config should go here!includedir /etc/mysql/conf.d/---
# headless service 
apiVersion: v1
kind: Service
metadata:name: mysql-master-svcnamespace: mysqllabels:app: mysql-master-svc
spec:clusterIP: Noneports:- name: master-portport: 3306selector:app: mysql-master---
# NodePort service 
apiVersion: v1
kind: Service
metadata:name: mysql-master-nodeportnamespace: mysqllabels:app: mysql-master-nodeport
spec:clusterIP: ports:- name: master-portport: 3306nodePort: 31306targetPort: 3306selector:app: mysql-mastertype: NodePorttarget-port:externalTrafficPolicy: Cluster ---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql-masternamespace: mysql
spec:serviceName: "mysql-master-svc"replicas: 1selector: matchLabels: app: mysql-mastertemplate:metadata:labels:app: mysql-masterspec:containers:- name: mysql-masterimage: mysql:8.0.20ports:- containerPort: 3306name: master-portenv:- name: MYSQL_ROOT_PASSWORDvalue: "root"- name: TZvalue: "Asia/Shanghai"volumeMounts:                           - name: mycnfmountPath: /etc/mysql/my.cnfsubPath: my.cnf- name: mysql-master-datamountPath: /var/lib/mysql volumes:- name: mycnfconfigMap:                                name: mysql-master-configvolumeClaimTemplates:- metadata:name: mysql-master-dataspec:accessModes: ["ReadWriteOnce"]storageClassName: mysql-local-storageresources:requests:storage: 5Gi
kubectl apply -f mysql-master.yml

查看 pod

kubectl get pods -n mysql

在这里插入图片描述

4. 部署 MySQL 从节点:

vi mysql-slave.yml
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-slave-confignamespace: mysqllabels:app: mysql-slave-config
data:my.cnf: |+     [client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]init_connect='SET collation_connection = utf8_unicode_ci'init_connect='SET NAMES utf8'character-set-server=utf8lower_case_table_names=1sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONcollation-server=utf8_unicode_ciskip-character-set-client-handshakeskip-name-resolvepid-file        = /var/run/mysqld/mysqld.pidsocket          = /var/run/mysqld/mysqld.sockdatadir         = /var/lib/mysqlsecure-file-priv= NULL# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0# 主从同步server-id = 2log-bin = mysql-binsync_binlog = 1binlog_checksum = nonebinlog_format = mixedslave-skip-errors = allevent_scheduler = 1max_allowed_packet = 64Mread-only=1# Custom config should go here!includedir /etc/mysql/conf.d/---
# headless service 
apiVersion: v1
kind: Service
metadata:name: mysql-slave-svcnamespace: mysqllabels:app: mysql-slave-svc
spec:clusterIP: Noneports:- name: slave-portport: 3306selector:app: mysql-slave---
# NodePort service 
apiVersion: v1
kind: Service
metadata:name: mysql-slave-nodeportnamespace: mysqllabels:app: mysql-slave-nodeport
spec:clusterIP: ports:- name: slave-portport: 3306nodePort: 31307targetPort: 3306selector:app: mysql-slavetype: NodePorttarget-port:externalTrafficPolicy: Cluster ---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql-slavenamespace: mysql
spec:serviceName: "mysql-slave-svc"replicas: 1selector: matchLabels: app: mysql-slavetemplate:metadata:labels:app: mysql-slavespec:containers:- name: mysql-slaveimage: mysql:8.0.20ports:- containerPort: 3306name: slave-portenv:- name: MYSQL_ROOT_PASSWORDvalue: "root"- name: TZvalue: "Asia/Shanghai"volumeMounts:                           - name: mycnfmountPath: /etc/mysql/my.cnfsubPath: my.cnf- name: mysql-slave-datamountPath: /var/lib/mysql volumes:- name: mycnfconfigMap:                                name: mysql-slave-configvolumeClaimTemplates:- metadata:name: mysql-slave-dataspec:accessModes: ["ReadWriteOnce"]storageClassName: mysql-local-storageresources:requests:storage: 5Gi
kubectl apply -f mysql-slave.yml

查看 pod :

kubectl get pods -n mysql

在这里插入图片描述

二、主从配置

主节点配置

可以在外面使用 MySQL 客户端连接 mysql-master ,注意换成你的 k8s nodel ip :

mysql -h 192.168.40.12 -P 31306  -u root -proot

在这里插入图片描述

查看当前 master 状态:

show master status;

在这里插入图片描述

注意这里查询出来的 FilePosition 下面主从复制时会用到。

为从节点创建一个同步用户:

CREATE USER 'replica'@'%' IDENTIFIED WITH mysql_native_password BY 'replica123';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;

在这里插入图片描述

从节点配置

在外面使用 MySQL 客户端连接 mysql-master ,注意换成你的 k8s nodel ip :

mysql -h 192.168.40.12 -P 31307  -u root -proot

在这里插入图片描述

同步指向主节点:

CHANGE MASTER TO MASTER_HOST='mysql-master-svc',MASTER_USER='replica',MASTER_PASSWORD='replica123',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=152,MASTER_PORT=3306;

注意这里的 MASTER_HOST 指向的是主节点的 Service
在这里插入图片描述

启动同步进程:

start slave;

在这里插入图片描述

查看同步状态:

show slave status\G

在这里插入图片描述
看到 Slave_IO_RunningSlave_SQL_Running 都为 Yes 则表示启动成功。

三、主从测试

首先在主节点创建数据库 testdb:

create database testdb;

在这里插入图片描述

然后在从节点查看数据库:

show databases;

在这里插入图片描述
可以正常查到主节点创建的数据库。

然后在主节点创建测试表:

use testdb;create table `test` (`id` int not null auto_increment,`name` varchar(255) default null,primary key (`id`)
) engine=InnoDB default charset=utf8mb4 collate=utf8mb4_0900_ai_ci;

在这里插入图片描述

接着在从节点查看表:

use testdb;show tables;

在这里插入图片描述
可以正常看到创建的表。

然后在主节点写入一条测试数据:

insert into test(name) values('小明');

在这里插入图片描述
然后到从节点查看表数据:

select * from test;

在这里插入图片描述
可以正常查到写入的数据。

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

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

相关文章

老阳闲聊|怎么在Temu电商平台上赚钱?

随着互联网技术的飞速发展,电商平台如雨后春笋般涌现,其中Temu电商平台以其独特的商业模式和广阔的市场前景,吸引了众多创业者和商家的目光。那么,如何在Temu电商平台上赚钱呢?本文将为您详细解析。 首先,了解Temu电商…

(2022级)成都工业学院数据库原理及应用实验七: 数据库安全

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求,请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 1、创建数据库hospital,在hospital数据库中创建科室表De…

【C++】日期类Date(详解)

🔥个人主页:Forcible Bug Maker 🔥专栏:C 目录 前言 日期类 日期类实现地图 获取某年某月的天数:GetMonthDay 检查日期合法,构造函数,拷贝构造函数,赋值运算符重载及析构函数…

21.组件组成

组件组成 组件最大的优势就是可复用性 当使用构建步骤时&#xff0c;我们一般会将 Vue 组件定义在一个单独的 .vue 文件中&#xff0c;这被叫做单文件组件(简称 SFC) 组件组成结构 <template><div>承载标签</div> </template> <script> expor…

【Java并发知识总结 | 第七篇】Java并发相关概念总结(程序/进程/线程、并行/并发、同步/异步、死锁/避免、线程安全/三大特性)

文章目录 7.并发相关概念总结&#xff08;程序/进程/线程、并行/并发、同步/异步、死锁/避免、线程安全/三大特性&#xff09;7.1程序、进程与线程7.2并行和并发7.3同步和异步7.4什么是死锁&#xff1f;如何避免&#xff1f;7.5何为线程安全&#xff1f;以及三大特性 7.并发相关…

SQL 语言数据操纵语言 DML

一、目的 SQL 语言的数据操纵功能通过 DML(数据维护语言)实现。DML 包括数据查 询和数据更新两种数据操纵语句。其中&#xff0c;数据查询指对数据库中的数据查询、统 计、分组、排序等操作&#xff1b;数据更新指数据的插入、更新和删除等数据维护操 作。 本次实验了解 D…

2023年图灵奖颁给普林斯顿数学教授 Avi Wigderson

2023年图灵奖揭晓&#xff0c;你怎么看&#xff1f; 什么是图灵奖 图灵奖&#xff08;Turing Award&#xff09;&#xff0c;全称A.M.图灵奖&#xff08;ACM A.M Turing Award&#xff09;&#xff0c;是由美国计算机协会&#xff08;ACM&#xff09;于1966年设立的计算机奖项…

谷歌Gemini 1.5 Pro国内怎么用?国内镜像来了

长期以来&#xff0c;许多人向我咨询是否存在一个稳定而高效的全球AI大模型测试平台&#xff0c;这个平台需要不仅真实可靠&#xff0c;而且能够提供稳定和快速的服务&#xff0c;不会频繁出现故障或响应缓慢的问题。然而&#xff0c;当我发现了AskManyAI时&#xff0c;我被其所…

2024年适用于 Android 的最佳免费数据恢复应用程序

无论是系统崩溃、软件升级、病毒攻击还是任何其他故障&#xff0c;这些软件问题都可能导致手机上的数据丢失。可以使用免费的数据恢复应用程序修复数据故障并检索丢失或删除的文件。 数据恢复应用程序旨在从另一个存储设备中检索丢失或无法访问的数据。这些工具扫描 UFS 并尝试…

C语言趣味代码(二)

1.珠玑妙算 1.1 介绍 《珠玑妙算》(Mastermind)是英国Invicta公司于1973年开始销售的一款益智游戏&#xff0c;据说迄今为止已经在全世界销售了5000万套。《珠玑妙算》于1974年获奖后&#xff0c;在1975年传入美国&#xff0c;1976年leslieH.Autl博士甚至还出版了一本名为The…

[阅读笔记21][RA-CM3]Retrieval-Augmented Multimodal Language Modeling

这篇论文是meta联合斯坦福在23年4月发表的论文&#xff0c;提出了一个使用外部知识检索增强的多模态模型。 这篇模型提出的RA-CM3模型是第一个能够检索并生成图像文本的多模态模型&#xff0c;在图像文本生成任务上优于现有的多模态模型&#xff0c;同时使用更少的训练量。 RA-…

SL7220线性降压恒流3.6A 外围只需两个电阻 耐压40V汽车大灯IC

概述&#xff1a; SL7220 是一款双路线性降压LED恒流驱动器&#xff0c;外围只需两个电阻&#xff0c;输出电流10MA-3600MA。 SL7220 内置过热保护功能&#xff0c;内置输入过压保护功能。 SL7220 静态电流典型值为120uA。 特点 ●输入电压范围&#xff1a;2.5V-40V ●电…