扩展 Percona 数据中心:设置和复制

tno*_*saj 6 mysql replication percona mysql-5.5 xtradb-cluster

由于我们的初创公司发展顺利,我们现在遇到了一些您一直认为永远不会影响您的问题。

我们已经扩展了很多应用程序堆栈:我们将临时信息的高读/写表卸载到一个单独的 Percona 服务器,其中表以“Engine=MEMORY”运行,并将其他部分迁移到 cassandra 集群。

现在我们剩下一个“精益”数据库,其中我们的读/写负载为 88%/12%。在这一点上,我有几个问题想得到一些反馈:

1. 读奴隶

通过我们的读/写设置,一些(例如 2-3 个)读从站应该将我们的写主站上的读负载减少到最低限度。read-slave 解决方案的可扩展性如何:如果我们的负载增加一倍/三倍,我们的负载是添加额外的 read slaves 将继续为读取提供足够的容量?我阅读了这篇文章:每个主人的奴隶数量有什么限制?然而,不是出于可扩展性背景,这可能看起来很愚蠢,但这是一个可冻结的解决方案吗?有很多人在推动分片而不是读从解决方案,但是,我现在真的认为我们的读/写负载不需要重写我们应用程序的大部分......有什么想法吗?

2. 多数据中心和复制

此外,我们正在考虑为附近的数据中心提供服务,以减少网络延迟(我们处理不喜欢延迟的移动应用程序)。计划是使用很多提到的半同步。复制(见:这是个好主意,MySQL数据库分成两个服务器,并为MySQL复制的高延迟互连是否受影响?)的主-主复制,其中每个数据中心都有一个主,和多个读的奴隶。同样,天真地,我很想知道在扩展时这是否在“最佳实践”的范围内。

3. 硬件和配置

过去几周我一直忙于对我们的实时系统进行基准测试,我得出的结论是,无论我们为第 1 点和第 2 点选择哪种解决方案,我们当前使用的服务器都不会运行很长时间,是否可以我对我们的设置有一些想法:

CPU: Intel(R) Xeon(R) CPU E31275 @ 3.40GHz mit 8 cores (hyperthreading)
RAM: 16GB
Raid 10 with a strip size of 64 KB and controller cache enabled
Software: Percona 5.5
Database size: 83.7GB
Top 5 Tables:
 21302MB  table1
 7656MB  table2
 5477MB  table3
 4352MB  table4
 3663MB  table5
Run Code Online (Sandbox Code Playgroud)

my.cnf 设置:

 max_heap_table_size=64M
 tmp_table_size=64M
 default_storage_engine = InnoDB
 innodb_buffer_pool_size = 10G
 innodb_file_per_table   = 1
 innodb_old_blocks_time=1000
 innodb_buffer_pool_instances=10
 innodb_log_file_size=256M
 innodb_flush_method=O_DIRECT
 innodb_read_io_threads=10
 innodb_write_io_threads=10
 join_buffer_size = 67108864 #64M
 expand_fast_index_creation=ON
Run Code Online (Sandbox Code Playgroud)

迁移到 Percona XtraDB Cluster 解决方案会解决我们的一些问题,例如复制稳定性吗?

我知道这些是很多非常理论化的问题,我感谢任何花时间阅读和评论我的想法的人。作为欧洲的一家小型创业公司,我们真的没有风险投资只是“上云”,我们更愿意对自己有更多的控制权。当我们正在寻找顾问等时,我认为 stackexchange 是激发一些想法的正确场所。

Rol*_*DBA 9

在这种情况下,您实际上有两个选择

选择 #1:Percona XtraDB 集群

我目前正在评估它,我认为它非常适合 MultiMaster 写入。它可以使用 mysqldump(默认)、rsync 和 xtrabackup(首选)来初始化新的集群节点。你拥有完全的自由和权力。这可能是有史以来最陈词滥调的陈词滥调,但凭借强大的力量,他们也必须始终承担巨大的责任(视频的 19:16 - 19:25)

你最终要对

  • 调整 InnoDB 的内存要求和磁盘配置
  • 记住 MyISAM 上的 DDL/DML 不会在 Galera 写集复制器库中复制。由于 GRANT 命令与存储引擎无关,因此可以毫无问题地处理 mysql 模式中的 MyISAM 表。mysql.user不会复制针对的任何 DML 。
  • 添加用于读取/写入的配置新集群节点

选择 #2:亚马逊 RDS

Amazon RDS 使 MySQL 数据库云服务变得轻而易举。您必须花一些时间使用 7 个服务器模型之一来部署服务器。默认情况下,所有 InnoDB 日志文件都是 128M。以下是每个服务器模型独有的唯一选项:

MODEL      max_connections innodb_buffer_pool_size
---------  --------------- -----------------------
t1.micro   34                326107136 (  311M)
m1-small   125              1179648000 ( 1125M,  1.097G)
m1-large   623              5882511360 ( 5610M,  5.479G)
m1-xlarge  1263            11922309120 (11370M, 11.103G)
m2-xlarge  1441            13605273600 (12975M, 12.671G)
m2-2xlarge 2900            27367833600 (26100M, 25.488G)
m2-4xlarge 5816            54892953600 (52350M, 51.123G)
Run Code Online (Sandbox Code Playgroud)

您没有获得SUPER 特权,也无法直接访问 my.cnf。鉴于此,为了更改 my.cnf 启动选项,您必须首先创建一个基于 MySQL 的 DB 参数选项列表,并使用RDS CLI(命令行界面)更改所需的选项。然后,您必须执行此操作以导入新选项:

  • 创建自定义数据库参数组(称之为MySettings
  • 下载 RDS CLI 并使用您的 AWS 凭证设置配置文件
  • 执行以下操作: ./rds-modify-db-parameter-group MySettings --parameters "name=whateveroption,value=whatevervalue,method=immediate"
  • 使用数据库参数选项列表进行修改 MySettings
  • 重启 MySQL RDS 实例

至于扩展到数据中心,您可以选择创建只读副本。由于默认的存储引擎是 InnoDB,所以制作只读副本变得无缝,因为数据可以同步到 Slaves 而不会中断 Master。

更高的服务器型号意味着您可以拥有更多的内存和更多的 IOP。不要忘记我提到的陈词滥调,因为谈到 Amazon RDS,强大的力量带来巨大的金钱。