当前配置是基本Master-> Slave复制。每天晚上各种数据导入作业在master上运行。在此期间,关闭从属复制并将流量指向Slave(以免导致数据加载作业的性能瓶颈/惩罚影响)。
当作业完成后,复制将重新打开(在从站上)..目的是在此后不久将流量指回到从站(一旦从站同步备份)。但问题是此时Master上存在严重的性能问题。大概是因为从属I / O线程正在努力获取从主服务器复制的所有数据。
作为一种替代解决方案,关闭“只是”奴隶上的“SQL线程”(保持IO线程一直运行),以免轰炸主机(稍后一次性全部),一旦复制恢复了。但是,这种方法(显然)的问题在于,当主服务器正在运行大量数据加载作业时(因为IO线程始终处于打开状态并且正在移动数据),现在从属服务器会出现持续的性能问题。
所以问题是,如何在不对主服务器或从服务器造成性能影响的情况下启动/停止从服务器上的复制(根据我的数据加载计划/要求)?好像你应该能够完全关闭复制,然后在以后重新打开而不影响主人?
提前致谢!
答案 0 :(得分:0)
您能描述负载问题吗?你是挂在iowait上,还是主机和从机之间的网络连接饱和了?你的服务器有多少内存?
您可以通过在主服务器和从服务器之间吊索交叉电缆并在其上路由所有复制流量来改进后者,使其远离您的LAN。
如果前者是问题,我会说你最好的选择是让你自己更多和/或更快的磁盘,甚至是SSD!您还可以进行二进制日志记录以分离磁盘,这样就不会降低查询活动的速度。
总的来说,听起来你刚刚遇到容量问题,而且你需要提供足够的资源来处理你指向它的负载 - 没有多少杂耍会让你解决这个问题。我没有遇到过配置,其中二进制日志记录是限制因素。任何基本的RAID配置都应该处理至少300M /秒,并且为了这个问题,你需要一次超过30秒,这意味着你需要每晚移动超过9Gb的binlogs - 你真的在生成那么多数据吗?
另一种选择是使用DRBD for replication - 这样奴隶就不必运行复制查询或处理binlogs,尽管它有其他复杂性。