zoukankan      html  css  js  c++  java
  • git后台同步逆向恢复

    后台同步逆向恢复

    一、问题记录

      这是我昨天也就是10月15日测试的一个东西,源于周六的停电,为了万无一失,只能提早进行测试和恢复。

         停电意味着公司内网后台——》gitab仓库这个定时上传的线路没了(架构是:mysql+tomcat),只能用线上服务器临时部署的后台给运营同事发布文章。

      我大致记录下需要做什么。事先说明,这条内网——》gitlab——》线上路径是单向传输的!

      1、公司内网停掉定时任务同步脚本,线上服务器也要停掉从gitlab拉取代码的定时脚本(当然不停也没问题,除非你知道什么时候来电,趁定时任务脚本跑起来之前恢复,这个手速要求非常高,不建议。后面我会说明为什么要停,恢复会有一个git代码更新冲突);

      2、开启线上数据库,内网数据同步到线上去;开启线上发布后台,确认配置文件连的数据库为线上数据库地址;

      3、考虑到后台放线上的不安全性(据说以前被病毒入侵过,当时跟经理商量过用ip+端口方式给运营的人进行访问,先提供他们家里的出口ip给我,然后我在云控制台安全组规则设置ip白名单,当然域名也可以做iptables规则,但同样的功能肯定是考虑最简单的方法嘛~~),这样就能限制只有他们的ip能访问线上临时后台,其他地址禁止访问。

      最后就可以叫运营的人发测试文章进行测试了,这个线上发布的过程非常成功。

      问题是来电之后的恢复!

      

       需要把上面的传输线路逆过来运行一遍。

      1、先给线上只能拉取代码的账号开有上传的权限(gitlab控制台从reporter改成maintainer角色),从单向传输变成能逆向传输,手动上传同步回gitlab去

      2、线上数据库数据同步回内网(运营的人在线上发完文章不仅在服务器上会新增文件,数据库数据也有新增的,服务器新增文件,gitlab同步回内网即可;数据库有新增,则线上数据库同步回内网数据库)

      3、公司内网后台运行拉取gitlab数据

    第三个同步线上发的新闻过程很慢,拉取gitlab的核心命令是:

    1 cd $git_home && 
    2 
    3 git fetch --all
    4 git reset --hard origin/master


      git fetch --all 运行count 完一堆文件后,需要先统计数量,有40多万个对象,然后就定着一动不动。看了十来分钟还是这个页面,又怕终端突然断了白跑,于是就放在后台运行。

      然后时不时top看下跑完没有,我记得接近下午1点左右开始跑的,下午4点都没跑完。

       想想比对40多万个对象的异同,有新增才更新,关键一刻没同步完,服务器负载就高居不下,load average的值都有2点多。

      而且刚好我在做恢复测试这个过程中,公司的人竟然还发新闻,用的就是从内网——》gitlab ——》 线上这条线路,幸好内网——》gitlab这条线路在我测试前,被我关了,浏览器打开内网地址,能看到他们发的文章。只能同步到线上。而我已经把 线上测试的文章已经推到 gitlab上了,又怕他们会催着问内网发的文章一直没有更新到线上,我只能把还在跑的同步git进程干掉了,当时一个心痛呀,说不定再过多几分钟,就被我测出来,实际恢复时间需要多久。

      话说这个仓库已经算比较小的了,大的何止40多万个objects~~~~

      停掉这个进程之后也是有点问题要处理,我都知道肯定有问题,所以先删掉线上后台发布的测试文章,然后同步回gitlab,线上数据库也同步回内网数据库去,然而,内网新发的正式文章 add 到gitlab还是说我代码落后gitab仓库的数据。最后只能git push --force 强制推上去 = =

        我都担心这样粗暴恢复会不会有什么潜在问题。。。。

        问题来了,有没有什么办法能把恢复供电之后,线上发了文章后,比较快而准地恢复到内网呢??!!因为以前从来没试过从gitlab同步回数据到内网的。

      (幸好周六说不用发文章,而且貌似也没停电,不然今天根本无法出去浪,囧囧。。。)

    二、问题解决

    ---解决时间:2021-10-19(周二)

      周一上班的时候,想着这个问题总是要处理的,如果刚好停电那天是需要发文章的,始终都要恢复的,总不能叫人重新在内网后台在发布一次的。

      就搜索一下“git pull/fetch 很慢怎么解决”, 终于让我找到解决方法:https://blog.csdn.net/u010595191/article/details/85054694

      文章说对当前git仓库进行耗时分析,于是我复制一套一模一样的后台环境过去测试服务器,然后在git目录运行:

    GIT_TRACE=2 GIT_CURL_VERBOSE=2 git fetch

      运行完之后,返回信息没细看,再试试运行git fetch --all,挺快的~~

      于是铤而走险,直接在正式版的内网发布后台的本地仓库执行节点清理命令

    git gc --aggressive --prune=now

      周一下午4点左右跑,外加周一整个晚上,周二上班终于跑完了。

      然后重新执行同步,奇快无比~~~至此问题解决,感动 = =!

    1 git fetch --all
    2 git reset --hard origin/master

  • 相关阅读:
    A program file was not specified in the launch configuration.
    Effective C++条款38: 决不要重新定义继承而来的缺省参数值
    进程控制块
    Effective C++条款37: 决不要重新定义继承而来的非虚函数
    Effective C++条款42: 明智地使用私有继承
    迭代的是人,递归的是神(第一篇——递归调用的分析)
    Effective C++条款36: 区分接口继承和实现继承
    进程上下文
    进程的层次结构 ——进程组捕捉信号
    SQL语句的并集UNION,交集JOIN(内连接,外连接),交叉连接(CROSS JOIN笛卡尔积),差集(NOT IN)
  • 原文地址:https://www.cnblogs.com/windysai/p/15415491.html
Copyright © 2011-2022 走看看