我目前正在评估从当前数据库服务器到三节点集群的迁移。
我们当前的服务器是运行 MariaDB 10.1 的虚拟机,并异步复制到另一台服务器,以便在不影响性能的情况下执行数据库备份。
读写比约为 70/30,我们正在运行一个物联网平台,其中有许多传感器发送原始数据,这些数据在合并并呈现给最终用户之前写入数据库。
由于写入与读取的比率很高,我想确保集群在迁移之前在写入方面的性能至少与我们当前的服务器一样好。
对于此测试,我在 Google 计算引擎上启动了一个虚拟机,该虚拟机具有 16 个 vCPU、60GB RAM 和 SSD 本地存储,具有 10,000 读取 IOPS 和 15,000 写入 IOPS。
在这个运行 Debian 8.3 的虚拟机上,我安装了 MariaDB 10.1(其中包括 Galera 集群),以便使用 Sysbench 0.5 运行一些基准测试。
这些是我从默认 mysql.cnf 文件更改的 MySQL 参数:
[mysqld]
binlog_format=ROW
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_log_file_size=2G
innodb_buffer_pool_size=4G
sync_binlog=0
Run Code Online (Sandbox Code Playgroud)
从 sysbench 运行更新测试时,我注意到在当前部署的单个节点上启用 wsrep 会产生巨大的开销。
这是我用来运行基准测试的命令:
sysbench --db-driver=mysql --num-threads=32 --max-time=30 --max-requests=0 --oltp-tables-count=32 --oltp-table-size=100000 --oltp -test-mode=complex --test=/root/sysbench/sysbench/tests/db/update_index.lua --mysql-db=sbtest --oltp-skip-trx=运行时
当 wsrep_on=OFF 时,我在基准测试中每秒获得大约 54000 次更新。
将 wsrep_on 设置为 ON,每秒大约获得 19000 次更新。
我原以为启用同步复制会对性能造成影响,但没想到会影响这么大。
看起来 CPU …