Redis主从热备性能测试

一、 测试目的

测试Redis主从热备,在key随机大小的情况下性能如何,其中主机不带持久化,从机带持久化,且写、改在主机上操作,读则在从机上操作。

二、 测试环境

1 网络环境

如图1所示,424543均连接至千兆交换机,其中42为服务端master45为服务端slave43为客户端:  

clip_image002           1

2 硬件环境

IP

 

型号

 

OS

 

CPU

 

内存

 

硬盘

 

网卡

 

用途

 

192.168.0.42

HP刀片

RedHat6.2 x86_64

Intel(R)  Xeon(R)  

E5410 @ 2.33GHz 8

16G

68G

1000Mb/s

被压主机

192.168.0.45

HP刀片

RedHat6.2 x86_64

Intel(R)  Xeon(R)  

E5410 @ 2.33GHz 8

16G

68G

1000Mb/s

被压从机

192.168.0.43

HP刀片

RedHat6.2 x86_64

Intel(R)  Xeon(R)  

E5410 @ 2.33GHz 8

16G

68G

1000Mb/s

加压机

3 软件环境

软件名称

 

软件版本

 

是否开源

 

redis

v2.6.5

三、 测试结果

2100字节范围内生成随机大小的key,加上10字节的value组成每条数据记录内容;每次操作线程数为50个,每线程10万条记录,在老数据基础上进行测试;老数据基础分别为7000万、7500万、8000万条……,依次类推每次测试增长500万条,分别测试insertselectupdate情况;

Redis主从热备过程如下:

1) SlaveMaster建立连接,然后发送SYNC命令;

2) Slave无论是第一次或者重新连接,Master都会启动一子进程,将数据库快照保存到.rdb文件中,同时Master主进程收集新的写命令并缓存;

3) 子进程完成写文件后退出,Master再把文件发送给SlaveSlave将文件保存到磁盘上,完了之后再加载到内存中;

4) 接着Master再把缓存的命令转发给Slave,后续Master将收到的写命令都同步发送给Slave

5) 如果Master同时收到多个Slave发来的同步连接命令,Master只会启动一个子进程来写数据库镜像,然后再发送给所有的Slave

注:Slave第一次或者重新连接到Master,都会进行全量同步数据,之后如果Master有新数据,才进行增量同步,且Slave在同步数据过程中不接受任何操作请求。

1 insert操作性能情况

1) 在老数据基础上,进行50个客户端并发,每客户端操作100,000次写,平均用时如图2-1、图2-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

74794.32  

74471.25  

74460.16  

73540.23  

73583.52  

6777.64  

slave

 

2-1

clip_image004 

2-2

        说明:纵轴为平均用时(单位:次/秒),横轴为老数据基础(单位:千万);

2) CPU使用情况,如图3-1、图3-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

86.71  

95.20  

92.46  

93.90  

93.85  

10.18  

slave

 

21.93  

31.47  

26.53  

29.78  

29.01  

0.99  

3-1

clip_image006 

                                3-2

说明:纵轴为平均占用单个CPU百分比,横轴为老数据基础(单位:千万);

3) MEM使用情况,如图4-1、图4-2示:

   

 

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

68.11  

72.16  

76.42  

80.56  

84.78  

84.87  

slave

 

68.09  

72.11  

76.45  

80.52  

84.79  

75.52  

4-1

clip_image008 

                                4-2

说明:纵轴为占用内存平均百分比,横轴为老数据基础(单位:千万);

4) 每秒页面错误,如图5-1、图5-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

0.00  

0.00  

0.00  

0.00  

0.00  

81.06  

slave

 

0.00  

0.00  

0.00  

0.00  

0.00  

2.40  

5-1

clip_image010 

                                5-2

说明:纵轴为每秒产生的页面错误数,横轴为老数据基础(单位:千万);

5) 磁盘IO读情况,如图6-1、图6-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

0.00  

0.00  

0.00  

0.00  

0.00  

1986.25  

slave

 

0.00  

0.00  

0.00  

0.00  

0.00  

75.99  

6-1

clip_image012 

                                6-2

说明:纵轴为磁盘IO读的数量(单位:kB/s),横轴为老数据基础(单位:千万);

6) 磁盘IO写情况,如图7-1、图7-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

