Memcached: установка сервиса, мониторинг вручную и с помощью Zabbix

от автора

Большинство высоконагруженных сервисов, к которым, без сомнения, относится сервис SAAS интернет-магазинов, используют Memcached как высокопроизводительное хранилище данных в оперативной памяти сервера.

Сервис Memcached позволяет кэшировать в памяти результаты запросов к базам данных, к API сервисов, готовые страницы HTML, файлы и другую информацию, к которой нужен быстрый доступ. 

Заметим, что кэшированные данные исчезнут из памяти при перезапуске сервиса или при перезагрузке сервера. Если такое недопустимо в вашем проекте, рассмотрите возможность применения Redis.

Как и другие важные сервисы, сервис Memcached необходимо контролировать. Прежде всего, проверять, что сервис работает. 

Также требуется постоянно следить за использованием области оперативной памяти, выделенной для хранилища Memcached. 

Если памяти выделено слишком мало, старые данные будут вытесняться из кэша, что снижает эффективность его использования. Но нет смысла выделять для Memcached слишком много памяти, так как память нужна и для других сервисов.

В этой статье мы расскажем о том, как установить Memcached, как контролировать работу сервиса Memcached вручную, а также с помощью Zabbix.

Установка Memcached

Исходный код Memcached, а также инструкцию по установке из пакетов и исходных текстов можно найти на github.

Установка из пакетов

Для ОС Debian и Ubuntu используйте такую команду:

# apt-get install memcached

Если вы работаете с CentOS, Redhat или Fedora, используйте yum:

# yum install memcached

После установки проверьте порт 11211:

# netstat -tap | grep memcached tcp 0 0 localhost:11211 0.0.0.0:* LISTEN 424288/memcached tcp 0 0 localhost:11211 localhost:38090 ESTABLISHED 424288/memcached

Настройка конфигурации

Чтобы изменить конфигурацию сервиса Memcached, отредактируйте файл /etc/memcached.conf. Ниже мы показали содержимое этого файла в сокращенном виде:

-d logfile /var/log/memcached.log daemon default -m 4096 -p 11211 -u memcache -l 127.0.0.1 -I 4m -P /var/run/memcached/memcached.pid

Здесь обратите внимание на параметр -m, задающий объем оперативной памяти в мегабайтах, выделенной для хранилища Memcached. В данном случае выделено целых 4 Гбайт, что может быть слишком много для вашего проекта. По умолчанию выделяется только 64 или 256 Мбайт в зависимости от версии сервиса, а этого не всегда достаточно.

Анализируя результаты мониторинга Memcached, вы сможете определить оптимальный объем для своих серверов и запущенных на них приложений.

Параметр -I позволяет задать максимальный размер данных, который можно записать в Memcached. По умолчанию он равен 1 Мбайт, но вы можете уменьшить этот размер до 1 Кбайт или увеличить до 1024 Мбайт.

Справку по всем параметрам можно посмотреть так:

$ memcached -h

Перезапуск Memcached

Изменив параметры Memcached, перезапустите сервис командой:

# service memcached restart

Мониторинг Memcached вручную

Чтобы получить статистику по работе сервиса Memcached, используйте такую команду:

# echo -e "stats\nquit" | nc -q2 127.0.0.1 11211

Команда покажет на консоли большое количество значений, по которым можно судить о текущем состоянии сервиса:

STAT pid 424288 STAT uptime 2044178 STAT time 1660289827 STAT version 1.6.9 STAT libevent 2.1.12-stable STAT pointer_size 64 STAT rusage_user 14554.311622 STAT rusage_system 62062.712599 STAT max_connections 1024 STAT curr_connections 14 STAT total_connections 14178603 STAT rejected_connections 0 STAT connection_structures 160 STAT response_obj_oom 0 STAT response_obj_count 1 STAT response_obj_bytes 65536 STAT read_buf_count 12 STAT read_buf_bytes 196608 STAT read_buf_bytes_free 114688 STAT read_buf_oom 0 STAT reserved_fds 20 STAT cmd_get 978627238 STAT cmd_set 51999972 STAT cmd_flush 0 STAT cmd_touch 0 STAT cmd_meta 0 STAT get_hits 947938861 STAT get_misses 30688377 STAT get_expired 2298 STAT get_flushed 0 STAT delete_misses 27970 STAT delete_hits 7698 STAT incr_misses 0 STAT incr_hits 0 STAT decr_misses 0 STAT decr_hits 0 STAT cas_misses 0 STAT cas_hits 0 STAT cas_badval 0 STAT touch_hits 0 STAT touch_misses 0 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 1231813377109 STAT bytes_written 3070645118747 STAT limit_maxbytes 4294967296 STAT accepting_conns 1 STAT listen_disabled_num 0 STAT time_in_listen_disabled_us 0 STAT threads 4 STAT conn_yields 0 STAT hash_power_level 21 STAT hash_bytes 16777216 STAT hash_is_expanding 0 STAT slab_reassign_rescues 4125 STAT slab_reassign_chunk_rescues 2 STAT slab_reassign_evictions_nomem 9284 STAT slab_reassign_inline_reclaim 2 STAT slab_reassign_busy_items 1 STAT slab_reassign_busy_deletes 0 STAT slab_reassign_running 0 STAT slabs_moved 13 STAT lru_crawler_running 0 STAT lru_crawler_starts 87135 STAT lru_maintainer_juggles 134763706 STAT malloc_fails 0 STAT log_worker_dropped 0 STAT log_worker_written 0 STAT log_watcher_skipped 0 STAT log_watcher_sent 0 STAT unexpected_napi_ids 0 STAT round_robin_fallback 0 STAT bytes 3739115081 STAT curr_items 2793471 STAT total_items 52004097 STAT slab_global_page_pool 0 STAT expired_unfetched 190272 STAT evicted_unfetched 147835 STAT evicted_active 0 STAT evictions 219236 STAT reclaimed 384 STAT crawler_reclaimed 296312 STAT crawler_items_checked 3253437482 STAT lrutail_reflocked 1541 STAT moves_to_cold 16038024 STAT moves_to_warm 5957296 STAT moves_within_lru 161607 STAT direct_reclaims 219236 STAT lru_bumps_dropped 0 END 

