转载自:http://www.bitscn.com/pdb/mysql/201106/235884.html

MySQL数据库的优化和使用是一件很发杂的事情,那么我们如何让数据库变得更大更好呢?本文将介绍如何通过分区和负载均衡解决方案让你的MySQL变得更大更好。

更大的MySQL

增加更多的MySQL实例是提高应用程序响应速度的有效方法,如果你的服务器有多颗CPU,充足的内存和快速的硬盘,这些资源有相当一部分处于闲置状态,那么在这种情况下,在服务器上可以同时运行多个MySQL实例,因为MySQL默认情况下只有一个进程和多个会话线程,因此它真正能利用的最大硬件资源是有限的。

如果你的服务器已经快饱和了,那么必须增加服务器,不管你的多个MySQL实例是在一台服务器上,还是在多台服务器上,你都需要为应用程序配置一个方法让它知道该将查询发送给哪台服务器,如果是要修改数据,那就应该将指令发送到主数据库实例,如果仅仅是查询操作,那么随便发给任何一个从数据库实例即可。

1、数据分区和水平分区

因为许多Web应用程序是通过会话来识别用户的,通过会话将它们分配到不同的从数据库实例显得很有道理。例如A-G,H-O,P-Z数据库实例可能在工作,这时可以通过用户名的哈希值,或userid将用户分配到不同的服务器上,这就是所谓的分区键,选择分区键时需要慎重决定,因为它会影响到你如何构建从数据库实例,主要是考虑如何让这些服务器平均承担工作负载,如果选择得不好,假设从数据库倒掉,也可能会引起数据中断。

如果正采用这种分区,你需要决定程序运行时使用哪个数据库,这可以通过一个中间层如MySQL代理来实现,虽然它还处于Alpha阶段,但它的思想很好,并且已经有很多人将其用于生产环境,它运行在服务器上,响应端口3306上的请求,然后将这些查询通过高速语言如lua实现的某些逻辑转发给后端适当的服务器。

其次你也可以在应用程序中指定将查询发到哪些服务器,这也是最灵活的方法,你可以完全控制整个决策过程,你也可以使用master_pos_wait检查从数据库实例,看看它们是否有足够的计算资源。还有你使用的编程语言或Web框架可能也会提供这方面的支持,如果你还不清楚,可以查询它们的文档。

你还可以研究一下Continuent Tungsten,DBIx::DBCluster for Perl以及SQLRelay,它们支持许多不同的编程语言和数据库。同样,CMS如Drupal也支持多种只读的从数据库,你只需要启用这个功能即可。

使用这种架构需要考虑的另一个事情是,是否要使用主数据库实例,以及何时使用,一般说来,所有插入,更新和删除操作都应放在主数据库实例上完成,所有的查询操作都放在从数据库实例上完成。例如,如果某个用户对博客文章发表了注释,此时如果直接使用从数据库,可能无法完成,因为MySQL复制架构会存在滞后,此时从数据库中可能还没有那篇博文。

检查过时数据是一个更好的方法,如果你有报告查询在夜间运行,这种方法可能工作得很好,你只需要确保复制赶得上进度即可。

另一个方法是通过版本号跟踪数据库变更,在读取数据之前确定数据是否是最新的版本。

最后,MySQL提供了一个函数master_pos_wait,它可以确定从数据库更新到哪个时间点了。

2、功能分区

你可能已经使用到功能分区,使用功能分区时,需要创建一个生产数据库的副本用于不同目的,如其中一个用于数据仓库和报告,另一个用于文本搜索等。

通过负载均衡使MySQL变得更好

如果你的从数据库已经有些只读数据,你可能需要实现负载均衡,将流量平均分配到各个从数据库,实现方法有多种,如随机分配,最少连接法,响应速度最快法,或某种加权平均法,虽然某些硬件负载均衡设备可以提供负载均衡功能,但它们往往是设计用于均衡网络流量,并没有提供数据库相关的均衡功能。

幸运的是有很多软件解决方案,LVS项目就是一个不错的候选,它已经发展得相当成熟稳定,它提供了类似DNS轮询的负载均衡算法,但是在IP层实现的,速度非常快。此外,也有很多项目是建立在LVS基础之上的,包括wackamole,它是基于对等网络的,因此不会发生单点故障,还有一个值得推荐的项目是ultramonkey。

小结

MySQL提供了许多高级特性可以实现无限制的规模扩展,视不同应用环境有不同的最佳解决方案,因此需要在用于生产数据库之前,最好先对各种解决方案进行充分了解,并尽量搭建与生产环境负载相当的测试平台进行测试。

