服务器漏洞修复

服务器漏洞修复,第1张

最近服务器扫描出了五十几个漏洞,大部分都可以打补丁解决,小部分需要更改配置,先就其中一个拎出来说一下。
漏洞名称 可通过>是新服吧,挤不进去是理所当然的!如果一定要上去的话,那么就按下面几个方法 *** 作吧!第一,你要保证自己的网速够快,电脑的配置还行的,也就是说硬件设施要强悍!第二,下载个挤线器(一般都是收费的,不收费的绝对有木马和病毒,可以去淘宝购买)第三,最有保障也最最适合的方式,换个服务器,那么多服务器,总还有一个是你喜欢的吧!

服务器软件故障是在服务器故障中占有比例最高的部份,约占70%,解决的过程必须更加深思熟虑。导致服务器出现软件故障的原因有很多,最常见的是服务器BIOS版本太低、服务器的管理软件或服务器的驱动程序有BUG、应用程序有冲突及人为造成的软件故障。下面分别举例说明各类软件故障的维修方法。
有一台HP LH6000R服务器,配置为双PIII XEON 700带2M高速缓存的CPU、512M内存。开机后,系统日志报电压调节模块异常(VRM)的错误,报错的信息是:“Voltage Regulator Module (VRM) over/under-voltage 288V/0V”。从表面来看,极有可能是服务器的电压调节模块或其它硬件出现故障,极容易导致维护人员认为是硬件故障。维护人员立刻使用其它LH6000R上的硬件来测试,发现即使使用新的配件,此服务器依然报VRM错。就在一筹莫展的时候,维修工程师带来了最新的CPU管理板(CPU Management Control)的固件(FIRMWARE),于是升级了CPU管理板块的FIRMWARE后,服务器恢复立即正常。
FIRMWARE升级方法是,在服务器的NAVIGATOR(导航光盘)中提取CPU管理板(CMC)FIRMWARE的刷新程序,程序为FLASHEXE,然后将从网上下载的LH6KCBIN(CPU管理板的FIRMWARE)拷贝到一张DOS启动盘上,用这张盘启动服务器。然后在DOS下运行”FLASH /CMC A:LH6KCBIN”,刷新完成后重新启动服务器后即可。这种升级方法也适合刷新系统BIOS等,只是FLASH命令的参数不同以及更新FIRMWARE及BIOS文件名不同,参数请参考服务器的说明。
任何一款服务器的FIRMWARE及BIOS都会有不同的BUG,因为BUG在所难免,所以我们不能错误地认为服务器的BIOS程序就很完善,而应该经常更新服务器的FIRMWARE及BIOS,只是在升级之前应该小心谨慎,错误的升级方法会导致严重的后果。
目前流行的中高档服务器都拥有强大的管理程序,为客户提供了方便的管理途径;服务器也拥有各种 *** 作系统下的驱动程序,方便了客户在各种 *** 作系统中的使用。但是,世上任何一款程序都会有一些BUG,这些BUG将影响用户使用。但是服务器厂商总是会在第一时间内开发出新的程序,客户只需要及时更新这些程序就可以避免这类故障。
当服务器的软件故障为此类时,表现的现象也不尽相同。一般来说,管理程序BUG会导致系统速度变慢,CPU占用率变高,无法正常使用某些功能等;驱动程序的BUG会导致死机、与某些软件有冲突,磁盘工作不稳定等。查看管理程序是否出错的最好的办法就是在系统中首先禁止此类管理工具,再观察服务器是否还是异常。由于管理工具是随着系统启动而启动的,所以应首先避免它的启动。以WINDOWS NT4为例,就首先在管理工具服务中禁用某些服务器软件服务,再修改注册表中的启动项即可。如果是驱动程序有问题的话,就以安全模式进入系统,看是否正常。但是需要注意的是,在安全模式中,系统速度变慢是正常的(特别是磁盘I/O方面)。
服务器的管理人员就应该经常在服务器网站上下载最新的管理工具程序及驱动程序。这样会减少很大一部份软件故障的发生。
相比之下,软件冲突造成的故障判断比较困难,需要管理人员有比较丰富的经验以及敏锐的观察力。
曾经有一位朋友告诉我说,他有一台浪潮的服务器无法安装SQL SERVER 2000,已经重装N次NT了,排除是系统故障。而这唯一的服务器又将作为非常重要数据库服务器,因此非常着急。于是我陪着朋友去了他的公司查看。
这台服务器所在的机房是非常标准、完善的机房,我检查了这台服务器的情况,发现并没有硬件上的故障,于是排除了光驱读盘力差的可能。但是,朋友刻的SQL SERVER 2000光盘引起了我的怀疑,我让他拿出了正版的SQL SERVER安装,结果还是不行。
在安装的过程中,没有出现丝毫错误,可就是在运行的时候会自动退出,没有任何提示。但是,我在管理工具中的事件查看器的系统日志中却发现了一条信息:windataexe导致一个无效的数据溢出。Windata是朋友自己编写的一个程序,而且是随 *** 作系统启动而启动的程序。我立即结束掉这个进程后,再运行SQL一切正常。
对于此类软件故障, *** 作员最好先查看有关的日志,看看系统中是否有可疑的进程。目前的服务器无论是高端还是低端,对于SQL等标准程序的支持是相当可靠的,所以排除的重点就是结束可疑进程。
还有一种软件故障是人为因素造成的,它一般是人为误 *** 作(包括没按 *** 作流程的 *** 作)、意外关机(包括电源突然不供电)或非正常关闭应用程序造成的。
人为误 *** 作因素只要加强管理都可以避免此类故障发生。在这里就详细说明意外关机或非正常关闭程序造成故障的方法。
正常关闭系统程序非常重要,尤其是WEB服务器。我的一个朋友就是因为没有正常关闭系统程序而经历了一次数据损坏甚至丢失的经历。我的朋友是使用的HP web hosting server appliance,因此我向他提供了一些使用规则。
这些方法对于服务器的维护非常有效,主要包括了正确的关闭系统程序、怎样避免数据丢失以及非正常关闭系统后的恢复方法。下面以我朋友的HP web hosting server appliance为例(使用的是UNIX,但思路对于其它 *** 作系统均有效)。
正确关机的过程包括通过按动Power键来使系统断电,你应该一直按住电源开关持续几秒钟才能使系统进入正常的关闭过程中。
另外,为了避免数据丢失,你应该按照如下的步骤 *** 作:
· 经常备份Web Hosting Server Appliance的数据,可以通过网络管理界面来完成。
· 安装第二块硬盘并与原来的硬盘设置成镜像,
一旦Server Apliance未能正确关闭,并无法重起,请按如下 *** 作恢复:
1 当appliance已经断电时,连接一条非modem的串口线(可在机盒中找到)到背面的控制口上。
2 连接串口线的另一头到一台运行Windows的PC的串口上。
3 运行超级链接程序(HyperTerminal),并设置端口的参数为19200, n-8-1, Flow control - None 你可以看到appliance的控制提示,并要求你输入管理员口令。
4 重起appliance,等到提示“LILO boot:”,按住Tab键5秒钟,直到提示变为“boot:”。
5 敲入"emergency"并回车。此时需要耐心等待几分钟。然后,登录提示又将出现,此时,LCD屏又能正常工作了。
6 在LCD屏上选择一个随机的密码(此密码只是用于紧急恢复时用)
翻至Defaults… 并按右箭头键选中。
翻至Root Password…并按右箭头键选中。
翻至Random 并按右箭头键选中,会提示一个随机产生的密码。
记下此密码。
翻至Yes并按右箭头键选中,系统密码会立刻更改。
7 回到超级链接的控制屏,登录appliance,用"root"用户名和刚才的密码,此时会出现“#”提示。
8 为修复分区,请按如下方法 *** 作:
对于sa1100,按顺序输入:
[…]#: fsck /dev/hda5
[…]#: fsck /dev/hda6
[…]#: fsck /dev/hda7
对于sa1120,按顺序输入:
[…]#: fsck /dev/sda5
[…]#: fsck /dev/sda6
[…]#: fsck /dev/sda7
当所有的分区都被修复后,应回到“#”提示符下。
9 输入“reboot”重新启动系统。
如果系统仍无法启动,请记录下控制屏显示的内容并求助技术支持。
对于服务器的软件故障,只要平时管理员注意维护,应该是可以避免的。
答案来自百度

