背景
客户项目起步时,用的是阿里云,因为比较方便,但随着后期的不断扩展,对数据库要求也越来越高,一些特殊的需求也都需要钱来支撑,阿里云也限制了我们的一些方案实施。应客户需求,需要将阿里云数据库迁移到公司内部服务器。
技术方案
因项目是C端项目,不允许进行停机迁移,那么就必须使用实时数据同步迁移方案。
开始想的是自己搭建一套数据同步,然后开始研究canal。研究了一天虽然搞成功了,也只是调通了,想想后续还需要更多的投入,果断暂时放弃,作为最后的备案,寻求更好的方案。
在查找资料后,阿里云提供的DTS数据同步方案,正好DTS首月是要99元,这真的是省下一大笔钱。然后开始研究,在阿里云上自建了一套mysql,非常顺利的同步完成,想着这次这么简单就把事情搞定了,就等着迁移的日子。
踩坑
迁移前一天,进行提前演练。傻眼了,我们迁移的是客户自己的服务器,不是阿里云的,DTS没有直接迁移到非阿里云服务器的选项,必须使用阿里云的vpn网关,这玩意5M宽带都要500多,我同步到什么时候啊,而且这东西我没玩过啊。花钱请的俩DBA,也没有好的方案,他们也就是发起工单咨询咨询下阿里云客服,告知必须使用vpn网关才行。DBA只专注于自己的领域,对于阿里云,他们也是无解。哎,感觉要掉头发。
抽根烟冷静一下,DTS数据同步功能是没问题的,现在的问题无非就是网络问题,DTS不可以同步到客户服务器,但是是可以同步阿里云自建数据库的,对啊,我只要打通阿里云ECS到客户服务器不就同了吗?说干就干。
解决
我只需要在DTS写上阿里云ESC的服务器,再将ESC的端口转发到客户服务器即可,这个nginx就可以解决。
在nginx.conf中添加以下代码进行转发
stream {
server {
listen 3306;
proxy_pass 110.110.110.110:3306;
}
}
ESC按量购买,带宽拉满,一个小时就几毛钱,后续只需要开启ESC和客户服务器之间的防火墙,打通网络即可,一个小时后,数据同步完成,
结尾
当时在网上找了好久都没有类似的方案,特地分享出来,可能太简单了,大家觉得没必要分享吧。希望能给需要的人一些帮助。
好了,收钱收工,这一单结束。