服务器 - 从一台服务器切换至另一台服务器(损失数十条访客记录)

服务器 - 从一台服务器切换至另一台服务器(损失数十条PV记录为代价)

看着四年的服务器正式到期,没什么轰轰烈烈的告别,就像目送老朋友转身走远,只默默记下:哦,原来它陪了我这么久啊。

前言

一台陪伴了我4年的服务器昨天晚上到期了,数据和服务迁移到新服务器上有两点想尽可能保证的:

  1. 服务不中断
  2. 数据不丢失

最终结果是服务没中断,迁移过程中丢失了约数十条的PV记录。

大致流程是:新服务器部署环境安装依赖同步静态数据 --> 新服务器上准备好服务启动命令准备按回车 --> 旧服务器导出数据库数据传输到新服务器上并导入新服务器数据库 --> 新服务器快速启动服务 --> 将流量切到新服务器上。

中间从旧服务器开始导出数据流量切到新服务器上这段时间的产生的十几条PV记录写到了旧服务器上并与新服务器数据库产生了冲突。由于影响不是很大就没去处理。

当然想做到数据也不丢失似乎也可以通过主从数据库的方式来保证,但主要是我不会。

过程

新服务器安装依赖部署环境同步旧服务器的静态数据

我有一个习惯,旧服务器上的配置几乎都存放在一个专门的文件夹TFpath,然后ln -s软链接到原始位置,这样不论我修改什么配置,实质上配置文件都会在TFpath文件夹下被修改。

也就是说这些静态配置我只需要scp到新服务器上并在新服务器上将他们分别软链接到对应位置就好了。

这样在新服务器上安装好各个服务后一启动,配置就和旧服务器一样了。 万物皆文件好啊(bushi)

代码什么的统统复制到新服务器上,该安装的依赖安装好,坐等数据库改好后一键启动。

旧服务器导出数据库数据传输到新服务器上并导入新服务器数据库

我所涉及的动态数据主要存储在MySQL中,mysqldumps -u xx -p --all-databases > all.sql可方便导出整个数据库,scp all.sql user@ip:path可将数据库文件拷贝到新服务器上,新服务器上在MySQL命令行中执行source all.sql即可一键将数据库变得和旧服务器相同,连用户名密码都会变得一致。

有了数据之后,新服务器上的服务就可以启动,等待流量的到来了。

将流量切换到新服务器上

我使用的是CloudFlare的DNS(以及CDN),代理模式为完全。虽然名义上是CDN实际上在国内就是个减速器,这样做的目的主要是友好为数不多的国外用户以及隐匿我的真实IP。

实质上当你访问我的域名如https://letmefly.xyz时,DNS服务器将请求定向到其中一个Cloudflare节点上,Cloudflare节点再去请求我的源服务器,这样第三方用户就不知道我的真实IP了。

虽然通过一些特殊手段还是可能反映射到,但是cloudflare已经在很大程度上保证源服务器的安全了。请大家把赛博菩萨打在公屏上。

这样还有一个好处,就是切流量异常地顺利,几乎可以说是秒级。因为这种机制导致切流量时无需更新DNS,用户仍然访问cloudflare节点,cloudflare直接把流量切到新机器上就好了。

现在可以公开的情报

旧服务器IP是123.56.114.139,这个倒背如流的IP可以公开了。

新服务器的IP还藏在坚强的CloudFlare护盾后面,以防一波应该不会出现的针对源IP服务器直接的DDoS。

Q&A

有人说为何不借助云服务商的一键迁移或者镜像导入导出?

这样是很省事儿,一个是迁移过程中可能仍然会有部分数据修改到旧服务器上,一个是阿某云轻量应用服务器不支持大磁盘机器向小磁盘机器的一键迁移(想一键迁移还得氪金)。

有人说备案问题怎么解决?新服务器会不会因为没有备案导致流量被拦截?

不会。个人备案主要备的是域名不是IP,工信部规定解析到中国IP的域名都需要进行备案否则将会被拦截,但是我这个域名在旧服务器上的时候已经备案过了,所以不会被拦截。

