刘朝辉 liuzhaohui@camera360

24
从私有云到AWS的无缝迁移 刘朝辉 [email protected]

Transcript of 刘朝辉 liuzhaohui@camera360

Page 1: 刘朝辉 liuzhaohui@camera360

从私有云到AWS的无缝迁移刘朝辉

[email protected]

Page 2: 刘朝辉 liuzhaohui@camera360

01

我们是谁

• 品果科技

• 专注于移动影像服务

• 全球超过4.5亿用户

• 多款app产品

宝贝相册

Page 3: 刘朝辉 liuzhaohui@camera360

02

提纲

目标

抽象

具象

细节

风险

Page 4: 刘朝辉 liuzhaohui@camera360

03

目标

私有云

AWS

现状

目标

业务复制

流量切换

无缝迁移

Page 5: 刘朝辉 liuzhaohui@camera360

04

业务抽象

Load balancer

End user

Service logic

Data storage

Service

Page 6: 刘朝辉 liuzhaohui@camera360

05

目标分解

Load balancer

End user

Service logic

Data storage

Service

Load balancer

Service logic

Data storage

私有云 AWS

Step 1.1

Step 2

Step 1.2

Step 0

End user

Step 3

Page 7: 刘朝辉 liuzhaohui@camera360

06

业务具象化

Nginx

End user

PHP

Mongodb+redis

Service

ELB

Nginx+PHP

Mongodb+redis

私有云 AWS

Step 1.1

Step 2

Step 1.2

Step 0

End user

Step 3

Page 8: 刘朝辉 liuzhaohui@camera360

07

细节和风险

• 依赖业务

• 业务逻辑+负载均衡

• 数据存储

• 流量切换

• 善后工作

Page 9: 刘朝辉 liuzhaohui@camera360

08

Step0--依赖业务

• 响应变慢/超时问题

–跨IDC延迟变大、网络不稳定

–业务是否容忍

• 解决办法

–依赖业务迁移(避免)

–改造业务(容忍)

Page 10: 刘朝辉 liuzhaohui@camera360

09

Step1--业务逻辑+负载均衡

• 迁移部署除数据外的所有功能– Nginx+PHP+ELB部署并测试

– EC2(c3系列),AMI,VPC,subnet

– Redis缓存先部署上(空)

–脚本/定时任务,根据业务情况而定

• ELB– TCP转发,开启Proxy Protocol支持携带用户IP

– HTTP转发,X-Forwarded-For

–支持SSL/HTTPS,需要上传证书

Page 11: 刘朝辉 liuzhaohui@camera360

10

中间状态1

Nginx

End user

PHP Service

ELB

Nginx+PHP

私有云 AWS

testing

redis Mongodb redis

EC2

Page 12: 刘朝辉 liuzhaohui@camera360

11

Step2--数据存储

• Mongodb

–主从复制

– EC2(r3系列), EBS(SSD)

–数据量、网络质量/带宽

– sharding

• 建议提前测试

–数据复制时长

–现有系统压力

Page 13: 刘朝辉 liuzhaohui@camera360

12

Mongodb sharding

Page 14: 刘朝辉 liuzhaohui@camera360

13

Step2--数据存储

• Shard–独立复制每个shard

– AWS这边节点可先设置优先级0(不会被选为主)

• Config server–按照配置列表里逆序迁移(stoprsyncstart

new)

–最好不要变更机器名(迁移步骤复杂)

• 其他–期间最好关闭Balancing

Page 15: 刘朝辉 liuzhaohui@camera360

14

Step2--数据存储

• 缓存失效

–对缓存的依赖程度(响应时间、命中率)

–数据库承载能力(雪崩)

• 根据情况

–直接数据库扛

–缓存迁移

–预热

Page 16: 刘朝辉 liuzhaohui@camera360

15

中间状态2-1

Nginx

End user

PHP Service

ELB

Nginx+PHP

私有云 AWS

testing

redisMongodb(master)

redisMongodb

(slave)

EC2

Page 17: 刘朝辉 liuzhaohui@camera360

16

中间状态2-2

Nginx

End user

PHP Service

ELB

Nginx+PHP

私有云 AWS

testing

redisMongodb

(slave)redis

Mongodb(master)

EC2

Page 18: 刘朝辉 liuzhaohui@camera360

17

Step3--流量切换

• 修改DNS解析

–如果做了CDN,可能需要CDN修改回源

• 原IDC做反向代理(建议)

–解决DNS生效长尾

Page 19: 刘朝辉 liuzhaohui@camera360

18

中间状态3

Nginx

End user

PHP Service

ELB

Nginx+PHP

私有云 AWS

redisMongodb

(slave)redis

Mongodb(master)

End user

转发

DNS切换

EC2

Page 20: 刘朝辉 liuzhaohui@camera360

19

善后工作

• 密切观察

–压力、日志、统计、反馈

• 定时任务

• 清理资源

Page 21: 刘朝辉 liuzhaohui@camera360

20

最终状态

Service

ELB

Nginx+PHP

AWS

redisMongodb

End user

EC2

Page 22: 刘朝辉 liuzhaohui@camera360

21

TIPS

• 做好充足准备

–技术调研

–实地测试

–详细计划

–步骤细化到命令

–关键点做预案

• 还是心里没底?

–联系AWS技术人员

Page 23: 刘朝辉 liuzhaohui@camera360
Page 24: 刘朝辉 liuzhaohui@camera360