10.分库分表的高可用

1.分库分表架构
在这里插入图片描述
MySQLA和MySQLB都是单点的,如果一个节点出现问题,那么就会出现数据不完整的问题,导致业务不可用。

2.复制与分库分表架构的结合
在这里插入图片描述
给MySQLA和MySQLB都配置一个从库,保证数据的完整性以及可靠性。

3.使用DBLE进行读写分离
(1).原理

  • DBLE分析SQL语义
  • 将写语句发送给主节点
  • 将读语句发送给从节点

(2).rwSplitMode配置

  • 0:直接分发到主实例
  • 1:读操作必须在所有从实例中均衡
  • 2:读操作在所有实例中均衡
  • 3:读操作尽量在所有从实例中均衡

(3).读写分离架构
在这里插入图片描述

4.读写分离实战
(1).将A现有数据库和数据表里的数据同步到A’上,并参照主从复制章节为A配置一个从节点A’

(2).进入DBLE所在节点,为A配置一个从节点A’

<?xml version="1.0"?>
<dble:db xmlns:dble="http://dble.cloud/" version="4.0">
	<!-- 修改rwSplitMode为1,将读操作打到从节点 -->
    <dbGroup name="dbGroup1" rwSplitMode="1" delayThreshold="100">
        <heartbeat>show slave status</heartbeat>
        <!-- 修改url、user和password -->
        <dbInstance name="instanceM1" url="121.4.211.73:3306" user="root" password="********" maxCon="1000" minCon="10" primary="true" readWeight="1" id="xx1">
            <property name="testWhileIdle">true</property>
        </dbInstance>
        <!-- 配置从节点实例信息 -->
        <dbInstance name="instanceS1" url="121.4.191.137:3306" user="root" password="********" maxCon="1000" minCon="10"  readWeight="2" disabled="false">
            <property name="testWhileIdle">true</property>
        </dbInstance>-->
    </dbGroup>

    <dbGroup name="dbGroup2" rwSplitMode="0" delayThreshold="100" disableHA="true">
        <heartbeat errorRetryCount="1" timeout="10" keepAlive="60">show slave status</heartbeat>
        <!-- 修改url、user和password -->
        <dbInstance name="instanceM2" url="121.4.191.124:3306" user="root" password="********" maxCon="1000" minCon="10" primary="true">
            <property name="testWhileIdle">true</property>
        </dbInstance>
    </dbGroup>
</dble:db>

(3).重启DBLE

cd /root/dble
bin/dble restart

在这里插入图片描述

(4).在每个MySQL实例上设置监控SQL语句

#监控
mysql> SET GLOBAL log_output = 'TABLE';SET GLOBAL general_log = 'ON';
#查询
mysql> select * from mysql.general_log order by event_time desc limit 0,10;

(5).测试读
通过DBLE数据端,查询id=1的数据,然后查看A和A’的SQL语句执行情况。

mysql -uroot -h'127.0.0.1' -P8066 -p123456
use testdb;
select * from tb_range_sharding where id = 1;

在这里插入图片描述
在这里插入图片描述
可以看到主数据库A并没有查询语句,而从数据库A’出现了查询语句,与db.xml中配置的rwSplitMode="1"预期结果一致。

5.分库分表之后性能反而下降的解决方案
(1).原因
DBLE根据拆分字段,判断数据在哪个节点上,如果DBLE不知道数据在哪里或者需要扫描更多的节点,就会导致性能下降。

(2).解决方案

  • 插入时必须带上拆分字段,否则无法插入数据,删改查尽量带上拆分字段
  • 拆分字段尽量等值,避免模糊查询,扫描过多节点
  • 减少跨节点连表
    • 经常join的表使用相同的拆分规则,这样便可以在同一个库操作
    • 使用拆分字段作为join条件
    • 尽量对驱动表添加更多的过滤条件
    • 尽量少使用跨节点排序、排序等功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值