• 内网后台同步到线上


    内网后台同步到线上

    一、需求引入

      上周四公司突然来个通知,说周五停电,放假一天,周六补班(工作日不上班我内心其实是窃喜的。。。因为上到周四感觉人已经比较疲累了,一定是年龄上去了的缘故 = =)

      停电意味着内网两台大服务器需要关机,关机意味着内网后台新闻发布不了,如下图。即定时上传那条路径因为没电的原因,断了。内容发布网站最重要的事通常就是每天更新内容嘛~~~当时大家都慌了,尤其老板。本来听说连停三天(周五

    六、日),那就更恐怖了,3天内容不更新,中心肯定不高兴的。一边老板在看能不能临时借个类似UPS的电源,供电一天(据说公司的UPS最多只能支持供电2~3小时);一边行政经理打12345投诉。最终结果是投诉是有效的,只停周五1天,借不了UPS。老板脑洞大开,还想把两台巨无霸服务器载回家去,通电来维持这个新闻发布,想想真觉得不可思议 = =

      最终我们的开发,本着大无畏精神,决定把内网后台拉下来,放到自己办公电脑上,然后把硬盘拆下来带回家,如果真的急着更新文章,就自己发。

      幸好周五大概晚上7点的时候有电了,如果真要发文章,可以找住公司附近的同事去开服务器,开发也省事不用在自己家里电脑跑后台发新闻,据我了解应该是不急着更新的,周六回来才搞起。

      前面来龙去脉讲完(一匹布甘长 。。。)

      正题来了,老板觉得这样风险太大,漫漫暑热才刚开始,谁知道三天两头又来停电的~~开发拉后台代码到本地也挺久,因为很大,而且还得把数据库导下来,这样才能保证数据是最新的。注意上图的公司内部服务器,实际上既包括后台,也包括数据库!所以老板希望我做个把后台同步到gitlab上的,再同步到线上,防止再出现这种停电无法更新新闻的情况。

    二、实现思路及问题处理

      首先我要澄清一下,上面那个图的传输同步,实际上仅仅是资源目录同步,什么意思呢,请看下图(有点丑,大家将就下)

      

      本地后台代码目录文件及文件夹实际上只有一份!现在就需要把代码目录文件和文件夹都要同步到gitlab上。

       实现思路:

      (1)后台代码目录文件拷贝一份做同步测试

      (2)gitlab上新建一个任务用于放代码目录文件及文件夹,其中需要排除静态资源目录的软连接,因为已经做过同步了

      (3)线上服务器定时拉取

      一些问题处理:

      问题一:内网软连接同步处理

      (1)后台代码目录整个拷贝一份的时候,软连接还是有的,虽然不会上传。gitlab对于已存在的目录上传,命令是这样的:

    1 cd 拷贝的后台代码目录
    2 git init
    3 git remote add git地址
    4 git add .
    5 git commit -m "Initial commit"
    6 git push -u origin master

      直接同步到线上,会报错软连接目的目录找不到,因为内网和线上的用户及目录稍有不同,其实“——>” 过去的目录是闪烁状态的,也就是找不到的意思。

      

       当时git push上去已经传到gitlab上了,我就尝试用.gitignore 和 .git/info/exclude 来控制不上传,发现还是没效果,最终处理方法是删除,就是上面的r、u、html。然后线上只需要改一次软连接到线上的资源目录就好。当然也可以在每次同步到线上之后,删除线上的软连接重新做(同步过去的软连接实际上是内网的软连接),不过我觉得这样处理比较麻烦。

    cd xxx/gz_houtai
    rm -rf html u r

       问题二:内网数据库配置连接文件不同步到gitlab处理

       这个文件就不能删了,必须传到gitlab上,不然会影响完整性,即数据库连接文件都删除了,整个后台跑不动。

       首先也是可以像问题一那种麻烦的方法,每次同步到线上之后用线上的数据库连接文件覆盖,不过我觉得太麻烦。

       我是参考这个文章解决的:https://www.cnblogs.com/mafeng/p/7635228.html

       因为已经上传过jdbc.properties 上了

    git update-index --assume-unchanged WEB-INF/config/jdbc.properties

      效果如下:

     (a)内网服务器数据库连接文件

     (b)gitlab保存的数据库连接文件

     

     证明了内网提交没有同步到gitlab上了

    假设如果想改成线上配置连接,可以直接在gitlab上的web页面修改

    如下操作:

    线上服务器读取了gitlab上的数据库连接文件,不然连不了内网的数据库ip(192.168.0.0/24 网段),这里是通过ngrok代理内网数据库,成了公网连接,这样线上服务器也能连。

     

       当然如果真的停电,这个连接配置文件要改成线上的库。所以第3个问题是内网数据库同步到线上

      

       问题三:内网数据库同步到线上

      直接贴脚本算了,因为ngrok代理的内网数据库,成了公网域名连接,所以mysqldump下来非常慢,足足半个小时,所以一天同步2次绰绰有余。如果知道停电手动运行一次更新mysql也行。

      cat mysql_sync.sh

      

     1 #!/bin/bash
     2 ## 内网数据库同步到线上天翼数据库
     3 ## on 20210518 by ljy
     4 
     5 Dump='/usr/bin/mysqldump'
     6 
     7 local_ip='ngrok.xxx.cn'
     8 local_port=xxx
     9 local_bak='/home/ljy/data_bakup/mysql_local'
    10 [ ! -d ${local_bak} ] && mkdir -p ${local_bak}
    11 
    12 LogFile='/home/ljy/data_bakup/mysql_local/bak.log'
    13 Begin=`date +"%Y年%m月%d日_%H:%M:%S"`
    14 
    15 echo "$Begin 数据库开始备份。。。" >> ${LogFile}
    16 
    17 local_user=xxx
    18 local_pwd=xxx
    19 db='xxx'
    20 
    21 remote_ip=xxx
    22 remote_port=xxx
    23 remote_user=xxx
    24 remote_pwd='xxx'
    25 
    26 export LANG=en_US.UTF-8
    27 Date=`date +%Y%m%d_%H%M`
    28 DumpFile=$Date.sql
    29 
    30 ### 1、备份内网数据库
    31 ${Dump} -u${local_user} -p${local_pwd} -h${local_ip} -P${local_port} ${db} > ${local_bak}/${db}_${DumpFile}
    32 
    33 ### 2、导入到线上mysql
    34 mysql -u${remote_user} -p${remote_pwd} -h${remote_ip} -P${remote_port} ${db} < ${local_bak}/${db}_${DumpFile}
    35 
    36 
    37 ### 3、写入到日志
    38 End=`date +"%Y年%m月%d日_%H:%M:%S"`
    39 echo "$End 数据库同步完成。。。" >> ${LogFile}
    40 echo "############" >> ${LogFile}
    41 
    42 ### 4、定时删除备份的数据库
    43 find ${local_bak} -type f -mtime +1 -exec rm -f {} ;
  • 相关阅读:
    为 IBM Lotus Notes V8 构建复合应用程序(三)
    为 IBM Lotus Notes V8 构建复合应用程序(一)
    Lotus Notes 8中全新的Out of Office功能
    为 IBM Lotus Notes V8 构建复合应用程序(四)
    为 IBM Lotus Notes V8 构建复合应用程序(六)
    为 IBM Lotus Notes V8 构建复合应用程序(五)
    为 IBM Lotus Notes V8 构建复合应用程序(七)
    为 IBM Lotus Notes V8 构建复合应用程序(二)
    为 IBM Lotus Notes V8 构建复合应用程序(十)
    opencore内部调度
  • 原文地址:https://www.cnblogs.com/windysai/p/14782818.html
Copyright © 2020-2023  润新知