Last But Not Least

陪伴了我4年的老战友,值得一个小小的纪念仪式。

还有最后10分钟

时间归零

goodbye隐藏款

goodbye

介绍后想起来两台同区域的阿里云服务器之间数据应该是可以通过局域网IP快速传,免受公网IP带宽限制。

End

当然这也许并非最优解,也许会有很多更简单好用的方法。如果有,请不要吝惜告诉我。

The Real End, Thanks!

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96955.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《云原生边缘与AI训练场景:2类高频隐蔽Bug的深度排查与架构修复》

在云原生技术向边缘计算与AI训练场景渗透的过程中,基础设施层的问题往往会被场景特性放大——边缘环境的弱网络、异构硬件,AI训练的高资源依赖、分布式协作,都可能让原本隐藏的Bug以“业务故障”的形式爆发。这些问题大多不具备直观的报错信息…

【51单片机】【protues仿真】基于51单片机数控直流稳压电源系统

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 一、主要功能 1、数码管显示输出电压值 2、滑动电阻调节输出电压 3、电压输出范围0-15V,步进值1 二、使用步骤 基于51单片机的数控直流稳压电源是一种通过数字控制实现电压调节的智…

xtuoj Rectangle

题目思路将矩形间的相交情况通过投影转化为x、y两个方向下的线段是否相交,即前面的题目,判断两个区间是否相交,x投影的每个区间的左端点是每个矩形x的min,右端点是每个矩形的x的max,y投影情况同理,只要x轴的…

【深度学习踩坑实录】从 Checkpoint 报错到 TrainingArguments 精通:QNLI 任务微调全流程复盘

作为一名深度学习初学者,最近在基于 Hugging Face Transformers 微调 BERT 模型做 QNLI 任务时,被Checkpoint 保存和TrainingArguments 配置这两个知识点卡了整整两天。从磁盘爆满、权重文件加载报错,到不知道如何控制 Checkpoint 数量&#…

Java面试小册(3)

21【Q】: 什么是Java的SPI机制?【A】:SPI 是一种插件机制,用于在运行时动态加载服务的实现。它通过定义接口(服务接口)并提供一种可扩展的方式来让服务的提供着(实现类)在运行时注入&#xff0c…

P1150 Peter 的烟

记录20#include <bits/stdc.h> using namespace std; int main(){int n,k;cin>>n>>k;int cnt0;while(n>k){cntk;nn-k1;}cntn;cout<<cnt;return 0; }突破口每吸完一根烟就把烟蒂保存起来&#xff0c;k&#xff08;k>1&#xff09;个烟蒂可以换一个…

Cursor和Hbuilder用5分钟开发微信小程序

分享一个5分钟搞定微信小程序开发的技能&#xff0c;需要用到两个工具&#xff1a;Cursor和Hbuilder。 第1步、下载HBuilder。Hbuilder可以实现一套代码直接生成安卓、苹果、鸿蒙各个平台APP。访问Hbuilder的官方网站&#xff0c;HBuilderX-高效极客技巧&#xff0c;选择适合…

k8s的dashboard

找一个装有docker的机器&#xff0c;在一个rocky linux的虚拟机里弄拉取一个rancher镜像建立一个目录&#xff0c;目的&#xff1a;和里面数据做持久化关联后台运行&#xff0c;让他有权限&#xff0c;8080端口和容器80端口映射&#xff0c;443和443做映射查看一下删掉&#xf…

桥接模式,打造灵活可扩展的日志系统C++

一、为什么用桥接模式在企业开发中&#xff0c;日志系统几乎是标配。常见需求&#xff1a;日志有多种类型&#xff08;Info、Warning、Error 等&#xff09;&#xff1b;日志需要支持多种输出方式&#xff08;控制台输出、写文件、远程上传、数据库存储等&#xff09;。如果把这…

kafka--基础知识点--5.3--producer事务

