由一次mycat+mysql水平拆分集群问题引发的思考

近段时间部署和测试了一个mycat+4 Percona+tokudb的水平拆分集群,前段应用是将一类奖状数据不断地写入到这个库中,只有insert操作,前几天运行状态还比较好。

从昨天开始,由于业务量突然增加了一些,磁盘IO负载变得很高,而且仔细分析之后,发现磁盘读的性能远远高于磁盘写的性能,这完全是有问题的。因为insert操作肯定主要是写操作,而且写都是顺序写,读操作应该不会太大。

经过对mycat和mysql多方面的查看,都难以解释的通,不太确定问题的方向和原因。后来与同事沟通,又回到了系统的起点:

先确认cpu,然后确认内存,结果发现内存中cache已经用满,开始用了大量的swap分区,由此为出发点,确认思路如下:

于是再次与同事沟通:

应该就是内存不足,才需要读取swap

top里看一下各个mysql实例占用的内存大小

就你发的这些图来看,是有查询操作。

insert操作因为要维护索引,应该会有跌宕读,但是否会以查询的形式体现我就不确认了

先要确认内存争用是mysql触发,还是其它进程

对于数据库服务器,swap最好不要使用

有些极端的场景,会把swap设置成0,就是为了避免用磁盘上的文件交换

这个会对性能造成很大影响的

你现在可以需要先调小innodb的内存参数,然后将会话相关的参数也都逐个往小了调

先把内存争用降下来

于是根据整个系统的物理内存为48g,各个实例的内存最多为50%,现在四个实例,每个实例分配6g内存,由于tokudb采用的是 非directio的模式 “tokudb_directio = 0”,所以讲各个实例的内存设置为4g,让更多的内存用于系统的cache,使系统读操作都使用系统cache,不使用swap分区,保证内存命中率,减少磁盘IO操作。

这样修改了之后,系统的资源变为:

通过iostat看,写请求也大于读请求了,insert操作的状态正常了:

通过这个问题的处理,我有几点感悟:

1. 对于架构设计和性能方面的问题,还是应该回到最初:

系统资源监控:

cpu

内存

磁盘

网络

总体

对应的stat命令:

vmstat

iostat
   iotop

mpstat

ifstat

dstat

深刻理解这些基本的系统资源,原理,查看方法,才能认识清楚性能和架构问题,并找到问题解决的突破口;

2. 对于水平拆分来说:

聊天记录:

从这个问题的处理也感觉到,硬件资源不足,只有一个机器,只从软件mycat+mysql这种方式进行水平拆分,资源消耗和争用的问题还是比较大的

水平拆分不能只从mycat,mysql软件上水平拆,硬件系统资源也要充分,或者够用才行

不然所有的事务都在一台物理机上,资源争用和问题,还是会很多的;

尤其是面对业务负载压力和变化的时候,即使mycat分片很合理,cpu,内存,磁盘IO这些资源不足,整体性能还是会有很多问题的

光mycat 逻辑上分片还不行

要合理利用硬件 特别是io 资源

防止硬件热点

一个磁盘 分太多的分片是没用的 io 竞争

合理利用 网络io 磁盘 io 内存 cpu

比如rain0 根rain10 几块 盘 每个分片在哪个盘上 这才是真正dba 需要规划的

dba 真正的是规划好这些底层的资源优化

3. 真正好的架构设计,不仅仅是软件的设计,而是整个软件,硬件,业务相互结合和配合的设计。

时间: 2024-11-03 22:19:42

由一次mycat+mysql水平拆分集群问题引发的思考的相关文章

# IT明星不是梦 #MySQL高可用集群之基于MyCat部署HaProxy实现高可用