最近对离线数仓体系进行了扩容和架构改造,也算是一波三折,出了很多小插曲,有一些改进点对我们来说也是真空地带,通过对比和模拟压测总算是得到了预期的结果,这方面尤其值得一提的是郭运凯同学的敬业,很多前置的工作,优化和应用压测的工作都是他完成的。 

整体来说,整个事情的背景是因为服务器硬件过保,刚好借着过保服务器替换的机会来做集群架构的优化和改造。 


1集群架构改造的目标

在之前也总结过目前存在的一些潜在问题,也是本次部署架构改进的目标:

1)之前 的GP segment数量设计过度 ,因为资源限制,过多考虑了功能和性能,对于集群的稳定性和资源平衡性考虑有所欠缺,在每个物理机节点上部署了10个Primary,10个Mirror,一旦1个服务器节点不可用,整个集群几乎无法支撑业务。


2)GP集群 的存储资源和性能的平衡不够 ,GP存储基于RAID-5,如果出现坏盘,磁盘重构的代价比较高,而且重构期间如果再出现坏盘,就会非常被动,而且对于离线数仓的数据质量要求较高,存储容量相对不是很大,所以在存储容量和性能的综合之上,我们选择了RAID-10。


3)集 群的异常场景的恢复需要完善, 集群在异常情况下(如服务器异常宕机,数据节点不可用,服务器后续过保实现节点滚动替换)的故障恢复场景测试不够充分,导致在一些迁移和改造中,相对底气不足,存在一些知识盲区。


