====== Оптимизация и тюнинг Ceph ====== Настройка **Swappiness**, кэширование, оптимизация операций чтения/записи для ускорения работы **Ceph**, тюнинг **Ceph**. Единой конфигурации для идеальной работы нет, оптимизация и настройка производится исходя из требований к различного рода задачам. В данном примере будет рассмотрен **//один из вариантов//** для улучшения работы дисковой подсистемы **Ceph**. **ВНИМАНИЕ!\\ \\ Все действия в данной статье могут привести к краху системы.\\ \\ Не выполняйте их на рабочих серверах. Пожалейте нервы :)** Приступим. ==== 1. read_ahead ==== Параметр ''read_ahead'' ускоряет операции дискового чтения путем предварительной выборки и их загрузки в оперативную память. Установка относительно высоких значений ''read_ahead'' даст преимущества клиентам при выполнении операций последовательного чтения. Проверить текущее установленное значение параметра можно командой: | $ sudo cat /sys/block/sda/queue/read_ahead_kb 128 | Для установки ''read_ahead'' бОльшего значения, используем следующую команду: | echo "8192"> /sys/block/sda/queue/read_ahead_kb | Аналогично необходимо изменить ''read_ahead'' для всех **RBD**, помеченных для данного хоста. Убедитесь, что вы используете правильное имя пути устройства. ==== 2. Отключим синтаксический анализ каталога OSD с помощью updatedb ==== Утилита под названием **updatedb** сканирует всю систему и обновляет файл базы данных ''mlocate.db''. База данный это файл, в котором содержится информация о файлах и их путях в системе **Linux**. | updatedb -e /var/lib/ceph | ==== 3. Отключить transparent hugepage(THP) ==== Проверить статус **HugePages** можно командой: | # grep -i HugePages_Total /proc/meminfo HugePages_Total: 0 | или | $ cat /proc/sys/vm/nr_hugepages 0 $ sysctl vm.nr_hugepages vm.nr_hugepages = 0 | Нулевое значение означает, что **HugePages** отключен в системе. Ежели это иначе, то следуем дальше. Для отключения **THP** при загрузке отредактируем файл ''grub.conf'': | transparent_hugepage=never | Для отключения **THP** “на лету” выполним команды: | # echo never> /sys/kernel/mm/redhat_transparent_hugepage/enabled # echo never> /sys/kernel/mm/redhat_transparent_hugepage/defrag | ==== 4. Использование ОЗУ и SWAP ==== Параметр ''vm.swappiness'' по умолчанию имеет значение 60 и контролирует процент свободной памяти, при которой начнется активный сброс страниц в раздел **swap**. Значение параметра достаточно легко понять. 100-60 = 40% занятой памяти при которой система уже начнет использовать раздел **swap** Лучшим решением будет изменить данный параметр на 10 и указать системе не использоваться **swap**, пока ОЗУ не достигнет 90%. Для изменения параметра “на лету” выполним: | echo 10> /proc/sys/vm/swappiness | или | sysctl -w vm.swappiness=10 | Для перманентной настройки параметра, изменим файл ''/etc/sysctl.conf'' и добавим строчку: | vm.swappiness=10 | Параметр ''vfs_cache_pressure'' по умолчанию имеет значение 100 и отвечает за уровень выделяемой памяти под кэш. Увеличение данного параметра заставляет ядро активнее выгружать неиспользуемые страницы памяти из кеша, т.е. количество выделяемой оперативной памяти под кеш будет расти медленнее, что снизит вероятность того, что будет задействован раздел **swap**. При уменьшении параметра, ядро, наоборот, будет дольше держать страницы памяти в кеше, в том числе и в **swap’е**. Это имеет смысл при небольшом количестве ОЗУ, например, если у нас 512 МБ памяти, то параметр ''vfs_cache_pressure'' можно выставить равным 50. Это позволит сократить количество дисковых операций в **swap** разделе, так как удаление неиспользуемых страниц будет происходить реже. Дальнейшее уменьшение этого параметра может привести к нехватке памяти. Если мы хотим ускорить работу системы и у нас достаточно памяти, то изменим значение системы, добавив строчки в файл ''/etc/sysctl.conf'': | vm.swappiness = 10 vm.vfs_cache_pressure = 1000 | Параметр ''kernel.pid_max'' служит для поддержки большего значения тредов (//threads//). В теории, максимум это - 4,194,303. Внесем изменения в файл ''/etc/sysctl.conf'', добавив строчку: | kernel.pid_max = 4194303 | === vm.zone_reclaim_mode === Параметр ''vm.zone_reclaim_mode''. Опасен для файловых серверов. Важно, чтобы значение было выставлено в ноль. ==== Оптимизация Ceph OSD ==== === Отключим ведение журнала в памяти. === Каждая подсистема **Ceph** имеет свой уровень логирования и регистрирует это в памяти. Мы можем установить разные значения для каждой из этих подсистем, установив уровень логирования и уровень памяти для ведения журнала отладки в диапазоне от 1 до 20. (//Где 1 является кратким и 20 - подробным//). Первое значение - это уровень логирования, а второй - уровень памяти. Мы должны отделить их с помощью косой черты (/): ''debug = /'' Логирование по умолчанию идеально подходит для наблюдения за кластером. Если ведение журнала в памяти влияет на производительность или потребление памяти, в это случае мы можем отключить его. Чтобы отключить добавьте следующие параметры: debug_lockdep = 0/0 debug_context = 0/0 debug_crush = 0/0 debug_buffer = 0/0 debug_timer = 0/0 debug_filer = 0/0 debug_objecter = 0/0 debug_rados = 0/0 debug_rbd = 0/0 debug_journaler = 0/0 debug_objectcatcher = 0/0 debug_client = 0/0 debug_osd = 0/0 debug_optracker = 0/0 debug_objclass = 0/0 debug_filestore = 0/0 debug_journal = 0/0 debug_ms = 0/0 debug_monc = 0/0 debug_tp = 0/0 debug_auth = 0/0 debug_finisher = 0/0 debug_heartbeatmap = 0/0 debug_perfcounter = 0/0 debug_asok = 0/0 debug_throttle = 0/0 debug_mon = 0/0 debug_paxos = 0/0 debug_rgw = 0/0 Установим ''max_open_files'' для того чтобы задать максимальное значение открытых дескрипторов файлов на уровне ОС: max_open_files = 131072 Для всех SSD-дисков установим настройки: filestore_op_threads = 32 filestore_min_sync_interval = 0.01 filestore_max_sync_interval = 1 throttler_perf_counter = false osd_enable_op_tracker = false Текущий конфигурационный файл сервера: (//Может быть изменен в зависимости от проведенных тестов и рекомендаций//) filestore_min_sync_interval = 10 filestore_max_sync_interval = 15 filestore_op_threads = 32 filestore_queue_max_ops = 2500 filestore_queue_max_bytes = 10485760 filestore_queue_committing_max_ops = 5000 filestore_queue_committing_max_bytes = 10485760000 throttler_perf_counter = false filestore_merge_threshold = 40 filestore_split_multiple = 8 osd_enable_op_tracker = false osd_op_threads = 16 osd_disk_threads = 1 osd_mkfs_options_xfs = "-f -i size=2048" osd_mount_options_xfs = "rw,noatime,inode64,logbufs=8,logbsize=256k,delaylog,allocsize=4M" osd_max_write_size = 256 osd_map_dedup = true osd_disk_thread_ioprio_class = idle osd_disk_thread_ioprio_priority = 0 osd_client_message_size_cap = 1073741824 osd_scrub_begin_hour = 4 osd_scrub_end_hour = 6 osd_deep_scrub_stride = 1048576 osd_scrub_chunk_min = 1 osd_scrub_chunk_max = 5 osd_max_scrubs = 1 osd_scrub_sleep = .1 osd_max_backfills = 2 osd_backfill_scan_min = 8 osd_backfill_scan_max = 64 mon_osd_down_out_interval = 600 mon_osd_min_down_reporters = 3 journal_max_write_bytes = 1073714824 journal_max_write_entries = 10000 journal_queue_max_ops = 50000 journal_queue_max_bytes = 10485760000 journal_dio = true Полный оптимизированный конфигурационый файл можно скачать по ссылке: {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/ceph/ceph.conf|ceph.conf}}