WSFC 仲裁模型选择
今天我们再来详细讨论下关于WSFC的仲裁模型,主要仲裁模型的优缺点,应该如何去思考选择最佳合适方案
WSFC引入仲裁,主要有两个目的
跟踪群集当前运作票数是否符合仲裁模型协定,如果低于最少允许节点,则决定关闭群集(2012之前)
当发生分区时,确保由多数一方负责接管群集提供服务,少数票数方将关闭
回顾一下历史,在2003时代之前,群集只有一种仲裁模型,即仅磁盘仲裁,在这种模型下,只有磁盘见证会存放群集数据库,所有节点启动前必须能够联机到磁盘见证获取群集数据库才可以启动,当发生分区时,那一侧可以联系到磁盘见证,则获胜,如果在所有节点都正常连接到磁盘见证的情况下,群集可以支撑到最后一个节点,但是在此模式下磁盘见证成为单一故障点,一旦磁盘见证失联,群集将关闭,因为仅有磁盘见证有决定群集是否存活的资格,那时候还没投票这个概念,只要磁盘见证在,群集就可以存活
后来2003时代 开始,MSCS在企业版和数据中心版引入了多数节点集,MNS仲裁模型,这种模型的好处是去中心化,可以让每个群集节点本地磁盘也能够存放群集数据库,这样就不必每次每次群集启动都必须要联系见证磁盘,通过MNS仲裁模型,可以允许群集大部分节点存活,每个节点都可以有决定群集是否存活的资格,即后来多数节点仲裁的前身。
2003 SP1时代 开始,群集引入了文件共享见证机制,为了解决两个节点MNS仲裁模型下,任何一个节点宕机,都将导致群集关闭,那时引入的文件共享见证和后来的一样,文件共享见证最开始就不包含群集数据库,仅起到一个投票的作用,当群集当前MNS模型,两节点加一个文件共享见证,一个节点宕机,另外一个节点可以联系到文件共享见证,就可以存活,因为获取到了多数节点资格,另外也可以阻止脑裂,当两个节点发生分区,都试图争夺资源时,那一方可以联系到文件共享见证即可以获胜维持运行。
从2003SP1推出功能开始,大家就开始在尝试在MNS仲裁模型+FSW见证上面部署各种群集应用,当时用的最多的是2003SP1+EX2007 CCR,随着使用,大家意识到了一个问题,我的FSW共享见证依然是个单一故障点,能不能有什么机制可以让这个文件共享也高可用,因为默认情况下,一个理想的场景应该是有第三台服务器,非群集节点的服务器来承担文件共享,其实就是在上面跑一个共享目录,并不占用什么系统资源,但是一旦这台服务器宕机,那我群集运作就又没了保证,于是大家开始想办法维持FSW服务器的高可用,经过实践大家一致认为可行的方案,只有做fileserver cluster,(如果到2012时代应该是传统群集文件服务器,而非SOFS),能够维持FSW的高可用,也有人试图使用DFS,但是后来大家发现了弊端,其主要原因在于,DFS的意义在于逻辑的屏蔽物理层,例如,对MSCS提供了一个DFSN路径,但是复合组呢,是两个站点各自的DFSR服务器,然后每个站点又各自有一台群集节点,当发生分区的时候,每个站点都可以访问到文件共享,还是会出现脑裂分区的问题,因为投票资格还是一致的,因为DFS所有节点都是AA的,又有这种站点感知设计,所以它并不适合群集FSW,FSW需要的应该是一个同一时间,只有一个共享服务器提供服务,且发生灾难时能够决出分区胜者的。
不过虽然说是这样说,但是真真正正在企业里面专门为了群集文件共享见证而做一个file cluster的还是少见,但这确实也应该是一个考虑点,如果企业里面有几十套群集,那么未尝也不可专门部署一套file cluster提供高可用的文件共享见证,通常国内如果单台构建文件共享见证,会在DC,DHCP等稳定的服务器进行构建,或单独构建服务器。
到了2008时代,群集从MSCS变成了WSFC,仲裁模型也有了新的变化,首先是引入了投票这个概念,把投票引入了群集仲裁管理器,每个节点和见证都多了一个投票的属性,群集的存活和分区处理开始由投票数决定,虽然机制和2003类似,都是维持多数,但是变的更为明朗,把以前看不见的东西拿了上来。2008开始仲裁模型分为四种:仅磁盘,多数节点,多数节点加见证磁盘,多数节点加文件共享,2008时代强制仲裁这一功能也发生了改变,在2003时代如果要执行强制仲裁,需要在群集关闭的情况下执行,并且需要给定强制启动节点列表,2008开始可以在群集开启的情况下执行强制仲裁,另外一点,2008时×××始各个节点和群集见证磁盘都可以存放群集数据库,而且见证磁盘并非单一故障点,每个节点的群集数据库都是最新的,见证磁盘群集数据库不是最新也可以和其它节点进行同步,这点非常重要。
2008时代虽然引入了四种仲裁模型,但其实2008时代的仲裁还是比较死板,依然主要强调群集节点存活必须符合仲裁模型最少节点协定
例如,如果是奇数节点,选择多数节点仲裁,需要存活至 (节点票数)/2+1,即3节点必须要有两个节点存活。如果奇数节点选择磁盘见证或文件共享见证,则同样智能坏掉一个节点,并不会因为多出见证一票而允许存活至最后一个节点,原因是如果3节点加磁盘见证,则为4票,同样算法除袭来仍然必须要三票存活,宕机一个节点后,见证一票加节点两票已到极限。
如果偶数节点,选择多数节点+磁盘见证或多数节点+共享见证,在见证设备在线的情况下可以存活至半数节点,如果见证节点不在线,或采用多数节点仲裁,则需要存活 (节点票数/2 )+1,即是说四节点多数节点,至多只能宕机一台
因此在2008时代选择群集仲裁模型基本上是固态的,如果你希望群集能够尽可能多的时间提供服务,那么如果你是奇数节点就选择多数节点仲裁,偶数节点就选择多数节点加磁盘见证或文件共享见证,偶数节点不能选多数节点,奇数节点不能选见证设备,否则就会浪费一个节点
到了2012时代 开始这种固态的仲裁思维被打破,群集开始不必遵守仲裁模型的最少节点协定,而是可以动态调整节点的票数至最后一个节点,微软于WSFC 2012引入了动态仲裁功能,即动态调整各节点票数,举个例子,如果5个奇数节点,宕机一个节点后,群集会再去掉一个节点票数,确保群集为3票,再宕机一个节点,正好是3个节点则不做操作,如果是剩下两个节点,则随机去掉一个节点的投票,在正常关机,或非票数节点宕机的场景下,可以存活至最后一个节点,如果票数节点宕机来不及交换投票,则群集关闭,因此2012动态仲裁存活至最后一个节点的几率为百分之66。偶数节点同样,如果四节点,群集会上来就动态仲裁去掉一个节点的投票,宕机一台再去掉一票,存活至最后一个节点的几率为百分之66。
通过动态仲裁始终让群集维持奇数投票,从2012开始,群集不再维持多数,而是维持奇数,仲裁的目的更多的是帮助我们存活至最后一个节点,避免脑裂分区
如果我们在2012时代选择配置为偶数节点+见证设备,那么在见证设备在线的情况下,群集可以存活至最后一个节点,见证设备脱机,则可以存活为(节点票数)/2+1
如果我们在2012时代选择配置为奇数节点+见证设备,在宕机一个节点+见证设备脱机的情况下,群集将关闭,例如群集当前三节点,1个节点和见证设备宕机,则群集会因为剩下两个投票,无法决出胜者而关闭,因此,2012时代奇数节点还是要使用多数节点仲裁模型,2012奇数节点并不会因为见证设备而带来存活优势
到了2012R2时代,WSFC动态仲裁的基础上又演变为动态见证,即群集始终建议配置磁盘见证或文件共享见证,因为见证设备可以动态的调整票数,例如3节点+见证磁盘,群集会自动去掉见证磁盘的一票,现在群集是三个投票,如果坏掉一个节点,群集是2个投票,群集会自动再加上见证的一票,现在群集又是三票,还是奇数,这时候如果再坏一个节点,还剩下最后一个节点和见证,群集依然可以存活。即是说,只要群集见证设备设备,不论当前是奇数还是偶数节点都可以存活至最后一个节点,总之始终为群集配置一个见证设备就对了。
之前说过2012开始引入动态仲裁功能,可以在偶数节点的情况下,自动去掉一个节点投票,始终维持群集为奇数票数,2012R2开始可以通过LowerQuorumPriorityNodeID属性指定,始终去掉那个节点的票数
例如,我偶数节点四个节点,分布在两个站点,那么我就可以指定群集自动去掉备站点一个节点的投票,这样备站点仅剩下1票,主站点2票,如果两个站点发生分区,则主站点直接获胜,如果主站点全部宕机,备站点也有百分之66的几率可以直接接管。在2012R2之前,通常我们会手动直接去掉备站点节点的票数,已达到此效果,但是只有2012是有百分之66的几率备站点可以自动接管,2012之前都需要手动强制启动备站点接管。但是也有一些企业会故意设计成手动故障转移这种架构,原因是群集上层跑的应用故障转移时间太长,故障转移之后还需要执行一些操作应用才能提供服务,这种情况下适用于手动故障转移。
虽然2012R2说的很好,群集可以存活至最后一个节点,但是这句话有一个前提,见证设备在线的情况下,一旦见证设备脱机,群集变成百分之五十存活至最后一个节点,这个实验老王前面的文章已经做过,当前群集宕机至3节点+见证设备,如果这时候见证设备和一个节点宕机,群集并不会自动调整投票,还是2个节点+1个见证投票,但其实这时候应该自动从动态见证切换至动态仲裁,3票变1票,但群集没变,如果变了还可以百分之66存活至最后一台,但没变,没变的话,如果剩下两个节点,任意一台宕机,则群集关闭。
这里关键的问题还是3剩2的时候,一个节点和见证设备脱机,群集不能从动态见证切换至动态仲裁,导致群集仲裁不准,其实这时候群集应该是先变成2票,然后再动态仲裁去掉1票,但是群集没有,没有自动调整失败的见证票数,也没有调整节点的票数,导致的结果就是两个节点任意一个宕机,群集关闭。
2012是奇数节点加见证设备,见证设备和节点脱机,一旦群集变成2节点偶数投票,群集会直接关闭
2012R2是当剩下奇数节点+见证设备,见证设备和节点脱机,一旦群集变成2节点偶数投票,坏掉任何一个节点,群集都会关闭。
说到底,都是见证设备脱机后不能切换为动态仲裁的原因
因此2012R2时代见证设备特别重要,只有见证设备在(各个群集节点可以访问),才可以存活至最后一个节点
OK,我们从WSFC仲裁岁月的小河终于说到了近代,在这条漫长的小河中,曾出现过一个激流,这个激流至今也影响着WSFC,它就是群集数据库
2008时代 开始WSFC群集数据库引入了paxos机制,群集数据库在各个节点同步,每个节点都可以对群集进行更新,其它节点会跟随最新修改的节点进行同步,跟随过程主要对比paxos标记,发现对方的比我的新,则与之同步,群集数据库除了在各节点记录群集信息一致性用于故障转移,也用于群集服务启动检查,每次节点群集服务启动时都会检查自身的群集数据库是否为最新,是否和其它节点一致,如果非最新,则需要和其它节点同步后才能上线。
需要注意的是如果群集使用了见证磁盘,则各节点同步后也会把群集数据库同步至见证磁盘一份,见证磁盘的群集数据库会在磁盘所在节点被加载。仅磁盘见证里面会有群集数据库,而共享见证和2016云见证里面,仅记载着当前群集最新paxos标记是多少。
当出现一个时间分区的场景时就能看出究竟那种仲裁模型更优秀
时间节点1 节点1 节点2 文件共享在线
时间节点2 节点1宕机
时间节点3 节点2修改群集数据
时间节点4 节点2宕机
时间节点5 节点1启动
如果使用的是文件共享见证,这时候节点1会因为当前节点没有最新的群集数据库而无法启动,群集启动时和文件共享里面的paxos标记对照,发现为旧,则群集成员管理器阻止该节点启动,这时候只有等待节点2开机后,节点1才可以与其同步群集数据库后启动,如果不等待节点2开机,强制在节点1启动,则节点1的群集数据库将会被提升为黄金副本,节点2启动后会被节点1的黄金副本覆盖,导致之前修改的群集数据丢失,云共享见证同样。
如果使用的是磁盘见证,时间节点5的时候,节点1启动,启动后会联系到见证磁盘,因为群集数据库也会在见证磁盘同步,时间节点3修改时,群集见证磁盘也会同步到,所以节点1可以从见证磁盘获取到最新paxos标记的群集数据库,而正常启动。
基于此,老王的建议是2012R2的群集,不论是奇数节点或偶数节点,都配置见证磁盘
您也可以选择多数节点,但是多数节点动态仲裁的弊端在于:百分之六十六支持到最后一个节点
多数节点加见证磁盘,您需要维护确保见证磁盘始终在线
两者都需要有一个权衡的点
进一步讨论的话,老王认为如果是在同一个数据中心内的话,见证磁盘加多数节点,毫无疑问,首先就应该选择它,只要见证磁盘在线,群集就百分百能够挺到最后一个节点,至于见证磁盘的可靠性,可以在阵列上面通过配置Raid,配置各节点到阵列的多路径,以保证见证磁盘的持续可用,或者底层直接由超融合软件,例如S2D,VSAN跨机架构建起虚拟磁盘,再使用虚拟磁盘创建群集见证磁盘。
如果是异地数据中心的话,在条件允许的情况下,老王仍然建议使用见证磁盘,见证磁盘加多数节点 2012R2之后永远是最佳方案,异地数据中心的群集架构,通常架构师会推荐两种方案,一种是第三个数据中心存放见证设备,两数据中心连接第三个数据中心,但是这样做的话,又需要额外考虑两个数据中心到第三个数据中心之间的链路问题,带来额外的成本,另外一种是现在用的比较多的,存储复制,即在两个数据中心各一个存储设备,互相做同步复制,一般是硬件设备直接实现,或软件实现,一个站点宕机后,直接另外一个站点存储和计算都启动起来,需要注意,如果涉及到见证磁盘的复制,目前2016的存储复制还是不能实现,2016存储复制只能复制CSV和角色磁盘,不能复制见证磁盘。
说到底还是成本的问题,如果资金允许的情况下可以在第三个站点分配见证磁盘到两个数据中心,或直接两个站点同步存储复制阵列
如果资金不允许的情况下,可以在第三个站点找一台文件服务器,做文件共享见证,分配到两个数据中心,这样做也可以,只需要规避掉时间分区的问题就可以了,例如已经出现有节点宕机的情况下,不在现有节点上面修改群集数据
或者如果连第三个站点也没有的情况下,可以使用2016的云共享见证,在Azure上面开个blob用于群集仲裁,但需要开通本地数据中心到Azure的443端口
虽然文件共享见证和云见证没有群集数据库,但是这两种仲裁模型也可以支持动态见证仲裁模型,帮助群集支撑到最后一个节点,避免脑裂分区问题。
不论是文件共享见证,还是云见证,还是磁盘见证,异地数据中心最主要关注的还是链路问题,各节点到见证设备的链路不需要很快,但一定要保证质量。
转载于:https://blog.51cto.com/wzde2012/2090267
相关文章:

