Cef - "tizzada" dan "ishlab chiqarish" ga

CEPH tanlash. 1-qism

Bizda beshta raf, o'nta optik kalit, sozlangan BGP, bir nechta o'nlab SSD va har qanday rang va o'lchamdagi bir nechta SAS disklari, shuningdek proxmox va barcha statik ma'lumotlarni o'z S3 xotiramizga joylashtirish istagi bor edi. Bularning barchasi virtualizatsiya uchun kerak emas, lekin ochiq manbadan foydalanishni boshlaganingizdan so'ng, sevimli mashg'ulotingizni oxirigacha kuzatib boring. Meni bezovta qilgan yagona narsa BGP edi. Dunyoda ichki BGP marshrutlashdan ko'ra ojiz, mas'uliyatsiz va axloqsiz odam yo'q. Va men tez orada biz unga sho'ng'ishimizni bilardim.

Cef - "tizzada" dan "ishlab chiqarish" ga

Vazifa ahamiyatsiz edi - CEPH bor edi, lekin u juda yaxshi ishlamadi. "Yaxshilik" qilish kerak edi.
Men olgan klaster heterojen, shoshilinch sozlangan va deyarli sozlanmagan. U turli xil tugunlarning ikkita guruhidan iborat bo'lib, bitta umumiy tarmoq ham klaster, ham umumiy tarmoq vazifasini bajaradi. Tugunlar to'rt turdagi disklar bilan to'ldirildi - ikkita alohida joylashtirish qoidalarida to'plangan ikki turdagi SSD va uchinchi guruhda to'plangan har xil o'lchamdagi ikki turdagi HDD. Turli o'lchamdagi muammo turli xil OSD og'irliklari bilan hal qilindi.

O'rnatishning o'zi ikki qismga bo'lingan - operatsion tizimni sozlash и CEPHning o'zini sozlash va uning sozlamalari.

OS yangilanmoqda

tarmoq

Yuqori kechikish ham yozishga, ham muvozanatlashga taʼsir qildi. Yozishda - chunki boshqa joylashtirish guruhlaridagi ma'lumotlar nusxalari muvaffaqiyatni tasdiqlamaguncha mijoz muvaffaqiyatli yozib olish haqida javob olmaydi. CRUSH xaritasida replikalarni tarqatish qoidalari har bir xost uchun bitta nusxa bo'lganligi sababli, tarmoq har doim ishlatilgan.

Shuning uchun, men qilishga qaror qilgan birinchi narsa joriy tarmoqni biroz o'zgartirish edi, shu bilan birga meni alohida tarmoqlarga o'tishga ishontirishga harakat qildim.

Boshlash uchun men tarmoq kartalarining sozlamalarini o'zgartirdim. Men navbatlarni o'rnatishdan boshladim:

nima bo'ldi:

ettool -l ens1f1

root@ceph01:~# ethtool -l ens1f1
Channel parameters for ens1f1:
Pre-set maximums:
RX:     0
TX:     0
Other:      1
Combined:   63
Current hardware settings:
RX:     0
TX:     0
Other:      1
Combined:   1
root@ceph01:~# ethtool -g ens1f1
Ring parameters for ens1f1:
Pre-set maximums:
RX:     4096
RX Mini:    0
RX Jumbo:   0
TX:     4096
Current hardware settings:
RX:     256
RX Mini:    0
RX Jumbo:   0
TX:     256
root@ceph01:~# ethtool -l ens1f1
Channel parameters for ens1f1:
Pre-set maximums:
RX:     0
TX:     0
Other:      1
Combined:   63
Current hardware settings:
RX:     0
TX:     0
Other:      1
Combined:   1

Ko'rinib turibdiki, joriy parametrlar maksimaldan uzoqdir. Ko'tarilgan:

root@ceph01:~#ethtool -G ens1f0 rx 4096
root@ceph01:~#ethtool -G ens1f0 tx 4096
root@ceph01:~#ethtool -L ens1f0 combined 63

Ajoyib maqolaga asoslangan

https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data/

yuborish navbatining uzunligini oshirdi txqueuelen 1000 dan 10 000 gacha

root@ceph01:~#ip link set ens1f0  txqueuelen 10000

Xo'sh, cephning o'zi hujjatlariga rioya qilish

https://ceph.com/geen-categorie/ceph-loves-jumbo-frames/

ortdi MTU 9000gacha.

root@ceph01:~#ip link set dev ens1f0  mtu 9000

Yuqoridagilarning barchasi ishga tushirilganda yuklanishi uchun /etc/network/interfaces ga qo'shildi

cat / etc / network / interfeyslari

root@ceph01:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto ens1f0
iface ens1f0 inet manual
post-up /sbin/ethtool -G ens1f0 rx 4096
post-up /sbin/ethtool -G ens1f0 tx 4096
post-up /sbin/ethtool -L ens1f0 combined 63
post-up /sbin/ip link set ens1f0  txqueuelen 10000
mtu 9000

auto ens1f1
iface ens1f1 inet manual
post-up /sbin/ethtool -G ens1f1 rx 4096
post-up /sbin/ethtool -G ens1f1 tx 4096
post-up /sbin/ethtool -L ens1f1 combined 63
post-up /sbin/ip link set ens1f1  txqueuelen 10000
mtu 9000

Shundan so'ng, xuddi shu maqoladan so'ng, men 4.15 yadrosining tutqichlarini o'ylab bura boshladim. Tugunlarda 128G RAM borligini hisobga olsak, biz uchun konfiguratsiya fayli bilan yakunlandik sysctl

cat /etc/sysctl.d/50-ceph.conf

