我的机器已经挂了。我正在尝试设置一个 MySQL 机器来运行:
- 3000 个连接(3 个工作人员负责 1000 个盒子)(盒子的最大连接数已经达到 700 个)
- 大量写入
当前设置:
- AWS 高 CPU 超大实例 (c1.xlarge)
- Ubuntu 10.04
- MySQL 5.5.19
- InnoDB 表
配置为:my-innodb-heavy-4G.cnf
。具体修改为:
- 最大连接数 = 65000
- innodb_buffer_pool_size = 5G
否则一切都是默认的。你们对不同的 MySQL 设置有什么建议?
考虑因素包括:
- MySQL 集群
- 主/从复制(我不知道这里是否会有很多收获。)
我们已经在使用 AWS 最强大的设备,因此从现实来看,分布式系统可能是我们应该采用的方式。专用硬件可能有可能,但可能性很小。
您建议/认为我们应该如何进行?我是否遗漏了神奇的配置?
提前感谢,贾斯汀
答案1
MySQL Cluster 很少用于 Web 可访问的设置。该产品主要用于专用集群环境中的数据仓库。
如果您偏向于写入,MySQL 复制(主/从、双主等)将无济于事。要进行复制,必须在所有系统上“转发/执行”写入...这很容易降低您的整体性能。注意:如果您有表争用(锁定整个表),复制可能很有用,但如果您使用的是 innodb,我会惊讶于这种情况经常发生。此外,拥有从属服务器的性能成本可以通过在危机/恢复情况下节省的时间来减轻 - 但这不是要问的问题。
您可以研究分片的概念。结合 MySQL-Proxy 和精心编写的 LUA 脚本,您可以自动重写 SQL 查询以将写入拆分到 MySQL 系统集群(注意 AWS 实例的故障率)。
虽然您说这是一个长远的目标,但专用硬件选项应该仔细研究。大多数 IAAS(例如 AWS/EC2)环境都为读取 IO 的严重偏差做好了准备。在专用硬件上,您可以利用 SSD 缓存和/或存储分层。您还可以利用专用 SAN,其中 I/O OPS 容量根据您的特定要求量身定制。
答案2
披露 - 我是 MySQL Cluster 产品团队的一员
只是为了纠正上面的观点,MySQL Cluster 通常用于 Web 应用程序中以扩展写入操作 - 自动分片与多主复制相结合可提供非常高的写入吞吐量,即在 8 个商用 Intel 服务器集群上每秒可进行 2.50 万次写入: http://mysql.com/why-mysql/benchmarks/mysql-cluster/
另一方面,数据仓库实际上并不是目标工作负载
建议看一下 MySQL 性能指南(需要注册),其中讨论了不同的分片策略: http://mysql.com/why-mysql/white-papers/mysql_wp_cluster_perfomance.php