我们正在为办公室的一个特定问题寻找解决方案,我们有一个网络主机,有时我们的网络服务器(Apache)会崩溃;这导致我们的网络应用程序无法供用户使用。通常由于用户数量的原因,我们注意到在高峰时段数据库连接的数量有所增加。选项 1:因此,我们考虑在同一台主机上获取一台专门用作数据库服务器(mysql)的服务器,另一台服务器作为我们的网络服务器。问:在使用单台服务器时,有没有更好的方法来解决这个问题?问:有没有办法管理与数据库服务器的连接数,而不会给用户带来任何严重问题?选项 2:我们正在考虑获取另一台服务器(即同时运行 apache 和 mysql 的服务器),在第一台服务器不可用的情况下,所有流量都会切换到第二台。这里的问题是 mysql 只支持单向复制(即主从)。实例:通常,从服务器会镜像主服务器中的数据库,在发生故障转移的情况下,用户在从服务器上执行写入操作,当主服务器恢复时,我们如何才能将从服务器中的所有写入复制到主服务器以保持一致性(如果没有一致性,用户可能会发现他之前保存的某些数据似乎不可用,除了主键冲突之外)。问:如何实现以满足这一需求?
此外,非常希望得到任何有关解决方案的建议(这个问题对我们来说是一个新问题)。
答案1
除了主从设置之外,您还可以尝试设置master-master
复制...
答案2
您还可以看看使用memcached减轻对数据库的访问
答案3
循环复制 MASTER-MASTER 可能很麻烦,并且会导致比它应该解决的问题更多的问题。您将如何处理裂脑情况?通常,您会在特定间隔内增加 ID。主 A 增加 10、20、30,而主 B 增加 11、21、31 等。但我不建议做得比需要的更复杂。听起来你不太有 DBA 经验,所以 KISS。:)
您确实应该调查服务器崩溃的原因,而不是通过复制来“解决”它。您检查过日志吗?
研究一下 lighttpd,它在高负载场景中比 apache 具有更好的性能。
要“管理”与 SQL 服务器的连接(还有一个 my.cnf 设置用于最大连接数),您需要让 SQL 服务器更快地完成,或者减少 Web 服务器发出的查询数量。缓存是解决这两个问题的答案。Memcached 用于应用程序级缓存(非常有效),通常为 SQL 服务器提供更多 RAM 用于 qcache。
修复问题(例如需要更多 RAM),然后稍后添加主从复制以实现冗余。这也带来了好处,您可以将读取 IOPS 分散到多个主机上。如果您真的需要热备用冗余,请考虑在以后感到舒适时添加多主复制。
还要研究优化慢查询。Slow_queries.log 对此很有帮助。
祝你好运!