더 많은 스토리지를 위해 확장해야하는 Carbon 및 Graphite를 실행하는 시스템 클러스터가 있지만 확장 또는 축소가 필요한지 확실하지 않습니다.
클러스터는 현재 다음으로 구성됩니다.
- 1 릴레이 노드 : 모든 메트릭을 수신하고 관련 스토리지 노드로 전달
- 스토리지 노드 6 개 : 모든 Whisper DB 파일 보관
문제는 디스크 사용량이 80 % 정도가되면 성능이 절벽에서 떨어 졌다는 것입니다. 클러스터 쓰기 IOPS는 거의 일정한 13k에서 약 7k의 혼란스러운 평균으로, IOwait 시간은 평균 54 %로 떨어졌습니다.
구성 저장소를 살펴본 결과 4 월 초 이후에는 변경 사항이 없으므로 구성 변경의 결과가 아닙니다.
질문 : 디스크 크기를 늘리면 IO 성능을 다시 제어 할 수 있습니까, 아니면 스토리지 노드를 더 추가해야합니까?
참고 : 여기에는 SSD가 없으며 많은 스핀들 만 있습니다.
관련 그래프 :
통계 및 물건 :
e2freefrag
:
[root@graphite-storage-01 ~]# e2freefrag /dev/vda3
Device: /dev/vda3
Blocksize: 4096 bytes
Total blocks: 9961176
Free blocks: 4781849 (48.0%)
Min. free extent: 4 KB
Max. free extent: 81308 KB
Avg. free extent: 284 KB
Num. free extent: 19071
HISTOGRAM OF FREE EXTENT SIZES:
Extent Size Range : Free extents Free Blocks Percent
4K... 8K- : 4008 4008 0.08%
8K... 16K- : 1723 3992 0.08%
16K... 32K- : 703 3495 0.07%
32K... 64K- : 637 7400 0.15%
64K... 128K- : 1590 29273 0.61%
128K... 256K- : 4711 236839 4.95%
256K... 512K- : 2664 265691 5.56%
512K... 1024K- : 2359 434427 9.08%
1M... 2M- : 595 213173 4.46%
2M... 4M- : 75 49182 1.03%
64M... 128M- : 6 118890 2.49%
e4defrag
:
[root@graphite-storage-01 ~]# e4defrag -c /dev/vda3
<Fragmented files> now/best size/ext
1. /opt/graphite/storage/graphite.db 17/1 4 KB
2. /var/log/cron 13/1 4 KB
3. /var/log/wtmp 16/1 4 KB
4. /root/.bash_history 4/1 4 KB
5. /var/lib/rpm/Sha1header 10/1 4 KB
Total/best extents 182256/159981
Average size per extent 183 KB
Fragmentation score 2
[0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
This device (/dev/vda3) does not need defragmentation.
Done.
iostat
:
[root@graphite-storage-01 ~]# iostat -k -x 60 3
Linux 3.10.0-229.7.2.el7.x86_64 (graphite-storage-01) 07/05/2016 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
7.99 0.00 2.54 29.66 0.35 59.46
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 100.34 177.48 1808.94 2715.66 7659.19 10.45 0.26 0.13 0.65 0.08 0.23 46.14
avg-cpu: %user %nice %system %iowait %steal %idle
6.17 0.00 7.00 73.21 0.58 13.04
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 23.87 672.40 656.47 8729.87 2752.27 17.28 7.36 5.50 2.72 8.35 0.73 96.83
avg-cpu: %user %nice %system %iowait %steal %idle
7.06 0.00 7.31 73.03 0.59 12.01
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 42.68 677.67 614.88 8634.93 2647.53 17.46 6.66 5.15 2.72 7.83 0.74 96.08
df
:
[root@graphite-storage-01 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda3 39153856 33689468 3822852 90% /
devtmpfs 1933092 0 1933092 0% /dev
tmpfs 1941380 0 1941380 0% /dev/shm
tmpfs 1941380 188700 1752680 10% /run
tmpfs 1941380 0 1941380 0% /sys/fs/cgroup
/dev/vda2 999320 2584 980352 1% /tmp
[root@graphite-storage-01 ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vda3 2490368 239389 2250979 10% /
devtmpfs 483273 304 482969 1% /dev
tmpfs 485345 1 485344 1% /dev/shm
tmpfs 485345 322 485023 1% /run
tmpfs 485345 13 485332 1% /sys/fs/cgroup
/dev/vda2 65536 22 65514 1% /tmp
편집 : 스토리지 노드 중 하나의 크기를 조정했지만 효과가 없습니다. 또한 cachestat
[ https://github.com/brendangregg/perf-tools](perf 도구 모음)에서 VFS 캐시 내부를 살펴 보는 유틸리티를 찾았습니다 . 이 시점에서 스토리지가 제공 할 수있는 IO 처리량의 한계에 도달 한 것 같습니다.
이 시점에서 나는 더 많은 클러스터 멤버로 계속 확장하거나 쓰기 효율적인 시계열 스토리지 솔루션을 찾는 것에 대해 생각할 것입니다.
의 출력 예 cachestat
:
storage-01 [resized disk]
HITS MISSES DIRTIES RATIO BUFFERS_MB CACHE_MB
9691 14566 7821 40.0% 160 2628
36181 14689 7802 71.1% 160 2631
8649 13617 7003 38.8% 159 2628
15567 13399 6857 53.7% 160 2627
9045 14002 7049 39.2% 160 2627
7533 12503 6153 37.6% 159 2620
storage-02 [not resized]
HITS MISSES DIRTIES RATIO BUFFERS_MB CACHE_MB
5097 11629 4740 30.5% 143 2365
5977 11045 4843 35.1% 142 2344
4356 10479 4199 29.4% 143 2364
6611 11188 4946 37.1% 143 2348
33734 14511 5930 69.9% 143 2347
7885 16353 7090 32.5% 143 2358
Super Late Edit : SSD를 사용할 수있는 다른 플랫폼으로 마이그레이션 한 후 일정 기간 동안 성능이 향상되었지만 더 많은 메트릭을 추가 할 때 성능이 크게 저하되었습니다. 확실한 증거는 없지만 이것이 카본 / 위스퍼 스토리지의 작동 방식과 우리가 저장하는 수많은 지표 사이의 모퉁이 사례라고 생각합니다.
기본적으로 시스템에 충분한 RAM이있어 읽기 용 Whisper 파일을 편안하게 캐시 할 수 있다면 IO는 거의 순수한 쓰기이며 모든 것이 행복합니다. 그러나 일단 FS 캐시 기아 상태가 설정되고 Whisper 파일은 IO 대역폭을 차지하는 디스크에서 지속적으로 읽어야하며 모든 것이 작동하기 시작합니다.