4)集群版本过 ,功能和性能上存在改进空间。毕竟这个集群是4年前的版本,底层的PG节点的版本也比较旧了,在功能上和性能上都有一定的期望,至少能够与时俱进。


5) *** 作系统版本升 ,之前的 *** 作系统是基于CentOS6,至少需要适配CentOS 7 。


6)集群TPCH 压测验收 ,集群在完成部署之后,需要做一次整体的TPCH压测验收,如果存在明显的问题需要不断调整配置和架构,使得达到预期的性能目标。


此外在应用层面也有一些考虑,总而言之,是希望能够解决绝大多数的痛点问题,无论是在系统层面,还是应用层面,都能上一个台阶。


2集群规划设计的选型和思考

明确了目标,就是拆分任务来规划设计了,在规划设计方面主要有如下的几个问题:


1)Greenplum的版本选择 ,目前有两个主要的版本类别,一个是开源版(Open Source distribution)和Pivotal官方版,它们的其中一个差异就是官方版需要注册,签署协议,在此基础上还有GPCC等工具可以用,而开源版本可以实现源码编译或者rpm安装,无法配置GPCC。综合来看,我们选择了 开源版本的6162 ,这其中也询问了一些行业朋友,特意选择了几个涉及稳定性bug修复的版本。


2)数据集市的技术选型 ,在数据集市的技术选型方面起初我是比较坚持基于PostgreSQL的模式,而业务侧是希望对于一些较为复杂的逻辑能够通过GP去支撑,一来二去之后,加上我咨询了一些行业朋友的意见,是可以选择基于GP的方案,于是我们就抱着试一试的方式做了压测,所以数据仓库和和数据集市会是两个不同规模体量的GP集群来支撑。


3)GP的容量规划 ,因为之前的节点设计有些过度,所以在数量上我们做了缩减,每台服务器部署12个segment节点,比如一共12台服务器,其中有10台服务器是Segment节点,每台上面部署了6个Primary,6个Mirror,另外2台部署了Master和Standby,就是即(6+6)10+2,整体的配置情况类似下面的模式。

4)部署架构方案选型 ,部署架构想起来比较容易,但是落实起来有很多的考虑细节,起初考虑GP的Master和Standby节点如果混用还是能够节省一些资源,所以设计的数据仓库和数据集市的部署架构是这样考虑的,但是从走入部署阶段之后,很快就发现这种交叉部署的模式是不可行的,或者说有一些复杂度。


