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

Windows 服务器维护太呕血…

  •  
  •   fox0001 · 2017-08-12 15:55:09 +08:00 · 7893 次点击
    这是一个创建于 2685 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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

    至于这些人为什么要答呢?我也不知道-_____-
    zro
        6
    zro  
       2017-08-12 16:49:00 +08:00
    用 Linux 的逻辑来维护 Windows 当然呕血,反过来也一样。。。

    如果你要某些服务有先后顺序启动,就先把服务都设为手动,然后写个 bat 挂到启动项来完成
    wendaoshenyang
        7
    wendaoshenyang  
       2017-08-12 16:52:22 +08:00 via Android
    那些说关 windows 更新的,不怕漏洞吗😂😂😂😂
    fox0001
        8
    fox0001  
    OP
       2017-08-12 17:02:36 +08:00
    @geelaw #1

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

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

    Linux 有内核热补丁技术,可以不重启对内核打补丁,用户态的升级更不用重启了
    geelaw
        16
    geelaw  
       2017-08-12 17:23:31 +08:00 via iPhone
    @fox0001 那就等下次,或者就再次重启,在有限的时间内倒腾好。

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

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

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

    不过说起来,无论 IIS 还是 Apache 为啥会和 Tomcat 有依赖关系呢?请指教,个人没有 java 经验。
    jarlyyn
        24
    jarlyyn  
       2017-08-12 18:34:38 +08:00 via Android
    @oott123

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

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

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

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

    2.依赖关系设置很简单啊,一条命令就够了...
    tianxiacangshen
        53
    tianxiacangshen  
       2017-08-13 09:30:51 +08:00
    我也只会用 windows

    吧数据库和程序分开,然后将程序备份在临时服务器,备份的时候将域名解析到临时服务器,升级完再解析回来,这样就不会中断网站,难道这样不行吗?
    msg7086
        54
    msg7086  
       2017-08-13 11:55:49 +08:00   ❤️ 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 ?别闹了。
    Showfom
        55
    Showfom  
       2017-08-13 18:52:53 +08:00 via iPhone
    Linux 大多数更换内核也要重启呀
    akira
        56
    akira  
       2017-08-13 23:24:25 +08:00
    既然是小网站,那随时出个更新公告,停机更新下就是了。也不会有什么大问题的啊。
    cpublic
        58
    cpublic  
       2017-08-27 13:33:48 +08:00
    Windows 服务器目前看也就是“土豪”才会用的服务器端系统了!
    vipcc
        59
    vipcc  
       2019-09-29 07:52:19 +08:00 via Android
    ……生产环境只一台服务器????
    fox0001
        60
    fox0001  
    OP
       2019-09-29 09:29:16 +08:00 via Android
    @vipcc #59 是…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2413 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 16:00 · PVG 00:00 · LAX 08:00 · JFK 11:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.