Loaʻa iā mākou ʻelima mau pahu, ʻumi hoʻololi optical, hoʻonohonoho ʻia ʻo BGP, ʻelua mau kakini SSDs a me kahi pūʻulu SAS o nā kala a me nā nui āpau, a me ka proxmox a me ka makemake e kau i nā static āpau i kā mākou waihona S3 ponoʻī. ʻAʻole pono kēia mau mea no ka virtualization, akā i ka manawa i hoʻomaka ai ʻoe e hoʻohana i ka opensource, a laila e hele i kāu leʻaleʻa a hiki i ka hopena. ʻO ka mea wale nō i hoʻopilikia iaʻu ʻo BGP. ʻAʻohe mea i loko o ka honua i ʻoi aku ke kōkua ʻole, ke kuleana ʻole a me ka moekolohe ma mua o ka BGP kūloko. A ua maopopo iaʻu e hiki koke ana mākou e komo i loko.
ʻO ka hana maʻamau - aia ʻo CEPH, ʻaʻole i hana maikaʻi loa. Pono e hana maikaʻi ʻia.
He ʻokoʻa ka puʻupuʻu i loaʻa iaʻu. Aia i loko o ʻelua pūʻulu o nā node like ʻole, me hoʻokahi mākia maʻamau e hana ana ma ke ʻano he hui a me kahi pūnaewele lehulehu. Ua hoʻopiha ʻia nā nodes me nā ʻano disks ʻehā - ʻelua ʻano SSD, i hōʻiliʻili ʻia i ʻelua mau lula hoʻonohonoho kaʻawale, a ʻelua ʻano HDD o nā ʻano nui like ʻole, i hōʻiliʻili ʻia i kahi hui ʻekolu. Ua hoʻoholo ʻia ka pilikia me nā nui like ʻole e nā paona OSD like ʻole.
Ua māhele ʻia ka hoʻonohonoho ponoʻī i ʻelua ʻāpana - hoʻoponopono ʻōnaehana hana и ka hoʻoponopono ʻana i ka CEPH ponoʻī a me kona hoonohonoho ana.
Hoʻonui OS
Leakaʻaʻike
Hoʻopili ka latency kiʻekiʻe i ka hoʻopaʻa ʻana a me ke kaulike. I ke kākau ʻana, no ka mea, ʻaʻole e loaʻa i ka mea kūʻai aku kahi pane e pili ana i kahi kākau kūleʻa a hiki i ka hoʻopaʻa ʻana o ka ʻikepili i nā hui hoʻonohonoho ʻē aʻe i ka holomua. No ka mea ʻo nā lula no ka hāʻawi ʻana i nā kope ma ka palapala CRUSH he hoʻokahi kope no kēlā me kēia host, ua hoʻohana mau ʻia ka pūnaewele.
No laila, ʻo ka mea mua aʻu i hoʻoholo ai e hana, ʻo ia ka hoʻoponopono liʻiliʻi i ka pūnaewele o kēia manawa, e like me ka hoʻāʻo ʻana e hoʻohuli iaʻu e neʻe i nā pūnaewele kaʻawale.
I ka hoʻomaka ʻana, ua wili wau i nā hoʻonohonoho kāleka pūnaewele. Hoʻomaka ma ka hoʻonohonoho ʻana i nā pila:
Hoʻohui ʻia i /etc/network/interfaces i hoʻouka ʻia nā mea a pau i luna ma ka hoʻomaka ʻana
popoki / a pela aku / pūnaewele / interface
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
Ma hope o kēlā, ma hope o ka ʻatikala hoʻokahi, hoʻomaka wau e noʻonoʻo pono i nā lima o ka kernel 4.15. Hāʻawi ʻia i nā nodes he 128G RAM, loaʻa iā mākou kahi faila hoʻonohonoho no 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 пакете. В нашем случае является плацебо, просто
# выглядит красиво)
Сpūnaewele luster ua hoʻokaʻawale ʻia ma nā kikowaena pūnaewele ʻokoʻa 10Gbps i loko o kahi pūnaewele pālahalaha ʻokoʻa. Hāʻawi ʻia kēlā me kēia mīkini me nā kāleka pūnaewele ʻelua awa mellanox Hoʻopili ʻia ʻo 10/25 Gbps i ʻelua mau hoʻololi 10Gbps. Ua hoʻokō ʻia ka hoʻohui ʻana me ka OSPF, ʻoiai ʻo ka hoʻopaʻa ʻana me ka lacp no kekahi kumu i hōʻike ʻia i ka huina o ka nui o 16 Gbps, ʻoiai ua hoʻohana pono ʻo ospf i nā kakini ʻelua ma kēlā me kēia mīkini. ʻO nā hoʻolālā hou e hoʻohana i ka ROCE ma kēia mau melanox e hōʻemi i ka latency. Pehea i hoʻonohonoho ʻia ai kēia ʻāpana o ka pūnaewele:
No ka loaʻa ʻana o nā IP waho o nā mīkini ma BGP, pono mākou i nā polokalamu - (a i ʻole, i ka manawa kākau, ʻo ia frr=6.0-1 ) e kū ana.
I ka huina, ua loaʻa i nā mīkini ʻelua mau kikowaena pūnaewele, ʻelua mau kikowaena i kēlā me kēia - he 4 mau awa. Ua nānā kekahi kāleka pūnaewele i ka hale hana me nā awa ʻelua a ua hoʻonohonoho ʻia ʻo BGP ma luna, ʻo ka lua i nānā i ʻelua mau hoʻololi like ʻole me nā awa ʻelua a ua kau ʻia ʻo OSPF ma luna.
ʻOi aku ma ka hoʻonohonoho ʻana i ka OSPF: ʻO ka hana nui e hōʻuluʻulu i ʻelua mau loulou a loaʻa ka hewa.
ʻelua mau kikowaena pūnaewele i hoʻonohonoho ʻia i loko o ʻelua mau kikowaena palahalaha maʻalahi - 10.10.10.0/24 a me 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
e ike ai na kaa i kekahi i kekahi.
diski
ʻO ka hana aʻe, ʻo ia ka hoʻomaikaʻi ʻana i ka hana disk. No SSD, ua hoʻololi au i ka mea hoʻonohonoho noop, no ka HDD — lā palena pau. Inā ʻoʻoleʻa, a laila e hana ʻo NOOP ma ke kumumanaʻo "ʻo wai ke ala mua - ʻo ia nā ʻōpala", a ma ka ʻōlelo Pelekania e like me "FIFO (First In, First Out)". Hoʻopili ʻia nā noi i ko lākou hiki ʻana mai. ʻOi aku ka maikaʻi o ka DEADLINE i ka heluhelu ʻana, a ʻo ke kaʻina hana mai ka pila e loaʻa i kahi ʻokoʻa kūʻokoʻa i ka disk i ka manawa o ka hana. No kā mākou ʻōnaehana, maikaʻi kēia - ma hope o nā mea āpau, hoʻokahi wale nō kaʻina hana me kēlā me kēia disk - ka daemon OSD.
(ʻO ka poʻe makemake e luʻu i ka I / O scheduler hiki ke heluhelu e pili ana iā ia ma aneʻi: http://www.admin-magazine.com/HPC/Articles/Linux-I-O-Schedulers
I nā ʻōlelo aʻoaʻo no ke kani ʻana i ka Linux, ʻōlelo ʻia hoʻi e hoʻonui i ka nr_request
nr_noi
Hoʻoholo ka waiwai o nr_requests i ka nui o nā noi I/O i hoʻopaʻa ʻia ma mua o ka hoʻouna ʻana / loaʻa ʻana o ka ʻikepili I/O i ka mea poloka, inā ʻoe e hoʻohana ana i kahi kāleka RAID / Block Device hiki ke mālama i kahi queue nui aʻe ma mua o ka mea a ka I Hoʻonohonoho ʻia ka mea hoʻonohonoho /O, ʻo ka hoʻonui ʻana i ka waiwai o nr_requests hiki ke kōkua i ka hoʻomaikaʻi ʻana a me ka hōʻemi ʻana i ka ukana kikowaena inā loaʻa ka nui o ka I/O ma ke kikowaena. Inā ʻoe e hoʻohana nei i ka Deadline a i ʻole CFQ ma ke ʻano he mea hoʻonohonoho, manaʻo ʻia ʻoe e hoʻonohonoho i ka waiwai nr_request i 2 mau manawa o ka nui o ka hohonu o ka queue.
AKA! ʻO nā kamaʻāina ponoʻī, nā mea hoʻomohala o CEPH, e hōʻoiaʻiʻo iā mākou e ʻoi aku ka maikaʻi o kā lākou ʻōnaehana o nā mea nui.
WBThrottle a/a i ʻole nr_requests
WBThrottle a/a i ʻole nr_requests
Hoʻohana ka waihona waihona i ka I/O i hoʻopaʻa ʻia no ke kākau ʻana; lawe mai kēia i nā pono he nui inā aia ka waihona waihona waihona ma ka media wikiwiki. Hoʻomaopopo ʻia nā noi o nā mea kūʻai aku i ka wā i kākau ʻia ai ka ʻikepili i ka log, a laila holoi ʻia i ka disk data ponoʻī ma hope me ka hoʻohana ʻana i ka hana Linux maʻamau. ʻO kēia ka mea e hiki ai i nā OSD spindle drive ke hāʻawi i ka latency kākau e like me SSDs i ke kākau ʻana i nā puʻupuʻu liʻiliʻi. ʻO kēia hoʻihoʻi lohi ʻana e hiki ai i ka kernel ponoʻī ke hoʻonohonoho hou i nā noi I/O i ka disk, me ka manaʻolana o ka hoʻohui ʻana iā lākou a i ʻole e ʻae i nā poʻo disk e hele i kahi ala ʻoi aku ka maikaʻi ma luna o kā lākou mau pā. ʻO ka hopena hope, hiki iā ʻoe ke ʻoki iki i ka I/O ma waho o kēlā me kēia disk ma mua o ka hiki me ka I/O pololei a i ʻole synchronous.
Eia nō naʻe, ke kū nei kekahi pilikia inā ʻoi aku ka nui o nā mea e komo mai ana i kahi hui Ceph i hāʻawi ʻia ma mua o nā mana āpau o nā disks lalo. Ma ia ʻano hiʻohiʻona, hiki i ka huina o nā I/Os e kali ana e kākau ʻia i ka disk hiki ke ulu me ka ʻole o ka hoʻopaʻa ʻana a hopena i kahi queue I/O e hoʻopiha ana i ka disk a me nā queues Ceph. He ʻino loa nā noi heluhelu no ka mea ua paʻa lākou ma waena o nā noi kākau, hiki ke lawe i kekahi mau kekona i ka holo mua.
No ka hoʻopau ʻana i kēia pilikia, loaʻa iā Ceph kahi mea kākau throttling kākau i kūkulu ʻia i loko o ka waihona waihona i kapa ʻia ʻo WBThrottle. Hoʻolālā ʻia ia e kaupalena i ka nui o ka I/O kākau palaualelo e hiki ke hoʻomaka a hoʻomaka i kā lākou kaʻina flush ma mua o ka mea maʻamau e hiki ai i ka kernel ponoʻī. ʻO ka mea pōʻino, hōʻike ʻia ka hoʻāʻo ʻana ʻaʻole hiki ke ʻoki ʻia ka hana i kahi pae e hōʻemi i kēia hopena i ka latency heluhelu. Hiki i ka tweaking ke hoʻololi i kēia ʻano a hōʻemi i ka lōʻihi o ka queue kākau holoʻokoʻa a hiki ke hoʻemi ʻia ka hopena. Eia nō naʻe, aia kahi kālepa: ma ka hōʻemi ʻana i ka nui o nā moʻolelo i ʻae ʻia e queued, hiki iā ʻoe ke hōʻemi i ka hiki o ka kernel ponoʻī e hoʻonui i kona pono i ke kauoha ʻana i nā noi komo. Pono e noʻonoʻo iki e pili ana i kāu mea e pono ai no kāu noi kikoʻī, nā haʻahaʻa hana, a me ka hoʻoponopono ʻana i ke kūlike.
No ka hoʻomalu ʻana i ka hohonu o ia queue kākau hope, hiki iā ʻoe ke hoʻemi i ka nui o ka backlog o I/Os ma o ka hoʻohana ʻana i ka hoʻonohonoho WBThrottle, a i ʻole e hoʻemi i ka waiwai kiʻekiʻe no nā backlogs ma ka pae poloka loa o kāu kernel. Hiki i nā mea ʻelua ke hoʻomalu pono i ka ʻano like, a ʻo kāu makemake ke kumu no ka hoʻokō ʻana i kēia hoʻonohonoho.
Pono e hoʻomaopopo ʻia ʻoi aku ka maikaʻi o ka ʻōnaehana precedence hana a Ceph no nā nīnau kiʻekiʻe disk-level. I ka ho'ēmiʻana i ka pila holoʻokoʻa i kahi diski i hāʻawiʻia, ua neʻeʻia ka wahi pila nui i Ceph, kahi iʻoi aku ka mana ma luna o ka mea nui o ka hana I/O. E noʻonoʻo i kēia laʻana:
A ʻo kekahi mau mea hou kernel tweaks e hoʻomaʻemaʻe i kāu kaʻa a siliki hoʻi e ʻoki i kahi hana hou aʻe mai ka hao.
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
# Ну и открытых файлов у нас,вероятно, будет сильно больше, чем указано по дефолту.
ʻO ka luʻu ʻana ma CEPH
Nā hoʻonohonoho aʻu e makemake ai e noʻonoʻo hou aku:
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
ʻO kekahi o nā ʻāpana i hoʻāʻo ʻia ma QA ma ka mana 12.2.12 ua nalowale i ka mana ceph 12.2.2, no ka laʻana osd_recovery_threads. No laila, ua hoʻokomo nā hoʻolālā i kahi mea hou ma ka prod i 12.2.12. Ua hōʻike ka hoʻomaʻamaʻa i ka hoʻohālikelike ʻana i hoʻokahi puʻupuʻu o nā mana 12.2.2 a me 12.2.12, e hiki ai iā ʻoe ke hana i kahi hōʻano hou.
Huina hoao
Ma keʻano maʻamau, no ka ho'āʻoʻana he mea pono e loaʻa ka mana like me ke kaua, akā i ka manawa aʻu i hoʻomaka ai e hana me ka pūpū, he mea hou wale nō ka waihona. Ma hope o ka nānā ʻana i nā mea āu e ʻike ai ma ka mana liʻiliʻi, ʻaʻole nui loa (1393 laina ma configs ku e 1436 i ka mana hou), ua hoʻoholo mākou e hoʻomaka i ka hoʻāʻo ʻana i ka mea hou (hōʻano hou, no ke aha e hele ai i nā mea kahiko)
ʻO ka mea wale nō a lākou i hoʻāʻo ai e haʻalele i ka mana kahiko ʻo ia ka pūʻolo ceph-deploy no ka mea, ua hoʻohālikelike ʻia kekahi o nā pono hana (a me kekahi o nā limahana) i kāna syntax. He ʻokoʻa loa ka mana hou, akā ʻaʻole ia i pili i ka hana o ka puʻupuʻu ponoʻī, a waiho ʻia e nā mana 1.5.39
No ka mea ke ʻōlelo maopopo nei ke kauoha ceph-disk ua hoʻopau ʻia a hoʻohana i ke kauoha ceph-volume, e nā mea aloha - ua hoʻomaka mākou e hana i ka OSD me kēia kauoha, me ka ʻole o ka pau ʻana o ka manawa ma ka mea kahiko.
ʻO ka hoʻolālā e like me kēia - e hana i kahi aniani o ʻelua SSD disks, kahi e kau ai mākou i nā lāʻau OSD, ʻo ia hoʻi, aia ma ka spindle SASs. No laila, e hōʻoia mākou i nā pilikia ʻikepili ke hāʻule ka puke puke puke.
E hana i kahi hui kila e like me ka palapala
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
ʻO ka mea mua aʻu i hina ai i ka hana o kēia mana o ceph-deploy me kahi hui o ka mana 12.2.12 he hewa i ka wā e hoʻāʻo ai e hana i kahi OSD me db ma kahi polokalamu hoʻouka -
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
ʻOiaʻiʻo, ʻaʻole hōʻike ʻo blkid iā PARTUUID, pono wau e hana i nā ʻāpana me ka lima:
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
Me he mea lā ua mākaukau nā mea a pau, ke hoʻāʻo nei mākou e hana hou i ka OSD a loaʻa ka hewa aʻe (ʻo ia, ma ke ala, ʻaʻole i hana hou ʻia i ke kaua)
i ka hana ʻana i kahi bluestore OSD me ka ʻole e kuhikuhi i ke ala i WAL, akā e kuhikuhi ana i ka db
Eia kekahi, inā ma ke aniani hoʻokahi (a i ʻole ma kahi ʻē aʻe, e koho mai) e hana i kahi ʻāpana ʻē aʻe no WAL a kuhikuhi iā ia i ka wā e hana ai i ka OSD, a laila e holo mālie nā mea āpau (koe wale nō ke ʻano o kahi WAL ʻokoʻa, ʻaʻole paha ʻoe e loaʻa. makemake ʻia).
Akā, no ka mea aia i loko o nā hoʻolālā lōʻihi e lawe mai iā WAL i NVMe, ʻaʻole nui ka hana.
Hana ʻia nā mākaʻikaʻi, nā mana a me OSD. I kēia manawa makemake wau e hui pū iā lākou ma nā ʻano like ʻole, no ka mea, hoʻolālā wau e loaʻa i nā ʻano disks like ʻole - nā loko wikiwiki ma SSD a nui, akā lohi i nā pancakes SAS.
E manaʻo mākou aia he 20 disks ma nā kikowaena, ʻo ka ʻumi mua he ʻano hoʻokahi, ʻo ka lua kekahi.
Penei ka palapala ʻāina paʻamau:
E hana mākou i kā mākou mau kīʻaha ponoʻī a me nā kikowaena me ka blackjack a me nā mea ʻē aʻe:
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
ʻO nā pilikia i loaʻa iā mākou ma kaua cluster, i ka wā e hoʻāʻo ai e hana i kahi hoʻokipa hou a hoʻoneʻe iā ia i kahi rack e kū nei - ke kauoha ceph osd crush neʻe ceph01-host root=rack01 e kau ana, a hoomaka aku la na kiai e haule pakahi. ʻO ka hoʻopau ʻana i ke kauoha me kahi CTRL+C maʻalahi i hoʻihoʻi i ka pūʻulu i ke ao o ka poʻe ola.
ʻO ka hoʻonā e hoʻolei i ka crushmap a wehe i ka ʻāpana mai laila rule replicated_ruleset
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 #загружаем в кластер
Achtung: Hiki i kēia hana ke hoʻololi hou i ka hui ma waena o nā OSD. Loaʻa iā mākou ke kumu, akā liʻiliʻi loa.
A ʻo ka mea ʻē aʻe a mākou i ʻike ai i ka pūʻulu hoʻāʻo ʻo ia ma hope o ka hoʻihoʻi hou ʻana i ka server OSD, poina iā lākou ua hoʻoneʻe ʻia lākou i nā kikowaena hou a me nā racks, a hoʻi i ke kumu paʻamau.
ʻO ka hopena, i ka hōʻuluʻulu ʻana i ka hoʻolālā hope, kahi i hana ai mākou i kahi aʻa ʻokoʻa no nā disks ssd a kaʻawale no nā spindle, ua huki mākou i nā OSD āpau ma nā pā a hoʻopau wale i ke kumu paʻamau. Ma hope o ka reboot, ua hoʻomaka nā OSD e noho ma ko lākou mau wahi. ʻO ka rummaging ma hope o ka palapala i loaʻa kahi ʻāpana i kuleana no kēia ʻano. E pili ana iā ia ma ka ʻāpana ʻelua
Pehea mākou i hana ai i nā hui like ʻole ma nā ʻano disc.
No ka hoʻomaka ʻana, hana mākou i ʻelua aʻa - no ssd a no hdd
a me nā disks i hoʻopuehu ʻia e like me kā lākou ʻano ma nā kikowaena like ʻole
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:~# аналогично с другими серверами
Ma hope o ka hoʻopuehu ʻana i nā disks ma luna o nā aʻa ssd-root a me hdd-root, waiho mākou i ka root-default me ka ʻole, no laila hiki iā mākou ke holoi.
root-ceph01-q:~#ceph osd crush remove default
A laila, pono mākou e hana i nā lula hoʻolaha e hoʻopili ai mākou i nā loko i hana ʻia - ma nā lula e kuhikuhi mākou i kahi aʻa e hiki ai iā mākou ke hoʻokomo i kā mākou ʻikepili pool a me ke kūlana kūʻokoʻa o ka replica - no ka laʻana, pono nā replicas ma nā kikowaena like ʻole. a i ʻole ma nā ʻāpana like ʻole (hiki iā ʻoe ke aʻa i nā kumu like ʻole, inā loaʻa iā mākou ka mahele)
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
ʻAe, hana mākou i nā loko i makemake mākou e mālama i nā kiʻi disk o kā mākou virtualization i ka wā e hiki mai ana - 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
A haʻi mākou i kēia mau loko i nā lula hoʻokomo e hoʻohana ai
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
Pono e hoʻokokoke i ke koho o ka helu o nā pūʻulu hoʻokomo me kahi hihiʻo mua no kāu puʻupuʻu - pehea ka nui o ka OSD ma laila, pehea ka nui o ka ʻikepili (ma ka pākēneka o ka huina) i loko o ka loko, ehia ka nui o ka ʻikepili i ka huina. .
I ka huina, makemake ʻia ʻaʻole i ʻoi aku ma mua o 300 mau pūʻulu hoʻonohonoho no kēlā me kēia disk, a e maʻalahi ke kaulike me nā pūʻulu hoʻonohonoho liʻiliʻi - ʻo ia hoʻi, inā loaʻa i kāu kolamu holoʻokoʻa 10 Tb a me 10 PG i loko - a laila pilikia ia. e kaulike ma ke kiola ʻana i nā pōhaku lepo terabyte (pg) - ʻoi aku ka maʻalahi a me ka maʻalahi o ka ninini ʻana i ke one me kahi ʻāpana liʻiliʻi o ke one i loko o nā bākeke.
Akā, pono mākou e hoʻomanaʻo i ka nui o ka helu o nā PG - ʻoi aku ka nui o nā kumu waiwai i ka helu ʻana i ko lākou wahi - hoʻomaka ka hoʻomanaʻo a me ka CPU e hoʻohana.
Hiki ke hoʻomaopopo kokoke hāʻawi helu helu, hāʻawi ʻia e nā mea hoʻomohala o ka palapala CEPH.