关于进程间通信的学习心得
进程:进程是指独立地址空间的指令序列进程的五种状态:新建,就绪,运行,睡眠,僵死进程间通信:是不同进程之间进行一些"接触",这种接触有简单,有复杂。机制不同&a…

Go modules基础精进,六大核心概念全解析(上)
Go 语言做开发时,路径是如何定义的?Go Mudules又为此带来了哪些改变?本文将会全面介绍Go Modules六大核心概念,包括了设计理念与兼容性原则等,掌握这些技术点对于管理和维护Go 模块有重要价值。 在Go Modules 的前世今…

PARAMETERS 指令
语法: PARAMETERS <p> [DEFAULT <f>] [LOWER CASE] [OBLIGATORY] [AS CHECKBOX] [RADIOBUTTON GROUP <rad>] 实例: PARAMETERS: NAME(8), AGE TYPE I, BIRTH TYPE D. OBLIGATORY:强制要求输入, 屏幕上会出現一个“√” , 使用者必须要输入才可。 AS C…

阿里发布AliGenie2.0系统,“百箱大战”用上视觉武器
天猫精灵X1的升级版X2没有预期出现,而人机交互系统AliGenie升级到最新的2.0版本,功能强大。 3月22日,阿里巴巴人工智能实验室总经理浅雪(陈丽娟)发布AliGenie2.0系统,它最大的改进是在1.0的基础上增加了视觉…

