MYSQL16 MYSQL运维-读写分离
切なくて時をまきもどしてみるかい?
读写分离
MyCat实现读写分离的核心原理是基于balance属性的配置。它通过拦截SQL语句,判断其类型(读或写),然后将请求路由到不同的物理数据库节点(DataNode)。
在配置文件schema.xml的<dataHost>标签中,balance属性决定了读写分离的策略:
balance="0":不开启读写分离。所有读写操作都发送到当前可用的writeHost。
balance="1":标准的读写分离。所有的 写操作(
INSERT,UPDATE,DELETE)发送到writeHost。
所有的 读操作(SELECT)随机分发到当前的readHost和备用的writeHost(如果配置了双主)。
注意:如果只有一个writeHost且没有readHost,则读写都在writeHost上。
balance="2":所有读操作随机分发到writeHost和readHost。
balance="3":所有读操作只分发到readHost,writeHost不承担读压力。
一主一从
这是最基础的读写分离架构:1个Master(主库,负责写),1个Slave(从库,负责读)。
配置逻辑:
<writeHost>指向 Master。
<readHost>指向 Slave。
设置balance="1"/"3"。
工作流程:
应用发送
INSERT->MyCat识别为写转发给 Master。
应用发送SELECT->MyCat识别为读转发给 Slave。
优点:结构简单,成本低。
缺点:单点故障风险。如果 Master 宕机,整个集群不可写。
双主双从
这通常指的是高可用读写分离架构,常见配置是“双主互备”+“各自带从库”:2个Master(互为备份),每个Master下挂1个或多个Slave。
在MyCat语境下,通常指配置多个writeHost以实现高可用。
配置逻辑:
在
<dataHost>中配置两个<writeHost>。
第一个<writeHost>为主,第二个为备。
每个<writeHost>内部可以嵌套<readHost>。
设置balance="1"。
工作流程:
正常情况:写操作发给第一个writeHost(主),读操作发给其下的readHost 或第二个writeHost(如果它也承担读任务)。
故障切换:如果第一个writeHost宕机,MyCat 会自动将写请求切换到第二个writeHost。
优点:
高可用:主库宕机可自动切换,保证服务不中断。
负载分担:读压力可以分散到多个从库和备用主库。
注意:真正的“双主双从”在MySQL层面需要解决数据冲突问题(通常使用 GTID 复制)。在MyCat中,更多是利用多writeHost实现故障转移(Failover),而非同时向两个主库写入(除非业务层做分片)。

浙公网安备 33010602011771号