除此之外,在单个GP集群的部署架构层面,还有4类方案考虑。

  方案1 :Master,Standby和segment混合部署
  方案2 :Master,Standby和segment独立部署,整个集群的节点数会少一些
  方案3 :Segment独立部署,Master,Standby虚拟机部署
  方案4 :最小化单节点集群部署(这是数据集市最保底的方案)  

这方面存在较大的发挥空间,而且总体来说这种验证磨合的成本也相对比较高,实践给我上了一课, 越是想走捷径,越是会让你走一些弯路 ,而且有些时候的优化其实我也不知道改怎么往下走,感觉已经无路可走,所以上面这4种方案其实我们都做了相关的测试和验证。


3集群架构的详细设计和实践

1)设计详细的部署架构图

在整体规划之上,我设计了如下的部署架构图,每个服务器节点有6个Primary,6个Mirror,服务器两两映射。



2)内核参数优化

按照官方文档的建议和具体的配置情况,我们对内核参数做了如下的配置:

vmswappiness=10
vmzone_reclaim_mode = 0
vmdirty_expire_centisecs = 500
vmdirty_writeback_centisecs = 100
vmdirty_background_ratio = 0 # See System Memory
vmdirty_ratio = 0
vmdirty_background_bytes = 1610612736
vmdirty_bytes = 4294967296
vmmin_free_kbytes = 3943084
vmovercommit_memory=2
kernelsem = 500 2048000 200 4096


4集群部署步骤

1)首先是配置/etc/hosts,需要把所有节点的IP和主机名都整理出来。 

2)配置用户,很常规的步骤

groupadd  gpadmin

useradd gpadmin -g gpadmin

passwd gpadmin

3)配置sysctlconf和资源配置

4)使用rpm模式安装

# yum install -y apr apr-util bzip2 krb5-devel  zip

# rpm -ivh open-source-greenplum-db-6162-rhel7-x86_64rpm

5)配置两个host文件,也是为了后面进行统一部署方便,在此建议先开启gpadmin的sudo权限,可以通过gpssh处理一些较为复杂的批量 *** 作

6)通过gpssh-exkeys来打通ssh信任关系,这里需要吐槽这个ssh互信,端口还得是22,否则处理起来很麻烦,需要修改/etc/ssh/sshd_config文件

gpssh-exkeys -f hostlist

7)较为复杂的一步是打包master的Greenplum-db-6162软件,然后分发到各个segment机器中,整个过程涉及文件打包,批量传输和配置,可以借助gpscp和gpssh,比如gpscp传输文件,如下的命令会传输到/tmp目录下

gpscp -f /usr/local/greenplum-db/conf/hostlist /tmp/greenplum-db-6162targz =:/tmp

或者说在每台服务器上面直接rpm -ivh安装也可以。

8)Master节点需要单独配置相关的目录,而Segment节点的目录可以提前规划好,比如我们把Primary和Mirror放在不同的分区。 

mkdir -p /data1/gpdata/gpdatap1

mkdir -p /data1/gpdata/gpdatap2

mkdir -p /data2/gpdata/gpdatam1

mkdir -p /data2/gpdata/gpdatam2

9)整个过程里最关键的就是gpinitsystem_config配置了,因为Segment节点的ID配置和命名,端口区间都是根据一定的规则来动态生成的,所以对于目录的配置需要额外注意。

10)部署GP集群最关键的命令是

gpinitsystem -c gpinitsystem_config -s standby_hostname


其中文件gpinitsystem_config的主要内容如下:

MASTER_HOSTNAME=xxxx

declare -a DATA_DIRECTORY=(/data1/gpdata/gpdatap1  /data1/gpdata/gpdatap2 /data1/gpdata/gpdatap3 /data1/gpdata/gpdatap4 /data1/gpdata/gpdatap5 /data1/gpdata/gpdatap6)

TRUSTED_SHELL=ssh

declare -a MIRROR_DATA_DIRECTORY=(/data2/gpdata/gpdatam1  /data2/gpdata/gpdatam2 /data2/gpdata/gpdatam3 /data2/gpdata/gpdatam4 /data2/gpdata/gpdatam5 /data2/gpdata/gpdatam6)

MACHINE_LIST_FILE=/usr/local/greenplum-db/conf/seg_hosts

