总有那么一段废话
因为某个项目前期数据量比较小,所以就直接使用 docker 起的 redis 服务,由于现在的业务规模上升,原有的 reids 服务不能进行数据监控以及不方便数据管理和维护,所以在阿里云单独买了一个云 redis 服务,我前期为了安全,也没有将 redis 服务的端口映射到宿主机,所以给我的迁移也带来了挑战。
正式步骤
开启宿主机端口映射
在 docker-compose.yml
文件下修改 redis service,增加 ports 字段。
redis:
container_name: redis-pro
image: redis:4.0.10
sysctls:
net.core.somaxconn: 65535
ports:
- "6380:6379"
networks:
- backend
restart: always
更新 redis 服务
$ docker-compose up -d redis
查看端口映射状态
$ docker-compose ps
redis docker-entrypoint.sh redis ... Up 0.0.0.0:6380->6379/tcp
开启阿里云 DTS 服务
选择和宿主机以及 redis 在同一个地域的数据传输服务
,理论上这样的服务会延迟更低,稳定性更好。

分别配置好源库信息和目标库信息,阿里云还是很贴心,测试连接如果都是通过就可以下一步下一步了。
等待到全量更新为 「100%」就说明本次迁移已完成很大一部分了。
为什么要使用 DTS 服务,而不是自己将 redis 保存成文件,导入到新的 redis 服务呢?主要是 DTS 服务支持增量更新,后面可能会持续有数据的读写覆盖等,这些 DTS 服务会一条龙服务解决掉。
配置 redis 地址
开启云 reids 外网地址
实际过程中我是直接用的内网地址,发现内网根本连不上。
这里直接说外网地址,保证系统先调通,这里注意两点。
- 购买的 reids 版本,阿里云 Redis4.0 及以上版本密码格式为“账号:密码”,其他版本就只有密码,没有账户概念,当然我是追求极致体验全部选最新。
- 点击申请外网链接,是需要等待 20 秒左右才能使用的,不是立即生效。

修改 web 服务中的 redis 地址
因为我在使用 swoft,直接修改 redis 的配置文件 config/pro/redis.php
。

将代码部署到线上,发现服务正常运行。如果你能接受外网访问,那么到这里就可以结束了,我一个追求极致的人,当然是不能容忍线上服务就这么暴露在外网中,即使有白名单机制。
出现的问题
主要是 redis 配置这块碰到了一个大坑,和阿里云的技术客服来来去去聊了一天,他们每半小时或者一个小时才给我回复一条消息,到晚上才给我解决,感觉白天的阿里云客服技术水平完全是值班的,一些很简单的问题和我绕了半天,结果道歉说他弄错了,是在怀疑我不专业吗?不过最后那个技术客服一下就能抓住重点,问题一下就解决了。给了我一个文档也不知道是哪位大佬的博客,是这位客服自己的么?🙃🙃
我在使用内网地址的时候一直会反馈一个错误。发现 redis 连接一直超时。
然后我去 ping 了一下他的地址
$ ping r-xxxxxxxxxx.redis.rds.aliyuncs.com
Destination Host Unreachable
给我反馈的 Destination Host Unreachable
就是这个错误,简单的说就是 dns 解析不到,网络无法连通。我开始以为这个可能是阿里云故意关闭了 ping 所需要的 icmp 包。
我就使用 reids 客户端去实验,参数 h 是地址,参数 a 是密码。
$ redis-cli -h r-xxxxxxxxxx.redis.rds.aliyuncs.com -a xxxxx
Name or service not known
发现这个内网真的访问不上,和阿里云客服百般沟通之后,提供的解决方案来看,是通信的网卡走错了。
配置 docker
$ vi /etc/docker/daemon.json
daemon.json 文件里面增加一个网段信息
{
"bip": "192.168.200.1/24"
}
重启 docker 服务
$ systemctl restart docker
但是我这里重启 docker 服务还是报错了,最后不得已重启了机器。
ping 了一下地址确实是能 ping 到,重新配置了 reids 的内网地址,一切都恢复正常了。
关闭阿里云 DTS 服务
因为 DTS 服务是收费服务,线上既然可以正常运行,就可以先暂停服务,然后释放掉就可以了。
总结
这个总结我研究了好几天,感觉还是不要总结了,因为有些知识还是需要我去发掘,因为对于这个内网地址我实在有点不太明白,它的原理是什么,为什么我在使用 dns 8.8.8.8
的时候,还是可以解析到内网地址?
后面我会补充一篇内容专门讨论阿里云的内网技术。
网友评论