Centos5.6 VNC安装配置【无错版】
不严格按本步骤就会出现VNC桌面花屏,就是桌面分离为一层一层的。。。 ---------------------------------------- 先装X window http://blog.csdn.net/21aspnet/article/details/6997549 ---------------------------------------- Centos5.6 VNC安装配置 一、检查是…

关于IOS的屏幕适配(iPhone)——资源适配
IOS的屏幕适配几乎不需要大量的代码操作,更多的时间我们只是动动鼠标选择一下就搞定。可以苹果在这方面做的还是比较人性的,解放了开发者。 首先来说说Iphone这几种屏(由于最近做的是iPhone APP还未涉及到iPad,将来涉及到iPad时会…

Go modules基础精进,六大核心概念全解析(下)
Go 语言做开发时,路径是如何定义的?Go Mudules又为此带来了哪些改变?本文将会全面介绍Go Modules六大核心概念,包括了设计理念与兼容性原则等,掌握这些技术点对于管理和维护Go 模块有重要价值。 在上篇中,我…

京东区块链白皮书解读, 做“链接器”,一次技术宣言
前天,京东对外发布了《京东区块链技术白皮书(2018)》。 昨天,京东金融发布了旨在帮助中小银行提升零售信贷效率的产品“北斗”。目前,“北斗”已经接入包括江苏银行、南京银行、包商银行在内的近30家银行。京东金融还与近30家商业银行共同发起…

xauth: (stdin):1: bad display name LSPPC-Lenny:1 in add command
启动vnc4server之后出现如下错误提示:LSPPC-Lenny:~# vnc4serverxauth: (stdin):1: bad display name "LSPPC-Lenny:1" in "add" command New ‘LSPPC-Lenny:1 (root)’ desktop is LSPPC-Lenny:1 Starting applications specified in /root/…

使用 Python 和 OpenCV 构建 SET 求解器
作者 | 小白来源 | 小白学视觉小伙伴们玩过 SET 吗?SET 是一种游戏,玩家在指定的时间竞相识别出十二张独特纸牌中的三张纸牌(或 SET)的模式。每张 SET 卡都有四个属性:形状、阴影/填充、颜色和计数。下面是一个带有一些…

Delphi XE5 常用功具与下载
1.Delphi XE5 正式版http://altd.embarcadero.com/download/radstudio/xe5/delphicbuilder_xe5_win.isohttp://altd.embarcadero.com/download/radstudio/xe5/delphicbuilder_xe5_upd1_win.iso2. cnpack 助手工具http://www.cnpack.org/download/unstable/CnWizards_1.0.1.665_…

maven学习(4)-Maven 构建Web 项目
紧接着上一节(3),现在maven新建web项目,user-web。模拟一个用户登录的需求: 工程结构: pom.xml: <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&qu…

如何查看linux版本
1. 查看内核版本命令: 1) [rootq1test01 ~]# cat /proc/version Linux version 2.6.9-22.ELsmp (bhcompilecrowe.devel.redhat.com) (gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)) #1 SMP Mon Sep 19 18:00:54 EDT 2005 2) [rootq1test01 ~]# uname -a …

