採用linux cgroup控制redis主從多例項資源

jaymarco發表於2021-11-10

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值可以滿足業務需求,可實現例項資源隔離和效能控制。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2841514/,如需轉載,請註明出處,否則將追究法律責任。

相關文章