我们正在对我们目前的系统进行概述,试图弄清楚我们是否可以提高性能和可靠性。
目前,我们运行了大量的内部Rails应用程序和基于Rails的网站。有些已经是Rails 3了,有些正在被转换成Rails 3。它们都连接到下面的MySQL设置。
mysql01 ( master server) => mysql02 (slave)
=> (每日数据库备份到驱动器,每天、每周、每月和每半年备份一次)。
所有的写操作都发生在mysql01上,大多数短时间的读操作也会去它,一些“更耗费资源的读操作”(比如需要3-10分钟才能运行并将数据转储到csv或备份中的月度/周报告)会去mysql02服务器。我们的网站每天有大约3-5K的访问量,并且有大约20-30个内部用户,他们每天使用各种应用程序进行库存、订单处理等。因此,除了那些报告之外,这些服务器的负载并不是特别重,无论如何都会运行从属服务器。
所有服务器都在Debian Lenny VM上的virtualized XEN
池中运行。
因此,我们正在对系统进行审查,有人建议切换到MySQL Cluster (NDB)
设置。我在理论上知道它,但从未实际运行过。因此,任何有经验的人都知道它与我们当前的设置有什么优缺点,以及当涉及Ruby / Rails应用程序时有什么特别的注意事项吗?
发布于 2011-03-16 22:01:27
最近在docs...worth上发布的InnoDB和MySQL集群(ndb)有一个很好的比较:http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-compared.html
集群体系结构由一个由应用程序访问的MySQL服务器池组成;这些MySQL服务器实际上并不存储集群数据,而是将数据分区到下面的数据节点池中。每个MySQL服务器都可以访问所有数据节点中的数据。如果一个MySQL服务器更改了一段数据,那么它对所有其他MySQL服务器都是立即可见的。
显然,这种架构使得向外扩展数据库变得非常容易。与分片不同,应用程序不需要知道数据存放在哪里-它只需要在所有可用的MySQL服务器上实现负载平衡。与使用MySQL向外扩展不同,复制集群允许您同时扩展写操作和读操作。可以将新的数据节点或MySQL服务器添加到现有群集,而不会丢失对应用程序的服务。
MySQL集群的无共享架构意味着它可以提供极高的可用性(99.999%+)。每次更改数据时,都会将其同步复制到另一个数据节点;如果一个数据节点出现故障,则备份数据节点会自动处理应用程序的读写请求。
由于MySQL集群的分布式特性,一些操作可能会较慢(例如,具有数千个中间结果的JOINs尽管有解决此问题的原型解决方案),但其他操作可以非常快,并且可以非常好地扩展(例如,主键读取和写入)。您可以选择将表(甚至列)存储在内存或磁盘上,并通过选择内存选项(在后台将更改检查点到磁盘)可以非常快速地处理事务。
MySQL集群的设置可能比单个MySQL服务器更复杂,但它可以避免在应用程序中实现分片或读/写拆分。秋千和环形交叉口。
要获得MySQL集群的最佳性能和可伸缩性,您可能需要调整您的应用程序(请参阅集群性能调整白皮书:http://www.mysql.com/why-mysql/white-papers/mysql_wp_cluster_perfomance.php)。如果你拥有应用程序,这通常不是什么大问题,但如果你正在使用别人的应用程序,而你不能修改它,那么这可能是一个问题。
最后要注意的是,它不需要是全部或不是--您可以选择将一些表存储在集群中,而将一些表存储在其他存储引擎中,这是每个表的选项。您还可以在集群和其他存储引擎之间进行复制(例如,将集群用于您的运行时数据库,然后复制到InnoDB以生成复杂的报告)。
https://stackoverflow.com/questions/5300490
复制相似问题