存储过程由结构表生成表
结构表 CREATE TABLE JGTB5001( ZDM VARCHAR2(30 BYTE), HZM VARCHAR2(100 BYTE), LX VARCHAR2(50 BYTE), JD VARCHAR2(20 BYTE), WBKLX VARCHAR2(100 BYTE), FUNCTIONNAME VARCHAR2(50 BYTE), FUNCTIONPARAMETER VARCHAR2(50 BYTE)); 生成的TB表CREATE OR REPLACE PROCEDURE P…

好礼相送|CSDN云原生 Meetup 成都站报名热烈启动,12.18见!
伴随着容器、Kubernetes及微服务等技术热度的持续攀升,云原生正以不可撼动之势,剑指云计算的下一个十年。12月18日,CSDN将在成都举办第三场云原生线下Meetup。在这里,您可以了解各大领先企业的云原生落地实践,与众多云…

vue-music 音乐网站
在学习完vueJS,一直想做个项目来锻炼一下,选来选去,还是做个网易云音乐,其间遇到了很多坑,也逐渐接受了vue这种组件化的思想以及从Dom操作转换为用数据去驱动视图。并且在某部分基础组件上借鉴(搬运)了elementUI的源码(不过elementUI写的是真好) 技术栈 …

shell环境变量
shell环境变量 环境变量 还记得上一章里面﹐我曾经提到过﹕当我们登入系统的时候﹐首先就获得一 shell﹐而且它也占据一个行程(进程)﹐然后再输入的命令都属于这个 shell 的子程序(子进程)。如果您学习够细心﹐不难发现我们的 sh…

