服务器测试方法分为两个大方面,性能测试与功能测试。
我们在性能测试方面采用了新的测试方法,主要分为文件测试、数据库性能测试与
Web
性能测试三个
方面。其中,文件性能与数据库性能采用美国
Quest
软件公司的
Benchmark Factory
负载测试和容量规划
软件,
Web
性能测试则使用了
Spirent
公司提供的
Caw WebAvalanche
测试仪。
一、性能测试
1
、文件性能测试方法
Benchmark Factory
软件能按照文件读写的关键指标定制事务。软件最大支持
1000
个虚拟客户。
本次测试环境包括
10
台配置为
PIII800/128MB
内存
/20G
硬盘以上的客户端,它们用来模拟虚拟用户。
控制台为配置是
PIII 850/128MB
内存
/40G
硬盘的
Acer
笔记本电脑。交换机为带有两个千兆
GBIC
接口、
24
个
10/100M
自适应端口的
Cisco 2950
,客户端与控制台通过
100M
网卡连到交换机上,被测服务器则通
过千兆光纤网卡与交换机相连接。
被测服务器均安装带
SP4
的
Windows
2000
Advanced Server
*** 作系统,在所有三项性能测试中都统一
RAID
级别为
5
。
在具体测试方案设置上,测试软件把决定文件读写 *** 作的关键因素设定为:读
/
写、随机
/
顺序、 *** 作
块大小、对象大小四个。在本次测试中,考虑到我们设有单独的数据库及
Web
测试项目,所以在文件测试
中,我们把目标确定为测试服务器基本的
I/O
性能,这主要由网络接口、系统带宽、磁盘子系统等几大部
分所决定。同时,从几部分的作用看,以大 *** 作块读写大对象文件,小 *** 作块读写小对象文件,较能反映
服务器最基本的
I/O
性能,即“大 *** 作块读写大文件”对系统带宽、缓存的考察,以及“小 *** 作块读写小
文件”对磁盘子系统、网络接口的考察。最终我们确定的四个事务是:
大文件顺序读写
(
*** 作块
8KB
,对象文件
80% 500KB
、
20% 1MB)
大文件随机读写
(
*** 作块
8KB
,对象文件
80% 500KB
、
20% 1MB)
小文件随机读
(
*** 作块
1KB
,对象文件
80% 1KB
、
10% 10KB
、
10% 50KB)
小文件顺序写
(
*** 作块
1KB
,对象文件
80% 1KB
、
10% 10KB
、
10% 50KB)
每个事务的用户数均以固定步长逐渐增加,
最大可增加到
1000
个虚拟用户。
其中,
“大文件顺序读写”
事务的用户数按照
40
的步长从
1
可增加到
400
个
(
测试至强服务器
)
或
200
个
(
测试
TUALATIN
服务器
)
,其
他事务则将用户数按照
100
的步长从
1
增加至
1000
。我们期望得到其在不同用户数时被测服务器的性能表
现。总体上其走势及峰值反映了该服务器的性能。每项事务均运行三次,每次之间被测服务器进行重启,
最终结果为三次平均值。
2
、数据库性能测试方法
“乘机安全小贴士”安全出行要重视
数据库性能测试同样使用了
Benchmark Factory
软件,测试环境如同文件性能测试。测试时,在被测
服务器上安装
SQL Server 2000
使用企业版。首先在被测服务器上创建新的数据库,通过使用
Benchmark
Factory
预定义的
Database Spec
项目向数据库中创建表,装载数据。在服务器端创建以
CPU
计算为主的
存储过程,通过
10
台客户机模拟用户、按照
40
个虚拟用户的步长递增到
400
个用户,执行该存储过程。
结果是以获得的每秒事务数
(TPS)
衡量服务器的数据库事务处理能力。
整个测试分为三次,
每次之间重新启
动被测服务器,最终取三次平均值作为评价结果。
3
、
Web
性能测试方法
Web
性能测试工具是由
Spirent
公司提供的
Caw WebAvalanche
。
WebAvalanche
模拟实际的用户发出
>以Excel为例,Excel表格序号下拉全是1,递增的方法如下:
1、进入Excel软件后,在表格中输入一个1。
2、然后下拉,点击以序列方式填充即可。
MicrosoftExcel是Microsoft为使用Windows和AppleMacintosh *** 作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。在1993年,作为MicrosoftOffice的组件发布了50版之后,Excel就开始成为所适用 *** 作平台上的电子制表软件的霸主。
MicrosoftOffice是一套由微软公司开发的办公软件套装,它可以在MicrosoftWindows、WindowsPhone、Mac系列、iOS和Android等系统上运行。与其他办公室应用程序一样,它包括联合的服务器和基于互联网的服务。从2007版的Office被称为“OfficeSystem”而不叫“OfficeSuite”,反映出它们包括服务器的事实。 redis集群模式,丢失master主服务器是无法继续工作的,所以随时都需要一个master节点。但是服务器宕机是经常出现的事情,集群本身是无法完成故障转移的,所以需要一个第三方的解决方案,帮redis集群完成故障转移(选择主节点、通知从节点修改同步master地址,让原来的主节点成为从节点)。
(1)首先sentinel也属于一种redis服务器,只不过启动时加载的配置文件不同。配置文件里包括了监控的主服务器列表(对,可以是多个主服务器,即就是多个集群)。
(2)sentinel通过配置文件中的主服务器IP:端口号,建立链接和订阅,就是一个双向的通道
(3)sentinel默认每10秒,向建立链接的主服务器,发送INFO命令;主服务器收到命令,返回主服务器信息。
可以看到,返回了主服务器的运行ID,重要的是:同步主服务器的从节点信息
(4)从步骤(3)中获取到的从节点信息,从节点的IP和端口。sentinel和从节点建立链接和订阅
(5)sentinel默认每10秒,向建立链接的从服务器,发送INFO命令,从服务器接收到命令后,返回从服务器信息
主要包括了从服务器对应的master节点的地址:端口号,偏移量
(6)sentinel与主服务器和从服务器建立了链接和订阅,可以向主从服务器发送命令,也可以接收主从服务器的广播
订阅命令:subscribe _sentinel_:hello
通道名:hello
sentinel对hello频道的订阅会一直持续到sentinel和服务器之间的链接断开为止
sentinel向服务器通道发送的消息,其他与该服务器建立订阅关系的sentinel也会收到订阅通知,sentinel自己也会收到自己发出的消息的订阅通知
(7)sentinel默认会每两秒一次,向所有建立链接和订阅的主从服务器,发送广播消息
命令:publish_sentinel__:hello "<s_ip>,<s_port>,<s_runid>,<s_epoch>,<m_name>,<m_ip>,<m_port>,<m_epoch>"
可以看到主要包含
s_ip : sentinel自己 IP地址
s_port : sentinel自己端口号
s_runid : sentinel自己的运行ID
s_epoch : sentinel当前的配置纪元
m_name, m_ip, m_port, m_epoch : 当前监控服务器的名称(主或者从)、IP地址、端口号、当前配置纪元
这个消息,也会被其他订阅该通道的sentinel收到
sentinel在接收到订阅消息后(就是上文中自己与别的sentinel,publish的消息),首先过滤掉自己发,然后接收别人的消息,就能获取监听改主服务器的所有sentinel节点
(8)通过上一步,sentinel能够感知到其他监控主服务器的sentinel节点,然后和其他sentinel建立连接,最终,所有监视主服务器的sentinel节点组成了一个相关连接的网络!
sentinel会默认每1s向自己所建立连接的服务器发送PING命令,这些服务器包括(监视master的其他sentinel,master、salve服务器),根据收到的返回值,来确定目标服务器的状态
常见返回值:+PONG、-LOADING、-MASTERDOWN,含义在此处先不关注
判定条件:目标服务器在一定的时间内(配置文件字段:down-after-milliseconds的值),一直返回“失败”
对失败的定义:
(1)目标服务器没有在规定时间内返回(该时间可配置)
(2)目标服务器返回了上述三种返回值之外的值
确定一个目标服务器失败之后,会在sentinel自己的实例表中记录该实例的状态,用:
SRI_S_DOWN表示,S=subjective客观
注:一个master服务器会被多个sentinel监控,多个sentinel可能设置了不同的
down-after-milliseconds
和我们设想的一样,单一的sentinel并不能决定目标master服务器的生死存亡,会拿着自己实例表里的“客观”下线的服务器地址和端口,去向同样监控这台服务器的sentinel询问,看看“别人”这个服务器到底下线没? 当能够从别的sentinel那里询问到“足够数量”的已下线(客观下线或者主观下线)结果后,sentinel就可以判断目标服务器真的下线了,就可以执行故障转移了。
(1)sentinel发送命令is-master-down-by-addr
SENTINEL is-master-down-by-addr <ip> <port> <current_epoch> <runid>
发送的目标:监控master服务器的其他sentinel
参数解析:ip、port=自己监控的master服务器的IP,端口,current_epoch=源sentinel当前的配置纪元,runid=源sentinel的唯一标识ID
(2)sentinel对命令is-master-dowm-by-addr的回复
1) <down_state> :下线的状态,0-未下线,1-已下线
2) <leader_runid> :当前sentinel的局部leader,为 “” 时表示没有leader
3) <leader_epoch> :当前sentinel的局部leader的配置纪元,当没有leader时,该项为0
(3)sentinel收到命令is-master-down-by-addr的回复后
sentinel收到足够数量(可配置)的“已下线”回复(即down_state=1),就会在自己的实例表里将对应的master服务器状态(flags)设置为 SRI_O_DOWN,O=Objective。
监控同一个master服务器的sentinel,对客观下线的条件可以不一致,即收到多少已下线回复才认定客观下线,可以不尽相同。
由于监控同一个master服务器的sentinel有很多,并不能决定是哪个sentinel去执行故障转移,所以需要多个sentinel进行选leader头结点。
具体步骤:
(1)sentinel通过向其他sentinel节点发送is-master-down-by-addr命令,已经可以判断当前master服务器是否客观下线
(2)已经判断master服务器客观下线的sentinel,再次向其他节点发送
is-master-down-by-addr命令,携带自己的runId和配置纪元
这里再复习一遍命令 :
sentinel is-master-down-by-addr <ip>,<port>,<cur_epoch>,<runid>
(3)目标sentinel收到源sentinel的 is-master…命令之后,执行以下判断
1>判断epoch和自己的纪元是否相等,不相等直接舍弃这条命令
2>判断自己的配置表里是否有局部leader,没有的话,将源sentinel的runid设置为自己的局部了leader
如果已经有了局部leader,那么会返回自己的局部leader的信息
3>对源sentinel的is-master-down-by-addr命令进行回复
示例:
源sentinel向目标sentinel发送命令,
SENTINEL is-master-down-by-addr 127001 8080 0 11522852334a
源sentinel收到命令的回复
1
11522852334a
0
表示有一个sentinel将自己成功设置成为leader(需要把返回的runid和自己的runid比对)
4>当过半的sentinel将自己成功设置为局部leader,标识选主成功,如果在一段时间内没有收到过半的成功数,那么会进行下一轮命令的发送,epoch递增+1
例如,共有10个sentinel监视同一个master服务器,其中一个sentinel必须收到10/2+1=6个及以上的成功数,才能认为自己成功当选leader
(1)筛选master节点的备胎(即就是哪些slave节点可以成为新的master)
选择master节点备胎就一个要求,数据尽量完整,状态尽量好
1>删除,客观下线或者主观下线的slave服务器
2>删除,在最近5s没有回复过头sentinel节点的INFO命令的slave服务器
剩下的slave服务器,根据优先级进行排序,遇到优先级一样的,再根据偏移量排序(目的是筛选出和master服务器数据较同步的slave服务器)。再遇到偏移量一样的,继续根据runid排序,找出runid最小的(没有什么依据,只是个排序),至此,可以作为master的slave服务器就筛选好了。
(2)slave服务器升级为master
头sentinel向步骤(1)中筛选出来的slave服务器发送slaveof_no_one,发送完该转移命令。之后,头sentinel每秒一次的频率向上述slave服务器发送INFO命令,观察INFO命令返回的role字段,看是否变为master,变为master表示成功升级为master服务器。
(3)修改原slave服务器列表的复制/同步目标
头sentinel向原slave服务器列表发送命令:
slave of 127001:8080,修改slave的复制目标
(4)修改已下线的master服务器为新master的slave节点
头sentinel保持对已下线master的监控,当已下线master重新上线(对PING命令有回复),就对他发送slave of 127001命令,让其成为slave。
至此,故障转移全部结束。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)