阿里云使用Atlas从外网访问MySQL(RDS),Or, 自动分表

先纠正误区:
在ECS上使用Atals中转访问RDS不会影响效率,不要认为使用Atals后连接数据库会慢,连接数会疯狂占用,事实情况是刚好相反。

Atlas不处理主从数据库数据同步,只是个负载均衡的连接池工具,主从同步请使用其他工具另行实现,本文只为了外网访问RDS(流量免费),实现连接池,有效利用RDS连接数。

Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。

主要功能:
读写分离 从库负载均衡 IP过滤 自动分表 DBA可平滑上下线DB 自动摘除宕机的DB

1.下载:
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建议使用该版本)

2.安装
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

3.配置MySQL用户
先到RDS控制面板创建用户和数据库,并设置权限。记住现在设置的密码

4.配置Atlas
在/usr/local/mysql-proxy/conf目录新建配置文件,例如:rds.cnf(文件名称就是实例名称)内容如下:

[mysql-proxy]
# 符号#后的内容为注释
# 用来管理atals,非mysql,随意配置,切记密码安全
admin-username=管理员用户名
admin-password=password
#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
#例如这里设置的是一个rds的内网实例地址和端口
proxy-backend-addresses = xxxx.mysql.rds.aliyuncs.com:3306
#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
#阿里云RDS不支持主从,所以不配置从库
#proxy-read-only-backend-addresses = 127.0.0.1:[email protected]
#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
pwds = user:JOyWiSot5BiTOePy0weX/Q==
# 下文有详解解释
#设置Atlas的运行方式,设为true
daemon = true
#设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true
keepalive = true
#工作线程数,对Atlas的性能有很大影响,可根据情况适当设置
event-threads = 8
#日志级别,分为message、warning、critical、error、debug五个级别
log-level = message
#日志存放的路径
log-path = /usr/local/mysql-proxy/log
#SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘,默认为OFF
#sql-log = OFF
#实例名称,用于同一台机器上多个Atlas实例间的区分
#instance = test
#Atlas监听的工作接口IP和端口 这个就是我们以后访问的mysql的端口
proxy-address = 0.0.0.0:1234
#Atlas监听的管理接口IP和端口 如无必要建议设置为127.0.0.1
admin-address = 127.0.0.1:2345
#分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项
#tables = person.mt.id.3
#默认字符集,设置该项后客户端不再需要执行SET NAMES语句
#charset = utf8
#允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接
#client-ips = 127.0.0.1, 192.168.1

atlas需要手动设置用户和密码,第三步配置的用户名和密码现在有用了。
生成加密的密码:

/usr/local/mysql-proxy/bin/encrypt 密码
......这里是加密后的密码,复制

然后atlas的pwds配置是酱紫的:
pwds = 用户名:加密后的密码,用户名2:加密后的密码

然后启动服务

/usr/local/mysql-proxy/bin/mysql-proxyd 实例名称(我们的配置文件名称,不带.cnf) start
# start 启动
# stop 停止
# restart 重启

ok,现在可以在外网访问ecs的ip:1234(上面配置的端口),使用刚才配置的用户名和密码来访问内网后端的rds了。

ps:
方便直接管理,不用输入完整目录

ln -s /usr/local/mysql-proxy/bin/mysql-proxyd /usr/bin/mysqld (自己取名)
# 现在可以这么操作
mysqld rds start|stop|restart

开机自动启动

# 在/etc/rc.local文件 exit 0内容之前 加入如下内容
/usr/local/mysql-proxy/bin/mysql-proxyd rds start
去打赏

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

发表评论

电子邮件地址不会被公开。