В настоящее время я запускаю установку Ceph на 8 серверов, состоящую из 3 мониторов Ceph и 5 узлов Ceph. С точки зрения производительности кластер работает отлично, но со временем узлы начинают менять местами ceph-osd
записать на диск. Когда это происходит, я испытываю очень высокую производительность пор, и даже узел, который меняет местами, иногда рассматривается кластером как неработающий. Бег swapoff -a
с последующим swapon -a
временно решает проблему, но со временем возвращается.
Насколько я понимаю, использование Ceph в памяти является нормальным явлением из-за кеширования и т.п., но ожидается, что память будет освобождена, а не начнется подкачка.
Мы пробовали следующее:
Есть ли у кого-нибудь идеи, почему это происходит и как с этим справиться?
В наших конфигурациях каждый сервер имеет следующие характеристики:
Operating System: CentOS 7
Memory: 32GB
OSD's: 6x 900Gb
Ceph version: 13.2.5 Mimic
Swappiness set to 1
Текущая память при подкачке:
# free -m
total used free shared buff/cache available
Mem: 31960 19270 747 574 11943 11634
Swap: 2931 1500 1431
Своп-дамп:
PID=9 - Swap used: 0 - (rcu_bh )
PID=11077 - Swap used: 4 - (snmpd )
PID=9518 - Swap used: 4 - (master )
PID=7429 - Swap used: 8 - (systemd-logind )
PID=7431 - Swap used: 8 - (irqbalance )
PID=7465 - Swap used: 16 - (chronyd )
PID=7702 - Swap used: 20 - (NetworkManager )
PID=7469 - Swap used: 24 - (crond )
PID=7421 - Swap used: 132 - (dbus-daemon )
PID=1 - Swap used: 140 - (systemd )
PID=3616 - Swap used: 216 - (systemd-udevd )
PID=251189 - Swap used: 252 - (ceph-mds )
PID=7412 - Swap used: 376 - (polkitd )
PID=7485 - Swap used: 412 - (firewalld )
PID=9035 - Swap used: 524 - (tuned )
PID=3604 - Swap used: 1608 - (lvmetad )
PID=251277 - Swap used: 18404 - (ceph-osd )
PID=3580 - Swap used: 31904 - (systemd-journal )
PID=9042 - Swap used: 91528 - (rsyslogd )
PID=251282 - Swap used: 170788 - (ceph-osd )
PID=251279 - Swap used: 188400 - (ceph-osd )
PID=251270 - Swap used: 273096 - (ceph-osd )
PID=251275 - Swap used: 284572 - (ceph-osd )
PID=251273 - Swap used: 333288 - (ceph-osd )
/ proc / meminfo:
MemTotal: 32694980 kB
MemFree: 2646652 kB
MemAvailable: 9663396 kB
Buffers: 7138928 kB
Cached: 545828 kB
SwapCached: 23492 kB
Active: 24029440 kB
Inactive: 5137820 kB
Active(anon): 19307904 kB
Inactive(anon): 2687172 kB
Active(file): 4721536 kB
Inactive(file): 2450648 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 3002364 kB
SwapFree: 2220284 kB
Dirty: 8 kB
Writeback: 0 kB
AnonPages: 21459096 kB
Mapped: 31508 kB
Shmem: 512572 kB
Slab: 338332 kB
SReclaimable: 271984 kB
SUnreclaim: 66348 kB
KernelStack: 11200 kB
PageTables: 55932 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 19349852 kB
Committed_AS: 29550388 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 378764 kB
VmallocChunk: 34342174716 kB
HardwareCorrupted: 0 kB
AnonHugePages: 90112 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 248704 kB
DirectMap2M: 5963776 kB
DirectMap1G: 27262976 kB
Либо добавьте ОЗУ, либо настройте OSD, чтобы они не использовались так много.
Ваш /proc/meminfo
в системе 32 ГБ показывает 26 ГБ памяти, которую ядро отслеживает со страницами 1 ГБ (DirectMap1G
). 18 ГБ из которых - активные анонимные страницы. Прочитав немного о том, что Ceph BlueStore обходит файловую систему ядра, становится понятно, что для этого потребуются большие фрагменты анонимной памяти. В отличие от использования файловой системы и разрешения ядру поддерживать большие файловые кеши.
Конфигурация OSD не была предоставлена, но догадываюсь. ~ 26 ГБ памяти разделить на 6 экранных меню - это немного больше 4 ГБ на одно экранное меню. Примерно значение по умолчанию для osd_memory_target
который 4 ГБ. Документация этой директивы отмечает, что на практике ядро (Linux) может превышать это значение в зависимости от того, насколько агрессивно оно освобождает страницы. Это намекает на проблему в системе виртуальной памяти: ядро пытается хитро ленить в том, что оно восстанавливает, память не восстанавливается так чисто, как думают люди.
24 ГБ и изменение только для анонимных страниц Ceph составляет 75 +% использования системы на 32 ГБ. Это довольно много. Добавьте другие выделения, такие как файловые кеши и ядро, и не удивительно, что наблюдается подкачка страниц.
Для меня удивительно то, что вы удвоили ОЗУ и все еще видите проблему. Comitted_AS
примерно при 28 ГБ это выглядит как рабочая нагрузка в 30 с лишним ГБ. Он не будет выгружен на 60 ГБ, если автоматическое определение размера кеша Ceph не делает что-то умное, как MemTotal
увеличивается (не знаю).
Легко попробовать уменьшить osd_memory_target
, может быть от 4 до 3 Гб. Освободите несколько ГБ, и, возможно, использование будет достаточно низким, чтобы избежать смерти из-за медленного вывода страниц.
(Другие параметры настройки кэша Ceph задокументированы, но я недостаточно понимаю их или вашу систему, чтобы предложить, что попробовать.)