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

k8s 部署mysql主从集群

docker官方hub:https://hub.docker.com/_/mysql

下载image

docker pull docker.m.daocloud.io/mysql:8.4.6

从镜像地址下载,如果从docker下载,即使配置了代理,也会下载中断

创建k8s部署文件

helm create mysql

具体文件下载:https://download.csdn.net/download/xgw1010/91645185

镜像地址改为上一节的地址

mysql配置项说明

基本中上是将原来安装在主机的mysql配置复制保存到了k8s的configmap中,其中注意:

  1. 不要配置“basedir”,会导致找不到库和message配置的错误,但可以启动
  2. “[client]”段不要配置”default-character-set“,会导致mysqlsh无法连接数据库,报无法识别配置项。
  3. 增加“gtid_mode=on”和“enforce_gtid_consistency=ON”。gtid是全局事务标识符。
  4. 增加“report-host = mysql-{{ $index }}.mysql-service", 表示添加的集群中时使用的主机名,否则会连接不上。

部署到k8s

在安装了helm的k8s的master节点上执行

helm upgrade --install mysql ./mysql -n mysql-dev -f ./mysql/values.yaml

配置主从集群

进入到mysql pod内,运行:

# 连接数据库, 33060端口表示使用X protocol
>mysqlsh --mysqlx -u root  -h mysql-0.mysql-service -P 33060# 切换到js mode
>\js# 创建副本集
> var rs = dba.createReplicaSet("dev")
A new replicaset with instance 'mysql-1:3306' will be created.* Checking MySQL instance at mysql-1:3306This instance reports its own address as mysql-1:3306
mysql-1:3306: Instance configuration is suitable.* Checking connectivity and SSL configuration...
* Updating metadata...ReplicaSet object successfully created for mysql-1:3306.
Use rs.addInstance() to add more asynchronously replicated instances to this replicaset and rs.status() to check its status.# 查看副本集状态MySQL  localhost:33060+ ssl  JS > rs.status()
{"replicaSet": {"name": "dev", "primary": "mysql-1:3306", "status": "AVAILABLE", "statusText": "All instances available.", "topology": {"mysql-1:3306": {"address": "mysql-1:3306", "instanceRole": "PRIMARY", "mode": "R/W", "status": "ONLINE"}}, "type": "ASYNC"}
}# 第二次进入时,需要先获取rs实例
> var rs=dba.getReplicaSet()
# 添加从服务器
> rs.addInstance('root@mysql-1.mysql-service:3306')#选择“clone”# 结果
MySQL  mysql-0.mysql-service:33060+ ssl  JS > rs.status()
{"replicaSet": {"name": "dev", "primary": "mysql-0.mysql-service:3306", "status": "AVAILABLE", "statusText": "All instances available.", "topology": {"mysql-0.mysql-service:3306": {"address": "mysql-0.mysql-service:3306", "instanceRole": "PRIMARY", "mode": "R/W", "status": "ONLINE"}, "mysql-1.mysql-service:3306": {"address": "mysql-1.mysql-service:3306", "instanceRole": "SECONDARY", "mode": "R/O", "replication": {"applierStatus": "APPLIED_ALL", "applierThreadState": "Waiting for an event from Coordinator", "applierWorkerThreads": 4, "receiverStatus": "ON", "receiverThreadState": "Waiting for source to send event", "replicationLag": "applier_queue_applied", "replicationSsl": "TLS_AES_128_GCM_SHA256 TLSv1.3", "replicationSslMode": "REQUIRED"}, "status": "ONLINE"}}, "type": "ASYNC"}
}

常用命令

删除集群

rs.dissolve()

测试网络连通性

mysqladmin ping -uroot -p123456 -hmysql-0.mysql-service

查询主从同步状态

在从机运行

SHOW REPLICA STATUS;

http://www.dtcms.com/a/325289.html

相关文章:

  • kafka 中的Broker 是什么?它在集群中起什么作用?
  • 类银河恶魔城 P20-1 Slime enemy
  • Flutter学习笔记(六)---状态管理、事件、路由、动画
  • 达梦自定义存储过程实现获取表完整的ddl语句
  • Python FastAPI + React + Nginx 阿里云WINDOWS ECS部署实战:从标准流程到踩坑解决全记录
  • 爬虫与数据分析结和
  • NEON性能优化总结
  • Spring MVC 注解参数接收详解:@RequestBody、@PathVariable 等区别与使用场景
  • EXISTS 替代 IN 的性能优化技巧
  • 大数据量下分页查询性能优化实践(SpringBoot+MyBatis-Plus)
  • 基于Spring Data Elasticsearch的分布式全文检索与集群性能优化实践指南
  • Rust:anyhow 高效错误处理库核心用法详解
  • Rust 实战五 | 配置 Tauri 应用图标及解决 exe 被识别为威胁的问题
  • 新人该如何将不同的HTML、CSS、Javascript等文件转化为Vue3文件架构
  • 零基础学习jQuery第三天
  • 探秘华为:松山湖的科技与浪漫之旅
  • SQL 基础查询语句详解
  • DDIA第五章:分布式数据复制中的一致性与冲突处理
  • 基于STM32设计的矿山环境监测系统(NBIOT)_262
  • (25.08)Ubuntu20.04复现KISS-ICP
  • 【TensorRT踩坑记录】安装与使用
  • 软考 系统架构设计师系列知识点之杂项集萃(121)
  • 数据变而界面僵:Vue/React/Angular渲染失效解析与修复指南
  • leetcode-hot-100 (图论)
  • 算法训练营DAY57 第十一章:图论part07
  • 基于Qt Property Browser的通用属性系统:Any类与向量/颜色属性的完美结合
  • CVE-2019-0708复刻
  • react+vite-plugin-react-router-generator自动化生成路由
  • OBOO鸥柏丨115寸商用屏/工业液晶显示器招标投标核心标底参数要求
  • 【JAVA】使用系统音频设置播放音频