写在前面的话

前面做了 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 '';

如图:

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

MySQL for OPS 09:MHA + Atlas 实现读写分离高可用的更多相关文章

  1. MHA+ProxySQL实现读写分离高可用

    最近在研究ProxySQL,觉得还挺不错的,所以就简单的折腾了一下,ProxySQL目前也是Percona在推荐的一个读写分离的中间件.关于详细的介绍可以参考官方文档.https://github.c ...

  2. MHA+atlas(数据库的高可用与读写分离)

    学习完了mycat的高可用还是复习一下MHA+atlas吧,个人感觉还是比mycat好用,毕竟MHA有数据补全和切换主从的机制 1 MHA是什么? MHA(Master High Availabili ...

  3. Atlas读写分离[高可用]

    Atlas下载地址: https://github.com/Qihoo360/Atlas/releases Atlas是出于360的, 比mysql-proxy更稳定, 部署起来更方便. 环境: pr ...

  4. MHA+ProxySQL 读写分离高可用

    文档结构如下: 1.ProxySQL说明 ProxySQL是mysql的一款中间件的产品,是灵活的mysql代理层,可以实现读写分离,支持query路由器的功能,支持动态指定sql进行缓存,支持动态加 ...

  5. mysql读写分离[高可用]

    顾名思义, 在mysql负载均衡中有多种方式, 本人愚钝,只了解驱动中间件和mysql_proxy两种方式, 对于驱动,利用的是ReplicationDriver,具体请看远哥的这篇文章: MySQL ...

  6. MySQL读写分离高可用集群及读操作负载均衡(Centos7)

    目录 概述 keepalived和heartbeat对比 一.环境 二.部署 部署lvs代理和keepalived MySQL+heartbeat+drbd的部署 MySQL主从复制 web服务器及a ...

  7. 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡

    目录 一.MHA+ProxySQL架构 二.快速搭建MHA环境 2.1 下载MHA镜像 2.2 编辑yml文件,创建MHA相关容器 2.3 安装docker-compose软件(若已安装,可忽略) 2 ...

  8. 基于MGR+Atlas的读写分离尝试,以及MGR+Keepalived+Atlas自动故障转移+读写分离设想

    目的是尝试altas的读写分离,现有一套搭建好做测试的MGR(单主),于是就腿搓绳,在MGR基础上搭建altas. 复制环境准备 读写分离理论上讲,跟复制模式没有关系,atlas负责的是重定向读写,至 ...

  9. 如何利用MHA+ProxySQL实现读写分离和负载均衡

    摘要:本文分享一下"MHA+中间件ProxySQL"如何来实现读写分离+负载均衡的相关知识. 本文分享自华为云社区<MySQL高可用架构MHA+ProxySQL实现读写分离和 ...

随机推荐

  1. acwing 850. Dijkstra求最短路 II 模板

    地址 https://www.acwing.com/problem/content/description/852/ 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求 ...

  2. 09. Go 语言并发

    Go 语言并发 并发指在同一时间内可以执行多个任务.并发编程含义比较广泛,包含多线程编程.多进程编程及分布式程序等.本章讲解的并发含义属于多线程编程. Go 语言通过编译器运行时(runtime),从 ...

  3. IM开发基础知识补课(七):主流移动端账号登录方式的原理及设计思路

    1.引言 在即时通讯网经常能看到各种高大上的高并发.分布式.高性能架构设计方面的文章,平时大家参加的众多开发者大会,主题也都是各种高大上的话题——什么5G啦.AI人工智能啦.什么阿里双11分分钟多少万 ...

  4. IT兄弟连 HTML5教程 HTML5表单 小结及习题

    小结 HTML表单提交的方法有get方法和post方法,get方法的作用是从指定的资源请求数据,post方法的作用是向指定的资源提交要被处理的数据.HTML表单一直都是Web的核心技术之一,有了它我们 ...

  5. C#_.NetFramework_Web项目_EXCEL数据导出

    [推荐阅读我的最新的Core版文章,是最全的介绍:C#_.NetCore_Web项目_EXCEL数据导出] 项目需引用NPOI的NuGet包: A-2:EXCEL数据导出--Web项目--C#代码导出 ...

  6. MSSQL注入:显错注入及反弹注入

    前言: MSSQL注入攻击是最为复杂的数据库攻击技术,由于该数据库功能十分强大,存储过程以及函数语句十分丰富,这些灵活的语句造就了新颖独特的攻击思路. MSSQL的显错注入操作: 以联合查询为例: 猜 ...

  7. myeclipse 9.0 破解方法,亲测可用

    MyEclipse 9.0的破解方法,步骤如下: 1.破解公钥,确保MyEclipse没有开启,否则失败! 用WinRAR打开Common\plugins\com.genuitec.eclipse.c ...

  8. Python函数名做参数,闭包,装饰器

    简单讲解闭包的写法和应用,在这之前,先声明,你定义的任意一个函数都可以作为其他函数的参数.就像下面这段代码的参数func,接收的参数就是一个函数名,在函数体内部使用了func()调用执行函数. 请看下 ...

  9. Codeforces Round #598 (Div. 3)

    传送门 A. Payment Without Change 签到. Code /* * Author: heyuhhh * Created Time: 2019/11/4 21:19:19 */ #i ...

  10. Codeforces Round #606 (Div. 2)

    传送门 A. Happy Birthday, Polycarp! 签到. Code /* * Author: heyuhhh * Created Time: 2019/12/14 19:07:57 * ...