apache用户认证
先创建一个“用户认证”目录(设为abc)[rootLAMPLINUX ~]# cd /data/www[rootLAMPLINUX www]# mkdir abc进入abc目录[rootLAMPLINUX www]# cd abc拷贝一个文件(作用:验证配置是否生效)[rootLAMPLINUX abc]# cp /etc/pas…

20个经典函数细说 Pandas 中的数据读取与存储,强烈建议收藏
作者 | 俊欣来源 | 关于数据分析与可视化大家好,今天小编来为大家介绍几个Pandas读取数据以及保存数据的方法,毕竟我们很多时候需要读取各种形式的数据,以及将我们需要将所做的统计分析保存成特定的格式。我们大致会说到的方法有:…

fastlane自动打包--详细介绍
fastlane--Packaging 自动化打包,通过fastlane自动发布Fastlane安装不在这里详细罗列,参照一下链接流程 https://www.jianshu.com/p/0a113f754c09操作步骤 1.检查Fastlane是否正确安装。输入以下命令: fastlane --version 复制代码可以看到Fa…

【Big Data】HADOOP集群的配置(一)
Hadoop集群的配置(一) 摘要: hadoop集群配置系列文档,是笔者在实验室真机环境实验后整理而得。以便随后工作所需,做以知识整理,另则与博客园朋友分享实验成果,因为笔者在学习初期,也遇到不少问题…

