这两天在学习mysql的读写分离和负载均衡,尝试了主从模式和mysql cluter,最后还是选择了一主多从,然后读写分离,这比较适合读量大的网站。然后对于mysql的负载均衡器,起先尝试了一下SQL请求路由器 Amoeba,读写分离不错,但是不支持事务,因为我测试的网站是采取spring mvc+hibernate的。然后看到了360公司的MySQL中间层 Atlas,这是支持事务的,把自己的安装和配置记录一下。
首先,先去下载Altas的rpm包,下载地址:https://github.com/Qihoo360/Atlas/releases
要看清楚版本,centos 5.x:Atlas-1.0.3.el5.x86_64.rpm centos 6.x:
我的系统是centos 6.4 ,所以下载Atlas-1.0.3.el6.x86_64.rpm
千万别搞错了,否则最后启动会出错。大家也可以采取源码编译安装,不过rpm安装比较省时省力,而且简单。
下载rpm
wget https://github.com/Qihoo360/Atlas/releases/download/1.0.3/Atlas-1.0.3.el6.x86_64.rpm
推荐使用2.2版本http://pan.baidu.com/s/1jGZSiwA
安装
rpm -i Atlas-2.2.0.3.el6.x86_64.rpm
安装的目录是/usr/local/mysql-proxy
主数据库服务器:192.168.6.119 (ggggg.test1有3条数据,为了后面验证读写分离)
从数据库服务器:192.168.6.120 (ggggg.test1有2条数据)
proxy服务器:192.168.6.119(机器有限,就布置在主上面了)
conf文件夹下有一个自带的配置文件test.cnf,我们可以直接修改,下面是我修改的
- [root@localhost conf]# more test.cnf
- [mysql-proxy]
-
- #带#号的为非必需的配置项目
-
- #管理接口的用户名 --进入atlas后台管理的用户
- admin-username = root
- #管理接口的密码 ---密码
- admin-password = haodai123
-
- #Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
- proxy-backend-addresses = 192.168.6.119:3306
-
- #Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号
- 分隔
- proxy-read-only-backend-addresses = 192.168.6.121:3306@1
-
- #用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密(./encrypt password),下行的user1和user2为示例,
- 将其替换为你的MySQL的用户名和加密密码!
- pwds = root:osdCRatAwJoa8s/oWZlMvQ==, root:osdCRatAwJoa8s/oWZlMvQ== ---这两个是主从上面的数据库用户以及密码,我为了方便就配置的root
-
- #设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为
- true,true后面不能有空格。
- daemon = true
-
- #设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会
- 自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true,true后面不能有空
- 格。
- #keepalive = flase
-
- #工作线程数,对Atlas的性能有很大影响,可根据情况适当设置
- event-threads = 4
-
- #日志级别,分为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
-
- #慢日志输出设置。当设置了该参数时,则日志只输出执行时间超过sql-log-slow(单位:ms)的日志记录。不设置该参数则输
- 出全部日志。
- #sql-log-slow = 10
-
- #实例名称,用于同一台机器上多个Atlas实例间的区分
- instance = test
-
- #Atlas监听的工作接口IP和端口 ---就是我们对主从进行sql操作的登陆端口
- proxy-address = 0.0.0.0:1234
-
- #Atlas监听的管理接口IP和端口 ---进入atlas后台管理的端口
- admin-address = 0.0.0.0: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前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置
- #lvs-ips = 192.168.1.1
启动
[root@localhost conf]# /usr/local/mysql-proxy/bin/mysql-proxyd test start ---这个test 是test.conf
如果上面的启动不了, 最后,进入到bin文件夹下,启动Altas
./mysql-proxy --defaults-file=../conf/test.cnf
对应的log下面会生成以instance.log日志
[root@localhost log]# ls
test.log test.pid ---因为 instance=test
查看
[root@localhost conf]# /usr/local/mysql-proxy/bin/mysql-proxyd test status ---conf中instance是test所以这是test,如果是XX 这就写xx
MySQL-Proxy of test is running (5305)
关闭
[root@localhost conf]# /usr/local/mysql-proxy/bin/mysql-proxyd test stop
登陆管理端口
- [root@localhost ~]# mysql -uroot -phaodai123 -P2345 -h127.0.0.1
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.99-agent-admin
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
ERROR 1105 (07000): use 'SELECT * FROM help' to see the supported commands
mysql> SELECT * FROM help;
+----------------------------+---------------------------------------------------------+
| command | description |
+----------------------------+---------------------------------------------------------+
| SELECT * FROM help | shows this help |
| SELECT * FROM backends | lists the backends and their state |
| SET OFFLINE $backend_id | offline backend server, $backend_id is backend_ndx's id |
| SET ONLINE $backend_id | online backend server, ... |
| ADD MASTER $backend | example: "add master 127.0.0.1:3306", ... |
| ADD SLAVE $backend | example: "add slave 127.0.0.1:3306", ... |
| REMOVE BACKEND $backend_id | example: "remove backend 1", ... |
| SELECT * FROM clients | lists the clients |
| ADD CLIENT $client | example: "add client 192.168.1.2", ... |
| REMOVE CLIENT $client | example: "remove client 192.168.1.2", ... |
| SELECT * FROM pwds | lists the pwds |
| ADD PWD $pwd | example: "add pwd user:raw_password", ... |
| ADD ENPWD $pwd | example: "add enpwd user:encrypted_password", ... |
| REMOVE PWD $pwd | example: "remove pwd user", ... |
| SAVE CONFIG | save the backends to config file |
| SELECT VERSION | display the version of Atlas |
+----------------------------+---------------------------------------------------------+
16 rows in set (0.00 sec)
登陆数据库检查读写分离
- [root@localhost ~]# mysql -uroot -pESBecs00 -P1234 -h127.0.0.1 ----通过工作接口端口登陆数据库
- [root@localhost ~]# mysql -uroot -pESBecs00 -P1234 -h192.168.6.119 -----从别的主机登陆,程序层登陆
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.0.81-log MySQL Community Server (GPL)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| amobe2 |
| bbbbbb |
| ch |
| ggggg |
| hellodb |
| mysql |
| performance_schema |
+--------------------+
8 rows in set (0.01 sec)
mysql> select * from ggggg.test1; ---看到没。是从从库里面读出来的
+------+
| id |
+------+
| 10 |
| 120 |
+------+
2 rows in set (0.04 sec) -
-
altas查询多查询几遍
mysql> select * from ggggg.test1;
+------+
| id |
+------+
| 10 |
| 120 |
+------+
2 rows in set (0.00 sec)
查看从库的generallog
150923 6:55:39 536 Query select * from ggggg.test1
150923 6:57:34 536 Query select * from ggggg.test1
150923 6:57:35 536 Query select * from ggggg.test1
atlas执行insert写操作
mysql> insert into ggggg.test1 values(130);
Query OK, 1 row affected (21.94 sec)
查看主库的generallog日志
151120 15:38:08 13 Connect root@192.168.6.119 on
151120 15:38:10 13 Query SET CHARACTER_SET_CONNECTION=utf8
13 Query SET CHARACTER_SET_RESULTS=utf8
13 Query SET CHARACTER_SET_CLIENT=utf8
13 Query insert into ggggg.test1 values(130)
到此测试完毕,读写分离成功!!!!!
补充:详细的配置文件说明
- 配置文件
-
- Atlas运行需要依赖一个配置文件(test.cnf)。在运行Atlas之前,需要对该文件进行配置。Atlas的安装目录是/usr/local/mysql-proxy,进入安装目录下的conf目录,可以看到已经有一个名为test.cnf的默认配置文件,我们只需要修改里面的某些配置项,不需要从头写一个配置文件。
-
- 1、 配置范例及说明如下
-
- [mysql-proxy]
-
- (必备,默认值即可)管理接口的用户名
-
- admin-username= root
-
- (必备,默认值即可)管理接口的密码
-
- admin-password= password
-
- (必备,默认值即可)实现管理接口的Lua脚本所在路径
-
- admin-lua-script= /usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
-
- (必备,根据实际情况配置)主库的IP和端口,可设置多项,用逗号分隔(注:Atlas现在支持多master,但不建议使用,估计还不太完善)
-
- proxy-backend-addresses= 192.168.0.1:3306
-
- (非必备,根据实际情况配置)从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔。proxy-read-only-backend-addresses = 192.168.0.2:3306,192.168.0.3:3306
-
- (必备,根据实际情况配置)用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,用户名与密码之间用冒号分隔。主从数据库上需要先创建该用户并设置密码(用户名和密码在主从数据库上要一致)。比如用户名为myuser,密码为mypwd,执行./encryptmypwd结果为HJBoxfRsjeI=,则设置如下行所示:
-
- pwds= myuser: HJBoxfRsjeI=
-
- (必备,默认值即可)Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true
-
- daemon= true
-
- (必备,默认值即可)设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true
-
- keepalive= true
-
- (必备,根据实际情况配置)工作线程数,推荐设置成系统的CPU核数
-
- event-threads= 4
-
- (必备,默认值即可)日志级别,分为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和端口
-
- proxy-address= 0.0.0.0:1234
-
- (必备,默认值即可)Atlas监听的管理接口IP和端口admin-address = 0.0.0.0:2345
-
- (可选项,可不设置)分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项,子表需要事先建好,子表名称为表名数字,数字范围为[0,子表数-1],如本例里,子表名称为mt_0、mt_1、mt_2
-
- tables= person.mt.id.3
-
- (可选项,可不设置)默认字符集,若不设置该项,则默认字符集为latin1
-
- charset= utf8
-
- (可选项,可不设置)允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接
-
- client-ips= 127.0.0.1, 192.168.1.
-
- (可选项,极少需要)Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置
-
- lvs-ips= 192.168.1.1
-
-
-
- 2、 重要配置说明
-
- 以下几项配置参数对性能和正常运行起到重要作用,需要正确设置。
-
- (1)线程数
-
- event-threads项设置,过小无法充分发挥多核CPU的性能,过大造成不必要的线程切换开销,推荐设置为CPU的核数。
-
- (2)最小空闲连接数(2.x以上版本不需要该项,1.x版本需要)
-
- min-idle-connections项设置,过小则在高并发下会有报错,过大虽然不报错但在测试时不容易看出读写分离效果,推荐设置为比客户端的并发峰值稍大。
-
- a、 该参数用来实现连接数控制功能。
-
- b、 该值应设为event-threads的整数倍(不是整数倍的情况会自动向上取整数倍),且不低于实际使用时的并发量,若小于event-threads会没有可用连接导致报错。
-
- c、 Atlas为每台DB建立一个连接池。
-
- d、 当有客户端连接Atlas时,Atlas会先在第一台DB上建立连接,直到第一台DB连接池内的空闲连接数达到min-idle-connections,再在下一台DB上建立连接,直到所有DB连接池内的空闲连接数都达到min-idle-connections,便不再建立新连接,而开始复用连接池内的连接。
-
- e、 Atlas启动时,配置里的所有DB会按照主库在前从库在后的顺序在内存里排好次序,所以初始阶段会先在主库上建立连接。
-
- f、 Atlas在运行过程中,某连接如果触发了DB的wait_timeout,Atlas会把该连接销毁,如果因此而导致连接池内的空闲连接数低于min-idle-connections,Atlas将在客户端下一次连接时重新在该DB上建立连接。
-
- g、 以上策略是因为在客户端与MySQL的交互过程中,connect和query是两个独立的阶段,在connect阶段Atlas需要决定在哪台DB上建立连接(或从哪台DB的连接里取出连接复用),而到了query阶段Atlas才能知道客户端发来的SQL语句是读还是写,这就决定了必须在主库上预留一定数量的连接供写语句使用。
-
- h、 初使用者常常会误认为读写分离不起作用,其实是由于min-idle-connections设置得较大,而测试时只连接了一次或几次,这样的话建立的连接都在主库上,从库上还没有建立连接,此时发送读语句,自然也只能打向主库。只有在连接次数超过了min-idle-connections时,从库上才开始建立连接,从库上有连接后,读语句才能打向从库,此时读写分离才能生效。
-
- i、 因此在测试读写分离时,可以将min-idle-connections设得较小,这样可以在少数几次连接后就看到读写分离的效果,而在线上运行时,应将min-idle-connections调大,防止并发量高峰时取不到可用连接导致前端报错。
-
- j、 DB的wait_timeout建议不要设得太小,因为Atlas有连接池机制,不会一直新建连接导致DB上连接数过多,所以DB不需要依赖wait_timeout防止过多连接,如果wait_timeout太小会导致Atlas的一些不必要的销毁超时连接的开销。
-
- 上面的配置范例是针对Atlas2.X版本,没有该选项。对于Atlas1.X版本的配置文件,需要加入该配置选项。
-
- (3)pwds
-
- a、该参数用来实现多用户的权限控制功能。Atlas2.x版本中必须配置该项参数。
-
- b、密码使用PREFIX/bin/encrypt程序加密,避免有人打开配置文件就能看到所有用户的密码,只是简单地防护一下,并不能防止专门的恶意破解。
-
- c、在Atlas的内存中,多个用户共用连接池,池内同时有多个用户名及使用其密码认证过的连接,在A用户连接Atlas时,从池中取出的连接有可能是B用户认证过的,这就需要使用A用户的密码将此连接change为A用户的认证连接,否则直接给A用户使用该连接就会引发权限问题。
-
- d、如果将各用户的连接池独立,则无法与min-idle-connections机制良好配合,会造成连接数一直上涨的问题。(此项说明只针对Atlas1.x版本。在Atlas2.x版本中当连接池中没有可用连接时,Atlas支持自建连接,已经不需要min-idle-connections机制。)
-
- e、官方版本中多用户也是共用连接池,但没有实现change机制,因此经常发生A用户看到B用户的库和表的现象。
-
- (4)client-ips
-
- a、该参数用来实现IP过滤功能。
-
- b、在传统的开发模式中,应用程序直接连接DB,因此DB会对部署应用的机器(比如web服务器)的IP作访问授权。
-
- c、在引入中间层后,因为连接DB的是Atlas,所以DB改为对部署Atlas的机器的IP作访问授权,如果任意一台客户端都可以连接Atlas,就会带来潜在的风险。
-
- d、client-ips参数用来控制连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔写在一行上即可,如client-ips=192.168.1.2,192.168.2,这就代表192.168.1.2这个IP和192.168.2.*这个C段的IP可以连接Atlas,其他IP均不能连接。
-
- e、如果该参数不设置,则任意IP均可连接Atlas。
-
- f、如果设置了client-ips参数,且Atlas前面挂有LVS,则必须设置lvs-ips参数,否则可以不设置lvs-ips。
-
- (5)lvs-ips
-
- a、该参数是Atlas前面挂接的LVS的物理网卡的IP,不是虚IP。
-
- b、该参数用来实现平滑重启功能,否则在重启Atlas的瞬间的那些SQL请求都会失败,如果认为应用可以接受瞬间的报错则可以直接重启。
-
- c、平滑重启的条件:至少有两台配置相同的Atlas,且挂接在LVS之后。
-
- d、平滑重启的原理:LVS周期性地对后端Atlas的存活检测有两种方式,一是直接去探测端口是否可连接,二是执行一个脚本,这个脚本会去尝试连接Atlas,通过脚本的返回值来决定每个后端是否可用。Atlas有两种运行状态,通常为online,可通过发信号将其置为offline。Atlas检测到来请求的IP是LVS的网卡IP时,如果处于online状态,就向LVS的检测脚本返回online,如果处于offline状态,就向脚本返回offline。比如我现在因为某种原因需要重启一台Atlas,但直接重启势必导致瞬间的SQL请求全部失败,对前端应用造成影响。因此我先发下线信号将Atlas置为offline状态,当LVS的检测脚本发现返回值是offline时,便将这台Atlas摘除,从此时开始便没有新的请求导向这台Atlas。等到已经打向这台Atlas的SQL请求处理完毕后(这是一个很短的时间),就可以安然重启Atlas而不必担心对前端造成影响了。
-
- e、对于大多数应用来说,可能并没有那么敏感,因此不使用平滑重启功能而直接重启也是可以接受的。但在设置了client-ips参数的情况下,必须设置lvs-ips参数,否则LVS的物理网卡的IP会被Atlas拒绝,如果未设置client-ips参数,说明不开启IP过滤功能,则lvs-ips也可以不设置。
-
-
-
- 3、 可选配置说明
-
- 以下几项可以设置,也可以使用默认值,区别不大。
-
- (1)Atlas的工作端口
-
- proxy-address项配置,例如proxy-address= 0.0.0.0:1234代表客户端应该使用1234这个端口连接Atlas来发送SQL请求。
-
- (2)Atlas的管理端口
-
- admin-address项配置,例如admin-address= 0.0.0.0:2345代表DBA应该使用2345这个端口连接Atlas来执行运维管理操作。
-
- (3)管理接口的用户名和密码
-
- admin-username项和admin-password项设置,这两项是用来进入Atlas的管理界面的,与后端连接的MySQL没有关系,所以可以任意设置,不需要MySQL在配置上做任何改动。
-
- (4)日志级别
-
- 以log-level项配置,分为message、warning、critical、error、debug五个级别。
-
- (5)日志路径
-
- 以log-path项配置,如log-path= /usr/local/mysql-proxy/log。
参考资料:
https://github.com/Qihoo360/Atlas
https://github.com/Qihoo360/Atlas/wiki/Atlas%E7%9A%84%E5%AE%89%E8%A3%85
https://github.com/Qihoo360/Atlas/wiki/Atla%E9%83%A8%E5%88%86%E9%85%8D%E7%BD%AE%E5%8F%82%E6%
Atlas结合MHA(+keepalive)测试
由于我们数据库架构是主从复制+MHA实现主库的高可用。如果主库挂了,这时atlas怎么处理呢?经过详细的测试,大致处理步骤如下:
【说明】
1、主库上绑定vip,在atlas配置文件中主库设置为vip地址,这样无论主库怎么切换,最终的vip不会改变。atlas永远把vip对应的服务器当作主库。
2、由于备用主库原来是从库,即在atlas配置文件中是作为从库的,故当接管为主库时,这时该库既可以写入也可以读。故需要手工移除从库的读功能。(到管理界面,remove backend idx)
3、如果需要修复原主库,那么原主库作为新主库的从库存在。可以手工加入atlas中(add slave ip:port)
【结论】:可以很好的支持MHA切换,但是需要注意以上第2点内容。
五、Atlas性能测试
sysbench执行800000次随机select操作,这80000次操作都是非事务的。 通过修改 --oltp-nontrx-mode 选项,可以执行update和insert操作。 通过修改 --num-threads 参数,可以调整并发测试线程的个数。
通过atlas链接mysql加压
[root@NEW-APP-MYSQL-SLAVE yum.repos.d]# sysbench --test=oltp --max-requests=800000 --num-threads=10 --oltp-test-mode=nontrx --db-driver=mysql --mysql-db=test --mysql-host=127.0.0.1 --mysql-port=1234 --mysql-user=username --mysql-password=password--oltp-nontrx-mode=select --db-ps-mode=disable --max-time=3600 run (preprae run cleanup)
通过直连mysql加压测试
sysbench --test=oltp --max-requests=800000 --num-threads=10 --oltp-test-mode=nontrx --db-driver=mysql --mysql-db=test --mysql-host=192.168.1.6 --mysql-port=3307 --mysql-user=atlas_user --mysql-password=ionm3aUwK98N45nH --oltp-nontrx-mode=select --db-ps-mode=disable --max-time=3600 run
从表一可以看出,当sysbench的并发测试线程较少时,连接Atlas和直连DB的QPS差距较大。 这主要是因为当sysbench并发线程少时,Atlas的性能没有得到充分的发挥, sysbench只有很少的线程向Atlas发送请求,此时网络延迟对QPS的影响是最主要的。 当sysbench的并发测试线程较大时,此时Atlas的性能就得到了充分的发挥, 此时QPS的对比是连接Atlas与直连DB性能对比的真实的反应,网络延迟对QPS的影响作用就显得很小了。 从表一数据来看,通过Atlas发送select请求时的QPS是直连DB时60%左右, 而update和insert请求对应的QPS则更高一些,相当于直连DB时的80%左右。 由此看来利用Atlas转发SQL请求带来的性能下降虽有下降,但完全可以接受。
从表二可以看出,在sysbench的并发测试线程较少的情况下,连接Atlas和直连DB时完成每条SQL操作的时间差距较大, 造成这种结果的原因也是由于Atlas性能未充分发挥,网络延迟起了主要作用。 当sysbench并发测试线程较高时,Atlas的性能充分发挥,此时完成每条SQL操作的时间差距对比,才是Atlas的真正性能反映。 通过Atlas发送SQL请求时的每条操作完成时间大约是直连DB时1.5倍,由此看来利用Atlas转发SQL请求带来的时间延迟不是非常明显,同样也是可以接受的。
六:不完善之处
- 1.不支持全表的update和delete
- mysql> update atltab set id=id+1;
ERROR 1105 (07000): Proxy Warning - Syntax Forbidden
mysql> update atltab set id=578;
ERROR 1105 (07000): Proxy Warning - Syntax Forbidden
- 解决办法 加where
- mysql> update atltab set id=id+1 where 1>0;
- Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0
https://github.com/Qihoo360/Atlas/wiki/Atlas%E7%9A%84%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95
http://imysql.cn/2013/10/14/360-atlas-mysql-proxy-testing.shtml
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29096438/viewspace-1842085/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29096438/viewspace-1842085/