原文来自 http://www.cnblogs.com/RicCC/archive/2009/09/28/mysql-2.html Scale Out:横向扩展,增加处理节点提高整体处理能力Scale Up:纵向扩展,通过提升单个节点的处理能力达到提升整体处理能力的目的ReplicationMySQL的replication是异步的,适用于对数据实时性要求不是特别关键的场景。slave端的IO线程负责从master读取日志,SQL线程专门负责在slave端应用从master读过来的日志(早期MySQL用一个线程实现,性能问题比较明显)。使用replication必须启用binary log,MySQL用binary log向slave分发更新复制级别1. Row Level:5.1.5开始支持。mater记录每行数据的更改日志,slave根据日志逐行应用。优点:数据一致性更有保障。缺点:可能造成日志文件比较大2. Statement Level:master记录每个执行的query语句以及一些上下文信息,slave节点根据这些信息重新在slave上执行。优点:binary log比较小。缺点:某些情况下数据一致性难以保障3. Mixed Level:MySQL根据情况选择哪种复制方式。5.1.8开始支持常用架构1. Master-Slaves:通常都采用这种方式2. Dual Master(Master-Master):2个master节点互相同步更新。因为MySQL的异步复制方式,为了防止数据冲突造成的不一致性,一般仅将其中一台用于写操作,另一台不用或仅用于读操作。目的是其中一台master停机维护或者故障中断时可以使用另一台master3. 级联复制(Master-Slaves-Slaves):在Master Slaves中,如果slaves过多replication将增加master的负载,这时可以让master只向其中几台slave分发更新日志,这几台slave作为一级节点再向下级节点分发更新日志Cluster主要通过NDB Cluster存储引擎实现,是一个Share Nothing的架构,各个MySQL Server之间并不需要共享任何数据。可以实现冗余(可靠性)以及负载均衡。刚开始MySQL需要所有数据和索引都能够加载到内存中才能使用Cluster,对内存要求高,目前通过改进只要求索引能全部加载到内存 MySQL Clusrer架构示意图,图片来自MySQL官方文档1. SQL Nodes:负责存储层之外的事情,例如连接管理、query处理和优化、cache管理等,即剥离了存储层的MySQL服务器2. Data Nodes:存储层的NDB节点,即Cluster环境下的存储引擎。每个cluster节点保存完整数据的一个分片,视节点数目和配置而定,一般data nodes被组织成为一个个group,每个group存有一份完全相同的物理数据(冗余)。NDB存储引擎首先按照冗余参数配置来使用存储节点,然后根据节点数目对数据进行分段3. Management Server:负责整个clsuter集群中各个节点的管理工作,它保存了整个cluster环境的配置,启动关闭各个节点,实现对各节点的常规维护、备份恢复等,它获取各个节点的状态和错误信息,并反映给整个集群中所有节点Cache1. 应用层cache:最普通的cache方式,应用层自己管理cache,与数据库无关应用层cache的选择方案很多a). Memcached:分布式的缓存,本身性能优秀,扩展性比较好;虽然比本地缓存方案慢,但具备共享缓存效果b). Berkeley DB:与Memcached相比,BDB实现本地缓存;Memcached是内存式的缓存,而BDB使用磁盘,成本不一样;Memcached仅支持hash索引,而BDB支持hash索引和B-Tree索引;MySQL数据库方案下使用BDB,主要出于扩展性方面考虑,以及BDB的hash索引可以比MySQL更有效2. MySQL-Memcached整合:有2种方式a). 直接用Memcached作为MySQL的二级缓存。这可以增加MySQL的缓存容量,而Memcached对于应用端是不可见的。这种方案适用于一些特定场景,例如数据实在难以切分、很难对应用程序进行改造等这种方案目前有Waffle Grid开源项目,仅支持InnoDB存储引擎。其原理是当MySQL在Local Buffer Pool中找不到数据时则从磁盘读取,而Waffle Grid在这里加入一段处理,先尝试从Memcached Server读取,如果Memcached Server中不存在,才通过磁盘IO读取,将读取的数据会存入Memcached,并记录在InnoDB Buffer Pool的LRU List中,如果数据变成dirty或者缓存管理将其清出时,InnoDB将对应的LRU List移入FLUSH List,此时Waffle Grid从Mamcached Server删除数据。从上面可以看出,缓存机制仍然由MySQL管理,Memcached中存放的仅为有效的(不是脏数据)、仅作为缓存目的的数据,Memcached Server崩溃停机等不影响MySQL数据架构示意图(《MySQL性能调优与架构设计》): Waffle Grid是否会因为网络访问开销导致查询性能下降呢?可以参考Waffle Grid DBT2的测试结果,以及实际测试进行评估b). 使用MySQL的UDF功能与Memcached进行整合。Memcached的数据由MySQL和应用端程序共同维护,应用端先从Memcached读取数据,读取不到时则从MySQL Server读取,并把数据写入Memcached中,而数据有更新、删除导致Memcached数据失效时,MySQL负责将Memcached中相应数据清除架构示意图(《MySQL性能调优与架构设计》): MySQL Memcached UDFs下载和使用参考Using the MySQL memcached UDFs数据切分、Sharding分为垂直切分和水平切分,垂直切包括将一个表按不同字段切分成多个表、将不同表建在不同的MySQL Server中,水平切分指将同一个表的数据切分到多个表中存储1. 表结构设计垂直切分。常见的一些场景包括a). 大字段的垂直切分。单独将大字段建在另外的表中,提高基础表的访问性能,原则上在性能关键的应用中应当避免数据库的大字段b). 按照使用用途垂直切分。例如企业物料属性,可以按照基本属性、销售属性、采购属性、生产制造属性、财务会计属性等用途垂直切分c). 按照访问频率垂直切分。例如电子商务、Web 2.0系统中,如果用户属性设置非常多,可以将基本、使用频繁的属性和不常用的属性垂直切分开2. ShardingSharding指一种"shared nothing"形式的垂直切割,将切割后的部分部署在不同的服务器上。关于sharding和partition的区别可参考DBA Notes冯大辉的开源数据库 Sharding 技术 (Share Nothing) 图片来自DBA Notes: http://www.dbanotes.comSharding方案可以考虑:a). Session-based sharding,只需在创建session时确定处理节点,随后的请求都直接定向到该节点进行处理b). Statement-based sharding,每个语句都需要确定处理节点c). Transaction-based sharding,根据事务中第一条语句确定处理节点Sharding潜在问题:a). 被分割开的部分之间无法使用数据库级别的join操作(cross-shard joins,可以考虑将一些公共的、全局的表部署到每一个节点上,使用replication机制分发)b). 被分割开的部分之间事务处理复杂c). 对自增长键的管理(主要出现在混合了水平切分的Sharding情况下)3. 水平切分示例:a). 比如在线电子商务网站,订单表数据量过大,按照年度、月度水平切分b). Web 2.0网站注册用户、在线活跃用户过多,按照用户ID范围等方式,将相关用户以及该用户紧密关联的表做水平切分c). 例如论坛的置顶帖子,因为涉及到分页问题,每页都需要显示置顶贴,这种情况可以把置顶贴水平切分开来,避免取置顶帖子时从所有帖子的表中读取难点之一,逻辑、关联关系的复杂性阻碍水平切分。这样的场景难在如何确定切分的范围和策略,例如SAP这样的大型ERP,模块、表非常多,之间的逻辑复杂,SAP按每Client(公司、集团)将整个业务数据完全切分开,如果粒度需要再细化难度就非常大。方案一般有:a). 按主键切分;b). 维护一个主切割索引表,这种方案扩展性非常好,但是需要查找主索引表第二点是如何使得水平切分具备扩展性。以Web 2.0网站为例,如果按照会员ID范围进行切分,假如现在决定水平切分为5份,如果使用user_id % 5的值确定该用户属于哪个部分,这样在将来随着用户量的增长,如果以后需要再切分成为20份就会相当麻烦水平切分和Sharding的混合模式,理论上可以实现线性伸缩,但受限于应用程序的状况、设计以及切分、Sharding实现方案切分和整合方案主要2种实现思路:1. 每个应用程序模块配置管理自己需要的一个或多个数据源,直接访问各个数据库2. 通过中间代理层统一管理所有的数据源,后端数据库集群架构对前端应用透明使用MySQL Proxy:这是MySQL官方提供的,位于客户端程序与MySQL Server之间,能够监控、分析、转换他们之间的通讯。常用的场景有负载均衡、故障恢复、查询分析、查询过滤和修改,以及基本的HA机制,目前在实现读写分离方面仍存在一些问题,架构示意图(《MySQL性能调优与架构设计》): MySQL Proxy提供一个基础的框架,其他功能需要编写LUA脚本实现(牺牲一定性能,带来灵活性)HSCALE是MySQL Proxy的一个LUA模块,他透明的分析和重写查询,切分、分区逻辑从应用程序层转移到代理层HSCALE项目官方网站:http://www.hscale.org,作者博客网站:http://pero.blogs.aprilmayjune.org/使用Amoeba:Amoeba是基于Java开发的分布式数据库数据源整合Proxy程序的开源框架,Amoeba 开发者博客,项目主页主要解决以下问题:a). 数据切分后复杂数据源整合b). 提供数据切分规则并降低数据切分规则给数据库带来的影响c). 降低数据库与客户端连接d). 读写分离路由Amoeba For MySQL是专门针对MySQL数据库的方案,架构示意图: 图片来自《MySQL性能调优与架构设计》Amoeba For Aiadin是个更通用的方案,他前端接收MySQL协议的请求,后端可以使用MySQL、Oracle、PostGreSql等其他数据源,这些对应用程序是透明的。架构示意图: 图片来自《MySQL性能调优与架构设计》使用HiveDBHiveDB也是基于Java的开源框架,有商业公司支持,目前仅支持水平切分,同时支持数据的冗余及基本的HA机制。他使用Hibernate Shards实现数据水平切分,自行实现数据冗余机制。HiveDB中通过用户自定义的各种Partition keys将数据分散到多个MySQL Server,访问时解析query请求,自动分析过滤条件,并行从多个MySQL Server读取数据,合并结果集返回给客户端应用程序。架构示意图: 图片来自HiveDB官方网站: http://www.hivedb.org/Hibernate Shards由Google贡献,他使用标准的Hibernate编程模型,会用Hibernate就会用Hibernate Shards;可扩展的sharding策略;支持virtual shards,用于简化resharding时的处理Spock Proxy由实际项目产生的一个开源项目(Spock是Rails的应用,Speck Proxy应当可用于Rails之外的,例如PHP或.NET),基于MySQL Proxy开发,是MySQL Proxy的一个分支,支持range-based horizontal paritioning,他对MySQL Proxy所做的改进包括:a). 不使用LUA脚本,提升性能。例如将多个数据源返回的结果集合并期间还要与LUA脚本交互,这样的性能开销比较大b). 客户端登录验证。MySQL Proxy支持客户端与各个服务器直接进行登录验证,Spock Proxy则将其统一管理,分离客户端与服务器的连接c). 动态连接池。受益于客户端登录认证机制的改善d). 目前的MySQL Proxy无法做到读写分离,Spock Proxy实现了这一点,并且异步并行执行架构示意图: 图片来自Spock Proxy官方网站:http://spockproxy.sourceforge.net/Pyshards基于Python的Sharding方案,是一个个人研究开源项目,他的目标想实现自动re-balancing(re-sharding),比较有挑战。目前仅支持MySQL。http://code.google.com/p/pyshards/参考:《MySQL性能调优与架构设计》
您还没有登录,请您登录后再发表评论
mysql架构方案 MySQL水平分区表实际操作总结 Mysql水平分表 mysql水平分表和垂直分表和数据库分区 sysbench mysql 坚持不懈 sysbench安装和使用 SHOW INNODB STATUS 探秘 体验Innodb with Memcached –安装 数据切分...
MySQL分布式数据库MyCAT方案 MySQL分布式数据库MyCAT方案是基于 MySQL 数据库管理系统和 MyCAT 分布式数据库中间件的实践方案。该方案的主要目的是为了解决传统 MySQL 数据库的单点故障和性能瓶颈问题,提高数据库...
"MySQL性能调优与架构设计.pdf" 本资源摘要信息是关于 MySQL 数据库软件的性能调优和架构设计的知识点。MySQL 是一个流行的开源数据库管理系统,具有简单高效可靠的特点,广泛应用于各个行业。以下是从给定的文件中...
MySQL 集群方案详解 MySQL Cluster 是 MySQL 官方集群部署方案,它的历史较久。支持通过自动分片支持读写扩展,通过实时备份冗余数据,是可用性较高的方案,声称可做到 99.999% 的可用性。 MySQL Cluster 的架构及...
一个pdf文档,简要介绍linux和windows下架构php的注意点。相信你可以从中学到不同的东西!
- **总体规划**:根据业务需求规划服务器资源、网络架构、存储方案等。 - **配置规范**:制定详细的服务器硬件配置标准、软件环境设置等。 #### 高可用MySQL - **基于复制技术**:通过主从复制或主主复制实现数据...
本文将重点介绍MySQL高可用性的演变历程、常用解决方案,以及InnoDB Cluster和群组复制(MySQL Group Replication)的详解。 ### MySQL高可用性的演变 MySQL的高可用性经历了多次技术演进。从早期的版本3.23开始,...
### LAMP网站架构方案及安装配置详解 #### 一、LAMP架构概述 LAMP(Linux-Apache-MySQL-PHP)是一种广泛使用的网站架构框架,由以下四个主要部分组成: 1. **Linux**:作为操作系统,Linux因其开源性、稳定性和...
mysql架构的巡检 mysql数据库的架构巡检是非常重要的。我们需要检查mysql的架构配置,以确保mysql数据库的架构正确。例如,我们可以检查mysql的复制同步状态、从库同步延迟情况等。例如,我们可以使用以下命令来...
MYSQL高可用架构实施方案
### MySQL 数据库架构全掌握 #### 一、MySQL与Oracle的历史背景及应用对比 ##### Oracle简介 Oracle数据库是由美国甲骨文公司(Oracle Corporation)研发的一款高性能的关系型数据库管理系统。Oracle公司成立于...
MySQL 与 MongoDB 数据库架构介绍 MySQL 数据库架构介绍 MySQL 是由 Oracle 公司开发、发布和支持的受欢迎的开源关系数据库管理系统(RDBMS)。MySQL 将数据存储在表中,并使用结构化查询语句(SQL)来进行数据库...
### Heartbeat+DRBD+MySQL高可用架构方案与实施过程细节 #### 互联网公司从初期到后期的数据库架构拓展 随着互联网公司的成长和发展,数据库架构也需要不断地调整和优化以满足不断增长的需求。从最初的单一服务器...
【描述】:本文主要对比分析了Redis、MySQL以及Kafka的高可用架构方案,重点关注MySQL的主从复制、半同步复制以及MHA架构。 【标签】:test 【正文】: 在构建高可用系统时,数据库的稳定性与数据一致性至关重要...
2. **架构设计**:基于需求分析结果,设计合适的架构方案。例如采用主从复制加分片的方式,既能提高读写能力又能应对大数据量的挑战。 3. **性能调优**:通过对服务器配置、SQL语句等方面进行细致调整,确保系统在高...
相关推荐
mysql架构方案 MySQL水平分区表实际操作总结 Mysql水平分表 mysql水平分表和垂直分表和数据库分区 sysbench mysql 坚持不懈 sysbench安装和使用 SHOW INNODB STATUS 探秘 体验Innodb with Memcached –安装 数据切分...
MySQL分布式数据库MyCAT方案 MySQL分布式数据库MyCAT方案是基于 MySQL 数据库管理系统和 MyCAT 分布式数据库中间件的实践方案。该方案的主要目的是为了解决传统 MySQL 数据库的单点故障和性能瓶颈问题,提高数据库...
"MySQL性能调优与架构设计.pdf" 本资源摘要信息是关于 MySQL 数据库软件的性能调优和架构设计的知识点。MySQL 是一个流行的开源数据库管理系统,具有简单高效可靠的特点,广泛应用于各个行业。以下是从给定的文件中...
MySQL 集群方案详解 MySQL Cluster 是 MySQL 官方集群部署方案,它的历史较久。支持通过自动分片支持读写扩展,通过实时备份冗余数据,是可用性较高的方案,声称可做到 99.999% 的可用性。 MySQL Cluster 的架构及...
一个pdf文档,简要介绍linux和windows下架构php的注意点。相信你可以从中学到不同的东西!
- **总体规划**:根据业务需求规划服务器资源、网络架构、存储方案等。 - **配置规范**:制定详细的服务器硬件配置标准、软件环境设置等。 #### 高可用MySQL - **基于复制技术**:通过主从复制或主主复制实现数据...
本文将重点介绍MySQL高可用性的演变历程、常用解决方案,以及InnoDB Cluster和群组复制(MySQL Group Replication)的详解。 ### MySQL高可用性的演变 MySQL的高可用性经历了多次技术演进。从早期的版本3.23开始,...
### LAMP网站架构方案及安装配置详解 #### 一、LAMP架构概述 LAMP(Linux-Apache-MySQL-PHP)是一种广泛使用的网站架构框架,由以下四个主要部分组成: 1. **Linux**:作为操作系统,Linux因其开源性、稳定性和...
mysql架构的巡检 mysql数据库的架构巡检是非常重要的。我们需要检查mysql的架构配置,以确保mysql数据库的架构正确。例如,我们可以检查mysql的复制同步状态、从库同步延迟情况等。例如,我们可以使用以下命令来...
MYSQL高可用架构实施方案
### MySQL 数据库架构全掌握 #### 一、MySQL与Oracle的历史背景及应用对比 ##### Oracle简介 Oracle数据库是由美国甲骨文公司(Oracle Corporation)研发的一款高性能的关系型数据库管理系统。Oracle公司成立于...
MySQL 与 MongoDB 数据库架构介绍 MySQL 数据库架构介绍 MySQL 是由 Oracle 公司开发、发布和支持的受欢迎的开源关系数据库管理系统(RDBMS)。MySQL 将数据存储在表中,并使用结构化查询语句(SQL)来进行数据库...
### Heartbeat+DRBD+MySQL高可用架构方案与实施过程细节 #### 互联网公司从初期到后期的数据库架构拓展 随着互联网公司的成长和发展,数据库架构也需要不断地调整和优化以满足不断增长的需求。从最初的单一服务器...
【描述】:本文主要对比分析了Redis、MySQL以及Kafka的高可用架构方案,重点关注MySQL的主从复制、半同步复制以及MHA架构。 【标签】:test 【正文】: 在构建高可用系统时,数据库的稳定性与数据一致性至关重要...
2. **架构设计**:基于需求分析结果,设计合适的架构方案。例如采用主从复制加分片的方式,既能提高读写能力又能应对大数据量的挑战。 3. **性能调优**:通过对服务器配置、SQL语句等方面进行细致调整,确保系统在高...