墨斗鱼业务MYSQL架构-从无到有

项目描述

采用MYSQL 复制的方式 作为项目的数据库底层架构 写操作在MASTER 读在SLAVE 上

主库采用

MYSQL5.6版本

从库采用

MYSQL5.7版本 #为了测试MYSQL5.7的版本和旧版本的兼容性

INNODB存储引擎 每张表有自增id做主键,RR隔离级别

  1. 配置环境描述

1.1 binlog 格式的选择

常用binlog格式 有 STATEMENT,ROW,MIXED

采用ROW格式作为binlog日志格式

ROW格式优点 特殊函数能有效复制 安全 表有自增id做主键 复制速度会更快

如果选择SRB和MIX复制 可能特殊的函数不能有效复制例如 uuid now 等

1.2从开启了 read_onle和super_read_onle 避免从写入

read_onle=on && super_read_onle=on #这样任何账户都不能写入

1.3采用了GTID复制模式

GTID简介

每一个事务都有一个唯一的编号

uuid:n uuid是MYSQL唯一标识符 n是事务id号

一个事务对应一个唯一的ID,一个GTID在一个服务器只执行一次

gtid serverid:事务id 每个事务id的编号是唯一的 不能重复执行

MYSQL5.6.2支持 MYSQL5.6.10完善

GTID限制

不支持非事务引擎(从库报错 stop slave; start slave; 忽略)

不支持create table ....select语句复制(主库直接报错)

不许一个sql同时更新一个事务引擎和非事务引擎的表

在一个复制组中 必须要求统一开启GTID或者关闭GTID

开启GTID需要重启(5.7不需要)

开启GTID后,就不在使用原来的传统复制方式

对于create tmporary table 和drop temporary table 语句不支持

不支持 sql_slave_skip_counter

个人理解:

GTID 有利于主从维护 主从复制 主从一致性的校验 主从切换等

双一 保证数据的一致性 MASTER innodb_flush_log_at_trx_commit=1 sync_binlog=1

当时的压力测试满足了当前业务 主从都开启了双一

配置了 域名指定了master 和slave的主机

这样应用程序就不用去修改了 用Ansible 自动同步host文件

缺点:

1.主从故障手动切换 监控要做好 要第一时间去做切换

2.数据一致性难以保证(1)

中期环境改进

keepalived-1.2.13

MYSQL5.7 MASTER

MYSQL5.7 MASTER

2.配置描述

利用keepalived做双主结构 MYSQL也做双主 互为主从关系

auto_increment_increment=2#自增

auto_increment_offset=1/2#起始步长

keepalived:MYSQL 不是在同一个交换机上  就在检测脚本里面写ping 网关 如果不通返回非0,为了防止脑裂

在MASTER和SLAVE 开启 master_info_repository=table relay_log_info_repository=tblae

主从记录 写到table里面 不是写入到系统的文件里面

开启了relay_log_recovery 为了防止 relay在执行过程中 SLAVE突然关闭 或者relay log 损坏

缺点:

1.会造成更新丢失问题 这时候就很难判断以主库数据为准还是从库数据为准

二台机器同时 update 不会造成堵塞 也不会造成锁 根据主键更新 都会写入binlog 然后传递对方的relay log 并应用 所以造成更新丢失。因为 主从复制 根据主键更新  不会校队其他数据 。如果没有主键 根据二级索引进行更新 利用第一个最长的索引匹配主键, 如果都没有 全表扫描更新。

双主结构 PXC结构 MGR结构 都会造成这个问题 解决办法 单台机器进行update。insert或者delete 可以负载分发

2.如果MASTER传输 binlog的时候 没有安全的传输到SLAVE  也会造成数据不一致

3.后期环境改进

proxysql-1.3.4 读写分离

keepalived-1.2.13

MYSQL5.7 MASTER

MYSQL5.7 MASTER

MYSQL5.7 SLAVE.....多个

配置描述

1.解决数据一致性难以保证(1) 的问题

双1解决了 客户提交后 数据库成功执行后 写到redo log和binlog 也就是双阶段提交

采用5.7增强半同步 解决了 MASTER的binlog传输到SLAVE上 才会提交 返回客户端

双table 避免文件没有及时刷新 MASTER的file和pos信息 造成日志点的丢失

开启了relay_log_recovery 为了防止 relay在执行过程中 SLAVE突然关闭 或者relay log 损坏,如果发现没执行完毕 异常关闭 就重新执行relay log

row格式 gtid 复制格式

2.用proxysql 做读写分离 MYSQL5.7 MASTER 进行写的操作 MASTER2 和slave做读操作

3.MASTER1和MASTER 双主 做了增强半同步复制

4.采用了MYSQL5.7的并行复制 是组提交级别 非5.6 库提交级别 真正的并行复制

缺点

1.正在解决 如果节点 挂了后修复 重新添加到proxysql信息

打算用python实现自动化添加节点 更改节点信息

时间: 2024-08-27 04:21:58

墨斗鱼业务MYSQL架构-从无到有的相关文章

打通MySQL架构和业务的任督二脉

目前,在很多OLTP场景中,MySQL数据库都有着广泛的应用,也有很多不同的使用方式.从数据库的业务需求.架构设计.运营维护.再到扩容迁移,不同的MySQL架构有不同的特点,适应一定的业务场景,或者解决一定的业务问题. DBA作为数据库架构的设计.实施.维护人员,不仅要对各种MySQL架构非常熟悉,还要了解业务,对于不同的业务有一定的划分和认识,并根据业务特点和架构特点,合理选择和使用MySQL,满足业务需求. 本文从MySQL常见架构.业务环境分类.业务与架构结合使用原则三个方面对MySQL数

