大家好久不见,有一段时间没有写文了。最近刚好遇到数据迁徙,所以就有题材写了。
【真的最近给中国马克思主义灌输,所以想不出来题材了】
为什么有这次数据迁移?
因为之前一直享受阿里云的优惠活动,但是最近续费发现没有优惠了,因为优惠服务器在那个时候是可以续费到2023年的,但阿里云在没有做任何公告和提示就把优惠关闭了,刚好服务器又处于等待释放期,只能被迫续费,寻找新服务器迁移了。
基础服务迁移
由于之前就做过完好的服务容灾备份设置,再加上有一些工具辅助,博客在新服务器开设后,下午就迁移完毕了。
更新解析后 10分钟后生效
[其实总的来说阿里云的延迟确实低一些(本地网络有些不稳定,样本不多,此延迟没有太大参考依据)]
Docker服务迁移
Docker是我最爱,很多服务或者临时测试都会在Docker上进行,也得力于Docker使得服务器环境干净,迁移Docker容器内的服务也变得十分方便,减少了很多不必要的部署麻烦。
再次也建议大家尝试Docker,会给你不一样的体验。
标准迁移
通常如果你使用DockerHub或其他容器仓库的镜像,那么直接可以将镜像挂载卷数据复制到新服务器,重新在新服务器运行相同指令完成容器迁移就完成了。
(没错,就这么简单,下面会告诉你如何做两台服务器之间如何直接传输数据)
但仍需要注意执行在新服务器上的镜像需要和旧版本一致,建议大家在使用镜像时候最好可以指定镜像版本而不是latest
。
容器打包
当如果你在原有的镜像做了处理(例如在镜像内新加服务或自定义参数),那么就需要自己打包镜像迁移。
本地创建容器镜像:
docker commit 容器id 要保存的镜像名称
查看镜像:
docker images
保存镜像为文件:
docker save 新镜像id -o 要保存的tar包名称.tar
将tar文件复制到新服务器:
docker load -i 镜像文件名.tar
镜像载入成功后,就可以正常用命令进行使用镜像创建新容器了。
容器匿名挂载数据(注意)
其中有些容器挂在后由于我没有做卷挂在,所有的数据在容器内部,所以需要打包镜像传输。
部分Dokcer镜像是由自动做数据挂载,也就是说你可能没有做数据卷挂载,但是镜像会帮你做匿名挂载
!
docker inspect 容器ID
"Mounts": [
{
"Type": "volume",
"Name": "c7fd0e66917e4cdb2b60e450bbdaa7bfd0c2069b800db4a45066a97c60dea36e",
"Source": "/var/lib/docker/volumes/c7fd0e66917e4cdb2b60e450bbdaa7bfd0c2069b800db4a45066a97c60dea36e/_data",
"Destination": "/data",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
]
上面就是匿名挂载卷,需要注意也要自己手动打包挂在卷数据进行迁移。
如果你只打包了容器而没有打包匿名卷数据,可以说打了个寂寞~
部分特殊容器服务恢复
GitLab
镜像复制后运行却总报权限不足,无奈只能用原始备份命令
备份命令:
gitlab-rake gitlab:backup:create
还原命令:
gitlab-rake gitlab:backup:restore
但是很神奇的事情发生了,内部读取备份又提示没权限
docker exec -it gitlab update-permissions
其实在第一次点对点传输的时候就使用过这个重新声明权限但没有用,神奇的是后面用还原备份的时候再用用一次居然可以了...
最后就再执行了还原备份命令,GitLab就正常还原之前的数据了。
额外数据迁移
服务器之间数据传输 SCP
那么第一步是借助工具做了基础数据服务传输,那么其他数据【容器之类的】只能用服务器相互传输。
scp /hostpath user@127.0.0.1:/romtepath
hostpath
本机目录
user
远端用户名
romtepath
远端目录
依照提示输入远端认证就可以完成数据传输。
多命令执行 Tmux
如果细心的朋友就会发现,上面的数据传输是需要保持终端在前面运行【后台运行也是】,一旦离开终端页面传输就终止。
那么我们就需要借助Tmux来为我们在服务器产生一个内部终端可供我们后台运行。
yum i tmux -y
新建会话:
tmux new -s SESSIONNAME
查看当前目前执行会话:
tmux ls
进入某个会话:
tmux a -t SESSIONNAME
让当前会话在后台运行
先按住 Ctrl+B
全部松开后 按 D
就可以挂在后台运行了。
服务器的小调整
虚拟内存机制设置
这个服务器本身就只是为了个人用(博客)且作为一个中心点作为堡垒机,查看其它服务器是否还正常运转,所以内存我就用的比较少(2G)。
因此提高的虚拟内存的策略,为突然需要实体内存的服务留存必要的空间。
在此文件下操作:
vi etc/sysctl.conf
虚拟内存策略:
#swappiness
vm.swappiness=60
激活设置:
sysctl -p
最后小插曲
这个中间还有个小插曲:期间专员和我联系,
我:为什么优惠活动即将停止,没有提前告知客户。
专员:我们都有在页面显示的呢,我们不会主动告诉客户,这样来说是给客户一种骚扰。
我:那为什么续费页面不告知客户呢?
专员:这样的话给用户的体验很糟糕,而且还会对服务器有计算压力。
我:续费页面都能计算优惠价格,而优惠要终止却不能续费页面告诉要结束,那现在导致客户服务器停止了,那我们损失怎么计算?你居然在和我说用户体验,难道这样的用户体验就很好?
专员:(开始循环准备句子了)