背景:優化磁盤I/O
我有一個活Django應用程序,它利用4個Redis的實例。
前兩者規模較大:備份數量分別爲〜2GB和〜4.4GB。另外兩個很小:〜85M和〜15M。
redis-server --version
收益率Redis server v=4.0.2 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=401ce53d7b0383ca
。
問題:
它運行的PostgreSQL 9.6.5,以及在繁忙的服務器。 PG數據和Redis備份都保存在輔助驅動器xvdb
中。
我注意到,每當我的大Redis實例開始備份時,磁盤I/O自然會出現尖峯,PostgreSQL提交語句會在慢日誌中堆積起來。看哪:
21:49:26.171 UTC [44861] [email protected] LOG: duration: 3063.262 ms statement: COMMIT
21:49:26.171 UTC [44890] [email protected] LOG: duration: 748.307 ms statement: COMMIT
21:49:26.171 UTC [44882] [email protected] LOG: duration: 1497.461 ms statement: COMMIT
21:49:26.171 UTC [44893] [email protected] LOG: duration: 655.063 ms statement: COMMIT
21:49:26.171 UTC [44894] [email protected] LOG: duration: 559.743 ms statement: COMMIT
21:49:26.172 UTC [44883] [email protected] LOG: duration: 1415.733 ms statement: COMMIT
因此,這是我的PostgreSQL怎麼犯的樣子每天:
問題:
有什麼我可以在Redis方面做些什麼來幫助平息這種棘手的情況?我希望Redis和PostgreSQL儘可能和諧地生活在一臺機器上。
更多信息:
要求提供更多信息,如果您需要它。
機規格:
AWS EC2 m4.4xlarge (16 cores, 64GB RAM)
Elastic Block Store gp2 volumes (105 IOPS, burst upto 3000 IOPS)
以下配置中的我Redis的conf文件的Append Only Mode
部分存在:
appendonly no
appendfilename "appendonly.aof"
# appendfsync always
appendfsync everysec
# appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
典型iostat -xmt 3
值是:
10/15/2017 08:28:35 PM
avg-cpu: %user %nice %system %iowait %steal %idle
10.44 0.00 0.93 0.15 0.06 88.43
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 0.00 0.00 2.00 0.00 0.04 38.67 0.00 0.00 0.00 0.00 0.00 0.00
xvdb 0.00 2.67 0.00 44.67 0.00 0.41 18.99 0.13 2.81 0.00 2.81 1.07 4.80
與此相比,相同的時間慢速提交記錄:
10/15/2017 10:18:11 PM
avg-cpu: %user %nice %system %iowait %steal %idle
8.16 0.00 0.65 11.90 0.04 79.24
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 4.00 0.00 1.00 0.00 0.02 48.00 0.00 1.33 0.00 1.33 1.33 0.13
xvdb 0.00 0.00 1.67 1312.00 0.01 163.50 254.90 142.56 107.64 25.60 107.75 0.76 100.00
第一Redis的實例具有以下快照配置:
save 7200 1
#save 300 10
#save 60 10000
第二Redis的實例具有以下快照配置:
save 21600 10
#save 300 10
#save 60 10000
這是我唯一現實的選擇給出的情景? –
你可以等待其他答案......同時我會試着弄清楚在OS級別是否有可能。 –
@HassanBaig你是否通過這個鏈接? 'https:// unix.stackexchange.com/questions/48138 /每個進程如何限制流量-i-o-to-a-max-limit' –