Описание параметров из этого списка можно найти здесь (раздел «General-purpose statistics»). 

Состав списка параметров, полученный с помощью команды stats, зависит от версии Memcached. Рассмотрим самые интересные с точки зрения мониторинга параметры.

Значение с именем limit_maxbytes показывает максимальный объем памяти, которую Memcached может использовать для хранения значений. В файле конфигурации /etc/memcached.conf максимальный размер хранилища задается параметром -m.

Очень важно контролировать значение evictions. Этот параметр показывает количество объектов, которые пришлось удалить из хранилища для размещения там новых данных. Если он стал большим и все время растет, то имеет смысл оптимизировать использование памяти или добавить больше памяти для сервиса Memcached.

Устройство и оптимизация памяти в Memcached описаны здесь. А на этой странице вы найдете описание механизма выделения памяти.

В процессе настройки вам может потребоваться изменить следующие параметры в файле конфигурации /etc/memcached.conf:

  • -f, —slab-growth-factor фактор роста chunk (по умолчанию равен 1.25);

  • -n, —slab-min-size минимальный размер chunk (по умолчанию равен 48);

  • -L, —enable-largepages подготовка памяти для Memcached при старте для использования страниц памяти большого размера;

  • -I, —max-item-size установка максимального значения размера элемента данных (по умолчанию: 1 Мбайт, можно задать значение от 1 Кбайт до 1024 Кбайт)

Если вы решили выделить для Memcached больше памяти, измените значение параметра -m. Убедитесь предварительно, что на сервере установлено достаточно оперативной памяти, и она не занята вся другими сервисами и программами.

Вам также могут быть интересны параметры, приведенные в табл.1.

Табл. 1. Некоторые параметры из результатов работы команды stats

Значение

Описание

get_misses

Количество запрошенных, но не найденных в хранилище Memcached элементов

get_hits

Количество запрошенных и найденных в хранилище Memcached элементов

get_expired

Количество элементов, которые были запрошены, но оказались удалены из-за истечения срока хранения

bytes_read

Общий объем данных в байтах, полученный сервисом из сети

bytes_written

Общий объем данных в байтах, записанный сервисом в сеть

curr_connections

Количество открытых соединений с сервисом Memcached

total_connections

Общее количество установленных соединений с момента запуска сервиса memcached

Эти параметры позволят вам судить об эффективности использования хранилища Memcached, а также об интенсивности работы приложений с сервисом Memcached.

Мониторинг с помощью встроенного шаблона Zabbix

Если вы используете Zabbix версии 6.2 и установили Zabbix agent 2, то сможете очень легко настроить мониторинг Memcached. Для этого достаточно добавить к серверу шаблон Memcached by Zabbix agent 2, описанный здесь.

Заметим, что этот шаблон не требует дополнительной установки скриптов или внесения изменений в файл конфигурации агента Zabbix с последующим перезапуском агента.

Проверка версии агента Zabbix

Прежде всего, нужно убедиться, что установленная у вас версия агента Zabbix содержит плагин Memcached. Для этого на консоли вашего сервера Zabbix введите такую команду:

# zabbix_get -s xxx.xxx.xxx.xxx -k memcached.ping 1

Здесь вместо xxx.xxx.xxx.xxx укажите адрес IP контролируемого хоста. Если плагин подключен, команда выведет на консоль значение единицы.

Проверка значений макросов шаблона

