採用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 |
|
6、測試總結
無論時reids單例項,還是redis多例項,採用作業系統CGROUP控制資源隔離後,在不超過虛擬機器資源上限的情況下,例項的元件效能和資料讀取、寫入效能並不影響,且資源限制後,每個例項限制分配的資源也不會超過所配置的資源上限。經過此輪的多場景測試整體redis的 QPS值可以滿足業務需求,可實現例項資源隔離和效能控制。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2841514/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Redis多例項及主從複製環境搭建Redis
- 多例項資料庫一個用PSU資料庫
- Linux下MySQL多例項部署記錄LinuxMySql
- 多例項資料庫一個用PSU(轉載)資料庫
- linux namespace and cgroupLinuxnamespace
- MySQL多例項配置MySql
- 用 docker 學習 redis 主從複製2 主從同步的offsetDockerRedis主從同步
- Redis主從配置Redis
- Redis主從搭建Redis
- Redis主從同步Redis主從同步
- MySQL資料庫入門多例項配置MySql資料庫
- linux系統——Redis叢集搭建(主從+哨兵模式)LinuxRedis模式
- flutter 多例項實戰Flutter
- MySQL5.7 多例項MySql
- mysql多例項安裝MySql
- MySQL多例項有哪些生產應用場景?怎麼樣才能學好linuxMySqlLinux
- Redis:主從複製Redis
- centos 搭建redis主從CentOSRedis
- Redis主從切換Redis
- Redis - 主從複製Redis
- docker 配置 Redis 主從DockerRedis
- redis主從備份Redis
- Redis主從模式部署Redis模式
- Redis主從複製Redis
- MySQL 多例項配置管理:MySql
- MySQL多例項環境部署MySql
- Android Flutter 多例項實踐AndroidFlutter
- 用 docker 學習 redis 主從複製3 redis-sentinel(哨兵模式)DockerRedis模式
- redis系列:主從複製Redis
- Docker配置redis主從哨兵DockerRedis
- Redis 主從複製原理Redis
- redis(14)主從複製Redis
- Redis sentinel主從切換Redis
- Redis 主從複製(Replication)Redis
- redis-cluster主從搭建Redis
- redis主從同步機制Redis主從同步
- redis學習十四、Redis主從複製Redis
- Redis的主從資料一致性Redis