在与...类似的行中
http://serverfault.com/questions/35899/mysql-5-1-replication-topologies-multi-master
我想知道的是那里是否有任何非常好的MySQL 代理?我平台的一部分是“共享托管”环境,客户通常会配置(例如)他们的应用程序以与“mysql4-7.db.domain.tld”对话。
不幸的是,这使得升级成为一种“全有或全无”的方法,并且测试很棘手。
我想做的是将每个人都指向一组高度可用的代理,让它们处理身份验证并将查询传递给适当的数据库服务器。
我希望看到的功能;
- 可从数据库配置
- 某种共享状态,因此我们可以进行无缝故障转移
- 不完全拖累性能
- 额外的日志/指标来识别重度用户/数据库,应该是可能的,因为代理会看到所有的查询都通过?
- 能够监听多个 IP 地址和端口
最终目标是能够一次将用户转移到一个数据库上,这样我们就可以分阶段处理升级,而且大多数情况下,客户不会注意到或关心。请记住,我们不为这些人编写应用程序,也不提供“深度”技术支持(应用程序配置级别) ,我们的一些用户非常无能。因此,这种思路;)
我考虑过为每个数据库创建 DNS 记录,类似于:
databasename.db.domain.tld
然后将它们指向正确的数据库服务器,我们确实有一个约束,即数据库名称(跨所有数据库平台)必须是唯一的......有没有更好的解决方案?
很高兴回答问题。谢谢你的时间!
使用 DNS 解决方案的一种廉价而愉快的方法是在数据库名称中包含特定于帐户的内容。客户不会对一个帐户上的重复数据库名称有任何期望,这将很容易生成,因为您必须通过您的供应系统提供由客户提供的列表。
如果您沿着这条路线走,我建议使用永远不会从帐户更改的东西,例如帐号(而不是管理界面登录名)。否则,如果您出于任何原因必须更改名称,则必须在各处更新 DNS,或者有一些系统在合理的时间内将旧名称祖传。
不幸的是, mysqlproxy会带来性能成本。但是您可以在其中编写非常高级的东西。也许你想在洗牌时暂时使用它。
我只在测试环境中使用它,我没有在生产中运行它。