整个过程大约5分钟~10分钟以内会完成,在部署过程中建议要查看后端的日志查看是否有异常,异常情况下的体验不是很好,可能会白等。


5集群部署问题梳理

集群部署中还是有很多细节的问题,太基础的就不提了,基本上就是配置,目录权限等问题,我提另外几个:

1) 资源配置问题 ,如果/etc/security/limitsconf的资源配置不足会在安装时有如下的警告:


2) 网络问题 ,集群部署完成后可以正常 *** 作,但是在查询数据的时候会抛出错误,比如SQL是这样的,看起来很简单:select count() from customer,但是会抛出如下的错误:

这个问题的主要原因还是和防火墙配置相关,其实不光需要配置INPUT的权限,还需要配置OUTPUT的权限。 

对于数据节点可以开放略大的权限,如:

入口的配置:

-A INPUT -p all -s xxxxx    -j ACCEPT

出口的配置:

-A OUTPUT -p all -s xxxxx    -j ACCEPT


3)网络配置问题 ,这个问题比较诡异的是,报错和上面是一样的,但是在排除了防火墙配置后,select count() from customer;这样的语句是可以执行的,但是执行的等待时间较长,比如表lineitem这表比较大,过亿的数据量,,在10个物理节点时,查询响应时间是10秒,但是4个物理节点,查询响应时间是在90秒,总体删感觉说不过去。

为了排查网络问题,使用gpcheckperf等工具也做过测试,4节点和10节点的基础配置也是相同的。

gpcheckperf -f /usr/local/greenplum-db/conf/seg_hosts -r N -d /tmp

$ cat /etc/hosts
127001   localhost localhostlocaldomain localhost4 localhost4localdomain4
::1      localhost localhostlocaldomain localhost6 localhost6localdomain6
#127001    test-dbs-gp-128-230
xxxxx128238 test-dbs-gp-svr-128-238
xxxxx128239 test-dbs-gp-svr-128-239

其中127001的这个配置在segment和Master,Standby混部的情况是存在问题的,修正后就没问题了,这个关键的问题也是郭运凯同学发现的。


5集群故障恢复的测试

集群的故障测试是本次架构设计中的重点内容,所以这一块也是跃跃欲试。

整体上我们包含两个场景,服务器宕机修复后的集群恢复和服务器不可用时的恢复方式。

第一种场景相对比较简单,就是让Segment节点重新加入集群,并且在集群层面将Primary和Mirror的角色互换,而第二种场景相对时间较长一些,主要原因是需要重构数据节点,这个代价基本就就是PG层面的数据恢复了,为了整个测试和恢复能够完整模拟,我们采用了类似的恢复方式,比如宕机修复使用了服务器重启来替代,而服务器不可用则使用了清理数据目录,类似于一台新配置机器的模式。

1)服务器宕机修复后集群恢复

select from gp_segment_configuration where status!='u';

gprecoverseg  -o /recov

gprecoverseg -r

select from gp_segment_configuration where status='u'


2)服务器不可用时集群恢复

重构数据节点的过程中,总体来看网络带宽还是使用很充分的。

select from gp_segment_configuration where status='u'

select from gp_segment_configuration where status='u' and role!=preferred_role;

gprecoverseg -r

select from gp_segment_configuration where status='u' and role!=preferred_role;


经过测试,重启节点到数据修复,近50G数据耗时3分钟左右

6集群优化问题梳理

1)部署架构优化和迭代

对于优化问题,是本次测试中尤其关注,而且争议较多的部分。 

首先在做完初步选型后,数仓体系的部署相对是比较顺利的,采用的是第一套方案。

数据集市的集群部分因为节点相对较少,所以就选用了第二套方案

实际测试的过程,因为配置问题导致TPCH的结果没有达到预期。

所以这个阶段也产生了一些疑问和怀疑,一种就是折回第一种方案,但是节点数会少很多,要不就是第三种采用虚拟机的模式部署,最保底的方案则是单节点部署,当然这是最牵强的方案。

这个阶段确实很难,而在上面提到的修复了配置之后,集群好像突然开悟了一般,性能表现不错,很快就完成了100G和1T数据量的TPCH测试。

