随着连接到主机的从机数量的增加,尽管每个负载都很小,但负载也增加了,因为每个从机都使用到主机的客户端连接。同样,由于每个从站必须接收主二进制日志的完整副本,因此主站上的网络负载也可能增加并造成瓶颈。
如果您使用大量从属服务器连接到一个主服务器,而该主服务器也正在忙于处理请求(例如,作为横向扩展解决方案的一部分),那么您可能希望提高复制过程的性能。
改善复制过程性能的一种方法是创建一个更深的复制结构,该复制结构使主服务器只能复制到一个从服务器,并使其余从服务器连接到该主从服务器以满足其各自的复制需求。图17.3“使用附加的复制主机提高性能”中显示了此结构的示例 。
图17.3使用其他复制主机提高性能
服务器MySQL Master 1复制到服务器MySQL Master 2,后者又复制到服务器MySQL Slave 1,MySQL Slave 2和MySQL Slave 3。
为此,必须按以下方式配置MySQL实例:
主机1是将所有更改和更新都写入数据库的主要主机。两个主数据库都启用了二进制日志记录,这是默认设置。
主站2是主站1的从站,它向复制结构中的其余从站提供复制功能。主站2是唯一允许连接到主站1的计算机。主站2 --log-slave-updates启用了该 选项(默认设置)。使用此选项,还将来自主机1的复制指令写入主机2的二进制日志中,以便随后将其复制到真正的从机中。
从站1,从站2和从站3充当主站2的从站,并复制来自主站2的信息,该信息实际上由登录到主站1的升级组成。
上述解决方案减少了主服务器上的客户端负载和网络接口负载,当用作直接数据库解决方案时,这将提高主服务器的整体性能。
如果您的从属服务器无法跟上主服务器上的复制过程,则可以使用许多选项:
如果可能,请将中继日志和数据文件放在不同的物理驱动器上。为此,设置 relay_log系统变量以指定中继日志的位置。
如果用于读取二进制日志文件和中继日志文件的磁盘I / O活动繁重,请考虑增加rpl_read_size系统变量的值。此系统变量控制从日志文件读取的最小数据量,如果操作系统当前未缓存文件数据,则增加该变量可能会减少文件读取和I / O停顿。请注意,为从二进制日志和中继日志文件读取的每个线程(包括主服务器上的转储线程和从服务器上的协调器线程)分配一个具有此值大小的缓冲区。因此,设置较大的值可能会影响服务器的内存消耗。
如果从服务器比主服务器慢得多,则可能需要划分将不同数据库复制到不同从服务器的责任。请参见 第17.4.6节“将不同的数据库复制到不同的从站”。
如果您的主服务器使用事务,而您不关心从服务器上的事务支持,则在从服务器上使用 MyISAM或其他非事务引擎。请参见 第17.4.4节“在不同的主存储和从存储引擎中使用复制”。
如果您的从站不充当主站,并且有适当的解决方案来确保在发生故障时可以启动主站,则可以log_slave_updates在从站上禁用 系统变量。这样可以防止“ 笨拙 ”的 从站还将自己执行的事件记录到自己的二进制日志中。