net.core.rmem_max = 56623104  
#Максимальный размер буфера приема данных для всех соединений  54M
net.core.wmem_max = 56623104
#Максимальный размер буфера передачи данных для всех соединений 54M
net.core.rmem_default = 56623104
#Размер буфера приема данных по умолчанию для всех соединений. 54M
net.core.wmem_default = 56623104
#Размер буфера передачи данных по умолчанию для всех соединений 54M  
# на каждый сокет
net.ipv4.tcp_rmem = 4096 87380 56623104
#Векторная (минимум, по умолчанию, максимум) переменная в файле tcp_rmem
# содержит 3 целых числа, определяющих размер приемного буфера сокетов TCP.
# Минимум: каждый сокет TCP имеет право использовать эту память по 
# факту своего создания. Возможность использования такого буфера 
# гарантируется даже при достижении порога ограничения (moderate memory pressure).
# Размер минимального буфера по умолчанию составляет 8 Кбайт (8192).
#Значение по умолчанию: количество памяти, допустимое для буфера 
# передачи сокета TCP по умолчанию. Это значение применяется взамен
# параметра /proc/sys/net/core/rmem_default, используемого другими протоколами.
# Значение используемого по умолчанию буфера обычно (по умолчанию) 
# составляет 87830 байт. Это определяет размер окна 65535 с 
# заданным по умолчанию значением tcp_adv_win_scale и tcp_app_win = 0, 
# несколько меньший, нежели определяет принятое по умолчанию значение tcp_app_win.
# Максимум: максимальный размер буфера, который может быть автоматически
# выделен для приема сокету TCP. Это значение не отменяет максимума, 
# заданного в файле /proc/sys/net/core/rmem_max. При «статическом»
# выделении памяти с помощью SO_RCVBUF этот параметр не имеет значения.
net.ipv4.tcp_wmem = 4096 65536 56623104
net.core.somaxconn = 5000    
# Максимальное число открытых сокетов, ждущих соединения.
net.ipv4.tcp_timestamps=1
# Разрешает использование временных меток (timestamps), в соответствии с RFC 1323.
net.ipv4.tcp_sack=1
# Разрешить выборочные подтверждения протокола TCP
net.core.netdev_max_backlog=5000 (дефолт 1000)
# максимальное количество пакетов в очереди на обработку, если 
# интерфейс получает пакеты быстрее, чем ядро может их обработать.
net.ipv4.tcp_max_tw_buckets=262144
# Максимальное число сокетов, находящихся в состоянии TIME-WAIT одновременно.
# При превышении этого порога – «лишний» сокет разрушается и пишется
# сообщение в системный журнал.
net.ipv4.tcp_tw_reuse=1
#Разрешаем повторное использование TIME-WAIT сокетов в случаях,
# если протокол считает это безопасным.
net.core.optmem_max=4194304
#Увеличить максимальный общий буфер-космической ALLOCATABLE
#измеряется в единицах страниц (4096 байт)
net.ipv4.tcp_low_latency=1
#Разрешает стеку TCP/IP отдавать предпочтение низкому времени ожидания
# перед более высокой пропускной способностью.
net.ipv4.tcp_adv_win_scale=1
# Эта переменная влияет на вычисление объема памяти в буфере сокета,
# выделяемой под размер TCP-окна и под буфер приложения.
# Если величина tcp_adv_win_scale отрицательная, то для вычисления размера
# используется следующее выражение:
# Bytes- bytes2в степени -tcp_adv_win_scale
# Где bytes – это размер окна в байтах. Если величина tcp_adv_win_scale
# положительная, то для определения размера используется следующее выражение:
# Bytes- bytes2в степени tcp_adv_win_scale
# Переменная принимает целое значение. Значение по-умолчанию – 2, 
# т.е. под буфер приложения отводится ¼ часть объема, определяемого переменной
# tcp_rmem.
net.ipv4.tcp_slow_start_after_idle=0
# механизм перезапуска медленного старта, который сбрасывает значение окна 
# перегрузки, если соединение не использовалось заданный период времени.
# Лучше отключить SSR на сервере, чтобы улучшить производительность 
# долгоживущих соединений.
net.ipv4.tcp_no_metrics_save=1
#Не сохранять результаты измерений TCP соединения в кеше при его закрытии.
net.ipv4.tcp_syncookies=0
#Отключить механизм отправки syncookie
net.ipv4.tcp_ecn=0
#Explicit Congestion Notification (Явное Уведомление о Перегруженности) в 
# TCP-соединениях. Используется для уведомления о возникновении «затора» 
# на маршруте к заданному хосту или сети. Может использоваться для извещения
# хоста-отправителя о необходимости снизить скорость передачи пакетов через
# конкретный маршрутизатор или брандмауэр.
net.ipv4.conf.all.send_redirects=0
# выключает выдачу ICMP Redirect … другим хостам. Эта опция обязательно
# должна быть включена, если хост выступает в роли маршрутизатора любого рода.
# У нас нет маршрутизации.
net.ipv4.ip_forward=0
#Сопсно отключение форвардинга. Мы не шлюз, докер на машинах не поднят,
# нам это не нужно.
net.ipv4.icmp_echo_ignore_broadcasts=1
#Не отвечаем на ICMP ECHO запросы, переданные широковещательными пакетами
net.ipv4.tcp_fin_timeout=10
#определяет время сохранения сокета в состоянии FIN-WAIT-2 после его
# закрытия локальной стороной. Дефолт 60
net.core.netdev_budget=600 # (дефолт 300)
# Если выполнение программных прерываний не выполняются достаточно долго,
# то темп роста входящих данных может превысить возможность ядра 
# опустошить буфер. В результате буферы NIC переполнятся, и трафик будет потерян.
# Иногда, необходимо увеличить длительность работы SoftIRQs
# (программных прерываний) с CPU. За это отвечает netdev_budget. 
# Значение по умолчанию 300. Параметр заставит процесс SoftIRQ обработать
# 300 пакетов от NIC перед тем как отпустить CPU
net.ipv4.tcp_fastopen=3
# TFO TCP Fast Open
# если и клиент и сервер имеют поддержку TFO, о которой сообщают за счет
# специального флага в TCP пакете. В нашем случае является плацебо, просто
# выглядит красиво)

Сyorqin tarmoq alohida 10Gbps tarmoq interfeyslarida alohida tekis tarmoqqa ajratilgan. Har bir mashina ikki portli tarmoq kartalari bilan jihozlangan melanoks 10/25 Gbit/s, ikkita alohida 10 Gbit/s kalitlarga ulangan. Aggregatsiya OSPF yordamida amalga oshirildi, chunki lacp bilan bog'lanish ba'zi sabablarga ko'ra maksimal 16 Gbit / s umumiy o'tkazuvchanlikni ko'rsatdi, ospf esa har bir mashinada ikkala o'ntadan ham muvaffaqiyatli foydalangan. Kelajakdagi rejalar kechikishni kamaytirish uchun ushbu melanokslarda ROCE-dan foydalanish edi. Tarmoqning ushbu qismini qanday sozlash kerak:

  1. Mashinalarning o'zlari BGP-da tashqi IP-manzillarga ega bo'lganligi sababli, bizga dasturiy ta'minot kerak - (aniqrog'i, ushbu maqolani yozish paytida shunday edi frr=6.0-1 ) allaqachon turgan edi.
  2. Hammasi bo'lib, mashinalar ikkita tarmoq interfeysiga ega edi, ularning har biri ikkita interfeysga ega - jami 4 port. Bitta tarmoq kartasi ikkita portli zavodga qaradi va unda BGP sozlangan, ikkinchisi ikkita portli ikkita turli xil kalitlarga qaradi va unga OSPF o'rnatildi.

