zoukankan      html  css  js  c++  java
  • MySQL for OPS 09:MHA + Atlas 实现读写分离高可用

    写在前面的话

    前面做了 MHA 高可用,但是存在这样一个问题,我们花了 4 台机器,但是最终被利用起来的也就一台,主库。这样硬件利用率才 25%,这意味着除非发生故障,不然其他几台机器都是摆设。明显的资源浪费。那么有没有一种办法把这些机器利用起来。有,那就是读写分离,主库写,主库读。分担业务压力。本节主要说明 Atlas 的读写分离实现。

    搭建 Atlas 读写分离架构

    首先查看下理想的架构图:

    当然,我们这里比较简单,只是单节点的 Atlas 的读写分离,在生产应用中,一个完整的架构还是需要一些这样的冗余。确保我们服务真正的高可用。

    关于 Atlas,是由 360 公司根据 MySQL Proxy 进行二次开发的一个中间件,不过目前已经几年没有在维护了。但是服务已经相对稳定,不用担心。

    下载地址:

    https://github.com/Qihoo360/Atlas/releases

    下载 CentOS 6 的即可:

    完成后上传到 MHA Manager 节点安装:

    rpm -ivh Atlas-2.2.1.el6.x86_64.rpm

    安装完成后默认安装路径为:

    在 /usr/local/mysql-proxy/conf 目录下,默认带有 test.cnf 配置文件,里面有每个参数的详细说明。

    我们可以根据自己环境创建一个:

    1. 首先对我们需要使用 Atlas 做读写分离的用户的密码进行加密:

    /usr/local/mysql-proxy/bin/encrypt 123

    这样能得到加密的密码:

    我这里的密码都是 123,所以直接使用这个。所有要使用 Atlas 做读写分离的用户都必须在配置文件中声明。

    最终我们的配置如下 demo.cnf

    [mysql-proxy]
    admin-username = user
    admin-password = pwd
    # 这里使用 VIP,确保都能写
    proxy-backend-addresses = 192.168.100.120:3306
    # 配置从库的地址
    proxy-read-only-backend-addresses = 192.168.100.112:3306,192.168.100.113:3306
    # 需要使用 Atlas 做读写分离的用户
    pwds = repl:3yb5jEku5h4=,mha:3yb5jEku5h4=
    daemon = true
    keepalive = true
    event-threads = 8
    log-level = message
    log-path = /usr/local/mysql-proxy/log
    sql-log=ON
    # 最终连接 Atlas 的端口
    proxy-address = 0.0.0.0:33060
    admin-address = 0.0.0.0:2345
    charset=utf8

    2. 启动 Atlas:

    /usr/local/mysql-proxy/bin/mysql-proxyd demo start

    demo 就是我们配置文件的名字,这意味着我们可以定义多个配置文件,然后使用同一个 Atlas 管理多个集群。

    至此,Atlas 就配置完成!超级简单是不是!

    3. 测试 Atlas 读写分离效果:

    mysql -umha -p123 -h192.168.100.101 -P 33060

    在 MHA 节点上面直接连接就能登陆上数据库:

    此时查看 server_id,可以看到每一次请求都落在不同从库上面。

    测试写入,由于想要查看真实的 server_id,所以不能是 insert 这类,我们需要事务来模拟写入:

    begin; select @@server_id; commit;

    开启事务,数据库就会认为我们是写入操作:

    最终操作落在了主库上面,由此读写分离完成!

    管理 Atlas

    1. 此时如果业务需要新增一个用户,需要如何操作:

    a. 去主库建立用户:

    grant all on *.* to app@'%' identified by '123456';

    如图:

    b. 然后到 Atlas 机器上对密码进行加密:

    /usr/local/mysql-proxy/bin/encrypt 123456

    如图:

    c. 在 Atlas 配置文件中加入该用户并重启 Atlas:

    # 添加配置
    pwds = repl:3yb5jEku5h4=,mha:3yb5jEku5h4=,app:/iZxz+0GRoA=
    
    # 重启服务
    /usr/local/mysql-proxy/bin/mysql-proxyd demo restart

    如图:

    d. 验证用户登录:

    这样一个完整的过程才算添加完一个用户,相当麻烦不说,还需要重启 Atlas,对于生产环境肯定不是能够轻易接受的。

    其实 Atlas 给我们提供了管理接口,使用配置文件中定义的则可以登录:

    mysql -uuser -ppwd -h 192.168.100.101 -P 2345

    这就是文件中定义的 admin user 的作用:

    此时可以使用命令查看帮助:

    select * from help;

    如图:

    其中包含一系列管理命令,并包含了该目录的使用方法,可以看看常用的:

    1. 查看节点:

    select * from backends;

    如图:

    甚至可以看到库的权限。

    2. 我们可以在这里动态添加删除节点:

    remove backend 2;

    如图:

    此时就剩下两个节点了。查看配置文件:

    其实配置文件并未改变。我们可以让修改保存:

    save config;

    如图:

    再度查看配置文件:

    此时可以看到已经被剔除了,并且我们不需要重启 Atlas。

    当然也可以将剔除的节点再度加上:

    add slave 192.168.100.112:3306;

    如图:

    3. 用户管理:

    正如之前做的用户管理操作,特别麻烦,这里直接可以在管理接口添加,比如添加 root 用户:

    add pwd root:123;

    如图:

    查看配置:

    用户已经加上,并且还帮我们加密了,一下子就减少了很多麻烦。

    当然,如果你密码已经加密过了,只需要换个命令即可:

    ADD ENPWD $pwd 

    小结

    Atlas 的大致功能就到这里,从他的更新也可以看出慢慢被淘汰了,至于更新更好更复杂得需求。可以看看 Percona 的 ProxySQL,MaxScale,MySQL Router 等。

    https://github.com/sysown/proxysql/releases

  • 相关阅读:
    购物网站数据库表
    C#Excel的导入与导出
    DataTable过滤重复字段
    压力测试~一套完整的压力测试项目文档
    压力测试~测试工具的使用
    C#调用本机摄像头
    linq学习笔记
    EasyPlayer RTSP播放器对RTSP播放地址url的通用兼容修改意见
    我们计划为EasyDSS定制开发一款超低延时的EasyPlayer Flash播放器
    EasyRTMP+EasyDSS实现一套完整的紧急视频回传直播与存储回放方案
  • 原文地址:https://www.cnblogs.com/Dy1an/p/11542316.html
Copyright © 2011-2022 走看看