当前位置: 首页 > 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.lryc.cn/news/617799.html

相关文章:

  • 用AListLite让安卓手机成为NAS实现文件共享
  • 基于开源模型构建医疗疾病大模型:从理论到实践
  • 2025牛客多校第八场 根号-2进制 个人题解
  • USB 基本描述符
  • TRL - Transformer Reinforcement Learning SFTTrainer 和 SFTConfig
  • AI(2)-神经网络(激活函数)
  • 当生产环境卡成 PPT:Spring Boot 线程 Dump 捉妖指南 - 第544篇
  • 【09-神经网络介绍2】
  • 数据结构-排序(2)
  • 【排序算法】⑦归并排序
  • 用Python从零开始实现神经网络
  • 【08-神经网络介绍】
  • STM32 HAL库 HAL_TIM_OC_Start函数解读
  • maven项目打包成sdk后在别的项目使用
  • 深度解析三大HTTP客户端(Fetch API、Axios 和 Alova)——优劣与选择策略
  • 【03】厦门立林科技——立林科技 嵌入式 校招笔试,题目记录及解析
  • REDIS 各种数据结构有什么作用?都能干什么?
  • 写一篇Ping32和IP-Guard的对比,重点突出Ping32
  • 使用行为树控制机器人(一) —— 节点
  • 芯片学习 8 :IP集成、cluster、lint
  • 大语言模型(LLM)核心概念与应用技术全解析:从Prompt设计到向量检索
  • AI入门学习--如何写好prompt?
  • MySQL 数据操作全流程:创建、读取、更新与删除实战
  • 高精度蓝牙定位:技术、应用与未来发展
  • 【Docker实战进阶】Docker 实战命令大全
  • 从零构建企业级K8S:高可用集群部署指南
  • LeetCode算法日记 - Day 8: 串联所有单词的子串、最小覆盖子串
  • kubeadm搭建生产环境的双master节点k8s高可用集群
  • Android视频编辑方案测评:轻量化剪辑工具的性能表现
  • LAZADA跨境电商自养号测评环境搭建:安全与合规的底层逻辑解析