• 如何轻松实现MySQL数据库的读写分离和负载均衡?


    配置好了 Mysql 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡。读写分离和负载均衡是 Mysql 集群的基础需求,MaxScale 就可以帮着我们方便的实现这些功能。


     
    image.png

    MaxScale 的基础构成

    MaxScale 是Mysql 的兄弟公司 MariaDB 开发的,现在已经发展得非常成熟。MaxScale 是插件式结构,允许用户开发适合自己的插件。
    MaxScale 目前提供的插件功能分为5类

    1. 认证插件
      提供了登录认证功能,MaxScale会读取并缓存数据库中 user 表中的信息,当有连接进来时,先从缓存信息中进行验证,如果没有此用户,会从后端数据库中更新信息,再次进行验证

    2. 协议插件
      包括客户端连接协议,和连接数据库的协议。

    3. 路由插件
      决定如何把客户端的请求转发给后端数据库服务器,读写分离和负载均衡的功能就是由这个模块实现的。

    4. 监控插件
      对各个数据库服务器进行监控,例如发现某个数据库服务器响应很慢,那么就不向其转发请求了。

    5. 日志和过滤插件
      提供简单的数据库防火墙功能,可以对SQL进行过滤和容错。

    配置方式

    准备3台服务器,安装 Mysql,配置一主二从的复制结构。主从复制的配置过程参加上一节内容。

    安装 MaxScale

    最好在另一台服务器上安装,如果资源不足,可以和某个 Mysql 放在一起。
    MaxScale 的下载地址,最新版本2.3.4,实例中使用的是1.4.5:
    https://downloads.mariadb.com/files/MaxScale

    根据自己的服务器选择合适的安装包,以 centos 7 为例安装步骤如下:

    yum install libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64 libedit -y
    wget https://downloads.mariadb.com/MaxScale/1.4.5/centos/7/x86_64/maxscale-1.4.5-1.centos.7.x86_64.rpm
    rpm -ivh maxscale-1.4.5-1.centos.7.x86_64.rpm

    配置MaxScale

    在开始配置之前,需要在 master 中为 MaxScale 创建两个用户,用于监控模块和路由模块:

    1. 创建监控用户
    create user 'maxmon'@'%' identified by '123456';
    grant replication slave,replication client on *.* to 'maxmon'@'%';
    1. 创建路由用户
    create user 'maxrou'@'%' identified by '123456';
    grant select on mysql.* to 'maxrou'@'%';
    flush privileges;
    1. 修改maxscale配置文件
      用户创建完成后,开始配置
    vi /etc/maxscale.cnf

    找到 [server1] 部分,修改其中的 address 和 port,指向 master 的 IP 和端口
    复制2次 [server1] 的整块儿内容,改为 [server2] 与 [server3],同样修改其中的 address 和 port,分别指向 slave1 和 slave2

     
     

    找到 [MySQL Monitor] 部分,修改 servers 为 server1,server2,server3,修改 user 和 passwd 为之前创建的监控用户的信息(maxmon,123456)

     
     

    找到 [Read-Write Service] 部分,修改 servers 为 server1,server2,server3,修改 user 和 passwd 为之前创建的路由用户的信息(maxrou,123456)

     
     

    由于我们使用了 [Read-Write Service],需要删除另一个服务 [Read-Only Service],删除其整块儿内容即可,底部还有一个[Read-Only Client]也需要删除。

    配置完成,保存并退出编辑器。

    启动MaxScale

    执行启动命令

    maxscale --config=/etc/maxscale.cnf

    查看 MaxScale 的响应端口是否已经就绪

    netstat -ntelp
     
     

    4006 是Read-Write Listener使用的端口,用于连接MaxScale

    6603 是MaxAdmin Listener使用的端口,用于MaxScale 管理器

    登录 MaxScale 管理器,查看一下数据库连接状态,默认的用户名和密码是 admin/mariadb

    maxadmin --user=admin --password=mariadb
    MaxScale> list servers
     
     

    可以看到,MaxScale 已经连接到了 master 和 slave

    测试

    先在 master 上创建一个测试用户

    create user 'rtest'@'%' identified by '111111';
    grant ALL PRIVILEGES on *.* to 'rtest'@'%';

    使用 Mysql 客户端到连接 MaxScale

    mysql -urtest -p'111111' -h'192.168.33.11' -P4006

    执行查看数据库服务器名的操作来知道当前实际所在的数据库

    Select @@hostname;
    start transaction;
    Select @@hostname;
    roolback;
    Select @@hostname;
     
    image.png

    开启事务后,就自动路由到了 master,普通的查询操作,是在 slave上。

    总结

    通过MaxScale可以很轻松的实现MySQL数据库的读写分离和负载均衡。

    想要了解更多Java架构技术点的,可以关注一下我,另外顺便给大家推荐一下我的Java交流社区:519752913,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,相信会对你有所帮助的。
    作者:山东大葱哥
    链接:https://www.jianshu.com/p/70d94a8f6491
  • 相关阅读:
    JQuery中的动画
    javascript之变量、作用域、作用域链
    正确理解javascript的this关键字
    我忽略了的DOCTYPE!
    JQuery中的DOM操作
    发布一款html5移动端scroll框架:xScroll
    在debug时使Flutter中的print打印json数据时更美观易读
    使用ValueListenableBuilder监听TextEditingController
    Flutter使用rxdart和ChangeNotifier实现的倒计时按钮
    Flutter设计一个长按自动步进的按钮
  • 原文地址:https://www.cnblogs.com/lfs2640666960/p/10833476.html
Copyright © 2020-2023  润新知