mysql架构演变

假设一个网站(discuz)从最开始访问量很小做到日pv千万,我们来推测一下它的mysql服务器架构演变过程. 第一阶段网站访问量日pv量级在1w以下.单台机器跑web和db,不需要做架构层调优(比如,不需要增加memcached缓存).此时,数据往往都是每日冷备份的,但有时候如果考虑数据安全性,会搭建一个mysql主从. 第二阶段网站访问量日pv达到几万.此时单台机器已经有点负载,需要我们把web和db分开,需要搭建memcached服务作为缓存.也就是说,在这个阶段,我们还可以使用单台机器跑

数据库学习之--Oracle 架构与MySQL架构对比

数据库学习之--Oracle 架构与MySQL架构对比 一.Oracle .MySQL应用对比 如果要说明三者的区别,首先就要从历史入手. Oracle:中文译作甲骨文,这是一家传奇的公司,有一个传奇的大老板Larry Ellision. Ellision 32岁还一事无成,读了三个大学,没得到一个学位文凭,换了十几家公司,老婆也离他而去.开始创业时只有1200美元,却使得Oracle公司连续12年销售额每年翻一番. Oracle成立于1977年,早期的理论基础,反而来自于一篇IBM的论文<A

MySQL架构由小变大的演变过程

假设一个网站(discuz)从最开始访问量很小做到日pv千万,我们来推测一下它的mysql服务器架构演变过程. 第一阶段    网站访问量日pv量级在1w以下.单台机器跑web和db,不需要做架构层调优(比如,不需要增加memcached缓存).此时,数据往往都是每日冷备份的,但有时候如果考虑数据安全性,会搭建一个mysql主从. 第二阶段    网站访问量日pv达到几万.此时单台机器已经有点负载,需要我们把web和db分开,需要搭建memcached服务作为缓存.也就是说,在这个阶段,我们还可

构建一个较为通用的业务技术架构

1.通用架构概述 创业之初,我们往往会为了快速迭代出产品,而选择最简单的技术架构,比如LAMP架构,SSH三层架构.这些架构可以适应初期业务的快速发展,但是,随着业务变得越来越复杂,我们会发现这些架构越来越难支撑业务的发展,出现在一个类中写好几千行代码,一个方法中到处都是if else语句,如果中间遇到主程序猿离职,后面介入的程序猿几乎无法理解这些代码,到最后,产品越来越难迭代,只能推翻重做.如果我们在创业初始就以一种适应性较强的架构去写代码,后面就会少走很多弯路.下面的文章是我自己总结出来的一

MySQL 架构组成--物理文件组成 for mysql6.7.13

http://hongge.blog.51cto.com/ 一.MySQL Server 简介 什么是MySQL MySQL 是由MySQL AB 公司(目前已经被SUN 公司收归麾下)自主研发的,目前IT 行业 最流行的开放源代码的数据库管理系统之一,它同时也是一个支持多线程高并发多用户的关 系型数据库管理系统. MySQL 数据库以其简单高效可靠的特点,在最近短短几年的时间就从一个名不见经传的 数据库系统,变成一个在IT 行业几乎是无人不知的开源数据库管理系统.从 小型的web 网站,至大型

如何构建一个较为通用的业务技术架构

1.通用架构概述 创业之初,我们往往会为了快速迭代出产品,而选择最简单的技术架构,比如LAMP架构,SSH三层架构.这些架构可以适应初期业务的快速发展,但是,随着业务变得越来越复杂,我们会发现这些架构越来越难支撑业务的发展,出现在一个类中写好几千行代码,一个方法中到处都是if else语句,如果中间遇到主程序猿离职,后面介入的程序猿几乎无法理解这些代码,到最后,产品越来越难迭代,只能推翻重做.如果我们在创业初始就以一种适应性较强的架构去写代码,后面就会少走很多弯路.下面的文章是我自己总结出来的一

在阿里架构师眼中构建一个较为通用的业务技术架构就是如此简单

1.通用架构概述 创业之初,我们往往会为了快速迭代出产品,而选择最简单的技术架构,比如LAMP架构,SSH三层架构.这些架构可以适应初期业务的快速发展,但是,随着业务变得越来越复杂,我们会发现这些架构越来越难支撑业务的发展,出现在一个类中写好几千行代码,一个方法中到处都是if else语句,如果中间遇到主程序猿离职,后面介入的程序猿几乎无法理解这些代码,到最后,产品越来越难迭代,只能推翻重做.如果我们在创业初始就以一种适应性较强的架构去写代码,后面就会少走很多弯路.下面的文章是我自己总结出来的一

在架构师眼中构建一个较为通用的业务技术架构就是如此简单

1.通用架构概述 创业之初,我们往往会为了快速迭代出产品,而选择最简单的技术架构,比如LAMP架构,SSH三层架构.这些架构可以适应初期业务的快速发展,但是,随着业务变得越来越复杂,我们会发现这些架构越来越难支撑业务的发展,出现在一个类中写好几千行代码,一个方法中到处都是if else语句,如果中间遇到主程序猿离职,后面介入的程序猿几乎无法理解这些代码,到最后,产品越来越难迭代,只能推翻重做.如果我们在创业初始就以一种适应性较强的架构去写代码,后面就会少走很多弯路.下面的文章是我自己总结出来的一