0.82  

0.73  

0.64  

0.83  

1.06  

0.57  

slave

 

518.44  

2317.03  

1437.87  

255.83  

667.09  

0.62  

7-1

clip_image014 

                                7-2

说明:纵轴为磁盘IO写的数量(单位:kB/s),横轴为老数据基础(单位:千万);

2 select操作性能情况

1) 在老数据基础上,进行50个客户端并发,每客户端操作100,000次读,平均用时如图8-1、图8-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

slave

 

94984.80  

94304.04  

93057.88  

92165.90  

94589.48  

68728.52  

8-1

clip_image016 

                                8-2

说明:纵轴为平均用时(单位:次/秒),横轴为老数据基础(单位:千万);

2) CPU使用情况,如图9-1、图9-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

0.00  

0.00  

0.00  

0.00  

0.00  

0.00  

slave

 

79.45  

90.41  

84.83  

89.12  

93.42  

70.92  

9-1

clip_image018 

                                9-2

说明:纵轴为平均占用单个CPU百分比,横轴为老数据基础(单位:千万);

3) MEM使用情况,如图10-1、图10-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

69.99  

74.34  

78.45  

82.68  

86.92  

53.48  

slave

 

69.97  

74.21  

78.43  

82.66  

82.43  

90.93  

10-1

clip_image020 

                                10-2

说明:纵轴为占用内存平均百分比,横轴为老数据基础(单位:千万);

4) 每秒页面错误,如图11-1、图11-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

0.00  

0.00  

0.00  

0.00  

0.00  

0.00  

slave

 

0.00  

0.00  

0.00  

0.00  

0.00  

39.55  

11-1

clip_image022 

                                11-2

说明:纵轴为每秒产生的页面错误数,横轴为老数据基础(单位:千万);

5) 磁盘IO读情况,如图12-1、图12-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

0.00  

0.00  

0.00  

0.00  

0.00  

0.00  

slave

 

1.55  

0.00  

0.00  

0.00  

0.00  

1261.71  

12-1

clip_image024 

                                12-2

说明:纵轴为磁盘IO读的数量(单位:kB/s),横轴为老数据基础(单位:千万);

6) 磁盘IO写情况,如图13-1、图13-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

0.48  

0.87  

0.68  

0.83  

0.80  

0.75  

slave

 

0.78  

0.80  

0.90  

0.67  

0.76  

0.62  

13-1

clip_image026 

                                13-2

说明:纵轴为磁盘IO写的数量(单位:kB/s),横轴为老数据基础(单位:千万);

3 update操作性能情况

1) 在老数据基础上,进行50个客户端并发,每客户端操作100,000次改,平均用时如图14-1、图14-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

65019.51  

65163.56  

64566.12  

65265.63  

64366.63  

28851.70  

slave

 

14-1

clip_image028 

                                14-2

说明:纵轴为平均用时(单位:次/秒),横轴为老数据基础(单位:千万);

2) CPU使用情况,如图15-1、图15-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

92.68  

92.59  

88.38  

92.73  

91.99  

43.33  

slave

 

29.94  

25.35  

27.00  

27.47  

27.75  

3.42  

15-1

clip_image030 

                                15-2

说明:纵轴为平均占用单个CPU百分比,横轴为老数据基础(单位:千万);

3) MEM使用情况,如图16-1、图16-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

70.20  

74.56  

78.46  

82.72  

87.17  

61.02  

slave

 

69.97  

74.21  

78.43  

82.66  

82.43  

86.91  

16-1

clip_image032 

                                16-2

说明:纵轴为占用内存平均百分比,横轴为老数据基础(单位:千万);

4) 每秒页面错误,如图17-1、图17-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

0.00  

0.00  

0.00  

0.00  

0.00  

94.72  

slave

 

0.00  

0.00  

0.00  

0.00  

0.00  

64.50  

17-1

clip_image034 

                                17-2

说明:纵轴为每秒产生的页面错误数,横轴为老数据基础(单位:千万);

5) 磁盘IO读情况,如图18-1、图18-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

0.00  

0.00  

0.00  

0.00  

0.00  

2067.77  

slave

 

0.00  

0.00  

0.00  

0.00  

0.00  

2036.16  

18-1

clip_image036 

                                18-2