1 事务简介 Kafka事务是Apache Kafka在流处理场景中实现Exactly-Once语义的核心机制。它允许生产者在跨多个分区和主题的操作中&#xff0c;以原子性&#xff08;Atomicity&#xff09;的方式提交或回滚消息&#xff0c;确保数据处理的最终一致性。例如&#xff0c;在流处理中…

利用DeepSeek实现服务器客户端模式的DuckDB原型

在网上看到韩国公司开发的一款GooseDB&#xff0c;DuckDB™ 的功能扩展分支&#xff0c;具有服务器/客户端、多会话和并发写入支持&#xff0c;使用 PostgreSQL 有线协议&#xff0c;但它是Freeware而不是开源&#xff0c;所以让DeepSeek实现之。 首先把readme页面发给他翻译&a…

麦当劳APP逆向

版本 V 7.0.17.0反调试 梆梆企业加固 frida反调试部分代码 headers {"biz_scenario": "500","biz_from": "1004","User-Agent": "mcdonald_Android/7.0.17.0 (Android)","ct": "102","…

大数据毕业设计选题推荐-基于大数据的结核病数据可视化分析系统-Hadoop-Spark-数据可视化-BigData

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

Vue3 视频播放器完整指南 – @videojs-player/vue 从入门到精通

前言 在 Vue 3 生态中&#xff0c;视频播放功能是许多应用的核心需求。videojs-player/vue 是一个专门为 Vue 3 设计的视频播放器组件&#xff0c;基于成熟的 Video.js 库构建&#xff0c;提供了简单而强大的视频播放解决方案。 主要特性 Vue 3 组件化&#xff1a;原生 Vue …

【靶场练习】--DVWA第一关Brute Force(暴力破解)全难度分析

注意&#xff0c;这一关必须要使用Burpsuite来抓包 目录Low1.抓包2.发送到爆破模块3.选择爆破模式爆破模式介绍4.添加载荷5.添加字典6.爆破查看查看源码Medium查看源码High1.抓包2.在bp的extensions中找到CSRF Token Tracker&#xff0c;并安装3.构造字典4.成功爆破查看源码Imp…

Java语言——排序算法

一、基本概念排序&#xff1a;将n个数字按一定顺序排列&#xff08;比如&#xff1a;升序&#xff0c;或者降序&#xff09; ^内部排序 &#xff1a;若整个排序过程不需要访问外存便能完成&#xff0c;则称此类排序问题为内部排序 ^外部排序&#xff1a;若参加排序的记录数量很…

【Linux】人事档案——用户及组管理

目录 1 用户及组管理 2 用户及用户组管理命令 2.1 useradd&#xff1a;建立用户 useradd命令用于建立用户&#xff0c;该 2.2 passwd&#xff1a;更改用户密码 2.3 usermod&#xff1a;更改用户信息 2.4 groupadd&#xff1a;建立用户组 2.5 finger&#xff1a;查找并显…

给定一个有序的正数数组arr和一个正数range,如果可以自由选择arr中的数字,想累加得 到 1~range 范围上所有的数,返回arr最少还缺几个数。

给定一个有序的正数数组arr和一个正数range&#xff0c;如果可以自由选择arr中的数字&#xff0c;想累加得 到 1~range 范围上所有的数&#xff0c;返回arr最少还缺几个数。 #include <iostream> #include <vector>using namespace std;void func1(std::vector<…

BigemapPro快速添加历史影像(Arcgis卫星地图历史地图)

这是Esri(Arcgis)官方提供的历史影像数据&#xff0c;可放心使用。https://livingatlas.arcgis.com/wayback如何快速添加到Bigemap Pro软件里&#xff0c;详细步骤如下&#xff1a;复制下面的文本保存为 配置.bmmap,然后拖入软件就可以了{"BmLayerVersion":"1.0…

[免费]基于Python的Django医院管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是python222_小锋老师&#xff0c;看到一个不错的基于Python的Django医院管理系统&#xff0c;分享下哈。 项目视频演示 https://www.bilibili.com/video/BV1iPH8zmEut/ 项目介绍 随着人民生活水平日益增长&#xff0c;科技日益发达的今天&#xff0c;…