Шаблон Memcached by Zabbix agent 2 использует несколько макросов, которые обычно не требуется редактировать. Чтобы их увидеть, откройте список хостов в Web-интерфейсе Zabbix и щелкните напротив нужного хоста ссылку шаблона Memcached by Zabbix agent 2. Далее откройте вкладку Macros (рис. 1.).

Рис. 1. Макросы шаблона Memcached by Zabbix agent 2
Рис. 1. Макросы шаблона Memcached by Zabbix agent 2

Если вы запускаете сервис Memcached на нестандартном порту, отличном от 11211, то вам нужно будет отредактировать соответствующим образом макрос {$MEMCACHED.CONN.URI}.

Другие макросы используются в условиях триггеров, и вы можете настраивать триггеры, изменяя соответствующие значения.

Элементы данных шаблона 

Шаблон Memcached by Zabbix agent 2 собирает практически всю информацию, которую выдает команда stats. 

Если открыть раздел Latest data для нужного вам сервера, появится большой список данных. Чтобы оставить в нем только данные от упомянутого шаблона, наберите в поле Name фильтра поиска строку Memcached, а затем щелкните строку Apply. На странице останутся только данные, полученные от шаблона Memcached by Zabbix agent 2 (рис. 2).

Рис. 2. Просмотр значений данных для шаблона Memcached by Zabbix agent 2
Рис. 2. Просмотр значений данных для шаблона Memcached by Zabbix agent 2

Щелкнув ссылку Graph, вы можете увидеть график изменения соответствующего значения. Например, на рис. 3 показано количество успешных запросов к хранилищу Memcached.

Рис. 3. График изменения количества успешных запросов к хранилищу
Рис. 3. График изменения количества успешных запросов к хранилищу

Триггеры шаблона

В шаблоне Memcached by Zabbix agent 2 предусмотрено несколько триггеров, в условиях срабатывания которых используются перечисленные выше макросы (рис. 4).

Рис. 4. Триггеры шаблона Memcached by Zabbix agent 2
Рис. 4. Триггеры шаблона Memcached by Zabbix agent 2

Самый высокий уровень серьезности Average здесь установлен для триггера Memcached: Service is down, и это понятно — остановка кэширования может резко увеличить нагрузку на сервер и СУБД.

Этот триггер позволит вам отследить аварийное завершение сервиса Memcached, например, если какая-то другая программа или сервис заберет для себя всю оперативную память сервиса. В этом случае после анализа и нормализации ситуации с памятью нужно будет снова запустить сервис Memcached.

Остальные триггеры уровня предупреждения Warning предполагают плановый анализ ситуации системным администратором в кооперации с разработчиком приложения, данные которого кэшируются.

Мониторинг Memcached собственным шаблоном Zabbix

Если по каким-то причинам вы не можете обновить сервер или агент Zabbix до новой версии, есть вариант мониторинга сервиса Memcached собственным шаблоном, предполагающим использование скрипта.

Создайте на вашем сервере Zabbix каталог /etc/zabbix/scripts/ и запишите в него файл memcache.sh с таким содержимым:

#!/bin/bash echo -e "stats\nquit" | nc 127.0.0.1 11211 | grep "STAT $1 " | awk '{print $3}' 

Файл можно загрузить здесь.

Сделайте скрипт memcache.sh исполняемым:

# chmod +x /etc/zabbix/scripts/memcache.sh 

Теперь допишите в конец файла конфигурации агента Zabbix /etc/zabbix/zabbix_agentd.conf строку:

UserParameter=memcache[*],/etc/zabbix/scripts/memcache.sh $1 

Перезапустите агент Zabbix:

# service zabbix-agent restart 

Далее загрузите на сервер Zabbix и добавьте к вашим серверам, на которых нужно контролировать сервис Memcached, шаблон Shop2YOU Memcache Lite.

Элементы данных шаблона

В шаблоне Shop2YOU Memcache Lite определены все основные параметры, которые можно получить с помощью команды stats (рис. 5).

Рис. 5. Просмотр значений данных для шаблона Shop2YOU Memcache Lite
Рис. 5. Просмотр значений данных для шаблона Shop2YOU Memcache Lite

С помощью ссылок Graph вы можете посмотреть графики изменений соответствующих значений.

Триггеры шаблона

В этом шаблоне определен только один триггер с высоким уровнем серьезности High и названием Memcache service is down on {HOSTNAME}:

last(/Shop2YOU Memcache Lite/net.tcp.service[tcp,,11211])=0

Он срабатывает, если сервис Memcached становится недоступным. Вы можете добавить свои триггеры, аналогичные показанным на рис. 4.

Автор: Александр Фролов.


НЛО прилетело и оставило здесь промокод для читателей нашего блога:

15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.


ссылка на оригинал статьи https://habr.com/ru/company/first/blog/686594/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *