采用linux cgroup控制redis主从多实例资源

1、背景

为了更好的给业务提供良好的缓存服务,同时提升主机资源利用率。Redis管理采用单台主机部署多个redis实例。通过linux系统级cgroups内核控制技术来隔离redis实例之间资源调用。保障实例之间运行稳定,隔离后无资源争用现象。

2、目标

采用 Cgroup控制隔离 redis进程资源,测试多种场景保障 redis服务运行稳定。 Redis多实例进程之间资源隔离无影响,能保证系统承载能力与稳定性。

3、测试环境与工具
3.1、环境信息

C PU

内存

操作系统

REDIS 版本

Redis 架构

机器数

4

16G

CENTOS7.3

6.2.1

Redis主从

3台

3.2、测试工具

Redis 性能工具

监控工具

测试形式

备注

redis-benchmark

Top,sar,vmstat

命令


4、配置与指标

4.1、cgroup配置

Redis-server进程CGROUP控制,将控制参数配置至启动 redis-server脚本中,需要通过CPUQuota与MemoryLimit参数来控制CPU与内存资源配额,具体的资源配额大小可以通过参数数值来改变,详细的配置如下:

如下是控制 redis-server 进程参数 /usr/lib/systemd/system/redis-server.service

############################################

[Unit]

Description=Redis

After=network.target

[Service]

Type=forking

User=xj_paas

Group=xj_paas

UMask=0027

NotifyAccess=all

TimeoutStartSec=600

ExecStart=/usr/local/bin/redis-server   /app/redis/6101/redis_6101.conf

ExecStop=/usr/local/bin/redis-cli   -h 10.253.176.137 -p 6101 -a cmVkaXM= shutdown

PrivateTmp=true

CPUQuota=20%

MemoryLimit=1024M

[Install]

WantedBy=multi-user.target.wants

4.2 测试指标

测试过程中可以通过相关指标来观察redis服务的性能是否存在下降趋势,主机资源的资源是否在配额范围内没有出现超卖。

CPU 使用率:redis进程CPU占用率。

SET QPS :redis每秒SET请求数

GET QPS: redis 每秒GET请求数

INCR QPS: redis 每秒存储加1请求数


5、测试过程
5.1 测试场景1

redis单实例,在不做任何资源限制下进行压力测试,跑出的最优QPS值和CPU平均使用率。如下表所示,当客户端连接数为100和400时,CPU使用率均值都在85-88%,SET QPS、GET QPS和INCR QPS的值波动幅度不大,较为平均。

测试命令:

redis-benchmark -h 127.0.0.1 -p 6101 -t set,get,incr -c 100 -n 1000000 -q

redis-benchmark -h 127.0.0.1 -p 6101 -t set,get,incr -c 400 -n 1000000 -q


CPU

内存

并发数

CPU 使用率

SET QPS

GET QPS

INCR QPS

单实例场景

4

16G

100

88%

80541

93632

82481

400

86%

66809

79421

74024


5.2、测试场景2
  Redis单实例,使用CGROUP进行限制CPU性能资源,且分别限制CPU使用率最大值不能超过20%、40%、60%、80%下进行压力测试,跑出的最优QPS值和CPU平均使用率。结果如下表所示,连接数分别以100和400压测,可直观看到采用CGROUP限制资源后,CPU使用率已得到限制,且没有超过限制的上限,但QPS值也因CPU受到限制而降低,综合观察压测后得出的QPS值可知,连接数100和400的QPS值并没有太大的差别。

测试命令:

redis-benchmark -h 127.0.0.1 -p 6101 -t set,get,incr -c 100 -n 1000000 -q

redis-benchmark -h 127.0.0.1 -p 6101 -t set,get,incr -c 400 -n 1000000 -q


CPU

内存

限制CPU

并发数

CPU 使用率

SET QPS

GET QPS

INCR QPS

单实例场景

4

16G

20%

100

19.60%

11937

16883

12230

400

19.60%

13431

16144

13553

40%

100

37.00%

27948

44642

37707

400

37.00%

26616

34364

28050

60%

100

59.60%

