深入淺出elasticsearch-美團(tuán)atlas實(shí)踐_第1頁(yè)
深入淺出elasticsearch-美團(tuán)atlas實(shí)踐_第2頁(yè)
深入淺出elasticsearch-美團(tuán)atlas實(shí)踐_第3頁(yè)
深入淺出elasticsearch-美團(tuán)atlas實(shí)踐_第4頁(yè)
深入淺出elasticsearch-美團(tuán)atlas實(shí)踐_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余33頁(yè)可下載查看

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

提綱MTAtlas簡(jiǎn)介MTAtlas整體架構(gòu)MTAtlas主要模塊MTAtlas上線現(xiàn)狀MTAtlas的未來計(jì)劃Q&AMTAtlas簡(jiǎn)介基于MySQL協(xié)議的數(shù)據(jù)庫(kù)中間件來自于360開源的Atlasmysql-‐proxy(2011.8

)開源Atlas(360

2013.6)MTAtlas(2015.5

~

now)MTAtlas簡(jiǎn)介MTAtlas的主要功能讀寫分離負(fù)載均衡結(jié)點(diǎn)上下線控制MTAtlas簡(jiǎn)介Slave1MasterApplicaFonreadwrite:.cnreadonly:readonly:.上線slaveDBA在集群中添加新從庫(kù)RD重新發(fā)布服務(wù)下線slaveRD重新發(fā)布服務(wù)DBA下線slave負(fù)載均衡ApplicaFon

實(shí)現(xiàn)讀寫分離ApplicaFon

實(shí)現(xiàn)MTAtlas上線前數(shù)據(jù)庫(kù)使用場(chǎng)景Slave2MTAtlas簡(jiǎn)介MTAnode1:slave1:port1node2:slave2:port2node3:master:port3MTAtlas上線后數(shù)據(jù)庫(kù)使用場(chǎng)景ApplicaFonSlave1MasterSlave2上線slaveDBA:

add

backend下線slaveDBA:

remove

backend負(fù)載均衡MTAtlas實(shí)現(xiàn)讀寫分離MTAtlas實(shí)現(xiàn)IDC2MTAtlas整體架構(gòu)四層部署架構(gòu)IDC1Atlas

集群Slave1MasterSlave2Atlas

集群DNSMGWMGWMTAtlas整體架構(gòu)模塊MTAtlas的

模塊控制(用戶、IP過濾)SQL

解析

SQL

重寫SQL

執(zhí)行分庫(kù)分表管理負(fù)載均衡

讀寫分離MySQL

連接池DB管理日

監(jiān)志

控管

管理

理連接管理MTAtlas主要模塊-‐連接管理連接管理繼承了開源Atlas版本按照協(xié)議機(jī)制自己處理連接建立,數(shù)據(jù)收發(fā)的功能MTAtlas根據(jù)架構(gòu)鏈路較長(zhǎng)的特點(diǎn),著重添加了對(duì)于連接異常的檢測(cè)與處理MGWMySQLMTAtlas主要模塊-‐連接管理–鏈路模擬圖ClientMTAtlassocket1socket2poolsocket4socket3MTAtlas主要模塊-‐連接管理解決方案:socket2創(chuàng)建時(shí)添加keepaliveOS

keepalive

:

30/5/5OS

tcp_retries2:

5效果:空閑連接,keepalive會(huì)在1min

內(nèi)檢測(cè)到異常,將鏈路關(guān)閉(socket2,socket3)發(fā)送狀態(tài),retry

機(jī)制也會(huì)保證在1min關(guān)閉socket2,同時(shí)socket3也關(guān)閉–MGW到Atlas網(wǎng)絡(luò)異常socket1socket2socket3socket4MGW端socket2失效Atlas端未感知Atlas到MySQL的鏈路還保持著,如果在事務(wù)內(nèi),會(huì)

大事務(wù)MTAtlas主要模塊-‐連接管理解決方案:socket3創(chuàng)建時(shí)添加

keepalivesocket3

添加event事件在其異常

錯(cuò)OS

keepalive

:

30/5/5OS

tcp_retries2:

5效果:空閑連接,keepalive

會(huì)在

1min內(nèi)檢測(cè)到,將鏈路關(guān)閉(socket2,

socket3)發(fā)送狀態(tài),retry

機(jī)制也會(huì)保證在1min關(guān)閉socket2,同時(shí)socket3也關(guān)閉MySQL端主動(dòng)關(guān)閉連接時(shí)(wait_Fmeout),event機(jī)制可以及時(shí)發(fā)現(xiàn)問題將socket3關(guān)閉MGW端socket2失效Atlas端未感知Atlas未感知socket3斷開,分配給socket2,引起client查詢失敗–Atlas到MySQL的鏈路異常socket1socket2socket3socket4MTAtlas主要模塊-‐連接管理解決方案socket4創(chuàng)建時(shí)添加keepalivesocket4

添加event事件在其異常

錯(cuò)OS

keepalive

:

30/5/5OS

tcp_retries2:

5–連接池中連接異常socket1socket2socket3socket4效果空閑連接,keepalive

會(huì)在1min