基于MyCat部署HaProxy实现高可用 在实际项目中, Mycat 服务也需要考虑高可用性,如果 Mycat 所在服务器出现宕机,或 Mycat 服务故障,需要有备机提供服务,需要考虑 Mycat 集群. 一.高可用方案 可以使用 HAProxy+Keepalived配合两台MyCat搭起MyCat集群,实现高可用性. HAProxy实现了MyCat多节点的集群高可用和负载均衡,而 HAProxy自身的高可用则可以通过Keepalived来实现. 架构图: 于上一个博客的环境部署(MySQL

MySQL企业常用集群图解

mysql集群架构图片 1.mysql企业常用集群架构 在中小型互联网的企业中.mysql的集群一般就是上图的架构.WEB节点读取数据库的时候读取dbproxy服务器.dbproxy服务器通过对SQL语句的判断来进行数据库的读写分离.读请求负载到从库(也可以把主库加上),写请求写主库. 这里的dbproxy是数据库集群的唯一出口所以也需要做高可用. drproxy是数据库读写分离的常用软件,amoeba.mycat.cobar也很常用.这类软件不仅带有读写分离功能,还可以实现负载均衡以及后端节点

mysql高可用集群方案

这里有一篇关于Mysql高可用方案的干货文章:[干货分享] 一文了解数据库高可用容灾方案的设计与实现 网友们公司中的使用方案讨论:想问各位大大 MySQL 是怎么做高可用的? 一.Mysql高可用解决方案 方案一:共享存储 一般共享存储采用比较多的是 SAN/NAS 方案. 方案二:操作系统实时数据块复制 这个方案的典型场景是 DRBD,DRBD架构(MySQL+DRBD+Heartbeat) 方案三:主从复制架构 主从复制(一主多从) MMM架构(双主多从) MHA架构(多主多从) 方案四:数

转:讲讲Mysql的三高集群架构,所谓三高,就是“高可用”、“高负载”、“高性能”的架构方案。

from:https://www.toutiao.com/i6717521873397088780/?timestamp=1569389190&app=news_article&group_id=6717521873397088780&req_id=2019092513263001002607901724F149F2 目录 前言 主从架构 MHA架构 PXC方案 MHA与PXC 最终推荐方案 总结 前言 小伙伴们在项目开发中,无法避免的要跟数据库打交道,一般在互联网公司所采用的数据

通过MMM构建MYSQL高可用集群系统

本文为南非蚂蚁的书籍<循序渐进linux-第二版>-8.4的读笔记 MMM集群套件(MYSQL主主复制管理器) MMM套件主要的功能是通过下面三个脚本实现的 1)mmm_mond 这是一个监控进程,运行在管理节点上,主要负责都所有数据库的监控工作,同时决定和处理所有节点的角色切换 2)mmm_agentd 这是一个代理进程,运行在每个MYSQL服务器上,主要完成监控的测试工作以及执行简单的远端服务设置 3)mmm_control 简单的管理脚本,用来查看和管理集群运行状态,同事管理mmm_mo

MYSQL-MMM主从同步部署mysql高用集群

使用mysql-mmm和mysql主从同步部署mysql高用集群 公共配置: 关闭iptables 禁用selinux 配置好yum源 固定ip 彼此间能通信 都运行数据库服务 都只有默认初始的四个库 1配置主主结构 2配置一主多从结构 3安装mysql-mmm软件 4配置mysql-mmm实现mysql高可用集群

corosync+pacemaker and drbd实现mysql高可用集群

DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的,另外的节点是不可读的,连挂载都不可能,只有一个节点是主的,其它节 点都是从的.当做为主主架构时,需要达到几个条件,1.在高可用集群中启用DRBD;  2. 启用分布式文件锁功能,即需要把磁盘格式化为集群文件系统(如GFS2,OCFS2等):3. 把DRBD做成资源. 数据的存储过程: 当某个进程存

【MySQL】容器集群支持数据库实践

京东容器数据库系统,管理1800台物理计算节点,生产1W+ 多MySQL Docker容器实例.架构简单可靠,Docker容器计算平台与MySQL集群管理平台解耦处理.为描述方便,京东容器化数据库系统命名为CDS,底层京东Docker容器计算平台命名为JDOS. 本文重点介绍JDOS如何支持CDS.CDS是更大的话题,后续数据库团队会分享相关实践. 介绍 CDS依赖京东坚实的JDOS技术,生产运行1W+个MySQL容器实例.CDS借助JDOS技术优势获得主要3个方面的技术收益: CDS借助Doc

实战:ansible自动化部署nginx+keepalived+mysql负载均衡集群

一.目的 使用ansible自动化部署nginx+keepalived+mysql负载均衡集群. 二.拓扑规划 三.详细步骤 1.环境的搭建 (1).安装ansible,同时配置私钥免密码进行通信 [[email protected] ~]# ssh-keygen  -t rsa #-t表示使用的加密类型,其中rsa1表示version1版本,rsa.dsa.ecdsa的加密对于的是version2版本 Generating public/private rsa key pair. #这里询问你