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

Windows 服务器维护太呕血…

  •  
  •   fox0001 · 103 天前 · 3345 次点击
    这是一个创建于 103 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司某网站需要使用 Windows 服务器,在维护期间,需要更新补丁。然后,问题就来了…

    1 )更新补丁后需要重启服务器!天啊,这是服务器,不是 PC,可以随便重启的吗?然而即使重启了,仍然提示某些补丁更新失败!!!

    2 )重启后,所有服务需要有先后启动顺序。然而,并不能像 Linux 那样直接修改 service 的启动顺序。至于怎么设置启动顺序,或者依赖关系,还不知道…

    天啊,大家用 Windows 服务器都没遇到这些问题的吗?我们用 CentOS 跑的网站,直到网站关闭,都没重启过。

    第 1 条附言  ·  103 天前
    于是我们后面的计划是
    1 )替换所有存储过程、代码实现触发器的功能,转向 MySQL
    2 )重新实现所有老旧的、用.net 实现的 service,服务器迁移至 CentOS
    3 )部署两个 tomcat 实现负载均衡,并且用于轮流更新,实现更新服务不停网站
    58 回复  |  直到 2017-08-27 13:33:48 +08:00
        1
    geelaw   103 天前
    你这问得很没逻辑啊。

    第一个问题的第一部分:所以服务器不会自动重启。

    第一个问题的第二部分:重启为什么一定要安装成功?重启才能尝试安装,造成更新失败的原因千千万,并不是重启就能解决的。

    第二个问题:当你启动一个依赖未启动服务的服务时,其依赖项会启动,除非是禁用状态。难道 dependency resolution 不是自动完成的?
        2
    a1044634486   103 天前
    说的跟 centos 打补丁不用重启一样。。
        3
    hotsnow   103 天前
    服务器为啥不能随便重启?维护窗口是干嘛用的 :p
        4
    gdtv   103 天前
    CentOS 为什么不用重启? 因为不会自动更新。
    你将 windows 设置为永久不自动更新,也能不重启。
        5
    jarlyyn   103 天前   ♥ 5
    所以啊楼主,v2 现在强行回答的这么多,痛苦不痛苦?

    不是所有人都知道,linux 的话大部分文件可以直接替换,大部分更新不需要重启。而 windows 正在运行中的程序文件往往是不能写入的。所以 linux 是更新玩后再重启,而 windows 一般是先关机 /重启再更新。

    也不是所有人都知道,linux 只有个很小的内核,而且服务器用的发行版一般会锁定内核大版本,大部分情况下是不需重启的。windows 的内核包含的东西太多,所以很多更新都要需要重启。

    至于这些人为什么要答呢?我也不知道-_____-
        6
    zro   103 天前
    用 Linux 的逻辑来维护 Windows 当然呕血,反过来也一样。。。

    如果你要某些服务有先后顺序启动,就先把服务都设为手动,然后写个 bat 挂到启动项来完成
        7
    wendaoshenyang   103 天前 via Android
    那些说关 windows 更新的,不怕漏洞吗😂😂😂😂
        8
    fox0001   103 天前
    @geelaw #1

    第一个问题是,既然重启安装失败,那还让不让安装更新?难道要进安全模式更新?

    第二个问题,依赖项要怎样设置?是不是需要重新安装 service 才能修改?
        9
    Mogugugugu   103 天前
    +1 CentOS 习惯了,换 Win 真受不了...
        10
    fox0001   103 天前
    @a1044634486 #2 上一个项目用 CentOS,确实没认真更新过补丁。不过家里的树莓派,一直用 apt 更新,都没重启过
        11
    fox0001   103 天前
    @hotsnow #3 电子商务网站的服务器随便重启,那还让不让客户买东西?
        12
    fox0001   103 天前
    @gdtv #4 Windows 服务器不打补丁,不怕漏洞么?不担心比特币勒索?
        13
    fox0001   103 天前
    @jarlyyn #5 没事,就是要找个地方喷一下。不发出来,憋在心底更痛苦! v2 是个吹水的好地方。在这发帖,就不用那么认真,大家聊聊就好~
        14
    fox0001   103 天前
    @zro #6 bat 解决启动顺序的问题,可以考虑,谢谢~
        15
    chih758   103 天前 via Android
    Windows 不但会自动帮你更新,还会自动帮你重启呢!我第一次遇到的时候那个惊讶。。

    Linux 有内核热补丁技术,可以不重启对内核打补丁,用户态的升级更不用重启了
        16
    geelaw   103 天前 via iPhone
    @fox0001 那就等下次,或者就再次重启,在有限的时间内倒腾好。

    一个服务(我假设你说的是 services.msc 管理的那些)应该自己把自己安装进去的时候乖乖设置好依赖,用户不需要设置依赖关系。
        17
    ETiV   103 天前 via iPhone
    Windows 服务器做那么好,哪有 Linux 服务器的市场份额
        18
    oott123   103 天前 via Android
    遇到安全问题,自动打补丁自动重启不是挺好的?多省心。
    服务依赖是注册服务的时候配置的,不是你手动折腾的。

    以及…你可以起个虚拟机,当 Linux 用,大概会好点。
        19
    fox0001   103 天前
    @oott123 #18
    1 )这是 Web 服务器,不能随便重启!
    2 )装虚拟机再装 Linux,多么浪费服务器资源啊!
    3 )很多事情都不能在注册服务时就订好的。例如一开始用 IIS 做前端,后来换成 Apache,那所有的 Tomcat 服务器都因为要改依赖而重装?这事情比重启服务器折腾多了

    经验教训告诉我,不能以使用 PC 的经验来管理服务器…
        20
    flyz   103 天前 via Android
    第一个问题不知道怎么回答,
    第二个可以用 vbs 或者 bat 延迟解决,我正在用。
        21
    oott123   103 天前 via Android
    Web 服务器为什么不可以随便重启?担心服务中断的话,只要不同时重启所有服务器不就可以了吗?
    重启都不能重启,怎么又能随便重装服务呢?
        22
    geelaw   103 天前 via iPhone
    @oott123 因为安装一个服务不需要重启
        23
    oott123   103 天前
    @geelaw #22 改服务也会造成服务中断。

    不过说起来,无论 IIS 还是 Apache 为啥会和 Tomcat 有依赖关系呢?请指教,个人没有 java 经验。
        24
    jarlyyn   103 天前 via Android
    @oott123

    作为一个开机常年 Aptitude upgrade 系统的桌面用户,你猜是不是我升级好都要重启电脑啊?
        25
    geelaw   103 天前 via iPhone
    @oott123 然而注册一个服务基本上是瞬间的,重启系统和重启应用之间差别还是很大的

    此外我不用 tomcat,但我用 IIS,所以 IIS 不依赖 tomcat,反过来就不知道了。
        26
    hotsnow   103 天前
    @fox0001 #11 所以说合适的维护窗口很重要,挑个不忙的时间,银行都经常隔三差五搞个通告,凌晨业务全停搞维护 :p
        27
    justtery   103 天前 via Android
    我:网管,电脑不好使了,网管:重启一下试试。我:还是不好使啊!网管:换台机器
        28
    azuis   103 天前 via iPhone
    @jarlyyn 说反了吧 Windows 是微内核,Linux 是宏内核。
        29
    fox0001   103 天前
    @hotsnow #26 面向全球的 Web 服务,所以基本没有凌晨重启的时机。不过,遇到要更新系统,就只能挑个折中的时间去重启了
        30
    wevsty   103 天前
    Windows 下面的更新确实招人烦,更新必须重启还是设计的机制决定的,只能说这种设计有利也有弊吧。
    服务启动顺序的问题其实是开发或者安装的时候就应该设计好的,系统提供了这个功能,正常情况下应该是不需要用户来考虑的。如果这里开发的不正确,用楼上提供的 bat,vbs 之类的方法其实也就 OK 了。
        31
    fox0001   103 天前
    @oott123 #23 这里的依赖,只是 service 启动顺序的意思。例如 Apache 启动前,要先启动 tomcat,tomcat 启动前要先启动数据库,之类。Windows 不能简单更改启动顺序,所以考虑用 service 依赖来解决
        32
    oott123   103 天前 via Android
    @fox0001 可是,先启动 tomcat,后启动 apache,会带来什么问题吗?
        33
    MrMario   103 天前 via iPhone
    我们现在是这么处理的:部署 wsus,每月补丁周二发布后审批补丁,通过组策略配置周末重启更新。如果业务不能中断,那么前面放台负载均衡,然后分批安装、重启,通过部署的 agent、wsus 和日志检测安装和重启情况。安装失败不要紧,下一个维护周期继续打。
        34
    7654   103 天前
    Windows 服务器不自动重启在 Win10 面前终结了
        35
    fox0001   103 天前
    @oott123 #32 这是举个例子,不用太较真
        36
    fox0001   103 天前
    @MrMario #33 我们也计划做负载均衡来实现停服务不停网站的更新操作
        37
    anyele   103 天前 via Android
    你 mono 放 Linux 上就可以了
        38
    akira   103 天前
    你们的网站就跑在一台服务器上面的?
        39
    pq   103 天前
    所以,windows 服务器一般都是企业内部使用的,很少有人放到互联网上用。
        40
    Tuisku   103 天前
    @pq #39
    唔……你这个“很少”是从哪里得到的数据?
        41
    fox0001   103 天前
    @anyele #37 重点是数据库…
        42
    fox0001   103 天前
    @akira #38 是,反正不是什么大型网站
        43
    swsh007   103 天前 via Android
    这不算啥,多年前 windows nt4 跑计费服务器...现在想想都可怕,关口结算就是个垃圾玩意。
    不打 patch 肯定不行,但是一个强壮的策略或者企业级的防火墙是 windows server 必须安装的。
        44
    anyele   103 天前   ♥ 1
    @fox0001 #41 SqlServer 2017 on linux
        45
    fox0001   103 天前
    @anyele #44 对于国外服务器来说,都是钱啊~而且新推出的软件,没有时间验证,不敢上
        46
    UnknownR   103 天前
    我不知道你们当初是怎么选择的 windows 服务器,大部分的 patch 和 deploy 都是要重启的,微软自家的服务器也一样,但是一般都是多台物理服务器做分流与负载均衡,要么是装在 hyper-v 上,一般步骤是测试,通告监控软件,截流,下线,打补丁,测试,上线,引流,通告监控软件,作为域内服务器,都是在半夜或者周末来更新重启的,选择一个系统和服务之前了解它的特性是必要过程
        47
    jhdxr   103 天前
    看到#37 和 #41,我觉得吧。。。楼主你不会用 windows 就还是趁早迁走比较好。不是说会用桌面版 windows 就能轻松搞定 windows 的服务器的。

    顺便回答主贴问题:
    1. 服务器为什么不能随便重启?重启服务器有什么问题?会造成服务中断?那么你所运行或依赖的所有环境也都是始终保证在线的?有计划有准备的服务离线不应该是正常情况吗?
    2. services 里能直接配置依赖关系。还是那句话,会用 windows 桌面版不代表你就会配服务器了。Linux 是要投入精力去学的,windows 同样也是。

    另外纠正 @jarlyyn,windows 才是微内核的,Linux 是(唯一的?)宏内核
        48
    fox0001   103 天前
    @UnknownR #46 选择 Windows 服务器,是历史原因。网站原来是 asp.net 写的,外加一堆 c#写的服务。后来用 Java 重新实现了,但是仍有一些存储过程、触发器和 c#服务未处理,于是仍在 Windows 上跑。你所说的部署和维护方式确实很美好,但是带来的额外成本很高(只要是国外服务器不便宜,正版软件都是钱),还不如把钱剩下来,让老板给我们加个鸡腿。
        49
    fox0001   103 天前
    @jhdxr #47 是的,我们知错了。上面说了很多,就不废话了。我们会纠正历史错误,拥抱 Linux,以及开源软件。
        50
    venster   103 天前 via iPhone
    你这典型的会用 Linux 就觉得天下无敌了。
        51
    fox0001   103 天前
    @venster #50 呃,实在没这个意思…纯粹吐槽一下·
        52
    0017   103 天前
    1. 一般用途的服务器窗口期更新重启 必须 24 小时在线的服务器至少要有一个热备份吧? 先停一个更新完再操作另一个

    2.依赖关系设置很简单啊,一条命令就够了...
        53
    tianxiacangshen   103 天前
    我也只会用 windows

    吧数据库和程序分开,然后将程序备份在临时服务器,备份的时候将域名解析到临时服务器,升级完再解析回来,这样就不会中断网站,难道这样不行吗?
        54
    msg7086   103 天前   ♥ 2
    @jhdxr @jarlyyn 说的也不算错。
    Windows 是混合内核,内核组件啊驱动啊也是运行在内核态的。微内核需要把各种组件放在用户态运行。
    不能无重启更新,除了上面说的文件锁导致无法热替换以外,还因为很多核心组件是系统必不可少的部分。Linux 下的核心用户态组件,比如 init,也需要重启才能生效,只不过 Windows 下的核心用户态组件太多( GUI,桌面,SMB 等等),所以需要重启的概率大幅增加。

    @fox0001 至于 Windows Server 嘛,的确不是这么用的。
    我们接触的许多客户也是用的 Windows Server,比较通行的配置是配合 iSCSI SAN 做 Failover Cluster,两台或者多台服务器同时提供同样的服务,然后 Failover Cluster 会控制哪台机器接管服务 IP 与对应的磁盘组,需要维护的时候只要进控制台选择把服务 Failover 到另一个节点就行了。
    虚拟化环境下的 Hyper-V Cluster 也可以 Failover,需要维护的节点直接把 VM 迁移到其他 Cluster Node 去就行了,VM 不会中断服务,连 VM 的内存数据也会同步过去的。

    单机 Windows Server ?别闹了。
        55
    Showfom   102 天前 via iPhone
    Linux 大多数更换内核也要重启呀
        56
    akira   102 天前
    既然是小网站,那随时出个更新公告,停机更新下就是了。也不会有什么大问题的啊。
        58
    cpublic   89 天前
    Windows 服务器目前看也就是“土豪”才会用的服务器端系统了!
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   2595 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 67ms · UTC 07:31 · PVG 15:31 · LAX 23:31 · JFK 02:31
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1