在后续的改造中,我们也尝试了第三套方案,基于虚拟机的模式,通过测试发现,远没有我们预期的那么理想,在同样的数据节点下,Master和Standby采用物理机和虚拟机,性能差异非常大,这个是出乎我们预料的。比如同样的SQL,方案3执行需要2秒,而方案2则需要80秒,这个差异我们对比了很多指标,最后我个人理解差异还是在网卡部分。

所以经过对比后,还是选择了方案2的混合部署模式。

2)SQL性能优化的分析

此外整个过程的TPCH也为集群的性能表现提供了参考。比如方案2的混合部署模式下,有一条SQL需要18秒,但是相比同类型的集群,可能就只需要2秒钟左右,这块显然是存在问题的。 

在排除了系统配置,硬件配置的差异之后,经典的解决办法还是查看执行计划。

性能较差的SQL执行计划:

# explain analyze select count()from customer;

QUERY PLAN   

Aggregate  (cost=00043100 rows=1 width=8) (actual time=2479291624792916 rows=1 loops=1)

   ->  Gather Motion 36:1  (slice1; segments: 36)  (cost=00043100 rows=1 width=1) (actual time=325516489394 rows=150000000 loops=1)

         ->  Seq Scan on customer  (cost=00043100 rows=1 width=1) (actual time=07801267878 rows=4172607 loops=1)

Planning time: 4466 ms

   (slice0)    Executor memory: 680K bytes

   (slice1)    Executor memory: 218K bytes avg x 36 workers, 218K bytes max (seg0)

Memory used:  2457600kB

Optimizer: Pivotal Optimizer (GPORCA)

Execution time: 24832611 ms

(9 rows)


Time: 24892500 ms


性能较好的SQL执行计划:

# explain analyze select count()from customer;                            

QUERY PLAN

Aggregate  (cost=00084208 rows=1 width=8) (actual time=15193111519311 rows=1 loops=1)

   ->  Gather Motion 36:1  (slice1; segments: 36)  (cost=00084208 rows=1 width=8) (actual time=6347871519214 rows=36 loops=1)

         ->  Aggregate  (cost=00084208 rows=1 width=8) (actual time=14732961473296 rows=1 loops=1)

               ->  Seq Scan on customer  (cost=00083433 rows=4166667 width=1) (actual time=0758438319 rows=4172607 loops=1)

Planning time: 5033 ms

   (slice0)    Executor memory: 176K bytes

   (slice1)    Executor memory: 234K bytes avg x 36 workers, 234K bytes max (seg0)

Memory used:  2457600kB

Optimizer: Pivotal Optimizer (GPORCA)

Execution time: 1543611 ms

(10 rows)


Time: 1549324 ms

很明显执行计划是被误导了,而误导的因素则是基于统计信息,这个问题的修复很简单:

analyze customer;

但是深究原因,则是在压测时,先是使用了100G压测,压测完之后保留了原来的表结构,直接导入了1T的数据量,导致执行计划这块没有更新。

3)集群配置优化

此外也做了一些集群配置层面的优化,比如对缓存做了调整。 

gpconfig -c statement_mem -m 2457600 -v 2457600

gpconfig -c gp_vmem_protect_limit -m 32000 -v 32000


7集群优化数据

最后来感受下集群的性能:

1)10个物理节点,(6+6)10+2

tpch_1t=# iming on

Timing is on

tpch_1t=# select count()from customer;

   count   

-----------

150000000

(1 row)

Time: 1235801 ms


tpch_1t=# select count()from lineitem;

   count    

------------

5999989709

(1 row)

Time: 10661756 ms


2)6个物理节点,(6+6)6

# select count()from customer;
   count   
-----------
 150000000
(1 row)
Time: 1346833 ms


# select count()from lineitem;
   count    
------------
 5999989709
(1 row)
Time: 18145092 ms


3)4个物理节点,(6+6)4

# select count()from customer;
   count   
-----------
 150000000
(1 row)
Time: 1531621 ms

# select count()from lineitem;
   count    
------------
 5999989709
(1 row)
Time: 25072501 ms

4)TPCH在不通架构模式下的性能比对 ,有19个查询模型,有个别SQL逻辑过于复杂暂时忽略,也是郭运凯同学整理的列表。

在1T基准下的基准测试表现:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13084899.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存