硬件选型是调优的第一步,无论你是自行购买服务器进行托管,还是租用服务器,或者购买云主机,都要面临的一个问题,那就是选择服务器的硬件配置,因为没有一台服务器能满足所有需求,解决所有的问题。所以,硬件调优仍然是运维的重要舞台。
不成功的服务器选型会给企业带来很多运营问题:如果不经过专业、仔细的评估,轻率的选择一台性能超强劲的服务器,可能会让你高枕无忧,但付出的代价是昂贵的价格和成本的浪费;反之,如果一味为了省钱,而选择一台配置低端、廉价,或没有充分考虑冗余措施的服务器,就会极大影响业务的运行,让运维坐立不安,可能出现客户投诉网站速度超慢,硬盘出现故障丢失数据的问题,因为这些,运维从此没有了美好的睡眠,每日提心吊胆,更要命的是,公司可能因此而损失几十万元甚至更多的订单。
所以,我们需要从不同角度、多个方面来决定选择一台什么样的服务器,找到满足技术需要、业务发展和成本控制之间的最佳平衡点,为了做到这一点,需要了解业务特点、业务架构、软件特性、硬件特性,这绝对是个大工程,需要技术的沉淀和经验的积累。
那么接下来,我们就来谈谈如何进行硬件选型。
这是硬件选型首先需要考虑的问题,我们采购服务器是做什么用的,这个非常重要,在这里我们要根据服务器的用途,来决定服务器的性能、容量和可靠性需求。
这里我们按照最典型的基础架构:web服务器、数据服务器、应用程序服务器来展开讨论。
1、web服务器选型特征
web服务器主要用来运行web服务,提供对外访问,常见的有静态Web服务器、动态Web服务器、图片服务器等,这些应用的服务器,对硬件要求不高,或者说,不需要太高的硬件配置,为什么呢,因为web服务器一般不会是一台,在应对海量访问的时候,web服务通常都会构建集群模式,例如通过nginx、lvs、、haproxy、F5等集群软件构建web服务的负载均衡,通过负载均衡机制,可以很容易解决web服务器的性能扩展和可靠性问题。因此,对此类web服务器硬件不推荐很高的配置,甚至一般的硬件配置(2颗4核、8G内存、1T硬盘)即可满足需求,如果后期web服务访问量上升,只需要新增同等配置的服务器加入负载均衡集群即可实现web服务的性能扩展。
2、数据服务器
数据服务器主要是用来存储结构化和非结构化数据的,例如MySQL服务器、Oracle服务器、Redis服务器等,对于这类服务器,对硬件要求最高,最重要的服务器,此类服务器的主要特征是CPU要足够快、内存足够大,磁盘IO足够快和稳定,比如MySQL、Oracle服务器要求CPU配置一定要好,最好是双路志强金牌Gold,磁盘最好使用SSD系列。而Redis服务器主要是内存型应用,所以要求内存一定要足够大,并且可扩展,而对磁盘和CPU要求就没那么高。一般配置即可。
3、应用程序服务器
这里的应用程序服务器指的是基于Java、Python、golang、nodejs等应用的服务器,例如tomcat、jboss、Weblogic、Jetty等,这些应用服务器的典型特征是承担了计算和功能实现,因此对硬件有一定要求,首先,对CPU的配置,至少是双路志强银牌Silver系列,对于可靠性问题,如果你只有一台服务器的话,那么这台服务器必须足够可靠,磁盘做成RAID1阵列是必不可少的,如果预算充足,那么建议配置至少两台应用服务器,并部署高可用冗余或负载均衡机制,这样的话,每台主机的硬件配置就不需要太高即可满足可靠性和稳定性的需求。
4、其它公用服务器
除了上面的一些类型的服务器外,还有一些公用的服务器,例如邮件服务器、DNS服务器、域控服务器,其中,DNS服务器、域控服务器对稳定性要求较高,因此一般会推荐有至少两台进行主、备部署,对硬件来说,没有特殊的需求,所以一般的硬件即可,例如志强银牌Silver CPU、32GB内存、SAS磁盘,基本可以满足要求,而对于邮件服务器,数据安全性需要保证,所以选择磁盘存储的时候,推荐构建RAID10或RAID5阵列,这主要是为了对邮件数据安全负责,需要重点考虑这方面的需求。
好啦,对于常见的业务服务器选型,我们都给出了选型特征以及要注意的事项。关于准确的配置我们需要再讨论业务需求后才能作决定。
硬件服务器是为了提供某种服务,而使用这些服务的用户有多少,也是我们需要考虑的因素,有几个具体的问题需要我们做出评估:
1、预估有多少用户会同时在线访问?
2、预估每天同时在线访问的最高峰值大概是多少?
3、预估数据量会有多大?
4、预估网络带宽会占用多少?
这些指标不需要很精确的值,但是一定要有个大概的方向,因为这对我们采用什么样的CPU,配置多大的内存、采购多大的磁盘、选择什么类型的网卡等有着至关重要的影响。
建议让技术人员和业务部门坐在一起来讨论这几个问题,将这些预估指标转化为一些更具体的技术数字,同时,我们还要对未来的用户增长做一个尽可能准确的预测和规划,这有助于后期给服务器硬件扩展预留空间和接口。
对存储空间的预估也非常重要,因为如果预估不当,后期扩展磁盘就会非常麻烦,我们需要从两个角度来考虑这个问题,一个角度是有哪些类别的数据,例如安装操作系统占用的磁盘空间、安装应用程序占用的磁盘空间、应用系统产生的日志、数据库数据、邮件数据等,另一个角度是数据的增长速度,例如每天大概会新增多少数据,根据这个增速,就可以规划出未来1-3年内数据量大小,也就是说磁盘存储的采购,最好是能满足未来1-3年内的需求。这两个角度的预估也需要软件开发人员和业务人员一起讨论,提供足够的信息。最后我们才能得到一个更具体的数字,但这个具体的数据并不是最终结果,还需要为计算出来的数字结果乘1.5左右的系数,得到最终的结果,为何要乘以1.5呢,这是一个预留空间,目的是方便运维的日常备份以及维护需要。
服务器可以为不同业务系统提供各种应用服务,这个重要性直接影响到我们对服务器的选型配置,例如,我们采购服务器是做一个公司的门户网站,那么,一台服务器,铜牌Bronze 单路cpu、4G内存、500GB足够了,并且也不需要备机,就算服务器出现了一点硬件故障,导致几个小时甚至一两天不能提供访问,工作也会照常继续,天也不会塌下来。对公司也影响不大。
如果我们的服务器是用于测试平台,如果仅仅做功能测试,那么对硬件配置基本没要求,虚拟机也可以满足要求,而如果是做性能测试,那么就根据性能测试的方向,选择某方面比较强劲的硬件即可,例如做web压力测试的服务器,选择足够好的CPU即可,此外,测试服务器只需要定期做个例行备份即可,因此也不需要考虑主、备模式以及磁盘的高可靠性。
如果我们要上线的是一个电商平台,那么对于服务器的选型,一定要足够慎重,因为它不容发生任何问题,CPU要足够好,内存也要足够大,磁盘一定要做RAID10,同时,还要部署主、备架构,数据要做实时备份、异地远程备份,因为重要的业务系统,一旦发生故障,直接导致的损失就是金钱。因此,对于非常重要的业务系统,在成本允许的前提下一定要选择足够好的硬件配置。
上面介绍了在选购硬件之前要考虑的一些列问题,下面就正式进入硬件选购的话题了。首先说说CPU,毫无疑问,CPU的主频越高,其性能也更高;两个CPU要比一个CPU来得更爽,说到品牌,也就是Intel和AMD,Intel服务器市场份额更高一些,要选CPU,一个特征是选购最新的,那就没错了,例如Intel至强CPU从E3、E5、E7,一直到目前的英特尔至强可扩展系列,将该系列分为白金Platinum”, “金牌Gold”, “银牌Silver”和“铜牌Bronze”四个级别,四个金属级别,自然分为四个定位:铂金定位高端,主要是8xxx系列,针对8路平台;黄金包括5xxx和6xxx系列,针对高端4路平台打造;银牌主要是4xxx系列,针对双路平台;铜牌主要是3xxx系列,针对单路平台,主打入门级。
了解了CPU的这些特性和定位后,我们就可以结合业务需求进行选择,我们在这里提供一些常见情况下的建议:
1、如果公司业务刚起步,量不大的情况下,此时预算可能也不是很充足,那么建议选择一个英特尔至强铜牌单路CPU即可,但是记得要留扩展接口,以后可以根据业务发展情况,随时升级到更高配置的服务器。
2、如果你购买的服务器需要跑多个服务,比如apache+php+tomcat+mysql架构,都运行在一台机器上,那么,推荐英特尔至强银牌双路CPU,这将是一个不错的选择。
3、如果你的服务器专门用来运行MySQL或者Oracle服务,并且数据库并发连接多达几百个,未来还会不断增长,那么至少应该选择一个英特尔至强金牌双路10核CPU,并且预留CPU扩展接口,当负载越来越大的时候,可以选择增加CPU到四路。
在内存的选型上,我们需要考虑服务器运行什么应用?以及 “需要支持多少用户访问?”这两个问题,相比于CPU,内存(RAM)其实是影响性能的最关键因素,因为在实际的调优案例和经验上,我们发现,很多业务系统CPU利用率一般都在10%~50%之间,甚至更低。但由于内存不够而导致服务器运行缓慢的案例比比皆是,内存使用的大小取决于业务系统的用户量,访问量,或者叫繁忙程度,当然也和应用软件对内存的最低需求和内存管理机制有关系,我们同样在下面给出了一些常见应用环境下的内存配置建议:
1、如果运行的是Web前端服务器,例如apache、nginx,那么不需要太大的内存,因为这些web服务器主要是处理静态请求,一天几十万的访问量,4GB内存已经足够了,如果访问量再大些到几百万,那么16GB内存已经完全满足需求了。如果有更大的访问量的时候,此时最好的调优策略不是加内存,而是采用负载均衡架构,采用同等配置的硬件服务器即可成倍增加负载承受能力。
2、如果运行的是Tomcat、Resin、WebLogic、Websphere、jboss等此类java重型应用服务器,那么配置的内存在16GB-32GB之间即可,大于32GB的内存配置基本是浪费了。因为JVM真正能调动和使用的内存不会超过32GB。
3、如果运行的是基于内存型的业务系统,例如redis、Squid、Varnish、Memcached等应用时,我们需要为服务器配置尽可能高的内存容量,因为这类应用主要消耗的就是内存,比如redis服务器,如果配置了32GB的物理内存,那么redis真正能使用的也就是16GB,这个原因是由redis内部机制决定的。
硬盘存储系统的选择和配置是整个服务器系统里最为复杂的一部分,我们需要考虑硬盘的数量、容量、接口类型、转速、缓存大小,以及是否需要Raid卡,Raid卡的型号和Raid级别等问题。
磁盘类型目前有SATA、SAS和SSD三种类型,SATA、SAS属于机械硬盘,转速低,读写速度慢,但是价格便宜,磁盘容量大,目前最大的单个SATA、SAS盘容量有超过10TB的。SSD硬盘属于固态硬盘,优点是读写速度快,缺点是价格昂贵。
硬盘类型如何选择,这个要根据业务需求,费用预算等方面综合考虑。
Raid卡是购买服务器必须的一个硬件设备,根据使用需求,可选择支持主流Raid级别的RAID卡。
那么什么是RAID技术呢,简单介绍下,RAID即独立磁盘冗余阵列,它是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。
RAID 主要分为软RAID、硬RAID二种。软RAID所有功能均有操作系统和CPU来完成,没有独立的RAID控制器处理芯片和I/O处理芯片,效率自然最低。硬RAID配备了专门的RAID控制器处理芯片和I/O处理芯片以及阵列缓冲,不占用CPU资源,刚才说的raid卡就属于硬RAID。
RAID 中主要有三个关键概念和技术:镜像( Mirroring )、数据条带( Data Stripping )和数据校验( Data parity ) ,根据运用或组合运用这三种技术的策略和架构,可以把RAID分为不同的等级,以满足不同数据应用的需求。业界公认的标准是 RAID0 ~ RAID5。实际应用领域中使用最多的 RAID 等级是 RAID0 、 RAID1 、RAID5 、RAID10。
RAID每一个等级代表一种实现方法和技术,等级之间并无高低之分。在实际应用中,应当根据用户的数据应用特点,综合考虑可用性、性能和成本来选择合适的 RAID等级,以及具体的实现方式。
下面主要介绍下常见的 RAID0 、 RAID1 、RAID5、RAID 10/01级别的实现方式以及优缺点。
1、RAID 0级别
Raid0称为条带模式,即把连续的数据分散到多个磁盘上存取。当系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。因为读取和写入是在设备上并行完成的,读取和写入性能将会增加,这通常是运行RAID0的主要原因。但RAID 0没有数据冗余,如果驱动器出现故障,那么将无法恢复任何数据。
2、RAID 1级别
RAID 1又称为镜像(Mirroring),一个具有全冗余的模式。
RAID 1可以用于两个或2xN个磁盘,并使用0块或更多的备用磁盘,每次写数据时会同时写入镜像盘。这种阵列可靠性很高,但其有效容量减小到总容量的一半,同时 这些磁盘的大小应该相等,否则总容量只具有最小磁盘的大小。
RAID 1的数据安全性在所有的RAID级别上来说是最好的。但是其磁盘的利用率却只有50%,是所有RAID级别中最低的。
3、RAID 5级别
RAID 5特点有:最少3块磁盘、数据条带形式分布、以奇偶校验作冗余、适合多读少写的情景。
可见,Raid5是性能与数据冗余最佳的折中方案。
4、RAID 10/01级别
RAID 10(又叫RAID 1+0)特点如下:
最少需要4块磁盘
先按RAID1分成两组,再分别对两组按RAID 0方式条带化 (先做镜象,然后再做条带)
兼顾冗余(提供镜像存储)和性能(数据条带形分布)
在实际应用中较为常用
RAID 01(又叫RAID 0+1)特点如下:
最少需要4块磁盘
先按RAID 0分成两组,再分别对两组按RAID 1方式镜像(先做条带,然后再做镜象)
兼顾冗余(提供镜像存储)和性能(数据条带形分布)
最后,再来谈一下网卡的选型,网卡和服务器的网络带宽互相影响,这里我们从网卡的速率和网卡的冗余两个方面来进行分析。
首先是网卡的速率问题,到底是选用千兆网卡呢,还是选择万兆网卡呢,这主要取决于我们对带宽流量的评估。大多数情况下,千兆网卡足够用来对外网提供服务,而内部数据交换如果非常频繁,例如hadoop业务,建议使用万兆网卡。而万兆网卡一般使用的是光口光纤卡。
然后是网卡的稳定性问题,如果你的业务系统对网络稳定性要求很高,那么推荐双网卡做冗余,两个网卡连接到不同的交换机上,这样,任意一个网卡故障都不影响业务的正常运行。
最后,如果有条件的话,还建议在服务器上配置一个远程管理卡,远程管理卡是安装在服务器上的硬件设备,提供一个以太网接口,使它可以连接到局域网内,提供远程访问。这种远程管理基于BMC(底板管理控制器),由集成在管理卡上的系统微处理器负责监测和管理操作系统之外的服务器环境和状态。它既不会占用服务器系统的资源,也不会影响服务器系统的运行。
通过远程管理卡我们可以进行机器开机、关机、重启、配置引导方式、安装系统等操作。还可以监控电池、风扇、CPU、内存、磁盘等硬件设备的状态。
================================================================
更多Linux、云计算、云原生、大数据、docker、k8s知识,可访问:奇智云课堂