my fox 扩容与数据迁移

Post on 06-Jul-2015

1.867 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

淘宝数据产品的分布式MySQL集群的扩容原理,怎么让40台mysql互联互通,进行数据的随时迁移。

TRANSCRIPT

扩容与数据迁移

朋春

@我是aleafs

MyFOX技术第二讲

回顾

关于MyFOX

□ 分布式MySQL集群中间层

□ 数据离线批量写入

□ 透明的数据查询代理

□ 集群管理

节点结构

MyFOX

12热节点(MySQL)

15k SAS盘,300G * 12,raid10

内存:24G

成本:4.5W / T

8冷节点(MySQL)

7.2k SATA盘,1T * 12,raid10

内存:24G

成本:1.6W / T

路由表

30天无访问的冷数据

新增

热数

节点2

dbname.t_2

路由表

KEY: thedate=20110811,cid=1

node path modtime hittime …

…,cid=2

节点1

dbname.t_1dbname.t_2

装完数据

UPDATE ... SET modtime = NOW() WHERE ...

modtime:

每条路由对应的分片的数据更新时间

路由访问

SELECT node, path, modtime FROM ... WHERE ...

modtime:

if (force_load ||!cache || modtime > cache.savetime) {

// load data from mysql

}

同时…

if (rand(1,100) <= 10) {

}

UPDATE ... SET hittime = NOW() WHERE ...

Why we use “rand” here

NOT ONLY...

BUT ALSO...

决策

SELECT node, path FROM ...

WHERE hittime < ’30天前 ’

AND isarchive = 0

@letonlife:

“…搬运工伤不起”

工作队列

SELECT ... FROM task_queque

WHERE task_flag = FLAG_WAIT AND trytimes < 3

ORDER BY priority ASC,

trytimes ASC,

ABS(task_position – AGENT_POSITION) ASC,

autokid ASC

MySQL MySQL

scp (*.MYI, *.MYD)

MySQL MySQLAPP

SELECT LOAD

MySQL MySQL

APP

A.

B.

C.

脚本部署在DB上,有安全隐患

两次落地,两次网络传输

实施

172.1.1.1 172.1.1.2

dbname.t_2

dbname.t_2

dbname.t_2_fed

CREATE TABLE dbname.t_2_fed (

...

) ENGINE = FEDERATED \

CONNECTION=‘mysql://user:pass@172.1.1.1/dbname/t_2’

INSERT INTO dbname.t_2 SELECT * FROM dbname.t_2_fed

真相总是在背后

dbname.t_2dbname.t_2

如何选择一台“最优”的机器作为源表来复制

呢?

例如:

var task = {

“path” : “dim_category_arch_0.t_92d_1”,

“from” : “1,2,3,4,5,6,7,8”,

“save” : “17,18,19,20”,

}

节点 机器列表

1 172.001.001.001 172.002.001.001

2 172.001.003.002 172.002.021.002

17 172.001.003.017 172.002.003.017

172.001.003.017 fed

□ 172.001.001.001

□ 172.002.001.001

□ 172.001.003.002

□ 172.002.021.002

就近原则

□ 同机房

□ 同机柜

□ 同交换机

□ 快速

□ 低碳

□ 稳定

□ 安全

IP “ ”

一致性检查

□ COUNT

□ XOR

修改“指针”

序号 路由KEY 路由值

1

thedate=20110811,cid=1

node=1,path=dbname.t_1

2

node=2,path=dbname.t_2

3 thedate=20110811,cid=2

node=9,path=dbname.t_2

node=2,path=dbname.t_2

卸磨杀驴

/* */

DROP TABLE IF EXISTS dbname.t_2 /* ON NODE 2 */

Why NOT “right now”

小结

从16到40

□ Federated

□ 就近原则

2000台机器的时候

...

MyFOX

route route route route...

MySQL MySQL

chunk server chunk server

MySQL MySQL

干掉“节点”

□ Mysql承担chunk server

□ 每个chunk跨机房三份冗余

□ 如果宕机,立即复制

□ …

预告

第三讲:数据压缩

Thanks

@我是aleafs

pengchun@taobao.com

top related