我们的生产环境通常包含4-8个Apache Web服务器和2个(My)SQL服务器:
每个Web服务器都隶属于一个SQL服务器SQL服务器有一个循环复制设置所有的Web服务器都是负载平衡的,例如磅。 每天晚上一份工作备份SQL服务器之一,locking附属的Web服务器约10-15分钟。
有没有办法configuration平衡,以避免短时间到达那些locking的服务器?
除了备份非生产性的第三台服务器之外,还有其他的方法来处理这个锁吗?
PS:我们打算在备份之前和之后用适当的configuration文件重新加载磅configuration,但是感觉有点奇怪…
这个问题已经在StackOverflow上被问到了,但是被closures为“不以开发为中心”的目的。 事实上,这更多的是一个生产和运行的讨论。
从服务器上卸载来做备份并不是闻所未闻的。 你如何做,完全取决于你的负载平衡器。 例如,Kemp负载平衡器有一个Web API,您可以调用它来禁用特定的服务器,haproxy有一个基于pipe道的pipe理界面,您可以从Linux shell中编写脚本。 我敢肯定,英镑有一个等同的方式closures服务器,但我不知道那是什么。
使用haproxy禁用服务器的另一种stream行的方法是让检查操作查找特定的文件。 如果要禁用服务器,只需删除或重命名该文件。 您应该可以轻松地用英镑来做到这一点,它可以满足您在Web层保持脚本的要求,而不需要调用负载平衡器。
如果您在执行备份的主机上停止apache,则应在30秒内检测到后端处于脱机状态,并将访问者指向其他主机。
如果您的主服务器是从主服务器运行,那么您可以在从服务器上执行备份,而不会出现超过2节点主服务器主复制的复杂情况。 那将是我的首选。
但是,您也可以将当前的两个主服务器之一标记为“隔离”,从而将所有networkingstream量强制转移到仍处于活动状态的服务器上。 你如何做到这一点取决于什么是与数据库交谈。 如果只是PHP(没有持久连接 – 在这个设置中会很傻),那么只需交换一个不同的包含文件,等待几秒钟(几分钟?)的当前连接完成,然后运行备份。 备份完成后,再次将包含文件切换回来。
或者,如果你有Web服务的能力,将你的服务器分成两个池 – 每个DBMS一个,告诉英镑围绕一个银行,同时你用RRDNS备份/运行两个磅的实例,并添加一个iptables表来拒绝新的连接备份银行,当你想备份。
如果你有持续的联系,那么银行转换可能是唯一的实际解决scheme。