阿里云跨实例数据迁移

背景

由于之前在阿里云上买的学生机快要到期了,然鹅续费的时候没能使用学生优惠感觉很奇怪,提了工单寻求帮助,说是:

您的实例和线上优惠的实例「规格」不同,导致无法享受学生优惠续费,建议您数据备份后,将服务器申请退款,重新购买新的优惠学生实例。

由于我的 ESC 实例马上就要到期了,也不需要退款,加上这台 ESC 的续费价格一年要 600+ 还是有点贵(当然羊毛不薅白不薅,最后一年学生了赶紧上最后一班车),所以只能再买一台实例了。

但是最令我头疼的就是数据的迁移,问了下客服有没有什么方便的途径进行数据的迁移,贴心的工程师客服也提供了一条思路给我:

您好,建议您创建快照备份您的数据,您创建快照之后,您购买实例之后您可将您的数据恢复到您的实例中,请您知悉。

这里还是点赞一下阿里云的工单系统的工程师们,真的又贴心又靠谱,给了解决方案还上了教程链接(虽然不是我需要的,但是也是一条思路)。

购买实例

阿里云学生机的购买在首页的底部,搜索「学生机」即可找到对应链接,一年价格 ¥114。

数据备份

这里的数据备份是基于「快照」和「系统盘镜像」进行的。

快照」是跟随虚拟机磁盘存储的,不能脱离虚拟机磁盘使用,而虚拟机磁盘不能跨可用区和区域恢复。所以如果我们需要将备份存储或恢复到其他可用区、区域时,就要用到「自定义镜像」。

1. 利用快照创建自定义镜像

虽然现在阿里云的快照产品进行了正式的商业化,但是依然会为我们保存最近 15 天内的快照。

现在我们在需要备份数据的实例上找到最近一个可用的快照,当然也可以手动创建。

下面是步骤:

  1. 在左侧导航栏中,找到并进入「实例」;

  2. 在「云服务器 ECS」侧边栏找到并进入「快照和镜像 👉🏻 快照列表」;

  3. 找到对应的「快照实例」,点击右侧的「创建自定义镜像」。

    ❗️需要注意的是:快照的磁盘属性必须是系统盘。数据盘不能用于创建自定义镜像。

    但是我们可以在对系统盘创建自定义镜像的时候,带上数据盘的备份

创建自定义镜像

2. 复制镜像

注意「自定义镜像」默认是不能够跨区域使用的,如果需要跨区域使用则需要先将镜像复制到其他区域

「复制镜像」适用于跨地域部署应用,可以在不同地域的 ECS 实例中运行同一镜像环境

就比如我,要把华北 1(青岛)上的镜像,复制到华东 2(上海),下面是复制步骤:

  1. 选择镜像所在地域

  2. 在「云服务器 ECS」导航栏中,选择「快照和镜像 👉🏻 镜像」;

  3. 选中需要复制的镜像,在操作列中,单击「复制镜像」;

    ❗️需要注意的是:复制的镜像的类型必须是自定义镜像

  4. 在复制镜像对话框中,选择目标地域、填写镜像在目标地域显示的自定义镜像名称自定义镜像描述

  5. 确认操作完成后,即可在目标区域看到镜像的「复制进度」,待复制完成后,便可使用镜像。

3. 使用镜像

现在我们有了包含了备份数据系统配置的镜像之后,我们需要用我们的系统盘镜像覆盖目标实例的系统盘

❗️更换系统盘后,需要注意的一些:

  • 您的实例会被分配一个新的系统盘,系统盘 ID 会更新,原系统盘被释放,所以目标实例如果有重要数据,需要进行备份;
  • 实例的 IP 地址和 MAC 地址不变
  • 更换系统盘需要停止实例,因此会中断的业务;
  • 更换完成后,需要在新的系统盘中重新部署业务运行环境
  • 更换系统盘相当于重新为您的实例分配了一个系统盘,磁盘 ID 会改变,所以基于旧的系统盘创建的快照将不能用于回滚新的系统盘

做好了以上的准备,接下来,我们进行系统盘的更换,下面是更换步骤:

  1. 选择目标实例所在地域
  2. 在「云服务器 ECS」导航栏中,选择「实例」;
  3. 停止运行实例(如果在运行的话);
  4. 在实例的右侧,选择「更多 👉🏻 磁盘和镜像 👉🏻 更换系统盘」;
  5. 仔细阅读更换系统盘注意事项后,单击「确定,更换系统盘。」;
  6. 在「更换系统盘」页面上,在「镜像类型」一栏中选择自定义镜像,然后选择前面我们复制好的镜像;
  7. 密码选项,我们可以选择「使用镜像自带密码」,其他选项自行选择;
  8. 确认无误后,单击「确定更换」。

完成操作系统更换大概需要 10 分钟左右。完成后,实例会自动启动。

4. 收尾,检查

域名解析更改

更换实例之后,公网 IP 自然也是更换了,所以将域名解析新的实例的公网 IP 上。

SSH 测试

$ ssh root@新的公网 IP 或者域名解析更换后的 hostname

如果是 HostName 的话,需要在 ~/.ssh/known_hosts 文件中把之前的 DNS 过的那一行记录删除即可继续使用。

服务重启

这里我需要重启的目前只有 Nginxvsftpd

$ service vsftpd start
$ service nginx start

问题整理

在数据迁移过程中基本没有什么问题,阿里云都给你整的服服帖帖的~

Nginx 启动后,仍然无法访问公网 IP

首先,我先用 netstat -anp 查看了下已经监听的端口,发现 80 和 443 都开启了。

然后,我执行了 curl 发现,curl localhost 没有问题,但是 curl -v www.lbinin.com 却一直在等待响应,所以我觉得应该是防火墙的问题,由于我没有配置 iptable,所以并没有考虑。

找了一下资料,在参考了:centos7+nginx 配置好且开启服务之后,无法访问 - V2EX 中 17 楼的这条的回答:

阿里云的吧?控制面板放行 80

发觉应该就是安全组的问题,于是我进入「网络和安全 👉🏻 安全组」,在目标实例的右侧,选择「配置规则」,进入后发现并没有开启 80 和 443 端口,以及我自定义的 FTP 端口。

添加对应端口的配置后,尝试访问,发现问题解决。

FTP 无法连接

因为修改了端口号,且更换后的实例是阿里云的「专有网络」,导致一直提示:

错误

状态: 服务器发回了不可路由的地址。使用服务器地址代替。

命令: LIST

错误: 无法建立数据连接: ETIMEDOUT - 连接尝试超时

添加了对应端口的安全组策略也无法解决,后面尝试重新走一遍修改端口号。

参考:更改 vsftpd 的端口号 - suchy - CSDN博客

/etc/service 文件在把 ftp 21/tcp 改为 ftp 自定义端口号/tcp 后,重启 vsftpd 即可连接成功!

参考资料

使用快照创建自定义镜像 - 用户指南| 阿里云

复制镜像 - 用户指南| 阿里云

云服务器 ECS 数据恢复:使用快照策略和镜像备份数据-博客-云栖社区-阿里云

更换系统盘(非公共镜像) - 用户指南| 阿里云

上次更新: 12/26/2018, 6:54:18 AM