Ceph - mai i "i runga i te turi" ki te "whakaputa"
Te whiriwhiri CEPH. Wāhanga 1
E rima a matou whatanga, tekau nga huringa whatu, kua whirihorahia te BGP, e rua tatini SSD me te paihere o nga kopae SAS o nga tae me nga rahi katoa, me te proxmox me te hiahia ki te whakauru i nga raraunga pateko katoa ki roto i a maatau ake rokiroki S3. Ehara i te mea ko enei mea katoa e hiahiatia ana mo te mariko, engari ka timata koe ki te whakamahi i te opensource, katahi ka whai i to ngahau ki te mutunga. Ko te mea anake i raru ahau ko te BGP. Karekau he tangata o te ao he kaha ake, he kore haepapa me te moepuku i te ararere BGP o roto. A i mohio ahau ka tere ka ruku matou ki roto.
He iti noa te mahi - he CEPH, engari kaore i tino pai. He mea tika kia mahi "pai".
Ko te tautau i whakawhiwhia mai ki ahau he rerekee, he tere te whakatangi, me te kore e aro. E rua nga roopu o nga pona rereke, me tetahi matiti noa e mahi ana hei tautau me te whatunga whanui. I whakakiia nga pona ki nga momo kōpae e wha - e rua nga momo SSD, i kohia i roto i nga ture tuunga motuhake e rua, me nga momo HDD e rua o nga rahi rereke, i kohia i roto i te roopu tuatoru. Ko te raruraru me nga rahi rereke i whakatauhia e nga taumaha OSD rereke.
Kua wehea te tatūnga ake kia rua nga wahanga - te whakatikatika i te punaha whakahaere и te whakatikatika i te CEPH ake me ona whakaritenga.
Whakapai ake i te OS
whatunga
Ko te roanga teitei i pa ki te rekoata me te whakataurite. I te wa e tuhi ana - na te mea karekau te kaihoko e whiwhi whakautu mo te rekoata angitu tae noa ki nga tauira raraunga i etahi atu roopu whakaurunga ka whakapumau i te angitu. I te mea ko nga ture mo te tohatoha tauira i te mapi CRUSH he tauira kotahi mo ia kaihautu, ka whakamahia tonu te whatunga.
Na reira, ko te mea tuatahi i whakatauhia e au ko te whakatikatika i te whatunga o naianei, i te wa ano e ngana ana ki te whakatenatena i ahau ki te neke ki nga whatunga wehe.
Hei timata, i takawiri ahau i nga tautuhinga o nga kaari whatunga. I timata ahau ma te whakarite rarangi:
Kua taapirihia ki /etc/network/atanga kia utaina nga mea katoa i runga ake i te tiimatanga
ngeru / etc / whatunga / atanga
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
I muri i tera, i muri mai i te tuhinga kotahi, ka tiimata ahau ki te hurihuri i nga kakau o te 4.15 kernel. Ki te whakaaro he 128G RAM nga pona, ka mutu he konae whirihoranga mo sysctl
ngeru /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 пакете. В нашем случае является плацебо, просто
# выглядит красиво)
Сwhatunga kanapa i tohatohahia i runga i nga atanga whatunga 10Gbps motuhake ki te whatunga papatahi motuhake. Ko ia miihini he kaari whatunga tauranga-rua mellanox 10/25 Gbps, i honoa ki nga huringa 10Gbps motuhake e rua. I whakahaerea te whakahiatotanga ma te whakamahi i te OSPF, na te mea ko te hononga ki te lacp mo etahi take i whakaatu mai te nui o te whakaputanga o te 16 Gbps morahi, i te pai te whakamahi a ospf i nga tekau e rua ki ia miihini. Ko nga mahere a meake nei ko te tango i te ROCE i runga i enei melanox ki te whakaiti i te noho. Me pehea te whakarite i tenei waahanga o te whatunga:
I te mea he wahitau IP o waho nga miihini kei runga i te BGP, me whai rorohiko - (he tino tika, i te wa i tuhia ai tenei tuhinga frr=6.0-1 ) i tu kē.
I te katoa, e rua nga hononga whatunga o nga miihini, e rua nga atanga o ia miihini - e 4 nga tauranga katoa. Ko tetahi kaari whatunga i titiro ki te wheketere me nga tauranga e rua, ka whirihorahia te BGP ki runga, ko te tuarua ka titiro ki nga huringa rereke e rua me nga tauranga e rua, ka whakanohohia te OSPF ki runga.
Ko etahi atu korero mo te whakatu i te OSPF: Ko te mahi matua ko te whakahiato i nga hononga e rua, me te whai i nga he.
e rua nga atanga whatunga kua whirihora ki nga whatunga papatahi ngawari e rua - 10.10.10.0/24 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 kite ai nga waka.
PUKAPUKA
Ko te mahi i muri ko te arotau i nga kopae. Mo te SSD i hurihia e ahau te mahere ki noop, mo te HDD - rā whakaoti. Ki te tino korero, ka mahi a NOOP i runga i te kaupapa o "tuatahi ki roto, tuatahi ki waho," i te reo Ingarihi he rite ki te "FIFO (Tuatahi ki roto, Tuatahi ki waho)." Ka tūtirahia nga tono i te taenga mai. He nui ake te panui-a-WATAHI, me te mahi tutira ka tata te uru ki te kōpae i te wa o te mahi. He tino pai tenei mo ta maatau punaha - inaa, kotahi noa te mahi ki ia kōpae - OSD daemon.
(Ko te hunga e hiahia ana ki te ruku ki roto i te I/O ka taea te panui i konei: http://www.admin-magazine.com/HPC/Articles/Linux-I-O-Schedulers
I roto i nga taunakitanga mo te whakatika i te Linux, e taunaki ana kia whakanuia te nr_request
nr_tono
Ko te uara o nr_requests e whakatau ana i te nui o nga tono I/O ka parea i mua i te tuku / whiwhi raraunga a te Kaihōtaka I/O ki te taputapu poraka, mena kei te whakamahi koe i te kaari RAID / Pūrere Poraka ka taea te whakahaere i te rarangi nui atu i ta te I /O kua whakaritea te kaihōtaka, ko te whakanui ake i te uara o nr_requests ka awhina pea ki te whakapai ake puta noa me te whakaiti i te uta o te tūmau ka puta te nui o te I/O ki runga i te tūmau. Mēnā kei te whakamahi koe i te Waahi, i te CFQ rānei hei kaihōtaka, ko te whakaaro me whakarite e koe te uara nr_request ki te 2 wa te uara o te hohonutanga o te rarangi.
ENGARI! Ko nga tangata whenua tonu, ko nga kaiwhakawhanake o CEPH, e whakapumau ana kia pai ake ta raatau punaha kaupapa matua
WBTthrottle me/ranei nr_tono
WBTthrottle me/ranei nr_tono
Ka whakamahia e te rokiroki konae te I/O mo te tuhi; he maha nga painga ka puta mai mena kei te tere ake te raarangi rokiroki konae. Ka whakamohiotia nga tono a nga kaihoko ina tuhia ana nga raraunga ki te raarangi, katahi ka peia ki te kopae raraunga a muri ake nei ma te whakamahi i te taumahinga Linux paerewa. Ma tenei ka taea e nga OSD miro ki te whakarato i te tuhi tuhi rite ki nga SSD i te wa e tuhi ana i nga pupuhi iti. Ma tenei tuhi whakamuri ka taea ano e te kakano te whakarite ano i nga tono I/O kōpae, me te tumanako kia hanumi ngatahi, ka tuku ranei i nga upoko kōpae o naianei ki te whiriwhiri i tetahi huarahi tino pai ki runga i o raatau papa. Ko te painga o te kupenga ka taea e koe te kopiri paku ake I/O mai i ia kōpae atu i te mea ka taea ki te I/O tika, tukutahi ranei.
Heoi, ka puta ake he raru mena ka nui ake te nui o nga rekoata taumai ki tetahi kahui Ceph i nga kaha katoa o nga kopae kei raro. I roto i tenei ahuatanga, ko te tapeke o nga mahi I/O e tatari ana kia tuhia ki te kopae ka tipu karekau, ka mutu ka whakakiia e nga rarangi I/O te katoa o te kōpae me nga rarangi Ceph. Ko nga tono panui ka tino awehia na te mea ka mau tonu i waenga i nga tono tuhi, ka roa pea he maha nga hēkona ka rere ki te kōpae tuatahi.
Hei whakaea i tenei raru, kua hangaia e Ceph tetahi tikanga whakamaarama i roto i te rokiroki konae e kiia nei ko WBThrottle. I hoahoatia hei whakawhäiti i te nuinga o te I/O tuhi mangere ka taea te tutira me te timata i tana tukanga horoi i mua atu i te mea ka puta noa na te mea ka taea e te kakano ake. Ko te mea pouri, ko nga whakamatautau e whakaatu ana ko nga uara taunoa kaore pea e whakaiti i te whanonga o naianei ki te taumata ka taea te whakaiti i tenei paanga ki te panui panui. Ka taea e nga whakatikatika te whakarereke i tenei whanonga me te whakaiti i te roa o te tuhi tuhi ka iti ake te kino o tenei paanga. He tauhokohoko, engari: ma te whakaiti i te nuinga o nga whakaurunga e whakaaetia ana kia tutiraa, ka taea e koe te whakaiti i te kaha o te kernel ake ki te whakanui ake i tona kaha ki te tono tono mai. He pai ki te whakaaro iti mo nga mea e hiahiatia ana e koe mo to keehi whakamahi motuhake, nga kawenga mahi me te whakatika kia rite ki a raatau.
Hei whakahaere i te hohonutanga o taua rarangi tuhi-backlog, ka taea e koe te whakaiti i te nuinga o nga mahinga I/O tino pai ma te whakamahi i nga tautuhinga WBThrottle, ka taea ranei e koe te whakaiti i te uara teitei mo nga mahi tino pai i te taumata poraka o to kakano ake. Ka taea e te tokorua te whakahaere pai i te whanonga kotahi, a ko o hiahia ka waiho hei turanga mo te whakatinana i tenei tautuhinga.
Me mahara ano he pai ake te punaha whakahaere a Ceph mo nga patai poto i te taumata kōpae. Ma te whakaheke i te rarangi katoa ki tetahi kōpae kua tohua, ka neke te waahi tuatahi o te rarangi ki Ceph, kei reira te mana whakahaere mo te kaupapa matua o te mahi I/O. Whakaarohia te tauira e whai ake nei:
Me etahi atu taapiri kakano kia ngohengohe, kia hiraka to waka me te kume i te mahi mai i te taputapu.
ngeru /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
# Ну и открытых файлов у нас,вероятно, будет сильно больше, чем указано по дефолту.
Rumaki ki CEPH
Ko nga tautuhinga e hiahia ana ahau ki te whai korero ake:
ngeru /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
Ko etahi o nga tawhā i whakamatauria mo QA i runga i te putanga 12.2.12 kei te ngaro i te putanga ceph 12.2.2, hei tauira osd_whakaora_miro. Na reira, i whakauruhia e nga mahere he whakahou mo te hanga ki te 12.2.12. Kua whakaatuhia e Parakatihi te hototahitanga i waenga i nga putanga 12.2.2 me 12.2.12 i roto i te tautau kotahi, e taea ai te huri whakahōu.
Kahui whakamatautau
Ko te tikanga, mo te whakamatautau he mea tika kia rite te ahua o te ahua o te pakanga, engari i te wa i timata ai ahau ki te mahi me te roopu, ko te mea hou kei te waatea i roto i te putunga. Ma te titiro, ko nga mea ka kitea e koe i roto i te waahanga iti kaore i te tino nui (1393 rarangi i roto i te whirihora ki 1436 i roto i te putanga hou), i whakatau matou ki te timata ki te whakamatautau i te mea hou (he whakahōu tonu, he aha te haere me te paraurehe tawhito)
Ko te mea anake i whai maatau ki te waiho i muri i te putanga tawhito ko te kete ceph-deploy i te mea ko etahi o nga taputapu (me etahi o nga kaimahi) he mea whakarite ki tana wetereo. He rereke te ahua o te putanga hou, engari kaore i pa ki te mahi o te tautau, a ka waiho i roto i te putanga 1.5.39
Mai i te mea e kii ana te whakahau ceph-disk kua whakakorehia me te whakamahi i te whakahau ceph-volume, e nga hoa aroha, i timata matou ki te hanga OSD me tenei whakahau, me te kore e pau i te waa ki nga mea tawhito.
Ko te mahere ko te hanga whakaata o nga puku SSD e rua ka tuuhia e matou nga raarangi OSD, tera, kei runga i nga SASs spindle. Ma tenei ka taea e tatou te tiaki i a tatou mai i nga raru me nga raraunga mena ka taka te kōpae me te pororakau.
I timata matou ki te hanga i te roopu e ai ki nga tuhinga
ngeru /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
Ko te mea tuatahi i tutuki i ahau i te wa e mahi ana ahau me tenei putanga o te ceph-deploy me te putanga tautau 12.2.12 he hapa i te wa e ngana ana ahau ki te hanga i tetahi OSD me te db i runga i te whakaeke rorohiko -
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
Ae, ko te blkid ehara i te mea he PARTUUID, no reira me hanga e au nga wehewehenga a-ringa:
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
Te ahua nei kua rite nga mea katoa, ka ngana taatau ki te hanga ano i te OSD ka whiwhi i te hapa e whai ake nei (na te mea, kaore i tukuna i te pakanga)
i te wa e hanga ana i te OSD o te momo bluestore me te kore e tohu i te ara ki te WAL, engari e tohu ana i te db
I tua atu, ki te mea i runga i te whakaata kotahi (i tetahi atu waahi ranei, e pai ana koe) ka waihangahia e koe tetahi atu wehewehenga mo te WAL ka tohua i te wa e hanga ana te OSD, katahi ka pai nga mea katoa (haunga te ahua o te WAL motuhake, kaore pea koe e pai. kua hiahia).
Engari, i te mea kei roto tonu i nga mahere tawhiti ki te neke i te WAL ki NVMe, karekau te mahi i puta ki waho.
I hangaia nga kaitirotiro, nga kaiwhakahaere me te OSD. Inaianei kei te pirangi au ki te whakarōpū i a raatau, na te mea kei te whakamahere ahau ki te whai momo kopae rereke - nga puna tere i runga i te SSD me nga puna nui, engari he puhoi ki runga i nga panekeke SAS.
Me whakaaro e 20 nga kōpae o nga kaitoro, ko te tekau tuatahi he momo momo, ko te tuarua he momo kee.
Ko te ahua o te kaari tuatahi, taunoa, penei:
Me hanga a tatou ake whatanga mariko me nga kaitoro me te blackjack me etahi atu mea:
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
Nga raruraru i pa ki a matou whawhai tautau, i te wa e ngana ana ki te hanga i tetahi kaihautu hou ka nukuhia ki tetahi whatanga - whakahau ceph osd kuru neke ceph01-host root=rack01 ka maroke, ka timata nga kaitirotiro ki te taka takitahi. Ko te whakakore i te whakahau me te CTRL+C ngawari ka whakahoki te tautau ki te ao o te hunga ora.
Ko te otinga ko te whakakore i te mapi pakaru me te tango i te waahanga mai i reira ture 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 #загружаем в кластер
Akhtung: Ma tenei mahi ka taurite ano te roopu tuunga i waenga i nga OSD. Na tenei i puta mai mo matou, engari he iti noa.
A ko te mea rereke i tutaki ki a matou i roto i te kohinga whakamatautau ko te mea i muri i te whakaara ano i te tūmau OSD, kua wareware ratou kua nukuhia ki nga tūmau hou me nga raka, ka hoki ki te taunoa pakiaka.
Ko te mutunga mai, i te whakahiato i te kaupapa whakamutunga i hangaia e matou he pakiaka motuhake mo nga puku ssd me tetahi motuhake mo nga puku porowhita, ka mauhia e matou nga OSD katoa ki roto i nga raka ka mukua noa te pakiaka taunoa. I muri i te whakaara ano, ka tiimata te OSD ki te noho. Whai muri i te keri i nga tuhinga i muri mai, ka kitea e matou he tawhā e tika ana mo tenei whanonga. Mo ia i te wahanga tuarua
Me pehea te hanga roopu rereke ma te momo kōpae.
Hei timata, i hanga e matou nga pakiaka e rua - mo te ssd me te hdd
me te tohatoha i nga kopae kia rite ki o raatau momo ki nga tuunga rereke
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:~# аналогично с другими серверами
I te marara i nga kopae i waenga i nga ara ssd-root me te hdd-root, ka waiho e matou te pakiaka-taunoa kia kau, kia taea ai e matou te whakakore.
root-ceph01-q:~#ceph osd crush remove default
I muri mai, me hanga ture tohatoha ka herea e matou ki nga puna e hangaia ana - i roto i nga ture ka tohuhia ko wai nga pakiaka ka taea te whakauru i o tatou raraunga puna me te taumata o te ahurei o te tauira - hei tauira, me noho nga tauira ki runga i nga tūmau rereke, i roto ranei i nga raka rereke (ka taea e koe i roto i nga pakiaka rereke, mena he tohatoha taatau)
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
Ana, ka hangaia e matou he puna e hiahia ana matou ki te penapena whakaahua kōpae o to maatau mariko a meake nei - 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 ka korerotia e matou ki enei puna he aha nga ture tuunga hei whakamahi
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
Ko te kowhiringa o te maha o nga roopu tuunga me whakatata mai me te tirohanga o mua mo to roopu - tata ki te maha o nga OSD kei reira, he aha te nui o nga raraunga (hei paheketanga o te katoa o te rōrahi) kei roto i te puna, he aha te te tapeke o nga raraunga.
I te katoa, he mea tika kia kaua e neke ake i te 300 nga roopu tuunga kei runga i te kōpae, ka ngawari ake te whakataurite me nga roopu tuunga iti - ara, mena ka eke to puna katoa ki te 10 Tb me te 10 PG kei roto - katahi ka whakataurite. ma te maka i nga pereki terabyte (pg) ka raru - ringihia te onepu me nga kirikiri iti o te kirikiri ki roto i nga peere ngawari me te pai ake.
Engari me mahara tatou ka nui ake te maha o nga PG, ka nui ake nga rauemi e whakapaua ana ki te tatau i o raatau waahi - ka timata te mahara me te PTM ki te whakamahi.
A rough understanding pea homai he tātaitai, i whakaratohia e nga kaihanga o nga tuhinga CEPH.