关于读写分离:技术分享-MaxScale-实现-MySQL读写分离

作者:李鹏博 爱可生 DBA 团队成员,次要负责 MySQL 故障解决和 SQL 审核优化。对技术执着,为客户负责。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 MaxScale 是由 MariaDB 官网出品的一款开源数据库中间件,其插件是插拔式的,而且能够定制化开发属于本人的插件,应用十分的灵便自在,目前官网提供了例如监控、高可用、读写拆散、防火墙等插件。其中高可用和监控插件相互配合能够实现 MariaDB 的 Failover 、Switchover 、autoRejoin 性能,并在故障转移时能够主动进行数据弥补,不过遗憾的是因为 MySQL 的 GTID 形成形式和 MariaDB 的差异性,目前 MySQL 无奈应用其高可用性能。不过能够应用其读写拆散性能。 提到数据库的读写拆散,其中须要解决的问题就是别离在主从实例上进行读写操作时如何保障在从实例读取的数据的正确性,个别咱们有如下几种做法,比方:提早读取,就是在读取前期待一段时间;转发须要数据正确性较高的查问到主实例;借助 MySQL 自身的半同步复制保障主从数据的一致性,并转发查问到无提早或提早较小的从实例上。第一种做法会人为的拉大查问的返回工夫;第二种则配置及保护起来较为艰难;第三种则看起来"针不戳"的样子。而 MaxScale 的实现形式就是第三种,通过指定读取时可能容忍的最大延迟时间,当从实例延迟时间超过该工夫后,读操作就不会被路由到该节点,如果切实没有可用从节点,读操作就会被路由到主节点。而且 MaxScale 还反对因果读取,通过配置 causal_reads=local 和 causal_reads_timeout 参数来实现,成果就是在从实例进行查问时,如果实例提早较大,会期待 causal_reads_timeout 超时,默认10s,超时后就将查问路由到主节点。当然,也并不是说这种实现形式就是最完满的,思考一种场景,如果所有的从实例都提早较高,在进行查问时没有可用从实例,这时主实例就要承当所有的读写压力,这时候负载会不会将主实例压死也是一个须要思考的问题。所以没有最完满的计划,只有最适宜本人的。接下来让咱们瞅瞅如何配置 MaxScale 实现 MySQL 数据库的读写拆散。 部署拓扑主机名IP角色node410.186.63.88Maxscalenode110.186.61.191MySQL Masternode210.186.61.192MySQL Slavenode310.186.63.64MySQL Slave部署后端 MySQL 一主两从半同步复制,部署步骤略,状态如下: ## 一主两从mysql> show slave hosts;+-----------+---------------+------+-----------+--------------------------------------+| Server_id | Host | Port | Master_id | Slave_UUID |+-----------+---------------+------+-----------+--------------------------------------+| 737716692 | 10.186.61.192 | 3306 | 622227692 | d121bf0f-1922-11ed-86d9-02000aba3dc0 || 534997148 | 10.186.63.64 | 3306 | 622227692 | bb3d53a9-1940-11ed-a059-02000aba3f40 |+-----------+---------------+------+-----------+--------------------------------------+2 rows in set (0.00 sec)## 半同步复制mysql> show global status like 'Rpl_semi_sync_master_clients';+------------------------------+-------+| Variable_name | Value |+------------------------------+-------+| Rpl_semi_sync_master_clients | 2 |+------------------------------+-------+1 row in set (0.00 sec)创立 MaxScale 用户并受权 ...

October 11, 2022 · 3 min · jiezi

关于读写分离:分布式-几步快速拥有读写分离

作者:王娟 爱可生 dble 团队测试成员,次要负责 dble 需要测试,自动化编写和社区问题解答。人狠话不多。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 dble 从 3.20.10 版本开始⽀持单纯的读写拆散性能,能够和分库分表性能离开使⽤。 如何疾速领有读写拆散呢?第一步,筹备好一组 mysql 实 例,并确保这组 mysql 实例的主从复制关系失常。如下应用一主二从的mysql: 主:172.100.9.6:3307 从:172.100.9.2:3307、172.100.9.3:3307 别离到2个从实例上执行 show slave status ,查看复制关系是否失常。 第二步,在 db.xml 配置 mysql 实例。如下: <dbGroup rwSplitMode="1" name="ha_group1" delayThreshold="100"> <heartbeat>show slave status</heartbeat> <dbInstance name="hostM1" password="******" url="172.100.9.6:3307" user="test" maxCon="1000" minCon="10" primary="true"/> <dbInstance name="hostS1" password="******" url="172.100.9.2:3307" user="test" maxCon="1000" minCon="10" readWeight="1"/> <dbInstance name="hostS2" password="******" url="172.100.9.3:3307" user="test" maxCon="1000" minCon="10" readWeight="1"/></dbGroup> 配置 dbGroup 时须要留神以下参数: rwSplitMode: 读操作的负载平衡模式,可选值 0/1/2/3 在进⾏读负载平衡的时候会依据这个配置进⾏0:不做平衡,间接散发到主实例,从实例将被疏忽,不会尝试建⽴连接池,但会有⼼跳连贯 1:读操作在所有从实例中平衡,当所有从实例都不可⽤时,下发语句会报错。 2:读操作在所有实例中平衡。 3:读操作在所有从实例中平衡,当所有从实例都不可⽤时,将语句发往主实例。 delayThreshold:指定主从提早阀值,单位秒,默认 -1 ,表⽰⽆提早 在进⾏读取负载平衡的时候会依据最近⼀次的⼼跳状态以及读库和主库的提早进⾏判断,如果主从复制不⼯作或者复制提早超过 delayThreshold 配置,则认为此节点不适宜进⾏读取,依赖于⼼跳语句为 show slave status 。如果 delayThreshold=-1 那么读负载平衡选取的时候不会进⾏提早检测。 readWeight:节点权重(负载平衡时候使⽤) 负载平衡过程中会查看所有节点的权重是否相等,如果不相等,那么就会依据权重来配置压⼒。该值需是⼤于等于 0 的整数。如果配为 0 表⽰该节点不参加读。需注意,总权重(所有节点权重之和)必须⼤于 0。 如何辨别读节点与写节点?写节点:primary="true"读节点:primary 没配置或者 primary="false" ...

June 28, 2022 · 1 min · jiezi