mysql负载均衡分区_利用分区和负载均衡获得更大更好的MySQL数据库[转载]相关推荐

  1. mysql负载均衡分区_分区和负载均衡让MySQL更大更好

    通常,当我们的MySQL数据库逐渐变慢时,我们就希望通过一切努力使它变得更快.更强.更大.更好!那么都有哪些方法呢?别着急,我会一个一个给大家介 绍如何才能实现这些美好的愿望.阅读本系列文章将有助于扩 ...

  2. mysql按照省市给表分区_表分区-partition

    partition分区: 设置分区限制,t0:1-10,t1:10-20,t2:20-最大值: 插入数据后可以看到topic表出现了t0.t1.t2: 按照散点值分区: 创建地区表: 建立会员表,根据 ...

  3. 卡夫卡如何分区_通过分区在卡夫卡实现订单担保人

    卡夫卡如何分区 Kafka最重要的功能之一是实现消息的负载平衡,并保证分布式集群中的排序,否则在传统队列中是不可能的. 首先让我们尝试了解问题陈述 让我们假设我们有一个主题,其中发送消息,并且有一个消 ...

  4. win10只有c盘怎么分区_磁盘分区:系统C盘空间不足怎么办?

    一般来说,驱动器字母"C"就是我们所说的系统分区.该C盘空间不足将影响您的计算机系统的性能,程序和游戏的运行速度.因此,您必须学会如何增加C盘空间让其有更多的自由空间以优化系统程序 ...

  5. parted新建分区_扩展分区及文件系统(Linux)

    操作场景 云硬盘是云上可扩展的存储设备,您可以在创建云硬盘后随时扩展其大小,以增加存储空间,同时不失去云硬盘上原有的数据. 云硬盘扩容 完成后,需要将扩容部分的容量划分至已有分区内,或者将扩容部分的容 ...

  6. 均衡原理_干货什么是负载均衡?负载均衡原理详解

    负载均衡是高可用网络基础架构的一个关键组成部分,有了负载均衡,我们通常可以将我们的应用服务器部署多台,然后通过负载均衡将用户的请求分发到不同的服务器用来提高网站.应用.数据库或其他服务的性能以及可靠性 ...

  7. sql server 分区_使用分区归档SQL Server数据

    sql server 分区 The Partition feature was introduced in the SQL Server 2005. This article is to cover ...

  8. mysql c 助手类_节日福利,属于你的Offer助手:阿里独家MySQL进阶宝典

    提到MySQL,大家都知道是它最流行的关系型数据库管理系统(RDBMS)之一,而且MySQL近两年一直稳居第二,随时有可能超过Oracle计晋升为第一名,因为MySQL的性能一直在被优化,同时安全机制 ...

  9. 5.6.50 mysql 用什么驱动_日均5亿查询量的京东订单中心,为什么舍弃MySQL用ES?

    京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调用量都非常大,造成了订单数据读多写少的情况. 我们把订单数据存储在MySQL中,但显然只通过DB来支撑大量的 ...

  10. mysql导致根目录爆满_因为根目录磁盘满了,我移动数据和软件造成mysql启动不了,查原因mysql.sock不在了...

    今天刚接手新项目的服务器,不知道以前谁搭建的因为要备份数据库,但是发现空间不足/根目录满的,然后我移动软件和文件造成mysql启动不了root@localhost~]#/data 今天刚接手新项目的服 ...

最新文章

  1. 初探Firewalld
  2. SQL Server中的执行引擎入门
  3. PIL 学习笔记(3)
  4. 345. 反转字符串中的元音字母
  5. 【大事化小,小事化无】的意思和解释
  6. np.expand_dims
  7. 怎样制作网吧服务器,网吧无盘系统怎么做之装置服务器系统
  8. 使用redis缓存来实现最近的浏览记录
  9. js开发飞机大战需求文档
  10. oracle经典50题及答案,Oracle经典练习题及标准答案
  11. 大数据学习完整学习路线
  12. jQuery实现手机号码的验证
  13. JAVA实现动态数组【代码】
  14. 逻辑运算符:与,或,非,异或
  15. Java数据类型总结
  16. 不要妄图一夜实现「智能」,这里有AI工业落地几乎必遇的「深坑」
  17. 【洛谷】P1830 轰炸III 题解 代码+详解
  18. Unity_Lua_语法基础
  19. SDN(一) 用OpenWRT将路由器刷成openflow交换机
  20. java版湛蓝的回忆_湛蓝回忆 | 假情绪love | 橙光作品

热门文章

  1. 语言百马百担求马匹数_C语言经典编程题(下)
  2. 算法:回溯八 Combinations指定个数组合
  3. mysql删完数据表空间没释放_mysql删除表后,空间一直不释放
  4. 决策树C4.5算法对ID3算法的改进
  5. 2020 金山云 面经
  6. graphpad做饼图_超省钱的早餐攻略!这些边角料可别扔,多做一步变大餐!
  7. cacheable中的condition和unless
  8. [LeetCode][easy]Reformat The String
  9. Lucene创建索引与搜索索引试手
  10. homestead.yaml配置详解