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

ARTICLES 06.09.22 06.09.22 91
Бесплатные курсына главную сниппетов

Большинство высоконагруженных сервисов, к которым, без сомнения, относится сервис 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:

Если вы решили выделить для 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.

 

на главную сниппетов
Курсы