mysql读写分离

新兵训练营系列课程——海量数据存储基础

Deadly 提交于 2019-11-30 10:40:15
新兵训练营系列课程——海量数据存储基础 2015年8月12日 09:24 阅读 16831 微博平台研发作为微博的底层数据及业务支撑部门,已经经历了 5 年的发展历程。伴随着从数据及业务暴发式增长,我们在海量数据存储方面遭遇了诸多挑战,与此同时也伴随着丰富经验的积累。 本次新兵训练营,受众在于应届毕业生,目的在于让新同学系统化并且有针对性的了解平台的核心技术及核心业务,以使新同学在新兵训练营结束后,能够对平台的底层架构与业务有一定的了解。 本文主要面向新同学介绍平台的核心技术之一——海量数据存储,主要介绍在海量数据存储在大规模分布式系统下的架构变迁与设计。 课程大纲: 1. 课程目标 2. 存储服务概述 3. MySQL 与 MySQL 分布式架构设计 4. Redis 与 Redis 分布式架构设计 5. 思考与讨论 一、课程目标 1. 了解存储服务概况,以及RDBMS及NoSQL的差异 2. 理解MySQL、Redis、HBase基本实现机制、特性、适用场景 3. 理解几种存储产品的大规模分布式服务方案 4. 学会使用平台的MySQL、 Redis client组件 5. 理解对于MySQL、Redis分布式系统设计想要注意的问题 6. 了解平台几种典型案例 7. 理解几种存储产品在平台的定制修改与名词术语 二、存储服务概述 1. 关系型数据库是基于 实体关系模型(Entity

【10】MySQL:MyCAT 分布式架构

人盡茶涼 提交于 2019-11-30 10:20:15
写在前面的话 在学习的索引的时候,有提到,当数据表数据达到 800W 的时候,索引的性能就开始逐步下降。对于一个公司而言,主要业务数据表达到 1000W 都很容易。同时这张表一般都是业务常用的表,操作还比较频繁。所以为了提升用户体验,需要采用另外的方式对数据库进行优化,那就是分库分表。而 MyCAT 就是能够帮助我们管理分库分表的这样一个中间件。 MyCAT 环境基础架构准备 架构图 1: 架构图 2: 【1】搭建基础环境: 1. 在 db01 :192.168.100.111 上面安装数据库多实例: # 创建基础目录 mkdir -p /data/{data,logs,backup,conf}/mysql-33{07,08,09,10} mkdir -p /data/logs/mysql-33{07,08,09,10}/{bin-log,slow-log,error-log,relay-log} mkdir -p /data/packages/mysql mkdir -p /data/services # 添加用户 useradd -s /sbin/nologin mysql # 修改目录权限 chown -R mysql.mysql /data/logs/mysql-33* chown -R mysql.mysql /data/data/mysql-33* # 清理默认配置文件

proxysql 系列 ~ 读写分离核心功能

[亡魂溺海] 提交于 2019-11-30 10:07:04
一 配置读写分离表 1 mysql_user 列表配置 1 username && password 账号密码 2 default_hostgroup 写hostgroup_id 3 transaction_persistent 保证了同一个事务中所有的语句都会路由到同一组示例 2 mysql_servers DB列表配置 该表的主键是hostgroup_id+hostname+port 1 hostgroup_id 1 不同功能不同hostgroup_id(写hostgroup_id,读hostgroup_id) 2 status 集群健康情况 ONLINE:当前后端实例状态正常。 SHUNNED:临时被剔除,可能因为后端too many connection error,或者超过了max_replication_lag。 OFFLINE_SOFT:软离线状态,不再接受新的连接,但已建立的连接会等待活跃事务完成。 OFFLINE_HARD:硬离线状态,不再接受新的连接,已建立的连接或被强制中断,当后端实例宕机或网络不可达,会出现。 3 max_replication_lag 设置延迟判断 4 weight 权重比,默认为1,权重越大优先级越高 5 max_connections 最大连接数(不要大于mysql的max_connections) 3 mysql_query

数据库中间件详解 | 珍藏版

天涯浪子 提交于 2019-11-30 10:05:26
1 数据库拆分过程及挑战 互联网当下的数据库拆分过程基本遵循的顺序是:垂直拆分、读写分离、分库分表(水平拆分)。每个拆分过程都能解决业务上的一些问题,但同时也面临了一些挑战。 1.1 垂直拆分 对于一个刚上线的互联网项目来说,由于前期活跃用户数量并不多,并发量也相对较小,所以此时企业一般都会选择将所有数据存放在一个数据库 中进行访问操作。举例来说,对于一个电商系统,其用户模块和产品模块的表刚开始都是位于一个库中。 其中:user、user_account表属于用户模块,product_category、product表属于产品模块。 刚开始,可能公司的技术团队规模比较小,所有的数据都位于一个库中。随着公司业务的发展,技术团队人员也得到了扩张,划分为不同的技术小组,不同的小组负责不同的业务模块。例如A小组负责用户模块,B小组负责产品模块。此时数据库也迎来了第一次拆分:垂直拆分。 这里的垂直拆分,指的是将一个包含了很多表的数据库,根据表的功能的不同,拆分为多个小的数据库,每个库包含部分表。下图演示将上面提到的db_eshop库,拆分为db_user库和db_product库。 通常来说,垂直拆分,都是根据业务来对一个库中的表进行拆分的。关于垂直拆分,还有另一种说法,将一个包含了很多字段的大表拆分为多个小表,每个表包含部分字段,这种情况在实际开发中基本很少遇到。

MySQL—05—MySQL如何处理SQL语句;MySQL数据库存储引擎介绍;

孤街浪徒 提交于 2019-11-30 09:40:30
一、 MySQL 中的执行计划 1 MySQL 执行计划 在 MySQL 中可以通过 explain 关键字模拟优化器,执行 SQL 语句,从而知道 MySQL 是 如何处理 SQL 语句的。 2 MySQL 整个查询执行过程 • 客户端向 MySQL 服务器发送一条查询请求 • 服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段 • 服务器进行 SQL 解析、预处理、再由优化器生成对应的执行计划 • MySQL 根据执行计划,调用存储引擎的 API 来执行查询 • 将结果返回给客户端,同时缓存查询结果 3 启动执行计划 EXPLAIN SELECT 投影列 FROM 表名 WHERE 条件 4 EXPLAIN 列的解释 4.1ID 查询执行顺序: id 值相同时表示从上向下执行 id 值相同被视为一组 如果是子查询,id 值会递增,id 值越高,优先级越高 4.2select_type simple: 表示查询中不包含子查询或者 union primary: 当查询中包含任何复杂的子部分,最外层的查询被标记成 primary derived: 在 from 的列表中包含的子查询被标记成 derived subquery: 在 select 或 where 列表中包含了子查询,则子查询被标记成 subquery union: 两个 select

Sharding-JDBC 3.x 原理篇之基本介绍

徘徊边缘 提交于 2019-11-30 06:28:31
Sharding-JDBC 3.x 原理篇之基本介绍 简介 功能介绍 Sharding-JDBC Sharding-Proxy Sharding-Sidecar 混合架构 各大版本间的区别与变化 1.x 功能列表 2.x 功能清单 3.x 功能清单 规划线路图 相关文档及实例 简介 Sharding-JDBC是当当开源的数据库水平切分的中间件,其代表了客户端类的分库分表技术框架(这一点与MyCat不同,MyCat本质上是一种数据库代理)。Sharding-JDBC定位为轻量级数据库驱动,由客户端直连数据库,以jar包形式提供服务,未使用中间层,无需额外部署,无其他依赖,业务系统开发人员与数据库运维人员无需改变原有的开发与运维方式。因此Sharding-JDBC即为增强版的JDBC驱动,可以实现旧代码迁移零成本的目标。   目前社区较为活跃。目前已广泛应用于现各大互联网公司。通过社区得知,Sharding-JDBC的作者已去京东做全职的Sharding-JDBC开发,相信未来Sharding-JDBC社区的发展将会更好。 功能介绍 目前Sharding-JDBC共有3个主要模块,分别为Sharding-JDBC、Sharding-Proxy、Sharding-Sidecar Sharding-JDBC 定位为轻量级Java框架,在Java的JDBC层提供的额外服务。

Linux 配置 mycat 和 分库分表配置。

坚强是说给别人听的谎言 提交于 2019-11-30 05:17:48
Linux 如何配置mycat? 3.配置mycat 3.1.规定linux的用户名和全名不能叫mycat!!!否则mycat会不生效(原因是影响整个linux系统的环境变量导致mycat的配置环境变量没有生效) 3.2.vim /etc/sysconfig/network也不能叫mycat 3.3.mycat使用的是Java语言编写-->所以必须要在linux上配置jdk(要求jdk必须为64位,因为mycat是在64位的jdk8上进行编译的) 3.4.配置jdk 3.5.使用xftp把mycat的压缩包上传到linux服务器上 3.6.解压mycat压缩包 tar -zxvf xxxxx 3.7.配置mycat的环境变量 vim /etc/profile JAVA_HOME=/home/apps/jdkxxx MACAT_HOME=/home/apps/mycat PATH=$PATH:$JAVA_HOME/bin:$MACAT_HOME/bin source /etc/profile 3.8.启动mycat 进入mycat的bin目录 // ./mycat console // mycat start 在任意的位置直接使用 mycat console console | start | stop | restart | status | dump 启动mycat: mycat

mycat理解

北慕城南 提交于 2019-11-30 04:33:16
1、为什么叫mycat?   其实mycat在最早的初期版本只支持mysql一种数据库,换句话说, mycat就是mysql的增强版,在mysql中只是数据库,并没有读写分离和 分库分表,这些操作全部是由mycat进行实现。 注意:主从复制(数据同步)功能mycat没有,必须要使用mysql所提供的。 2、什么是mycat?   2.1 mycat是完全开源的,并且面向大型企业的大数据库集群   2.2 支持事务、ACID、可以替代mysql的嘉庆版数据库,目前已经支持了     很多数据库(关系型和非关系型数据库都包括) 3、什么是HDFS?   H:Hadoop   D:Distributed   F:File   S:System   Hadoop(大数据)分布式存储系统;大数据:数据量非常大,且以文件形式保存    HDFS只做数据的存储;   mycat:   H:High(Big Data)   D:Distributed   D:Data   S;System 4、mycat的两大核心   4.1 分库分表     将同一个系统(项目)的同一张表拆分到不同服务器进行存放   4.2 读写分离     将同一个系统(项目)的读操作和写操作分别在不同服务器上完成    来源: https://www.cnblogs.com/liuqijia/p/11560307.html

MySQL数据库优化技巧

青春壹個敷衍的年華 提交于 2019-11-30 00:35:51
一个成熟的数据库架构并不是一开始设计就具备高可用、高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善。这篇文章主要谈谈MySQL数据库在发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 阶段一:数据库表设计 项目立项后,开发部门根据产品部门需求开发项目。 开发工程师在开发项目初期会对表结构设计。对于数据库来说,表结构设计很重要,如果设计不当,会直接影响到用户访问网站速度,用户体验不好!这种情况具体影响因素有很多,例如慢查询(低效的查询语句)、没有适当建立索引、数据库堵塞(锁)等。当然,有测试部门的团队,会做产品测试,找Bug。 由于开发工程师重视点不同,初期不会考虑太多数据库设计是否合理,而是尽快完成功能实现和交付。等项目上线有一定访问量后,隐藏的问题就会暴露,这时再去修改就不是这么容易的事了! 阶段二:数据库部署 是时候运维工程师出场了,项目上线。 项目初期访问量一般是寥寥无几,此阶段Web+数据库单台部署足以应对在1000左右的QPS(每秒查询率)。考虑到单点故障,应做到高可用性,可采用MySQL主从复制+Keepalived实现双机热备。主流HA软件有:Keepalived(推荐)、Heartbeat。 阶段三:数据库性能优化 如果将MySQL部署到普通的X86服务器上,在不经过任何优化情况下,MySQL理论值正常可以处理1500左右QPS

【08】MySQL:MHA 高可用

笑着哭i 提交于 2019-11-29 22:03:00
写在前面的话 主从架构在一般情况下只能满足我们小公司业务并非一刻都不能中断服务。但是对于大型公司而言,对然数据丢失,数据库挂了,我们可以通过技术找回,修复。但是其中修复过程所消耗的时间是不被允许的。此时就需要引入高可用,以保证我们主库在宕机情况下有另外的数据库顶上去,以保证我们的服务 7 x 24 无间断。 数据库基本架构 在日常的小项目中,对于数据库的基本架构一般有以下选型: 1. 一主一从 / 一主多从 2. 多级主从 3. 双主 4. 循环复制 高级一点的 高性能 架构,也就是需要第三方服务帮助的架构: 1. 读写分离。常见的基于 MySQL Proxy 的有:Atlas / MySQL Router / ProxySQL / MaxScale 等 2. 分布式架构。常见的有:Cobar / TDDL / Mycat 等 最后就是 高可用 架构: 1. 单活 MMM,谷歌的 mysql-mmm。 2. 单活 MHA,日本人开发的 mysql-master-ha。 3. 多活 MGR,MySQL 5.7.17 以后官方新特性,基于组的复制。 4. 其它的 MariaDB,Percona 自己的 Cluster 架构。 MHA 环境搭建 对于 MHA,可以类比为 Zabbix,拥有 Server 端和 Agent 端,这里就是 Manager 和 Node 端。 整个架构至少包含