说明:纵轴为磁盘IO读的数量(单位:kB/s),横轴为老数据基础(单位:千万);

6) 磁盘IO写情况,如图19-1、图19-2示:

7.00  

 

7.50  

 

8.00  

 

8.50  

 

9.00  

 

9.50  

 

master

 

0.68  

0.58  

0.51  

0.82  

0.87  

0.70  

slave

 

797.51  

191.29  

147.11  

0.92  

1356.34  

9.19  

19-1

clip_image038 

                                19-2

说明:纵轴为磁盘IO写的数量(单位:kB/s),横轴为老数据基础(单位:千万);

四、 分析及结论

1 insert操作性能情况

1) 相同的数据模型,相同的服务器环境,在达到内存上限前,Redis不带持久化,能保存的热数据要比带持久化时多些,前者能保存约9千万条,后者能保约8千万条;

2) 在达到内存上限前,Redis带主从热备写性能要比不带时低些,前者约74千条每秒,后者约78千条每秒;

3) Redis主机在达到内存上限后,写性能会急剧下降;

4) Redis主机平均占用单个CPU百分比,在达到内存上限前一直稳定在90%左右,而从机一直稳定在29%左右;达到内存上限后,二者均受内存swap每秒产生大量页面错误影响,CPU使用率会急剧下降;

5) Redis主从机内存占用均随着写入数据的逐渐增多而增大,但达到内存上限后,二者均受内存swap每秒产生大量页面错误影响而持续下降,从机还受子进程dump数据竞争内存而下降更明显;

6) Redis主从机在达到内存上限后,由于需要把部分数据转到交换分区,均会每秒产生大量的页面错误;

7) Redis主从机在达到内存上限前,均没有磁盘IO读操作,之后就有明显的磁盘IO读操作,尤其主机最明显;

8) 在整个插入数据过程中,Redis主机磁盘IO写操作不是很明显,而从机磁盘IO写操作很明显且不规则;

2 select操作性能情况

1) Redis主从热备情况,数据可以从Slave读出,从而分担Master压力,性能约94千条每秒,而单机情况下读性能约85千条每秒;

2) Redis主机在达到内存上限后,读性能会急剧下降;

3) Redis从机平均占用单个CPU百分比,在达到内存上限前,一直稳定在90%左右,之后受内存swap每秒产生大量页面错误影响而持续下降;

4) Redis主从机内存占用均随着写入数据的逐渐增多而增大,但达到内存上限后,二者均受内存swap每秒产生大量页面错误影响而持续下降;

5) Redis从机在达到内存上限后,由于需要把部分数据转到交换分区,会每秒产生大量的页面错误;

6) Redis从机在达到内存上限前,没有磁盘IO读操作,之后就有明显的磁盘IO读操作;

7) 在整个查询数据过程中,Redis从机磁盘IO写操作不是很明显且不规则;

3 update操作性能情况

1) 在达到内存上限前,Redis带与不带主从热备,改性能都差不多,约65千条每秒;

2) Redis从机在达到内存上限后,改性能会急剧下降

3) Redis主机平均占用单个CPU百分比,在达到内存上限前一直稳定在90%左右,而从机一直稳定在29%左右;达到内存上限后,二者均受内存swap每秒产生大量页面错误影响,CPU使用率会急剧下降;

4) Redis主从机内存占用均随着写入数据的逐渐增多而增大,但达到内存上限后,二者均受内存swap每秒产生大量页面错误影响而持续下降;

5) Redis主从机在达到内存上限后,由于需要把部分数据转到交换分区,均会每秒产生大量的页面错误;

6) Redis主从机在达到内存上限前,均没有磁盘IO读操作,之后就有明显的磁盘IO读操作;

7) 在整个修改数据过程中,Redis主机磁盘IO写操作不是很明显,而从机磁盘IO写操作很明显且不规则;

五、 后续测试及开发建议

1 测试建议

1) 是否可以加入删除情况测试;

2 开发建议

1) 在达到内存上限后,主从机性能都会急剧下降;

2) 如果需要持久化,最好把持久化设置在Slave上,且MasterSlave最好在同一局域网内;

3) Slave第一次或重新连接Master,如果Master原库数据量大,主从数据同步时,会严重影响Master性能;

 

作者:廖诚

发表评论