49333

66172

48374

400

59.60%

53453

68376

50380

80%

100

79%

61625

83001

64004

400

79%

64561

85106

68922


5.3、测试场景3

Redis多实例,在不做任何资源限制进行压力测试,跑出的最优QPS值和CPU平均使用率。如下图所示,当客户端连接数为100和400时,CPU使用率均值都在88-92%,且SET QPS、GET QPS和INCR QPS的值波动幅度不大,较为平均,也没有出现不同实例一高一低的QPS值;故可知,在不做任何资源限制双实例情况下,压力测试后的QPS值并不存在且不会出现多实例因争夺性能资源而导致QPS值降低。

测试命令:

redis-benchmark -h 127.0.0.1 -p 6101 -t set,get,incr -c 100 -n 1000000 -q

redis-benchmark -h 127.0.0.1 -p 6101 -t set,get,incr -c 100 -n 1000000 -q

redis-benchmark -h 127.0.0.1 -p 6101 -t set,get,incr -c 400 -n 1000000 -q

redis-benchmark -h 127.0.0.1 -p 6102 -t set,get,incr -c 400 -n 1000000 -q


CPU

内存

实例

连接数

CPU 使用率

SET QPS

GET QPS

INCR QPS

多实例场景

4

16G

6101

100

92%

102417

93066

105585

6102

92%

95265

89919

98135

6101

400

88%

102103

94903

93905

6102

88%

94544

94607

84609

5.4 测试场景4

Redis多实例,使用CGROUP进行限制CPU性能资源,且分别限制CPU使用率最大值不能超过20%、40%、60%、80%下进行压力测试,跑出的最优QPS值和CPU平均使用率。结果如下图所示,连接数分别以100和400压测,可以从数据看到,采用CGROUP限制资源后,CPU使用率已得到限制,且没有超过限制的上限,但QPS值也因CPU受到限制而降低,综合观察压测后得出的QPS值可知,连接数100和400的QPS值并没有太大的差别,且波动幅度不大,较为平均,测试中也没有出现不同实例一高一低的QPS值;故可知,在CGROUP资源限制下,双实例情景压力测试后的QPS值,也同样不存在且不会出现多实例因争夺性能资源而导致QPS值降低的情况。

测试命令:

redis-benchmark -h 127.0.0.1 -p 6101 -t set,get,incr -c 100 -n 1000000 -q

redis-benchmark -h 127.0.0.1 -p 6101 -t set,get,incr -c 100 -n 1000000 -q

redis-benchmark -h 127.0.0.1 -p 6101 -t set,get,incr -c 400 -n 1000000 -q

redis-benchmark -h 127.0.0.1 -p 6102 -t set,get,incr -c 400 -n 1000000 -q


CPU

内存

实例

限制CPU

并发数

CPU 使用率

SET QPS

GET QPS

INCR QPS

多实例场景

4

16G

6101

20%

100

19.70%

16108

14150

16524

6102

19.70%

17698

14422

16681

6101

400

19.30%

15160

20084

11602

6102

19.30%

17217

21146

11833

6101

40%

100

39.70%

53358

50015

49402

6102

39.70%

50643

52826

50390

6101

400

39.70%

48647

52912

54635

6102

39.70%

45382

53154

54674

6101

60%

100

59.10%

82135

79491

78302

6102

59.50%

80314

80166

78517

6101

400

58.20%

79258

79662

83486

6102

58.40%

77561

80353

84788

6101

80%

100

70.20%

87382

85521

87827

6102

70.20%

84868

84846

88928

6101

400

70.20%

94135

94759

93423

6102

70.20%

91701

94589


90407


6、测试总结
  无论时reids单实例,还是redis多实例,采用操作系统CGROUP控制资源隔离后,在不超过虚拟机资源上限的情况下,实例的组件性能和数据读取、写入性能并不影响,且资源限制后,每个实例限制分配的资源也不会超过所配置的资源上限。经过此轮的多场景测试整体redis的 QPS值可以满足业务需求,可实现实例资源隔离和性能控制。



请使用浏览器的分享功能分享到微信等