OSPF ni o'rnatish bo'yicha batafsil ma'lumot: Asosiy vazifa ikkita havolani birlashtirish va xatolarga bardoshli bo'lishdir.
ikkita tarmoq interfeysi ikkita oddiy tekis tarmoqqa sozlangan - 10.10.10.0/24 va 10.10.20.0/24

1: ens1f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
inet 10.10.10.2/24 brd 10.10.10.255 scope global ens1f0
2: ens1f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
inet 10.10.20.2/24 brd 10.10.20.255 scope global ens1f1

qaysi avtomobillar bir-birini ko'radi.

disk

Keyingi qadam disklarni optimallashtirish edi. SSD uchun men rejalashtiruvchini o'zgartirdim noop, HDD uchun - topshirish muddati; tugatish muddati. Ochig'ini aytganda, NOOP "birinchi kir, birinchi chiqadi" tamoyili bo'yicha ishlaydi, bu ingliz tilida "FIFO (birinchi kir, birinchi chiqadi)" kabi eshitiladi. So'rovlar kelishi bilan navbatga qo'yiladi. DEADLINE ko'proq o'qishga yo'naltirilgan, shuningdek, navbatda turgan jarayon operatsiya vaqtida diskka deyarli eksklyuziv kirish huquqini oladi. Bu bizning tizimimiz uchun juda mos keladi - axir, har bir disk bilan faqat bitta jarayon ishlaydi - OSD demoni.
(I/U rejalashtiruvchisiga sho'ng'ishni istaganlar bu haqda o'qishlari mumkin:
http://www.admin-magazine.com/HPC/Articles/Linux-I-O-Schedulers

Rus tilida o'qishni afzal ko'rganlar: https://www.opennet.ru/base/sys/linux_shedulers.txt.html)

Linuxni sozlash bo'yicha tavsiyalarda, shuningdek, nr_requestni oshirish tavsiya etiladi

nr_requests
nr_requests qiymati, agar siz I/U rejalashtiruvchisi blok qurilmaga maʼlumotlarni yuborish/qabul qilishdan oldin buferga olinadigan kiritish/chiqarish soʻrovlari miqdorini aniqlaydi, agar siz RAID kartasi/Blok qurilmasidan foydalanayotgan boʻlsangiz. /O rejalashtiruvchisi sozlangan, nr_requests qiymatini oshirish serverda katta hajmdagi kiritish/chiqarish sodir bo'lganda server yukini yaxshilash va kamaytirishga yordam beradi. Agar siz Deadline yoki CFQ dan rejalashtiruvchi sifatida foydalanayotgan bo'lsangiz, nr_request qiymatini navbat chuqurligi qiymatining 2 barobariga o'rnatish tavsiya etiladi.

LEKIN! Fuqarolarning o'zlari, CEPH ishlab chiquvchilari bizni ularning ustuvorlik tizimi yaxshiroq ishlashiga ishontirmoqda

Cef - "tizzada" dan "ishlab chiqarish" ga

WBTrottle va/yoki nr_requests

WBTrottle va/yoki nr_requests
Fayl xotirasi yozish uchun buferlangan kiritish-chiqarishdan foydalanadi; bu faylni saqlash jurnali tezroq muhitda bo'lsa, bir qator afzalliklarni beradi. Mijoz so'rovlari jurnalga ma'lumotlar yozilishi bilanoq xabar qilinadi va keyinchalik standart Linux funksiyasidan foydalangan holda ma'lumotlar diskining o'ziga o'chiriladi. Bu kichik portlashlarda yozishda milya OSD-lariga SSD-larga o'xshash yozish kechikishini ta'minlash imkonini beradi. Kechiktirilgan qayta yozish, shuningdek, yadroning o'zi ularni birlashtirish yoki mavjud disk boshlariga o'z platalari orqali yanada maqbulroq yo'l tanlashga imkon berish umidi bilan disk kiritish-chiqarish so'rovlarini qayta tashkil qilish imkonini beradi. Aniq effekt shundaki, siz har bir diskdan to'g'ridan-to'g'ri yoki sinxron kiritish-chiqarish bilan mumkin bo'lgandan ko'ra bir oz ko'proq I/U ni siqib chiqara olasiz.

Biroq, agar ma'lum bir Ceph klasteriga kiruvchi yozuvlar hajmi asosiy disklarning barcha imkoniyatlaridan oshsa, ma'lum bir muammo paydo bo'ladi. Ushbu stsenariyda diskka yozishni kutayotgan kutilayotgan kiritish-chiqarish operatsiyalarining umumiy soni nazoratsiz o'sishi va kirish/chiqarish navbatlarining butun diskni va Ceph navbatlarini to'ldirishiga olib kelishi mumkin. O'qish so'rovlariga ayniqsa ta'sir qiladi, chunki ular yozish so'rovlari o'rtasida qolib ketadi, bu esa asosiy diskka o'tish uchun bir necha soniya vaqt olishi mumkin.

Ushbu muammoni bartaraf etish uchun Ceph WBThrottle deb nomlangan fayllarni saqlashga o'rnatilgan qayta yozishni qisqartirish mexanizmiga ega. U navbatga turishi va tozalash jarayonini yadroning o'zi yoqilganligi sababli tabiiy ravishda sodir bo'ladiganidan erta boshlashi mumkin bo'lgan dangasa yozish kiritish-chiqarishning umumiy miqdorini cheklash uchun mo'ljallangan. Afsuski, sinov shuni ko'rsatadiki, standart qiymatlar hali ham mavjud xatti-harakatlarni o'qish kechikishiga ta'sirni kamaytiradigan darajaga tushira olmaydi. Tuzatishlar bu xatti-harakatni o'zgartirishi va umumiy yozish navbati uzunligini qisqartirishi va bu ta'sirni kamroq jiddiy qilishi mumkin. Shu bilan birga, o'zaro kelishuv mavjud: navbatda turishga ruxsat berilgan yozuvlarning umumiy sonini kamaytirish orqali siz yadroning o'zi kirish so'rovlarini buyurtma qilishda uning samaradorligini oshirish qobiliyatini kamaytirishingiz mumkin. Muayyan foydalanish holatlari, ish yuklari va ularga mos ravishda sozlash uchun sizga ko'proq nima kerakligi haqida bir oz o'ylab ko'rishga arziydi.

Bunday orqada qoldirilgan yozish navbatining chuqurligini nazorat qilish uchun siz WBThrottle sozlamalari yordamida ajoyib kiritish-chiqarish operatsiyalarining umumiy maksimal sonini kamaytirishingiz yoki yadroingizning blok darajasida ajoyib operatsiyalar uchun maksimal qiymatni kamaytirishingiz mumkin. Ikkalasi ham bir xil xatti-harakatlarni samarali boshqarishi mumkin va sizning afzalliklaringiz ushbu sozlamani amalga oshirish uchun asos bo'ladi.
Shuni ham ta'kidlash kerakki, Cephning operatsion ustuvor tizimi disk darajasida qisqaroq so'rovlar uchun samaraliroqdir. Umumiy navbatni ma'lum bir diskka qisqartirish orqali navbatning asosiy joyi Cephga o'tadi, u erda kiritish/chiqarish operatsiyasining ustuvorligi ustidan ko'proq nazoratga ega bo'ladi. Quyidagi misolni ko'rib chiqing:

echo 8 > /sys/block/sda/queue/nr_requests

http://onreader.mdl.ru/MasteringCeph/content/Ch09.html#030202

Umumiy

Avtomobilingizni yumshoq va ipakdek qilish uchun yana bir nechta yadro sozlamalari va uskunaning ishlashini biroz qisqartirish

cat /etc/sysctl.d/60-ceph2.conf

 kernel.pid_max = 4194303
#Дисков в каждой машине по 25, потому рассчитывали что процессов будет много
kernel.threads-max=2097152
# Тредов, естессно, тоже.
vm.max_map_count=524288
# Увеличили количество областей карты памяти процесса. 
# Как следует из документации по ядерным переменным 
# Области карты памяти используется как побочный эффект вызова
# malloc, напрямую с помощью mmap, mprotect и madvise, а также при загрузке
# общих библиотек.
fs.aio-max-nr=50000000
# Подтюним параметры input-output
# Ядро Linux предоставляет функцию асинхронного неблокирующего ввода-вывода (AIO),
# которая позволяет процессу инициировать несколько операций ввода-вывода
# одновременно, не дожидаясь завершения какой-либо из них. 
# Это помогает повысить производительность приложений, 
# которые могут перекрывать обработку и ввод-вывод.
# Параметр aio-max-nr определяет максимальное количество допустимых 
# одновременных запросов.
vm.min_free_kbytes=1048576
# минимальный размер свободной памяти который необходимо поддерживать.
# Выставлен 1Gb, чего вполне достаточно для работы операционной системы, 
# и позволяет избегать OOM Killer для процессов OSD. Хотя памяти и так
# как у дурака фантиков, но запас карман не тянет
vm.swappiness=10
# Говорим использовать своп если осталось свободным 10% памяти.
# На машинах 128G оперативы, и 10% это 12 Гигов. Более чем достаточно для работы.
# Штатный параметр в 60% заставлял тормозить систему, залезая в своп,
# когда есть еще куча свободной памяти
vm.vfs_cache_pressure=1000
# Увеличиваем со штатных 100. Заставляем ядро активнее выгружать
# неиспользуемые страницы памяти из кеша.
vm.zone_reclaim_mode=0
# Позволяет  устанавливать более или менее агрессивные подходы к
# восстановлению памяти, когда в зоне заканчивается память. 
# Если он установлен на ноль, то не происходит восстановление зоны.
# Для файловых серверов или рабочих нагрузок
# выгодно, если их данные кэшированы, zone_reclaim_mode
# оставить отключенным, поскольку эффект кэширования, 
# вероятно, будет более важным, чем местонахождение данных.
vm.dirty_ratio=20
# Процент оперативной памяти, который можно выделить под "грязные" страницы
# Вычисляли из примерного расчета: 
# В система 128 гигов памяти.
# Примерно по 20 дисков SSD, у которых в настройках CEPH указано 
# выделять под кэширование по 3G оперативы.
# Примерно по 40 дисков HDD, для которых этот параметр равен 1G
# 20% от 128 это 25.6 гигов. Итого, в случае максимальной утилизации памяти,
# для системы останется 2.4G памяти. Чего ей должно хватить чтоб выжить и дождаться
# стука копыт кавалерии - то есть пришествия DevOps который все починит.
vm.dirty_background_ratio=3
# процент системной памяти, который можно заполнить dirty pages до того,
# как фоновые процессы pdflush/flush/kdmflush запишут их на диск
fs.file-max=524288
# Ну и открытых файлов у нас,вероятно, будет сильно больше, чем указано по дефолту. 

CEPHga botirish

Men batafsilroq to'xtalib o'tmoqchi bo'lgan sozlamalar:

cat /etc/ceph/ceph.conf

osd:
journal_aio: true               # Три параметра, включающие 
journal_block_align: true       # прямой i/o
journal_dio: true               # на журнал
journal_max_write_bytes: 1073714824 # Немного растянем максимальный размер
# разово записываемой операции в журнал
journal_max_write_entries: 10000    # Ну и количество одновременных записей
journal_queue_max_bytes: 10485760000 
journal_queue_max_ops: 50000
rocksdb_separate_wal_dir: true      # Решили делать отдельный wal                                                                            
# Даже попытались выбить под это дело                                                                                                                                                                                     
# NVMe
bluestore_block_db_create: true     # Ну и под журнал отдельное устройство
bluestore_block_db_size: '5368709120 #5G'
bluestore_block_wal_create: true
bluestore_block_wal_size: '1073741824   #1G' 
bluestore_cache_size_hdd: '3221225472   # 3G' 
# большой объем оперативы позволяет 
# хранить достаточно большие объемы
bluestore_cache_size_ssd: '9663676416   # 9G' 
keyring: /var/lib/ceph/osd/ceph-$id/keyring
osd_client_message_size_cap: '1073741824 #1G'
osd_disk_thread_ioprio_class: idle
osd_disk_thread_ioprio_priority: 7
osd_disk_threads: 2 # количество тредов у демона на один диск
osd_failsafe_full_ratio: 0.95
osd_heartbeat_grace: 5
osd_heartbeat_interval: 3
osd_map_dedup: true
osd_max_backfills: 2 # количество одновременных операций заполнения на один ОСД.
osd_max_write_size: 256
osd_mon_heartbeat_interval: 5
osd_op_threads: 16
osd_op_num_threads_per_shard: 1
osd_op_num_threads_per_shard_hdd: 2
osd_op_num_threads_per_shard_ssd: 2
osd_pool_default_min_size: 1     # Особенности жадности. Очень быстро стало
osd_pool_default_size: 2         # нехватать места, потому как временное                                                                                                                                                      
# решение приняли уменьшение количество 
# реплик данных
osd_recovery_delay_start: 10.000000
osd_recovery_max_active: 2
osd_recovery_max_chunk: 1048576
osd_recovery_max_single_start: 3
osd_recovery_op_priority: 1
osd_recovery_priority: 1            # параметр регулируем по необходимости на ходу
osd_recovery_sleep: 2
osd_scrub_chunk_max: 4

12.2.12 versiyasida QA uchun sinovdan o'tgan ba'zi parametrlar ceph 12.2.2 versiyasida yo'q, masalan osd_recovery_threads. Shu sababli, rejalar ishlab chiqarishni 12.2.12 ga yangilashni o'z ichiga oladi. Amaliyot shuni ko'rsatdiki, 12.2.2 va 12.2.12 versiyalari bir klasterda mos keladi, bu esa yangilanishlarni siljitish imkonini beradi.

Sinov klasteri

Tabiiyki, sinov uchun jangdagi kabi bir xil versiyaga ega bo'lish kerak edi, lekin men klaster bilan ishlashni boshlaganimda, omborda faqat yangisi mavjud edi. Ko'rib chiqqach, kichik versiyada nimani ko'rishingiz mumkin, unchalik katta emas (1393 qarshi konfiguratsiyadagi chiziqlar 1436 yangi versiyada), biz yangisini sinab ko'rishni boshlashga qaror qildik (baribir yangilash, nega eski keraksiz narsalar bilan borish kerak)

Biz eski versiyani ortda qoldirmoqchi bo'lgan yagona narsa - bu paket seph-joylashtirish chunki ba'zi yordamchi dasturlar (va ba'zi xodimlar) uning sintaksisiga moslashtirilgan. Yangi versiya butunlay boshqacha edi, lekin klasterning o'zi ishlashiga ta'sir qilmadi va u versiyada qoldirildi 1.5.39

Ceph-disk buyrug'i uning eskirganligi va seph-volume buyrug'idan foydalanishi aniq aytilganligi sababli, azizlar, biz eskirganlarga vaqt sarflamasdan, ushbu buyruq yordamida OSD-larni yaratishni boshladik.

Reja ikkita SSD drayverlarining oynasini yaratish edi, unda biz OSD jurnallarini joylashtiramiz, ular o'z navbatida milya SASlarida joylashgan. Shunday qilib, jurnali bo'lgan disk tushib qolsa, biz o'zimizni ma'lumotlar bilan bog'liq muammolardan himoya qila olamiz.

Biz hujjatlarga muvofiq klaster yaratishni boshladik

cat /etc/ceph/ceph.conf

root@ceph01-qa:~# cat /etc/ceph/ceph.conf # положили заранее подготовленный конфиг
[client]
rbd_cache = true
rbd_cache_max_dirty = 50331648
rbd_cache_max_dirty_age = 2
rbd_cache_size = 67108864
rbd_cache_target_dirty = 33554432
rbd_cache_writethrough_until_flush = true
rbd_concurrent_management_ops = 10
rbd_default_format = 2
[global]
auth_client_required = cephx
auth_cluster_required = cephx
auth_service_required = cephx
cluster network = 10.10.10.0/24
debug_asok = 0/0
debug_auth = 0/0
debug_buffer = 0/0
debug_client = 0/0
debug_context = 0/0
debug_crush = 0/0
debug_filer = 0/0
debug_filestore = 0/0
debug_finisher = 0/0
debug_heartbeatmap = 0/0
debug_journal = 0/0
debug_journaler = 0/0
debug_lockdep = 0/0
debug_mon = 0/0
debug_monc = 0/0
debug_ms = 0/0
debug_objclass = 0/0
debug_objectcatcher = 0/0
debug_objecter = 0/0
debug_optracker = 0/0
debug_osd = 0/0
debug_paxos = 0/0
debug_perfcounter = 0/0
debug_rados = 0/0
debug_rbd = 0/0
debug_rgw = 0/0
debug_throttle = 0/0
debug_timer = 0/0
debug_tp = 0/0
fsid = d0000000d-4000-4b00-b00b-0123qwe123qwf9
mon_host = ceph01-q, ceph02-q, ceph03-q
mon_initial_members = ceph01-q, ceph02-q, ceph03-q
public network = 8.8.8.8/28 # адрес изменен, естественно ))
rgw_dns_name = s3-qa.mycompany.ru # и этот адрес измен
rgw_host = s3-qa.mycompany.ru # и этот тоже
[mon]
mon allow pool delete = true
mon_max_pg_per_osd = 300 # больше трехсот плейсмент групп
# на диск не решились
# хотя параметр, естественно, зависит от количества пулов,
# их размеров и количества OSD. Иметь мало но здоровых PG
# тоже не лучший выбор - страдает точность балансировки
mon_osd_backfillfull_ratio = 0.9
mon_osd_down_out_interval = 5
mon_osd_full_ratio = 0.95 # пока для SSD дисков местом для их
# журнала является тот-же девайс что и для ОСД
# решили что 5% от диска (который сам размером 1.2Tb)
#  должно вполне хватить, и коррелирует с параметром
# bluestore_block_db_size плюс вариативность на большие 
# плейсмент группы
mon_osd_nearfull_ratio = 0.9
mon_pg_warn_max_per_osd = 520
[osd]
bluestore_block_db_create = true
bluestore_block_db_size = 5368709120 #5G
bluestore_block_wal_create = true
bluestore_block_wal_size = 1073741824 #1G
bluestore_cache_size_hdd = 3221225472 # 3G
bluestore_cache_size_ssd = 9663676416 # 9G
journal_aio = true
journal_block_align = true
journal_dio = true
journal_max_write_bytes = 1073714824
journal_max_write_entries = 10000
journal_queue_max_bytes = 10485760000
journal_queue_max_ops = 50000
keyring = /var/lib/ceph/osd/ceph-$id/keyring
osd_client_message_size_cap = 1073741824 #1G
osd_disk_thread_ioprio_class = idle
osd_disk_thread_ioprio_priority = 7
osd_disk_threads = 2
osd_failsafe_full_ratio = 0.95
osd_heartbeat_grace = 5
osd_heartbeat_interval = 3
osd_map_dedup = true
osd_max_backfills = 4
osd_max_write_size = 256
osd_mon_heartbeat_interval = 5
osd_op_num_threads_per_shard = 1
osd_op_num_threads_per_shard_hdd = 2
osd_op_num_threads_per_shard_ssd = 2
osd_op_threads = 16
osd_pool_default_min_size = 1
osd_pool_default_size = 2
osd_recovery_delay_start = 10.0
osd_recovery_max_active = 1
osd_recovery_max_chunk = 1048576
osd_recovery_max_single_start = 3
osd_recovery_op_priority = 1
osd_recovery_priority = 1
osd_recovery_sleep = 2
osd_scrub_chunk_max = 4
osd_scrub_chunk_min = 2
osd_scrub_sleep = 0.1
rocksdb_separate_wal_dir = true

# создаем мониторы
root@ceph01-qa:~#ceph-deploy mon create ceph01-q
# генерируем ключи для аутентификации нод в кластере
root@ceph01-qa:~#ceph-deploy gatherkeys ceph01-q
# Это если поштучно. Если у нас несколько машин доступны - те, которые описаны в конфиге в секции 
# mon_initial_members = ceph01-q, ceph02-q, ceph03-q
# можно запустить эти две команды в виде одной
root@ceph01-qa:~#ceph-deploy mon create-initial
# Положим ключи в указанные в конфиге места
root@ceph01-qa:~#cat ceph.bootstrap-osd.keyring > /var/lib/ceph/bootstrap-osd/ceph.keyring 
root@ceph01-qa:~#cat ceph.bootstrap-mgr.keyring > /var/lib/ceph/bootstrap-mgr/ceph.keyring 
root@ceph01-qa:~#cat ceph.bootstrap-rgw.keyring > /var/lib/ceph/bootstrap-rgw/ceph.keyring
# создадим ключ для управления кластером
root@ceph01-qa:~#ceph-deploy admin ceph01-q
# и менеджер, плагинами управлять
root@ceph01-qa:~#ceph-deploy mgr create ceph01-q

12.2.12 klaster versiyasi bilan ceph-deploy-ning ushbu versiyasi bilan ishlashda men qoqilgan birinchi narsa dasturiy ta'minot reydida db bilan OSD yaratishga urinishda xatolik bo'ldi -

root@ceph01-qa:~#ceph-volume lvm create --bluestore --data /dev/sde --block.db /dev/md0
blkid could not detect a PARTUUID for device: /dev/md1

Haqiqatan ham, blkid PARTUUIDga o'xshamaydi, shuning uchun men bo'limlarni qo'lda yaratishim kerak edi:

root@ceph01-qa:~#parted /dev/md0 mklabel GPT 
# разделов будет много, 
# без GPT их создать не получится
# размер раздела мы указали в конфиге выше = bluestore_block_db_size: '5368709120 #5G'
# Дисков у меня 20 под OSD, руками создавать разделы лень
# потому сделал цикл
root@ceph01-qa:~#for i in {1..20}; do echo -e "nnnn+5Gnw" | fdisk /dev/md0; done

Hammasi tayyor bo'lib tuyuladi, biz yana OSD yaratishga harakat qilamiz va quyidagi xatoga yo'l qo'yamiz (aytmoqchi, jangda takrorlanmagan)

WAL yo'lini ko'rsatmasdan, lekin JB ni ko'rsatmasdan bluestore tipidagi OSD yaratishda

root@ceph01-qa:~#ceph-volume lvm create --bluestore --data /dev/sde --block.db /dev/md0
stderr: 2019-04-12 10:39:27.211242 7eff461b6e00 -1 bluestore(/var/lib/ceph/osd/ceph-0/) _read_fsid unparsable uuid
stderr: 2019-04-12 10:39:27.213185 7eff461b6e00 -1 bdev(0x55824c273680 /var/lib/ceph/osd/ceph-0//block.wal) open open got: (22) Invalid argument
stderr: 2019-04-12 10:39:27.213201 7eff461b6e00 -1 bluestore(/var/lib/ceph/osd/ceph-0/) _open_db add block device(/var/lib/ceph/osd/ceph-0//block.wal) returned: (22) Invalid argument
stderr: 2019-04-12 10:39:27.999039 7eff461b6e00 -1 bluestore(/var/lib/ceph/osd/ceph-0/) mkfs failed, (22) Invalid argument
stderr: 2019-04-12 10:39:27.999057 7eff461b6e00 -1 OSD::mkfs: ObjectStore::mkfs failed with error (22) Invalid argument
stderr: 2019-04-12 10:39:27.999141 7eff461b6e00 -1  ** ERROR: error creating empty object store in /var/lib/ceph/osd/ceph-0/: (22) Invalid argumen

Bundan tashqari, agar siz xuddi shu oynada (yoki boshqa joyda, siz tanlagan joyda) WAL uchun boshqa bo'lim yaratsangiz va uni OSD yaratishda belgilasangiz, unda hamma narsa muammosiz ketadi (alohida WAL paydo bo'lishidan tashqari, siz buni qilmasligingiz mumkin). xohlagan).

Ammo, WAL-ni NVMe-ga ko'chirish hali ham uzoq rejalarda bo'lganligi sababli, amaliyot ortiqcha bo'lib chiqmadi.

root@ceph01-qa:~#ceph-volume lvm create --bluestore --data /dev/sdf --block.wal  /dev/md0p2 --block.db /dev/md1p2

Monitorlar, menejerlar va OSD yaratildi. Endi men ularni boshqacha guruhlashni xohlayman, chunki men har xil turdagi disklarga ega bo'lishni rejalashtirmoqdaman - SSD-da tez hovuzlar va SAS kreplarida katta, lekin sekin hovuzlar.

Faraz qilaylik, serverlarda 20 ta disk bor, birinchi o'ntasi bitta tur, ikkinchisi boshqa.
Dastlabki, standart karta quyidagicha ko'rinadi:

ceph osd daraxti

root@ceph01-q:~# ceph osd daraxti
ID SINFI Og'irligi turi nomi STATUS QAYTA OG'IRLIK PRI-AFF
-1 14.54799 ildiz standarti
-3 9.09200 xost ceph01-q
0 ssd 1.00000 osd.0 yuqoriga 1.00000 1.00000
1 ssd 1.00000 osd.1 yuqoriga 1.00000 1.00000
2 ssd 1.00000 osd.2 yuqoriga 1.00000 1.00000
3 ssd 1.00000 osd.3 yuqoriga 1.00000 1.00000
4 hdd 1.00000 osd.4 yuqoriga 1.00000 1.00000
5 hdd 0.27299 osd.5 yuqoriga 1.00000 1.00000
6 hdd 0.27299 osd.6 yuqoriga 1.00000 1.00000
7 hdd 0.27299 osd.7 yuqoriga 1.00000 1.00000
8 hdd 0.27299 osd.8 yuqoriga 1.00000 1.00000
9 hdd 0.27299 osd.9 yuqoriga 1.00000 1.00000
10 hdd 0.27299 osd.10 yuqoriga 1.00000 1.00000
11 hdd 0.27299 osd.11 yuqoriga 1.00000 1.00000
12 hdd 0.27299 osd.12 yuqoriga 1.00000 1.00000
13 hdd 0.27299 osd.13 yuqoriga 1.00000 1.00000
14 hdd 0.27299 osd.14 yuqoriga 1.00000 1.00000
15 hdd 0.27299 osd.15 yuqoriga 1.00000 1.00000
16 hdd 0.27299 osd.16 yuqoriga 1.00000 1.00000
17 hdd 0.27299 osd.17 yuqoriga 1.00000 1.00000
18 hdd 0.27299 osd.18 yuqoriga 1.00000 1.00000
19 hdd 0.27299 osd.19 yuqoriga 1.00000 1.00000
-5 5.45599 xost ceph02-q
20 ssd 0.27299 osd.20 yuqoriga 1.00000 1.00000
21 ssd 0.27299 osd.21 yuqoriga 1.00000 1.00000
22 ssd 0.27299 osd.22 yuqoriga 1.00000 1.00000
23 ssd 0.27299 osd.23 yuqoriga 1.00000 1.00000
24 hdd 0.27299 osd.24 yuqoriga 1.00000 1.00000
25 hdd 0.27299 osd.25 yuqoriga 1.00000 1.00000
26 hdd 0.27299 osd.26 yuqoriga 1.00000 1.00000
27 hdd 0.27299 osd.27 yuqoriga 1.00000 1.00000
28 hdd 0.27299 osd.28 yuqoriga 1.00000 1.00000
29 hdd 0.27299 osd.29 yuqoriga 1.00000 1.00000
30 hdd 0.27299 osd.30 yuqoriga 1.00000 1.00000
31 hdd 0.27299 osd.31 yuqoriga 1.00000 1.00000
32 hdd 0.27299 osd.32 yuqoriga 1.00000 1.00000
33 hdd 0.27299 osd.33 yuqoriga 1.00000 1.00000
34 hdd 0.27299 osd.34 yuqoriga 1.00000 1.00000
35 hdd 0.27299 osd.35 yuqoriga 1.00000 1.00000
36 hdd 0.27299 osd.36 yuqoriga 1.00000 1.00000
37 hdd 0.27299 osd.37 yuqoriga 1.00000 1.00000
38 hdd 0.27299 osd.38 yuqoriga 1.00000 1.00000
39 hdd 0.27299 osd.39 yuqoriga 1.00000 1.00000
-7 6.08690 xost ceph03-q
40 ssd 0.27299 osd.40 yuqoriga 1.00000 1.00000
41 ssd 0.27299 osd.41 yuqoriga 1.00000 1.00000
42 ssd 0.27299 osd.42 yuqoriga 1.00000 1.00000
43 ssd 0.27299 osd.43 yuqoriga 1.00000 1.00000
44 hdd 0.27299 osd.44 yuqoriga 1.00000 1.00000
45 hdd 0.27299 osd.45 yuqoriga 1.00000 1.00000
46 hdd 0.27299 osd.46 yuqoriga 1.00000 1.00000
47 hdd 0.27299 osd.47 yuqoriga 1.00000 1.00000
48 hdd 0.27299 osd.48 yuqoriga 1.00000 1.00000
49 hdd 0.27299 osd.49 yuqoriga 1.00000 1.00000
50 hdd 0.27299 osd.50 yuqoriga 1.00000 1.00000
51 hdd 0.27299 osd.51 yuqoriga 1.00000 1.00000
52 hdd 0.27299 osd.52 yuqoriga 1.00000 1.00000
53 hdd 0.27299 osd.53 yuqoriga 1.00000 1.00000
54 hdd 0.27299 osd.54 yuqoriga 1.00000 1.00000
55 hdd 0.27299 osd.55 yuqoriga 1.00000 1.00000
56 hdd 0.27299 osd.56 yuqoriga 1.00000 1.00000
57 hdd 0.27299 osd.57 yuqoriga 1.00000 1.00000
58 hdd 0.27299 osd.58 yuqoriga 1.00000 1.00000
59 hdd 0.89999 osd.59 yuqoriga 1.00000 1.00000

Keling, blackjack va boshqa narsalar bilan o'z virtual stendlarimiz va serverlarimizni yarataylik:

root@ceph01-q:~#ceph osd crush add-bucket rack01 root #создали новый root
root@ceph01-q:~#ceph osd crush add-bucket ceph01-q host #создали новый хост
root@ceph01-q:~#ceph osd crush move ceph01-q root=rack01 #переставили сервер в другую стойку
root@ceph01-q:~#osd crush add 28 1.0 host=ceph02-q # Добавили ОСД в сервер
# Если криво создали то можно удалить
root@ceph01-q:~# ceph osd crush remove osd.4
root@ceph01-q:~# ceph osd crush remove rack01

Biz duch kelgan muammolar jang klaster, yangi xost yaratish va uni mavjud rafga ko'chirishga harakat qilganda - buyrug'i ceph osd crush move ceph01-host root=rack01 qotib qoldi va monitorlar birin-ketin tusha boshladi. Oddiy CTRL+C tugmalari yordamida buyruqni bekor qilish klasterni tiriklar dunyosiga qaytardi.

Qidiruv bu muammoni ko'rsatdi: https://tracker.ceph.com/issues/23386

Yechim crushmapni to'kib tashlash va u erdan qismni olib tashlash edi qoida replicated_rubesset

root@ceph01-prod:~#ceph osd getcrushmap -o crushmap.row #Дампим карту в сыром виде
root@ceph01-prod:~#crushtool -d crushmap.row -o crushmap.txt #переводим в читаемый
root@ceph01-prod:~#vim  crushmap.txt #редактируем, удаляя rule replicated_ruleset
root@ceph01-prod:~#crushtool -c crushmap.txt  -o new_crushmap.row #компилируем обратно
root@ceph01-prod:~#ceph osd setcrushmap -i  new_crushmap.row #загружаем в кластер

Akhtung: Ushbu operatsiya OSDlar orasidagi joylashtirish guruhining qayta muvozanatlanishiga olib kelishi mumkin. Bu biz uchun bunga sabab bo'ldi, lekin juda kam.

Va sinov klasterida biz duch kelgan g'alati narsa shundaki, OSD-serverni qayta ishga tushirgandan so'ng, ular yangi serverlar va tokchalarga ko'chirilganligini unutib, ildiz standartiga qaytishdi.
Natijada, biz ssd drayverlari uchun alohida ildiz va shpindelli drayverlar uchun alohida ildiz yaratgan yakuniy sxemani yig'ib, biz barcha OSD-larni javonlarga joylashtirdik va oddiy ildizni o'chirib tashladik. Qayta ishga tushirilgandan so'ng, OSD joyida qola boshladi.
Keyinchalik hujjatlarni ko'rib chiqqandan so'ng, biz ushbu xatti-harakatlar uchun javobgar bo'lgan parametrni topdik. U haqida ikkinchi qismda

Disk turi bo'yicha turli guruhlarni qanday yaratdik.

Boshlash uchun biz ikkita ildiz yaratdik - ssd va hdd uchun

root@ceph01-q:~#ceph osd crush add-bucket ssd-root root
root@ceph01-q:~#ceph osd crush add-bucket hdd-root root

Serverlar jismonan turli stendlarda joylashganligi sababli, biz qulaylik uchun ularda serverlar joylashgan stendlarni yaratdik.

# Стойки:
root@ceph01-q:~#ceph osd crush add-bucket ssd-rack01 rack
root@ceph01-q:~#ceph osd crush add-bucket ssd-rack02 rack
root@ceph01-q:~#ceph osd crush add-bucket ssd-rack03 rack
root@ceph01-q:~#ceph osd crush add-bucket hdd-rack01 rack
root@ceph01-q:~#ceph osd crush add-bucket hdd-rack01 rack
root@ceph01-q:~#ceph osd crush add-bucket hdd-rack01 rack
# Сервера
root@ceph01-q:~#ceph osd crush add-bucket ssd-ceph01-q host
root@ceph01-q:~#ceph osd crush add-bucket ssd-ceph02-q host
root@ceph01-q:~#ceph osd crush add-bucket ssd-ceph03-q host
root@ceph01-q:~#ceph osd crush add-bucket hdd-ceph01-q host
root@ceph01-q:~#ceph osd crush add-bucket hdd-ceph02-q host
root@ceph01-q:~#ceph osd crush add-bucket hdd-ceph02-q host

va disklarni turlari bo'yicha turli serverlarga tarqatdi

root@ceph01-q:~# Диски с 0 по 3 это SSD, находятся в ceph01-q, ставим их в сервер 
root@ceph01-q:~#  ssd-ceph01-q
root@ceph01-q:~#ceph osd crush add 0 1 host=ssd-ceph01-q
root@ceph01-q:~#ceph osd crush add 1 1 host=ssd-ceph01-q
root@ceph01-q:~#ceph osd crush add 2 1 host=ssd-ceph01-q
root@ceph01-q:~#ceph osd crush add 3 1 host=ssd-ceph01-q
root-ceph01-q:~# аналогично с другими серверами

Disklarni ssd-root va hdd-root marshrutlari orasida tarqatib, biz root-standartni bo'sh qoldirdik, shuning uchun uni o'chirib tashlashimiz mumkin.

root-ceph01-q:~#ceph osd crush remove default

Keyinchalik, biz yaratilayotgan hovuzlarga bog'laydigan tarqatish qoidalarini yaratishimiz kerak - qoidalarda biz qaysi ildizlar bizning hovuz ma'lumotlarimizni joylashtirishi mumkinligini va replikaning o'ziga xoslik darajasini ko'rsatamiz - masalan, replikalar turli serverlarda bo'lishi kerak, yoki turli xil tokchalarda (agar bizda shunday taqsimot mavjud bo'lsa, siz hatto turli ildizlarda ham bo'lishingiz mumkin)

Turni tanlashdan oldin hujjatlarni o'qib chiqish yaxshiroqdir:
http://docs.ceph.com/docs/jewel/rados/operations/crush-map/#crushmaprules

root-ceph01-q:~#ceph osd crush rule create-simple rule-ssd ssd-root host firstn
root-ceph01-q:~#ceph osd crush rule create-simple rule-hdd hdd-root host firstn
root-ceph01-q:~# Мы указали два правила, в которых данные реплицируются 
root-ceph01-q:~# между хостами - то есть реплика должна лежать на другом хосте,
root-ceph01-q:~# даже если они в одной стойке
root-ceph01-q:~# В продакшене, если есть возможность, лучше распределить хосты
root-ceph01-q:~# по стойкам и указать распределять реплики по стойкам:
root-ceph01-q:~# ##ceph osd crush rule create-simple rule-ssd ssd-root rack firstn

Xo'sh, biz kelajakda virtualizatsiyamizning diskdagi tasvirlarini saqlamoqchi bo'lgan hovuzlarni yaratamiz - PROXMOX:

    root-ceph01-q:~# #ceph osd pool create {NAME} {pg_num}  {pgp_num}
root-ceph01-q:~# ceph osd pool create ssd_pool 1024 1024 
root-ceph01-q:~# ceph osd pool create hdd_pool 1024 1024

Va biz bu hovuzlarga qanday joylashtirish qoidalarini qo'llash kerakligini aytamiz

 root-ceph01-q:~#ceph osd crush rule ls # смотрим список правил
root-ceph01-q:~#ceph osd crush rule dump rule-ssd | grep rule_id #выбираем ID нужного
root-ceph01-q:~#ceph osd pool set ssd_pool crush_rule 2

Joylashtirish guruhlari sonini tanlashga sizning klasteringiz uchun oldindan mavjud bo'lgan qarashlar bilan yondashish kerak - taxminan qancha OSD bo'ladi, hovuzda qancha ma'lumotlar miqdori (umumiy hajmning foizi sifatida) bo'ladi, nima? ma'lumotlarning umumiy miqdori.

Hammasi bo'lib, diskda 300 dan ortiq joylashtirish guruhlariga ega bo'lmaslik tavsiya etiladi va kichik joylashtirish guruhlari bilan muvozanatni saqlash osonroq bo'ladi - ya'ni sizning butun hovuzingiz 10 Tb ni egallaydi va unda 10 PG bo'lsa - balanslash terabayt g'ishtlarni (pg) tashlash muammoli bo'ladi - kichik o'lchamdagi qum donalari bilan qumni chelaklarga osonroq va tengroq quying).

Ammo shuni yodda tutishimiz kerakki, PG soni qancha ko'p bo'lsa, ularning joylashishini hisoblash uchun ko'proq resurslar sarflanadi - xotira va protsessor ishlatila boshlaydi.

Qo'pol tushunish mumkin menga kalkulyator bering, CEPH hujjatlarini ishlab chiquvchilar tomonidan taqdim etilgan.

Materiallar ro'yxati:

https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data
http://www.admin-magazine.com/HPC/Articles/Linux-I-O-Schedulers
http://onreader.mdl.ru/MasteringCeph/content/Ch09.html#030202
https://tracker.ceph.com/issues/23386
https://ceph.com/pgcalc/

Manba: www.habr.com

a Izoh qo'shish