深入浅出elasticsearch-美团atlas实践_第1页
深入浅出elasticsearch-美团atlas实践_第2页
深入浅出elasticsearch-美团atlas实践_第3页
深入浅出elasticsearch-美团atlas实践_第4页
深入浅出elasticsearch-美团atlas实践_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

提纲MTAtlas简介MTAtlas整体架构MTAtlas主要模块MTAtlas上线现状MTAtlas的未来计划Q&AMTAtlas简介基于MySQL协议的数据库中间件来自于360开源的Atlasmysql-‐proxy(2011.8

)开源Atlas(360

2013.6)MTAtlas(2015.5

~

now)MTAtlas简介MTAtlas的主要功能读写分离负载均衡结点上下线控制MTAtlas简介Slave1MasterApplicaFonreadwrite:.cnreadonly:readonly:.上线slaveDBA在集群中添加新从库RD重新发布服务下线slaveRD重新发布服务DBA下线slave负载均衡ApplicaFon

实现读写分离ApplicaFon

实现MTAtlas上线前数据库使用场景Slave2MTAtlas简介MTAnode1:slave1:port1node2:slave2:port2node3:master:port3MTAtlas上线后数据库使用场景ApplicaFonSlave1MasterSlave2上线slaveDBA:

add

backend下线slaveDBA:

remove

backend负载均衡MTAtlas实现读写分离MTAtlas实现IDC2MTAtlas整体架构四层部署架构IDC1Atlas

集群Slave1MasterSlave2Atlas

集群DNSMGWMGWMTAtlas整体架构模块MTAtlas的

模块控制(用户、IP过滤)SQL

解析

SQL

重写SQL

执行分库分表管理负载均衡

读写分离MySQL

连接池DB管理日

监志

控管

管理

理连接管理MTAtlas主要模块-‐连接管理连接管理继承了开源Atlas版本按照协议机制自己处理连接建立,数据收发的功能MTAtlas根据架构链路较长的特点,着重添加了对于连接异常的检测与处理MGWMySQLMTAtlas主要模块-‐连接管理–链路模拟图ClientMTAtlassocket1socket2poolsocket4socket3MTAtlas主要模块-‐连接管理解决方案:socket2创建时添加keepaliveOS

keepalive

:

30/5/5OS

tcp_retries2:

5效果:空闲连接,keepalive会在1min

内检测到异常,将链路关闭(socket2,socket3)发送状态,retry

机制也会保证在1min关闭socket2,同时socket3也关闭–MGW到Atlas网络异常socket1socket2socket3socket4MGW端socket2失效Atlas端未感知Atlas到MySQL的链路还保持着,如果在事务内,会

大事务MTAtlas主要模块-‐连接管理解决方案:socket3创建时添加

keepalivesocket3

添加event事件在其异常

错OS

keepalive

:

30/5/5OS

tcp_retries2:

5效果:空闲连接,keepalive

会在

1min内检测到,将链路关闭(socket2,

socket3)发送状态,retry

机制也会保证在1min关闭socket2,同时socket3也关闭MySQL端主动关闭连接时(wait_Fmeout),event机制可以及时发现问题将socket3关闭MGW端socket2失效Atlas端未感知Atlas未感知socket3断开,分配给socket2,引起client查询失败–Atlas到MySQL的链路异常socket1socket2socket3socket4MTAtlas主要模块-‐连接管理解决方案socket4创建时添加keepalivesocket4

添加event事件在其异常

错OS

keepalive

:

30/5/5OS

tcp_retries2:

5–连接池中连接异常socket1socket2socket3socket4效果空闲连接,keepalive

会在1min

内检测到,将链路关闭(socket2,

socket3)MySQL端主动关闭连接时(wait_Fmeout),event机制可以及时发现问题将socket3关闭socket4被关闭后,如果Atlas未感知,分配给socket2会引起client报错MTAtlas主要模块-‐连接管理–

Atlas端的socket2/socket3异常解决方案socket2,socket3,socket4创建时添加keepalive添加event事件在其异常或超

错OS

keepalive

:

30/5/5OS

tcp_retries2:

5效果由于添加了event机制,可以检查出Atlas端socket的状态变化socket2,socket3中有一方关闭会触发另一方关闭,保证链路安全socket1socket2socket3socket4MTAtlas主要模块-‐连接管理解决方案socket2:wait_Fmeout空闲等待时间socket3,

socket4:db-‐connecFon-‐max-‐age,连接的生命周期socket4:db-‐connecFon-‐idle-‐

Fmeout,连接池内空闲等待时间–添加措施避免空闲连接占用socket1socket2socket3socket4MTAtlas主要模块-‐SQL处理模块SQL处理模块clientSQL解析/重写SQL

执行MySQL连接MySQL

连接…2314连接池client_connserver_connMTAtlas主要模块-‐SQL处理模块MTAtlas

添加SESSION变量功能增加客户端连接与MySQL连接的SESSION参数在分配到连接时后,先比较二者的会话级参数值,校正参数后再执行查询MTAtlas主要模块-‐SQL处理模块–为什么要添加SESSION级变量的支持?client_con1MySQL

连接MySQL

连接Q1:set

SQL_SELECT_LIMIT=1Q3:select

*

from

t2

where

id

=10;(10

rows)Q2:select

*

from

t1

where

id

