الكثير من ذاكرة الوصول العشوائي المجانية و NVMe Intel P4500 وكل شيء يتباطأ - قصة الإضافة غير الناجحة لقسم المبادلة

في هذه المقالة ، سأتحدث عن الموقف الذي حدث مؤخرًا مع أحد الخوادم في سحابة VPS الخاصة بنا ، مما أربكني لعدة ساعات. لقد تم تكوين خوادم Linux واستكشاف أخطائها وإصلاحها لمدة 15 عامًا تقريبًا ، لكن هذه الحالة لا تتناسب مع ممارستي على الإطلاق - لقد قمت ببعض الافتراضات الزائفة واليأس قليلاً قبل أن أتمكن من تحديد سبب المشكلة بشكل صحيح وحلها.


الديباجة


نقوم بتشغيل سحابة متوسطة الحجم ، والتي نبنيها على خوادم نموذجية للتكوين التالي - 32 نواة وذاكرة وصول عشوائي سعتها 256 جيجابايت و NVMe PCI-E Intel P4500 4TB. نحن نحب هذا التكوين حقًا ، لأنه يسمح لنا بعدم التفكير في نقص IO ، مما يوفر التقييد الصحيح على مستوى أنواع مثيلات (مثيلات) VM. نظرًا لأن NVMe Intel P4500 يتمتع بأداء مثير للإعجاب ، يمكننا في الوقت نفسه توفير كل من توفير IOPS الكامل للأجهزة وتخزين النسخ الاحتياطي إلى خادم نسخ احتياطي بدون IOWAIT.


نحن ننتمي إلى نفس المؤمنين القدامى الذين لا يستخدمون SDNs شديدة التقارب وغيرها من قطع الشباب الأنيقة والعصرية لتخزين أحجام VM ، معتقدين أنه كلما كان النظام أبسط ، كان من السهل المزاح في ظل ظروف "ذهب المعلم الرئيسي إلى الجبال". ونتيجة لذلك ، نقوم بتخزين أحجام VM بتنسيق QCOW2 بتنسيق XFS أو EXT4 ، والتي يتم نشرها أعلى LVM2.


نحن مضطرون أيضًا لاستخدام QCOW2 من قبل المنتج الذي نستخدمه للتنسيق - Apache CloudStack.

لإجراء نسخ احتياطي ، نلتقط صورة كاملة الحجم مثل لقطة LVM2 (نعم ، نحن نعلم أن لقطات LVM2 بطيئة ، ولكن تساعدنا Intel P4500 هنا أيضًا). نقوم بذلك lvmcreate -s ..ونستخدمه ddلإرسال نسخة احتياطية إلى خادم بعيد مع تخزين ZFS. هنا ما زلنا تقدميين قليلاً - لا يزال بإمكان ZFS تخزين البيانات في شكل مضغوط ، ويمكننا استعادتها بسرعة باستخدام DDأو الحصول على وحدات تخزين VM فردية باستخدامها mount -o loop ....


, , LVM2, RO QCOW2, , , XFS , , . , - "" , - , . XFS RO , LVM2.

, 600-800 MB/s , — 10Gbit/s, .


8 . , , , -, , , 8 GB/, -.


, — Intel P4500, NFS , , ZFS.



- SWAP 8 GB, - "" DD . 2xSATA SSD RAID1 2xSAS HDD RAID1 LSI HP. , , , " readonly", SWAP-. RAM 30-40% , SWAP .


. :


#!/bin/bash

mkdir -p /mnt/backups/volumes

DIR=/mnt/images-snap
VOL=images/volume
DATE=$(date "+%d")
HOSTNAME=$(hostname)

lvcreate -s -n $VOL-snap -l100%FREE $VOL
ionice -c3 dd iflag=direct if=/dev/$VOL-snap bs=1M of=/mnt/backups/volumes/$HOSTNAME-$DATE.raw
lvremove -f $VOL-snap

ionice -c3, NVMe , IO :


cat /sys/block/nvme0n1/queue/scheduler
[none] 

, legacy- SSD RAID-, , AS IS. , , ionice .


iflag=direct DD. direct IO , IO . , oflag=direct , ZFS .


.


… , , IOWAIT 50%. :


Volume group "images" not found

" Intel P4500", , , . LVM2 LVM2:


vgcfgrestore images

:


— , , VPS- , . , — iostat IOPS- IOWAIT. , " NVMe" , .



. VPS- 128 GB RAM. , 32 GB . VPS , , SWAP- .


. vm.swappiness - 60. SWAP SAS HDD RAID1.


( ). DD , RAM NFS. , swappiness, VPS , HDD RAID1. , IOWAIT , IO NVMe, IO HDD RAID1.


. 32GB. 16 , , SWAP . swappiness 5 .


كيف لم يحدث هذا . أولاً ، إذا كان SWAP على جهاز SSD RAID أو NVMe ، وثانيًا ، إذا لم يكن هناك جهاز NVMe ، ولكن سيكون هناك جهاز أبطأ لن ينتج مثل هذا الحجم من البيانات - ومن المفارقات ، أن المشكلة حدثت أن NVMe سريع جدًا.


بعد ذلك ، بدأ كل شيء في العمل كما كان من قبل - بدون أي IOWAIT.


All Articles