阅读使用复制进行横向扩展后,如何将不同的查询路由到不同的服务器,例如,SELECT
我想路由到从服务器和NON-SELECT
主服务器。我假设作为负载均衡器我可以使用haproxy,但我没有发现可以在haproxy级别的查询之间区分?另外,假设有人直接到达了master,master如何识别这是SELECT
query和show发送给slave,或者loadbalancer。
阅读使用复制进行横向扩展后,如何将不同的查询路由到不同的服务器,例如,SELECT
我想路由到从服务器和NON-SELECT
主服务器。我假设作为负载均衡器我可以使用haproxy,但我没有发现可以在haproxy级别的查询之间区分?另外,假设有人直接到达了master,master如何识别这是SELECT
query和show发送给slave,或者loadbalancer。
有一个名为MySQL Proxy的项目试图在代理层处理读/写分离,但它不是生产就绪的。您可以在此页面上阅读有关问题的更多信息,关注已知问题部分。
现在,正如其他人所指出的,您必须通过您的应用程序处理路由。
您的工作
web client
是确定要发送到数据库的事务是否是read-only
或read-write
并选择其指定slave
的或master
相应的。我不知道有任何代理软件可以为您执行此操作。haproxy 是 HTTP 级别的代理,这不会对你的数据库有任何影响。您需要将其作为 Web 应用程序业务逻辑的一部分来实现。
在持久层的核心,您应该能够拦截这些调用并根据正在执行的事务类型将它们“路由”到适当的数据库。例如,
SELECT
查询可以发送到您的只读服务器,但UPDATE/INSRET/DELETE
查询将发送到主服务器。