V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
skyrim61
V2EX  ›  程序员

请教下, 全国各地地方的服务器如何集中管理, 大概 100 多台,详细如下

  •  
  •   skyrim61 · 7 天前 · 2346 次点击

    请教下 v2 的大佬们, 我们有套产品 开发架构是基于传统的 LNMP 架构(ubuntu20 系统上), 需要在客户电脑上部署这套系统, 另外带上 OCR 识别 python 程序 此类客户分布在全国各地到处, 目前大概有 100 多台(每台都分散在各个地方), 由于客户电脑都是在厂地, 是不可能每个电脑都有公网 IP 地址的 如何集中管理? 如何做配置文件更新? 代码更新? 各个服务器系统监控, 业务监控如何展开? 每个厂地的服务器情况不可控制, 随意开关机, 每次关机, 推送的更新无法及时收到, 导致开机运行报错.等等等

    45 条回复    2024-06-25 10:31:54 +08:00
    skyrim61
        1
    skyrim61  
    OP
       7 天前
    根本忙不过来
    Bisn
        2
    Bisn  
       7 天前
    没有固定 ip 麻烦,考虑 ipv6 ? 找一些兼职帮忙维护
    kuokuoa
        3
    kuokuoa  
       7 天前
    内网穿透,每个电脑装 zerotier ,他只要保证有网就行不需要公网 IP 。可以自建中转节点你有公网 IP 就行
    yekern
        4
    yekern  
       7 天前
    把 代码和 OCR 封装成 docker 镜像, 然后 搞一个 client, 用于管理管理一些脚本或者命令 拉取镜像 重启服务 等等, client 连接 你们中心服务器 socket 或者 或者 定时每分钟拉取一次配置 随意, 剩下的就是你们这边 通过中心给每个客户 自定义配置文件, 或者自定义镜像 或者使用公用镜像了. 其实跟 K8s 差不多应该. 不过 docker 镜像 应该自建一个私有服务器
    swulling
        5
    swulling  
       7 天前
    装向日葵之类软件的企业版,再加上 tailscale/zerotier 就行了,双保险。
    Songxwn
        6
    Songxwn  
       7 天前
    frp 吧
    cppc
        7
    cppc  
       7 天前
    frp 把 ssh 打通,或者楼上的方案用 直接用 zerotier ,tailscale 把网络打通。后者统一管理方便,但数量上去了可能需要付费。
    另外因为网络打通了,就有了远程管理的可能性,所以实际上解决网络问题。
    clf
        8
    clf  
       7 天前
    搞个定时任务和脚本,在各个设备上请求你们自己的服务器,每天向你们的服务器请求,检查版本号、激活授权、配置信息啥的?
    Hopetree
        9
    Hopetree  
       7 天前
    意思是你要远程管理客户的内网环境?先不说方案吧,你确定这种过得了客户的安全审计吗?说白了就是内网穿透或者局部组网就能解决的事情,但是客户能同意这种玩法吗,我表示很不理解
    clf
        10
    clf  
       7 天前
    @clf 额外的,开机前先执行这个脚本检查通过后再启动,如果检查有更新就主动更新?
    nicholasxuu
        11
    nicholasxuu  
       7 天前
    @clf #8 +1 ,他们没有外网 IP ,你不好请求它们,那就让他们来请求你呗。
    每分钟跑一下 cronjob 都行,平均下来也就 2qps 。
    黑别人服务器的黑客就这么干的,放个脚本和 cronjob 在别人服务器里,每隔一段时间去请求黑客自己的服务器,下载 sh 脚本后执行。
    然后你服务器里还能统计一下请求者信息,看谁没来打卡请求,就判定为掉线什么的。
    skyrim61
        12
    skyrim61  
    OP
       7 天前
    世界是一个巨大的草太班子, 我们客户都是类似个体户多点, 没有 500 强. 所以安全什么的, 不用考虑, 一般也没谁来黑吧, 没啥价值,
    skyrim61
        13
    skyrim61  
    OP
       7 天前
    其它部门同事说, 今年可能会到 200 台. 这块业务增长迅速. 数量上去了, 维护起来越来越吃力
    skyrim61
        14
    skyrim61  
    OP
       7 天前
    对了, 我们系统本身还是要有一定加密, 防止破解的需求 .
    skyrim61
        15
    skyrim61  
    OP
       7 天前
    总之, 对自己挺有挑战的, 毕竟能遇到各种想不到的问题
    kamin
        16
    kamin  
       7 天前
    用阿里云或者腾讯云,买最便宜的套餐,按流量计费,然后用 wireguard 组网。这样就能互通了,就是内网互通流量会走阿里云或腾讯云的云服务器。
    我们就是这样做的
    https://imgur.com/a/s0nui8e
    然后客户机 cron 加入保活脚本,定时 ping vpn 网关,如果 ping 不通,客户机重新连接
    https://imgur.com/a/2alCC4n

    `
    #!/bin/sh
    ping_monitor()
    {
    ping -c 3 -i 0.5 -W 1 $1 > /dev/null
    if [ $? -eq 0 ];then
    echo "" > /dev/null
    else
    systemctl restart wg-quick@wg0
    fi
    }
    ping_monitor 10.7.0.1
    `
    XuYijie
        17
    XuYijie  
       7 天前
    没有公网 IP ,我的水平能想到的就是用蒲公英异地组网,也挺便宜的
    shadowyue
        18
    shadowyue  
       7 天前
    业务都这么大了,找几个人专门负责各地的事情也行?或者找兼职的人帮你弄。客户肯定觉得有专人来处理最放心。
    MADBOB
        19
    MADBOB  
       7 天前
    有钱/预算就买向日葵或其他厂家现成的远程管理方案,没钱就 frp/nps 反向代理 ssh ,ssh 能打通能远程,其他都随便搞。之前用 nps 在全国各地搞了大概 2-300 台机器,只要硬件没啥大坑维护很好用。另外不推荐 wireguard/tailscale 这种自己组网,各地网络/运营商都不同,udp 政策也不一样,不稳定给自己找坑。买向日葵的组网产品还比较好。
    bitmin
        20
    bitmin  
       7 天前
    简单点就再写个客户端管理这套系统,定时请求服务器看有没有需要更新的,有就拉下来

    每次重启先请求服务器对比版本号看看有没有更新,有就下载更新,没有就直接启动这套系统
    phx1
        21
    phx1  
       7 天前
    786375312123
        22
    786375312123  
       7 天前
    远程控制软件都能做吧,向日葵,anydesk 什么的。
    feather12315
        23
    feather12315  
       7 天前
    自建 rustdesk server ,上 rustdesk
    Jirajine
        24
    Jirajine  
       7 天前
    为什么需要你去“推送更新”,不是客户端定期检查更新从你的服务器上拉取?
    你要是需要对那些服务器完全管理,也就是远程任意代码执行,那随便加个 timer 定时任务`curl https://mydomain.com/update.sh | bash`这样的,linux 一般没有乱七八糟的杀毒软件给你报毒。
    xiebaiyuan
        25
    xiebaiyuan  
       7 天前
    膜拜一下上面的大佬们..
    nuk
        26
    nuk  
       7 天前
    LNMP 为啥不放虚拟机里面,宿主机系统只要不折腾啥事没有,随便开关机,集中管理搞个 wireguard 或者 openvpn 也够了,vpn 建不起来的搞其他的也没用。
    sampeng
        27
    sampeng  
       7 天前
    从需求来看,这就不是一个远程控制的需求,而是管理。这就要在机器/产品/程序里面有专门的代码。标准 cs 架构。定时请求云端,然后做你要做的事。

    就拿文件更新来说,这就是 标准逻辑,定时请求更新接口,有更新,更新文件。吧啦吧啦吧。

    远程控制? 200 台你手动做一个试试。。。
    sampeng
        28
    sampeng  
       7 天前
    监控逻辑一样,定时心跳往云端发。可以自己开发接口,也可以标准 promethus 。丰简由君。现成的?不可能有。
    当然,你的需求只是远程去“手动”的一台一台去维护,那楼上的解决方法都是 ok 的。真正做产品这么做就是脑子进水了。这么干出完全漏洞。200 台机器就全部变成肉鸡。
    sampeng
        29
    sampeng  
       7 天前
    今年 200 台。明年 2000 台。。。再然后 1 万台。。。然后一台一台人肉去维护。我想这绝对不是你们产品/业务/售后希望的模式。。。你得招多少人。
    ik
        30
    ik  
       7 天前 via iPhone
    哥,趁 ssh 老哥还没来,更新维护的活包给我吧😆
    nomytwins
        31
    nomytwins  
       7 天前   ❤️ 1
    架构有问题吧,这种不应该 saas 模式更好
    evilangel
        32
    evilangel  
       7 天前
    我记得二十年前上高中那会有个软件叫 “灰鸽子” 支持内网反弹自动上线。。。。。
    cnlnlhb
        33
    cnlnlhb  
       7 天前
    我现在维护了十几个地方的服务器,我主要的架构是这样的:
    1.首先能访问异地机器,肯定要组网,所有地方主路由用的是爱快,通过 vpn 组网,星形网络,全部组到一个节点下,然后在外面远程连到这个节点就可以访问所有地方的机器,并且是走内网的
    2.所有地方都有一个备用的蒲公英 4G 路由,这个主要用于备用链接/主接入宽带断线备用链接,如果通过正常方式进不去了就通过备用进
    3.节点多了之后不可避免会遇到掉线问题,有时候掉线还不能被及时发现。所以买了个阿里云的 99 机器,做拨测,每隔 1min 播一下所有节点是否在线,连续三次掉线推告警到企业微信。这个主要是拨测网络入口,就是爱快的 wan ,主要拨测公网 v4 和公网 v6
    4.还有一台机器在星型网络的中心,就是能连通所有节点的那个中心节点下,然后这台机器负责拨测所有内网设备,比如 ping ,http 地址,tcp 端口是否开放
    以上基本能满足远程运维,拨测监控需求,并且费用比较低,成本可控,对于一些常见故障比如掉线后重新上线需要的一些脚本,可以联动,减少了手动处理的次数
    gaobh
        34
    gaobh  
       6 天前 via iPhone
    前端网页做个更新包上传可不可以,程序写好脚本上传完更新一把嗦。
    Ackvincent
        35
    Ackvincent  
       6 天前
    向日葵
    jason56
        36
    jason56  
       6 天前
    写个 socket 服务,终端实时连接+心跳包,服务端推送指令,终端执行指令
    skyrim61
        37
    skyrim61  
    OP
       6 天前
    @cnlnlhb 客户厂地的网络, 我们无法更改, 可惜
    skyrim61
        38
    skyrim61  
    OP
       6 天前
    随着服务器越来越多, 管理越发的难了, 现在最怕的就是要变更, 比如配置更新, 表结构修改
    photon006
        39
    photon006  
       6 天前
    frp 的 stcp 模式或 wireguard ,也可以多种方案同时部署
    InDom
        40
    InDom  
       6 天前
    首先必须要上的,主动更新能力,说白了就是启动时先检查更新,运行中每隔多久启动一次检查更新。

    其次,如果你有远程回连的需求,则在定时检查更新时添加一个判断,如果本机需要被远程,则启动 frpc 之类的工具,可以通过你们服务器将 ssh 端口暴露到服务器内,你们就可以通过 ssh 连接目标服务器了,结束后关闭 frpc 穿透。

    这个需求只需要你们自己有一个固定公网服务器即可,甚至检查更新都不需要服务器,纯静态文件 CDN 就可以解决。

    一个文件记录最新的版本号,一个文件记录版本号历史,然后每个版本号对应一个升级包。

    需要主动开启远控就再加一个文件,将等待被控的设备 ID 记录在内(以及分配 ssh 临时端口号)

    最后,一定一定要做的,就是以上这些文件(升级包,远控配置等)都必须经过签名,客户机必须严格验证签名来源通过才行。

    然后公司保护好私钥,对升级包以及远控命令都进行签名。
    267263
        41
    267263  
       6 天前
    监控其实好解决,让项目上的服务器主动推送到你们的服务器就行。如果只是 ssh 远程的话,内网穿透+密钥登录+fail2ban 就能解决。批量管理不好弄,每个项目上的网络环境都不同,批量运行命令很容易报错,公司最好开发一个管理的平台,或者说优化一下更新的功能。
    KB12312
        42
    KB12312  
       6 天前
    tr069
    sunzhenyucn
        43
    sunzhenyucn  
       6 天前
    tailscale
    liuliancao
        44
    liuliancao  
       6 天前
    这个主要是技术债吧,你们没有一套完善的新服务的流程
    1. 监控可以考虑下 zabbix 用 root 起 这样可以通过 zabbix 下发命令
    2. 配置同步有很多方案你可以外部写个轮询脚本,也可以用 iac 工具,我目前是 puppet
    3. 最好还是有个地方维护这些服务器,比如 cmdb
    4. 用 frp 或者其他组网也可以这样你就可以通过 jumpserver 或者 ssh 终端去管理了
    实在不行 你们后续要求云就可以了 zzz
    xueling
        45
    xueling  
       2 天前
    一、配置文件如何更新,首先配置文件要有版本标识,系统版本和配置文件版本互相关联,防止出现系统版本和配置文件版本出现兼容性问题。配置文件尽可能考虑向下兼容设计。采用客户端定时拉取的方式进行升级。
    客户端拉取后将配置文件和升级程序存放在单独目录,验证升级包数据完整后,定时执行系统更新。系统增加故障恢复机制,升级失败后可以回退到原版本。所以建议要将:配置文件目录、系统安装目录、数据库数据目录、升级或回退程序目录、临时升级包存放目录要区分清楚,目录混在一起就非常容易出问题。

    二、监控数据上报如何实现,由于客户网络状况较为复杂,建议采用定时上报心跳包的形式,系统将心跳包日志数据首先写入到暂存目录。然后打包线程根据数据量和时间生成日志文件,比如每 5 分钟生成一个日志包文件。使用异步上报线程将暂存目录的日志包数据上报到远程服务器。上报正常则清除客户端的缓存数据,否则等待下一次异步线程轮询处理。

    三、系统监控和业务监控如何实现,我理解你说的系统监控是指系统运行状态监控,包括:磁盘、cpu 、内存、负载和系统运行状态等指标, 业务监控是指根据你们自身业务逻辑层面的监控,比如像订单量、你说的 OCR 识别次数、OCR 异常率等此类你们需要的所有的业务类指标,

    我看到楼上推荐的技术方案,其实并不符合你们的场景,这些千篇一律的服务器运行状态监控,提供的都是一些相对固定的数据指标,实现自定义扩展很难。而且接入也比较麻烦,也不能实现业务层面的指标监控。

    我向你推荐我的开源项目: https://github.com/xl-xueling/xl-lighthouse ,可以灵活的自定义设置各种监控指标,灵活的设置分钟级、小时级、天级粒度的统计监控,支持自定义设置统计维度,一键部署、支持数据备份、有完善的 API 接口,,支持 rpc 接口和 http 接口接入,非常方便,也可以通过 api 查询统计指标、有完善的指标可视化功能和权限管理机制、你们只有 100 台服务器,感觉用单机版就可以了,最低配置只需要一台 4 核 8g 的服务器。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2846 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:24 · PVG 22:24 · LAX 07:24 · JFK 10:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.