=10;client_con2连接池SQL处理setSQL_SELECT_LIMIT=1;select

*

from

t1

where

id

=

10;select

*

from

t2

where

id

=10;MTAtlas主要模块-‐SQL处理模块client_con1MySQL

连接client_status=>(null)Q3:select

*

from

t2

where

id

=10;(10

rows)client_con2client_status=>(null)Q1:set

SQL_SELECT_LIMIT=1client_status=>(SQL_SELECT_LIMIT=1)Q2:select

*

from

t1

where

id

=10;SQL处理

连接池sever_status=>(null)setSQL_SELECT_LIMIT=1;status=>(SQL_SELECT_LIMIT=1)select

*

from

t1

where

id

=

10;setSQL_SELECT_LIMIT=default;select

*

from

t2

where

id

=10;MTAtlas主要模块-‐SQL处理模块下一步思考由支持SESSION变量进一步扩展到连接的所有上下文信息,例如last_insert_id,affected_rows等MTAtlas主要模块-‐连接池管理连接池管理–将单一的连接池链表,修改成用户为key的hash表,hash值是该用户所建立的连接poolMySQL连接MySQL连接…poolBucket1:user1MySQL连接(user1)MySQL连接(user1)Bucket2:user2MySQL连接(user2)MySQL连接(user2)……MTAtlas主要模块-‐连接池管理–为什么要做这样的修改client_con1(user1)MySQL

连接client_status=>(null)Q3:select

*

from

t2

where

id

=10;(10

rows)client_con2(user2)SQL处理

连接池client_status=>(null)Q1:set

SQL_SELECT_LIMIT=1client_status=>(SQL_SELECT_LIMIT=1)Q2:select

*

from

t1

where

id

=10;sever_status=>(null)setSQL_SELECT_LIMIT=1;status=>(SQL_SELECT_LIMIT=1)select

*

from

t1

where

id

=10;CHANGE_USER-‐>user2:ERRORset

SQL_SELECT_LIMIT=default;

(user1)select

*

from

t2

where

id

=10;

(user1)MTAtlas主要模块-‐连接池管理client_con1(user1)user1:conn_adclient_status=>(null)Q3:select

*

from

t2

where

id

=10;(10

rows)client_con2(user2)连接池SQL处理user2:conn_adsever_status=>(null)setSQL_SELECT_LIMIT=1;status=>(SQL_SELECT_LIMIT=1)select

*

from

t1

where

id

=

10;sever_status=>(null)select

*

from

t2

where

id

=10;–按用户分配后的效果client_status=>(null)Q1:set

SQL_SELECT_LIMIT=1client_status=>(SQL_SELECT_LIMIT=1)Q2:select

*

from

t1

where

id

=10;MTAtlas主要模块控制控制SQL

过滤创建,匹配一类查询示例1:”select

*

from

tbl

where

col2

=

?”,示例2:“update

tbl

set

col1=?where

pkey=?”根据执行频率,执行时间自动添加提供手动添加根据

Thread

running进行负载均衡用户IP限制从库流量配置MTAtlas主要模块控制Atlasnode1:mastrenode2:slave1:tag1node3:slave2r:tag2user1:tag1:host1,host2user2:tag2:host1user3:tag1,tag2:%no

user1用户IP限制与从库流量配置示例user1:****

.cn(host1)

user1:****.cn(host3)host3

isforbiddenSlave1MasterSlave2MTAtlas主要模块-‐日志管理日志管理日志时间精确到微秒:

解决了时间精度的问题admin中添加了对各个模块的Trace:

解决了上下文的问题SQL日志增加了用户登录/退出,thread

id,慢查询,长连接的记录:

增加对整个连接的完整信息SQL日志的自动rotate:

减少额外的处理工作下一步想法刷日志模块仍是同步方式,会有一定的性能影响MTAtlas主要模块管理管理MTAtlas新增了

体系:QPS:read/write的查询个数processlist响应时间直方图方式展示响应时间趋势慢查询数量将出现的慢查询计数同步等待时间等待与唤醒event的时间Atlas到MySQL的连接数活动连接/连接池中连接client到Atlas的连接Atlas的Thread

runningMTAtlas主要模块管理MTAtlas主要模块管理MTAtlas主要模块管理MTAtlas主要模块-‐性能改进性能改进测试工具:sysbench

0.4

(99%rt<10ms)优化策略词法分析器由串行改为并行连接状态切换方式改进QPS70000210000250000200000150000100000500000优化前优化后QPSMTAtlas主要模块-‐其它改进其它的改进RPM包发布引入mysql-‐test测试框架引入sysbench/Ben

arkSQL测试建立线上 测试框架代码覆盖性测试分表若干问题(支持int64,NULL类型)MTAtlas主要模块-‐sharding版本开源版本sharding的架构Atlastbl(1000~1999)table=test.tbl;group=0,1group-‐key=column_namegroups=0:0~1000,1:1000~1999group0Slave1MasterSlave2group1Slave1MasterSlave2tbl(0~1000)MTAtlas主要模块-‐sharding版本开源sharding版本功能说明只支持分库支持hash/range的分库增加了语法解析器lemon不支持跨库的事务MTAtlas主要模块-‐sharding版本Atlastbl_0(0~999)tbl_1(1000-‐1999)MTAtlas

sharding版本架构table

=

test

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论