关于读写分离:技术分享-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 用户并受权 ...