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)‌,而非同时向两个主库写入(除非业务层做分片)。

posted @ 2026-04-23 15:58  tcswuzb  阅读(45)  评论(0)    收藏  举报