[记录]MySQL读写分离(Atlas和MySQL-proxy)
MySQL读写分离(Atlas和MySQL-proxy)
一、阿里云使用Atlas从外网访问MySQL(RDS)
(同样的方式修改配置文件可以实现代理也可以实现读写分离,具体看使用场景)
1.在跳板机上使用Atals中转访问RDS不会影响效率,不要认为使用Atals后连接数据库会慢,连接数会疯狂占用,事实情况是刚好相反。
Atlas不处理主从数据库数据同步,只是个负载均衡的连接池工具,主从同步请使用其他工具另行实现,本文只为了外网访问RDS(流量免费),实现连接池,有效利用RDS连接数。
Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平 台,每天承载的读写请求数达几十亿条。
主要功能:
1)读写分离
2)从库负载均衡
3)IP过滤
4)自动分表
5)DBA可平滑上下线DB
6)自动摘除宕机的DB
2.下载:
centos 5.x/6.x:
https://github.com/Qihoo360/Atlas/releases/download/2.1/Atlas-2.1.el5.x86_64.rpm
(centos5.x)
https://github.com/Qihoo360/Atlas/releases/download/2.1/Atlas-2.1.el6.x86_64.rpm
(centos6.x)
debian/ubuntu(ubuntu未测试)
https://github.com/Qihoo360/Atlas/releases/download/2.1/Atlas-2.1-debian6.0-x86_64.deb
(debian6)
https://github.com/Qihoo360/Atlas/releases/download/2.1/Atlas-2.1-debian7.0-x86_64.deb
(debian7,ubuntu建议使用该版本)
3.安装:
centos:
rpm -ivh Atlas-2.1.el6.x86_64.rpm
debian/ubuntu
dpkg -i Atlas-2.1-debian7.0-x86_64.deb
安装目录为
/usr/local/mysql-proxy
4.配置Atlas:
在/usr/local/mysql-proxy/conf目录新建配置文件,例如:rds.cnf(文件名称就是实例名称)内容如下:
|
1 |
[mysql-proxy] |
||||||||||||||||||||||||||||||||
|
2 |
# 符号#后的内容为注释 |
||||||||||||||||||||||||||||||||
|
3 |
# 用来管理atals,非mysql,随意配置,切记密码安全 |
||||||||||||||||||||||||||||||||
|
4 |
admin-username=管理员用户名 |
||||||||||||||||||||||||||||||||
|
5 |
admin-password=password |
||||||||||||||||||||||||||||||||
|
6 |
#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔 |
||||||||||||||||||||||||||||||||
|
7 |
#例如这里设置的是一个rds的内网实例地址和端口 |
||||||||||||||||||||||||||||||||
|
8 |
proxy-backend-addresses = |
||||||||||||||||||||||||||||||||
|
9 |
#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔 |
||||||||||||||||||||||||||||||||
|
10 |
#阿里云RDS不支持主从,所以不配置从库 |
||||||||||||||||||||||||||||||||
|
11 |
#proxy-read-only-backend-addresses |
||||||||||||||||||||||||||||||||
|
12 |
#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码! |
||||||||||||||||||||||||||||||||
|
13 |
pwds = |
||||||||||||||||||||||||||||||||
|
14 |
# 下文有详解解释 |
||||||||||||||||||||||||||||||||
|
15 |
#设置Atlas的运行方式,设为true |
||||||||||||||||||||||||||||||||
|
16 |
daemon = true |
||||||||||||||||||||||||||||||||
|
17 |
# 设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出 后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true |
||||||||||||||||||||||||||||||||
|
18 |
keepalive = true |
||||||||||||||||||||||||||||||||
|
19 |
#工作线程数,对Atlas的性能有很大影响,可根据情况适当设置 |
||||||||||||||||||||||||||||||||
|
20 |
event-threads = 8 |
||||||||||||||||||||||||||||||||
|
21 |
#日志级别,分为message、warning、critical、error、debug五个级别 |
||||||||||||||||||||||||||||||||
|
22 |
log-level = message |
||||||||||||||||||||||||||||||||
|
23 |
#日志存放的路径 |
||||||||||||||||||||||||||||||||
|
24 |
log-path = |
||||||||||||||||||||||||||||||||
|
25 |
#SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘,默认为OFF |
||||||||||||||||||||||||||||||||
|
26 |
#sql-log = OFF |
||||||||||||||||||||||||||||||||
|
27 |
#实例名称,用于同一台机器上多个Atlas实例间的区分 |
||||||||||||||||||||||||||||||||
|
28 |
#instance = test |
||||||||||||||||||||||||||||||||
|
29 |
#Atlas监听的工作接口IP和端口 这个就是我们以后访问的mysql的端口 |
||||||||||||||||||||||||||||||||
|
30 |
proxy-address = 0.0.0.0:1234 |
||||||||||||||||||||||||||||||||
|
31 |
#Atlas监听的管理接口IP和端口 如无必要建议设置为127.0.0.1 |
||||||||||||||||||||||||||||||||
|
32 |
admin-address = 127.0.0.1:2345 |
||||||||||||||||||||||||||||||||
|
33 |
#分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项 |
||||||||||||||||||||||||||||||||
|
34 |
#tables = person.mt.id.3 |
||||||||||||||||||||||||||||||||
|
35 |
#默认字符集,设置该项后客户端不再需要执行SET NAMES语句 |
||||||||||||||||||||||||||||||||
|
36 |
#charset = utf8 |
||||||||||||||||||||||||||||||||
|
37 |
#允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接 |
||||||||||||||||||||||||||||||||
|
38 |
#client-ips = 127.0.0.1, 192.168.1 |
||||||||||||||||||||||||||||||||
atlas需要手动设置用户和密码,第三步配置的用户名和密码现在有用了。
生成加密的密码:
|
1 |
/usr/local/mysql-proxy/bin/encrypt |
|
|
2 |
......这里是加密后的密码,复制 |
|
然后atlas的pwds配置是这样的:
pwds = 用户名:加密后的密码,用户名2:加密后的密码
5.启动:
|
1 |
/usr/local/mysql-proxy/bin/mysql-proxyd |
|||
|
2 |
# start 启动 |
|||
|
3 |
# stop 停止 |
|||
|
4 |
# restart 重启 |
|||
现在可以在外网访问ecs的ip:1234(上面配置的端口),使用刚才配置的用户名和密码来访问内网后端的rds。
二、使用MySQL-Proxy实现MySQL读写分离
1.安装lua,libevent,check,mysql-client
2.设置环境变量(安装mysql-proxy需要)
#vi /etc/profiles
export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"
export CPPFLAGS="-I/usr/local/libevent/include"
export CFLAGS="-I/usr/local/libevent/include"
3.安装mysql-proxy
#tar -zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
#cp mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
4.启动mysql-proxy
#mysql-proxy --proxy-backend-addresses=192.168.1.100:3306 --proxy-read-only-backend-addresses=192.168.1.101:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua &
注:如果正常情况下启动后终端不会有任何提示信息,启动两个端口4040和4041,前者用于SQL转发,后者用于管理mysql-proxy。如果有多个slave可以依次在后面添加。mysql-proxy会自动屏蔽后端发生故障的mysql-slave。
MySQL-Proxy的配置文件还未细研究,这里只简单的实现配置启动。
[记录]MySQL读写分离(Atlas和MySQL-proxy)的更多相关文章
- Mysql读写分离方案-MySQL Proxy环境部署记录
Mysql的读写分离可以使用MySQL Proxy和Amoeba实现,其实也可以使用MySQL-MMM实现读写分离的自动切换.MySQL Proxy有一项强大功能是实现"读写分离" ...
- MysqL读写分离的实现-Mysql proxy中间件的使用
为什么要架设读写分离,这里不做多余的说明,想了解具体原理,请百度或者参考其他帖子.在这里只做大概的配置说明,测试中使用三台服务器 192.168.136.142 主服务器 192.168.136. ...
- mysql读写分离的解决方案
来源于网上整理 http://yanwt.iteye.com/blog/1460780 现有三种解决方式实现mysql读写分离 1 程序修改mysql操作类 优点:直接和数据库通信,简单快捷的读写分离 ...
- Mysql 高可用(MHA)-读写分离(Atlas)-分布式架构(Mycat)
Mysql 高可用(MHA)-读写分离(Atlas) 1. 搭建主从复制(一主两从) 1.1 准备环境 1 主库:10.0.0.51/db01 2 从库:10.0.0.52/db02,10.0.0.5 ...
- Mysql读写分离方案-Amoeba环境部署记录
Mysql的读写分离可以使用MySQL Proxy,也可以使用Amoeba.Amoeba(变形虫)项目是一个类似MySQL Proxy的分布式数据库中间代理层软件,是由陈思儒开发的一个开源的java项 ...
- 使用Atlas实现MySQL读写分离+MySQL-(Master-Slave)配置
参考博文: MySQL-(Master-Slave)配置 本人按照博友北在北方的配置已成功 我使用的是 mysql5.6.27版本. 使用Atlas实现MySQL读写分离 数据切分——Atlas读 ...
- Mysql读写分离-Amoeba Proxy
参考:http://www.linuxidc.com/Linux/2015-10/124115.htm 一个完整的MySQL读写分离环境包括以下几个部分: 应用程序client database pr ...
- mysql读写分离[高可用]
顾名思义, 在mysql负载均衡中有多种方式, 本人愚钝,只了解驱动中间件和mysql_proxy两种方式, 对于驱动,利用的是ReplicationDriver,具体请看远哥的这篇文章: MySQL ...
- mysql读写分离 主从同步
MySQL主从复制与读写分离的实现 转载 2013年01月17日 18:20:12 MySQL主从复制与读写分离 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy) ...
随机推荐
- MYSQL Optimizing LIMIT Queries
如果要指定查询的数据行数,在查询语句中使用limit子句,而不是获取所有数据行结果集,然后去掉没用的数据. MYSQL有时会对没有having子句,带有limit关键字的查询进行优化: 1:如果用li ...
- 国内不谈java
今天晚上在整理电脑,不知道怎么回事,电脑里面放着一篇文章.打开一看写的挺好的,现在就贴出来,望共勉. 国内不谈java--会有千万人跳出来和你争嘴的.越是如此,我越是不忍心不说出来,越是不不忍心看 ...
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
Java8内存模型—永久代(PermGen)和元空间(Metaspace) 查看原文点击传送门:http://www.cnblogs.com/paddix/p/5309550.html 提示:本文做了 ...
- Log4net使用详细说明
1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是介绍如何在Visual S ...
- Markdown中使用mermaid画流程图
Markown语法简单,用来写文档是个不错的选择. 但是Markdown 语法并不直接支持画图,当然方法还是有的. 本人用的Markdown编辑器为vscode,在里面直接安装merdaid插件即可使 ...
- <global-results>标签来定义全局的<result>
<global-results> <result name="error">/Error.jsp</result> <!-- Ac ...
- 安卓studio导入jra包和so包,百度地图so包加载
导入so包 这个我只接受测试可用的一种方法 第一步:把so包放在libs目录下,可以是文件夹也可以是单独的一个个so文件 然后在src同级的目录下找到build.gradle文件下如下信息 sourc ...
- Spring 4.x (二)
1 静态代理 PersonDAO.java package com.xuweiwei.staticproxy; public interface PersonDAO { public void sav ...
- Struts2是什么?
Struts2是什么: Struts2是整合了struts1和webwork的技术优点的使用广泛的MVC框架: Struts2的特点: 1.基于MVC框架,结构清晰,便于开发人员掌控开发流程: 2.使 ...
- 面试中的Https
在Http协议中有可能存在信息窃听或身份伪装的安全问题.使用HTTPS通信机制可以有效地防止这些问题. Https Http的缺点 通信使用明文(不加密),内容可能会被窃听. 不验证通信方的身份,因此 ...