为了减轻对数据库的运维压力,将自建的mysql数据库转为RDS数据库。mysql
IP 服务器类别 类别 外网IP 10.10.3.10 应用服务器 应用服务器-A 183.44.79.28 10.10.3.11 自建mysql 自建数据库-B * 172.10.10.11 阿里云RDS RDS-C * 172.10.10.12 (新购)阿里云ECS-应用服务器 新购VPS服务器-D 183.44.79.27
咱们须要将应用从A迁移到D;将数据库从B迁移到D
sql
1.先在服务器D中搭建好相关的应用运行环境———APR-Tomcat、JDK、Nginx数据库
2.使用阿里云提供的ClassicLink将经典网络与专有网络互通。也就是上面的四台服务器都能相互ping通,目的是让D服务器能连接上B的数据库。缓存
3.将应用从A服务器中复制到D服务器中去,启动D中的应用,观察应用是否能正常启动。服务器
4.在D服务器中的应用能正常启动后,需修改A的Nginx配置,配置一份代理,类型是backup,目的是在A应用stop后,此backup会将请求转发到D服务器的应用中去。网络
5.中止A服务的应用,观察A中的Nginx是否能将请求都转发到D的应用中去。若是正常,则说明咱们应用已成功迁移到D服务器中。运维
6.最后修改域名指向的外网IP,将183.44.79.28修改成183.44.79.27。因CDN有缓存,故修改后,从域名进来的请求并不会马上请求到183.44.79.27的IP上,还需保留A服务器的Nginx应用正常服务一到两天。目的是为了保持全部请求都会转发到D服务器中。工具
到此,咱们已经迁移好了应用了。可是数据库这块还须要迁移。
post
7.为了能正常快速迁移,咱们并无使用阿里云提供的自建Mysql迁移到RDS上的工具。阿里云
此处须要提一下咱们的业务:天猫的充值业务;整个过程比较简单,将天猫请求的数据,保存至数据库后,再发送充值到充值系统,而后等待充值系统的结果通知,根据结果业务闭环
8.最初的想法是在D中启动多一份应用,可是此引用连接的是RDS数据库;在天猫请求过来的充值数据用新的线程post一份至此应用中。可是仔细想了一下,这样会硬气引发自建数据库与RDS自增主键不一致的问题。若是天猫同时推送3笔充值数据过来,那么就有可能订单A的主键ID在自建mysql是10001,而在RDS的自增主键却有多是10002
9.最后的方法是在订单请求充值后,查询一次订单,而后将订单的信息post到新的应用(链接到RDS),在此post的接口处理的逻辑仅仅是将数据插入到数据库中(此处用了Nutz Dao简单而方便
)。
10.而后在接收通知结果的接口中,直接将接收到的数据,启用新的线程post一份至链接到RDS应用中。
这样咱们就能将今后刻起的数据,在自建数据库同步至RDS数据库
。
11.观察一段时间的订单,对比订单的数据,若是没有差别,则说明上述的步骤是支持咱们的逻辑,并且对天猫来讲是透明,不须要停机就能完成迁移了。