C语言 条件编译详解
预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。在C 语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是…

凝聚406万开发者 飞桨十大发布提速产业智能化
12月12日,由深度学习技术及应用国家工程实验室主办的WAVE SUMMIT2021深度学习开发者峰会在上海召开。百度首席技术官、深度学习技术及应用国家工程实验室主任王海峰公布飞桨最新成绩单:凝聚406万开发者、创建47.6万模型、服务15.7万企事业单位࿰…

环境变量,cp,mv,查看文档命令
2019独角兽企业重金招聘Python工程师标准>>> 一、环境变量PATH echo $PATH 打印当前的环境变量 PATH$PATH:路径 自定义环境变量 which查找某个命令的绝对路径,也可以查看某个命令的别名,which查找的范围就在PATH下的几个目录下查找࿱…

Linux中errno使用
当linux中的C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因,在实际编程中用这一招解决了不少原本看来莫名其妙的问题。但是errno是一个数字,代表的具体含义还要到errno.…

工程师文化:BAT 为什么不喊老板
BAT员工之间不喊老板,也不喊真名,而是用同学、花名,这是虚情假意?还是弘扬武侠文化?还是另有隐情?为什么欧美公司不这么做?本文将带大家走进科学,探索真相。 BAT 的称呼方式 腾讯&am…

SVN常见问题
2019独角兽企业重金招聘Python工程师标准>>> 目录[隐藏] 1. 提示SVN证书过期? 2. 用户名密码校验失败? 3. SVN提交文件时提示文件冲突怎么办? 4. SVN提交文件时提示失败? 1. 提示SVN证书过期? 问题描述&…

2017海克斯康拉斯维加斯美国大会 精彩即将开始
海克斯康集团与遍及全球行业用户的故事已经证明,海克斯康先进的解决方案影响着世界各行各业的发展,并为他们带来了颠覆性的科技变革...... 通过海克斯康集团与遍及全球行业用户的故事,已经证明海克斯康先进的解决方案影响着世界各行各业的发展…

Linux环境编程--waitpid与fork与execlp
waitpidwaitpid(等待子进程中断或结束)表头文件#include<sys/types.h>#include<sys/wait.h>定义函数 pid_t waitpid(pid_t pid,int * status,int options);函数说明waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用 wait()时子进程已经结…

C# 批处理制作静默安装程序包
使用批处理WinRAR制作静默安装程序包 echo 安装完窗口会自动关闭!!! echo off start /wait Lync.exe /Install /Silent start /wait vcredist_x86/vcredist_x86.exe /q /norestart start /wait DotNetFx40/dotNetFx40_Full_x86_x64.exe /q /…