內(nèi)檢測(cè)到,將鏈路關(guān)閉(socket2,

socket3)MySQL端主動(dòng)關(guān)閉連接時(shí)(wait_Fmeout),event機(jī)制可以及時(shí)發(fā)現(xiàn)問題將socket3關(guān)閉socket4被關(guān)閉后,如果Atlas未感知,分配給socket2會(huì)引起client報(bào)錯(cuò)MTAtlas主要模塊-‐連接管理–

Atlas端的socket2/socket3異常解決方案socket2,socket3,socket4創(chuàng)建時(shí)添加keepalive添加event事件在其異?;虺?/p>

錯(cuò)OS

keepalive

:

30/5/5OS

tcp_retries2:

5效果由于添加了event機(jī)制,可以檢查出Atlas端socket的狀態(tài)變化socket2,socket3中有一方關(guān)閉會(huì)觸發(fā)另一方關(guān)閉,保證鏈路安全socket1socket2socket3socket4MTAtlas主要模塊-‐連接管理解決方案socket2:wait_Fmeout空閑等待時(shí)間socket3,

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

Fmeout,連接池內(nèi)空閑等待時(shí)間–添加措施避免空閑連接占用socket1socket2socket3socket4MTAtlas主要模塊-‐SQL處理模塊SQL處理模塊clientSQL解析/重寫SQL

執(zhí)行MySQL連接MySQL

連接…2314連接池client_connserver_connMTAtlas主要模塊-‐SQL處理模塊MTAtlas

添加SESSION變量功能增加客戶端連接與MySQL連接的SESSION參數(shù)在分配到連接時(shí)后,先比較二者的會(huì)話級(jí)參數(shù)值,校正參數(shù)后再執(zhí)行查詢MTAtlas主要模塊-‐SQL處理模塊–為什么要添加SESSION級(jí)變量的支持?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變量進(jìn)一步擴(kuò)展到連接的所有上下文信息,例如last_insert_id,a?ected_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

過濾創(chuàng)建,匹配一類查詢示例1:”select

*

from

tbl

where

col2

=

?”,示例2:“update

tbl

set

col1=?where

pkey=?”根據(jù)執(zhí)行頻率,執(zhí)行時(shí)間自動(dòng)添加提供手動(dòng)添加根據(jù)

Thread

running進(jìn)行負(fù)載均衡用戶IP限制從庫(kù)流量配置MTAtlas主要模塊控制Atlasnode1:mastrenode2:slave1:tag1node3:slave2r:tag2user1:tag1:host1,host2user2:tag2:host1user3:tag1,tag2:%no

user1用戶IP限制與從庫(kù)流量配置示例user1:****

.cn(host1)

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

isforbiddenSlave1MasterSlave2MTAtlas主要模塊-‐日志管理日志管理日志時(shí)間精確到微秒:

解決了時(shí)間精度的問題admin中添加了對(duì)各個(gè)模塊的Trace:

解決了上下文的問題SQL日志增加了用戶登錄/退出,thread

id,慢查詢,長(zhǎng)連接的記錄:

增加對(duì)整個(gè)連接的完整信息SQL日志的自動(dòng)rotate:

減少額外的處理工作下一步想法刷日志模塊仍是同步方式,會(huì)有一定的性能影響MTAtlas主要模塊管理管理MTAtlas新增了

體系:QPS:read/write的查詢個(gè)數(shù)processlist響應(yīng)時(shí)間直方圖方式展示響應(yīng)時(shí)間趨勢(shì)慢查詢數(shù)量將出現(xiàn)的慢查詢計(jì)數(shù)同步等待時(shí)間等待與喚醒event的時(shí)間Atlas到MySQL的連接數(shù)活動(dòng)連接/連接池中連接client到Atlas的連接Atlas的Thread

runningMTAtlas主要模塊管理MTAtlas主要模塊管理MTAtlas主要模塊管理MTAtlas主要模塊-‐性能改進(jìn)性能改進(jìn)測(cè)試工具:sysbench

0.4

(99%rt<10ms)優(yōu)化策略詞法分析器由串行改為并行連接狀態(tài)切換方式改進(jìn)QPS70000210000250000200000150000100000500000優(yōu)化前優(yōu)化后QPSMTAtlas主要模塊-‐其它改進(jìn)其它的改進(jìn)RPM包發(fā)布引入mysql-‐test測(cè)試框架引入sysbench/Ben

arkSQL測(cè)試建立線上 測(cè)試框架代碼覆蓋性測(cè)試分表若干問題(支持int64,NULL類型)MTAtlas主要模塊-‐sharding版本開源版本sharding的架構(gòu)Atlastbl(1000~1999)table=test.tbl;group=0,1group-‐key=column_namegroups=0:0~1000,1:1000~1999group0Slave1MasterSlave2group1Slave1MasterSlave2tbl(0~1000)MTAtlas主要模塊-‐sharding版本開源sharding版本功能說明只支持分庫(kù)支持hash/range的分庫(kù)增加了語(yǔ)法解析器lemon不支持跨庫(kù)的事務(wù)MTAtlas主要模塊-‐sharding版本Atlastbl_0(0~999)tbl_1(1000-‐1999)MTAtlas

sharding版本架構(gòu)table

=

test

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論