Что делает этот модуль #
Memcached настраивается текстовым файлом и горсткой флагов: сколько выделить ОЗУ, сколько потоков, сколько соединений. Правильные числа зависят от размера инстанции, а ошибка обходится дорого — либо кеша не хватает, либо вы съедаете память, нужную системе.
Модуль memcached берёт это на себя вместе со всем, что окружает сервис: вычисляет тюнинг исходя из реального объёма ОЗУ машины, управляет учётными данными SASL (в этом образе они обязательны), поддерживает сертификат TLS, создаваемый при первом запуске —он никогда не запекается в AMI— и выдаёт состояние вживую со статистикой сервиса.
Командам, которые читают учётные данные или меняют конфигурацию, нужен root (используйте sudo). Осторожнее с optimize: применение новых значений перезапускает сервис, а перезапуск очищает кеш. Если хотите перезапустить сами, используйте --no-restart.
Быстрый старт #
Выберите, что хотите сделать. В каждом рецепте команда уже написана — скопируйте её и нажмите Копировать.
1
Посмотреть состояние сервиса
Одним взглядом проверьте, что кеш в порядке и какой тюнинг применён.
Подключитесь к инстанции по SSH под пользователем ubuntu.
Запросите состояние: увидите, на каких портах он слушает, включены ли TLS и SASL, применённый тюнинг и живую статистику (занятая память, элементы, попадания и промахи):
$ sudo imaxe memcached statusНужно для панели или скрипта? Добавьте --json:
$ sudo imaxe memcached status --jsonhits растёт, а evictions остаётся низким, размер кеша подобран верно. Если вытеснения взлетели, переходите к Настроить размер кеша.2
Подключиться к кешу
Получите пользователя, пароль и порт, чтобы направить туда приложение.
Этот образ требует SASL: анонимного доступа нет. Запросите учётные данные этой инстанции (пароль выводится замаскированным):
$ sudo imaxe memcached credentialsКогда действительно понадобится его скопировать, выведите открытым текстом:
$ sudo imaxe memcached credentials --show-password11211 работает по TLS; 11212 — открытый текст и слушает только на loopback, для системных утилит. Не открывайте 11211 в Интернет: откройте его для CIDR вашей VPC.3
Настроить размер кеша
Пересчитайте память, потоки и соединения под реальный размер машины.
Сначала посмотрите, какие значения получились бы, ничего не меняя:
$ sudo imaxe memcached optimize --showЕсли они вас устраивают, примените их. Сервис перезапустится, а кеш очистится:
$ sudo imaxe memcached optimizeХотите больше кеша и меньше запаса для системы? Поднимите процент ОЗУ:
$ sudo imaxe memcached optimize --memory-pct 75--dry-run вы увидите ещё и блок конфигурации, который был бы записан. А с --no-restart изменения применяются без перезапуска: новые значения вступят в силу при следующем старте.4
Завести пользователей SASL
Создавайте, меняйте или удаляйте учётные данные для ваших приложений.
Перечислите пользователей в базе SASL:
$ sudo imaxe memcached users listЗаведите по одному на приложение, со случайным паролем:
$ sudo imaxe memcached users add app1Нужен конкретный пароль? Передайте его через стандартный ввод, чтобы он не попал ни в ps, ни в историю команд:
$ sudo imaxe memcached users add app1 --stdinimaxe memcached users rotate <пользователь>. Без имени меняется пароль пользователя продукта.5
Проверить сертификат TLS
Проверьте срок действия и обновите сертификат инстанции.
Сертификат создаётся при первом запуске каждой инстанции, поэтому никогда не используется совместно. Посмотрите текущий:
$ sudo imaxe memcached tls showОбновляйте его когда угодно, даже если нынешний ещё действителен:
$ sudo imaxe memcached tls renew --forcetls show.Учётные данные и сертификат создаёт instance-setup при каждом запуске, вызываемый systemd. Если команда возвращает код 65, эта инстанция не завершила первый запуск: проверьте sudo systemctl status memcached, прежде чем что-то менять.
Синопсис #
imaxe memcached <подкоманда> [flags]Почти всем подкомандам нужен root (используйте sudo), потому что они читают базу SASL, сертификат или конфигурацию сервиса. Добавьте --json к status, credentials, users list или tls show, чтобы получить машиночитаемый вывод.
Подкоманды #
| Подкоманда | Что делает | Важные флаги |
|---|---|---|
| optimize | Вычисляет и применяет оптимальный размер кеша, число потоков и соединений для этой инстанции. | --memory-pct --dry-run --show --no-restart |
| status | Состояние сервиса: слушатели, TLS, SASL, применённый тюнинг и живая статистика. | --json |
| credentials | Показывает учётные данные SASL этой инстанции и способ подключения. | --json --show-password |
| users | Управляет пользователями SASL: list, add, rotate и delete. | --password --stdin --json |
| set-password | Меняет пароль SASL-пользователя продукта. Сокращение для users rotate. | --random --stdin |
| open-port | Открывает порт memcached в брандмауэре хоста (ufw). | --cidr --json |
| close-port | Закрывает порт в брандмауэре хоста и удаляет имеющиеся правила. | --json |
| tls | Сертификат TLS этой инстанции: show и renew. | --force --json |
| instance-setup | Готовит инстанцию до старта сервиса. Вызывается systemd при каждом запуске. | --bake |
Аргументы и флаги #
| Флаг | Тип | По умолчанию | Описание |
|---|---|---|---|
| --memory-pct | int | 60 | В optimize: доля используемой ОЗУ в процентах, отводимая под кеш. |
| --reserve-mem-mb | int | 512 | В optimize: объём ОЗУ в МБ, который не трогают — резерв для системы и прочих сервисов. |
| --threads | int | 0 | В optimize: рабочие потоки. 0 выводит их из числа ЦП. |
| --max-connections | int | 0 | В optimize: одновременные соединения. 0 выводит их из размера кеша. |
| --dry-run | bool | false | В optimize: ничего не пишет; показывает значения и блок конфигурации, который был бы применён. |
| --show | bool | false | В optimize: только печатает вычисленные значения. |
| --no-restart | bool | false | В optimize: записывает конфигурацию, но не перезапускает сервис. Перезапуск очищает кеш. |
| --password | string | — | В users add/rotate: конкретный пароль. Если не указан, генерируется случайный. |
| --stdin | bool | false | В users add/rotate: читает пароль со стандартного ввода, чтобы он не попал ни в ps, ни в историю. |
| --show-password | bool | false | В credentials: печатает пароль открытым текстом. По умолчанию он замаскирован. |
| --force | bool | false | В tls renew: пересоздаёт, даже если текущий сертификат действителен и принадлежит этой инстанции. |
| --random | bool | false | Для set-password: генерирует надёжный пароль и печатает его один раз. |
| --cidr | string | — | Для open-port: ограничивает правило этим источником. Без него разрешён любой источник. |
| --json | bool | false | Выводит результат в виде структурированного JSON в stdout. |
Файлы и пути #
| Путь | Содержимое |
|---|---|
| /etc/imaxe/memcached.yml | Конфигурация модуля: сервис, пути и значения по умолчанию для optimize, TLS и SASL. |
| /etc/memcached.conf | Конфигурация memcached. Её пишет optimize: не правьте вручную. |
| /etc/systemd/system/memcached.service.d/ | Drop-in для systemd с параметрами запуска, которые применяет модуль. |
| /etc/memcached/tls/ | Сертификат и закрытый ключ этой инстанции, созданные при первом запуске. |
| /etc/sasl2/memcached-sasldb2 | База SASL с пользователями и их паролями. |
Пример memcached.yml:
service: memcached
port: 11211
optimize:
memory_pct: 60
memory_min_mb: 64
reserve_mem_mb: 512
threads: 0
max_connections: 0
tls:
enabled: true
days: 3650
plain_local_port: 11212
sasl:
enabled: true
user: memcachedКоды возврата и логи #
Каждый запуск возвращает код, который можно проверить через echo $? — удобно для цепочек в скриптах:
Следите за сервисом вживую во время работы:
$ sudo systemctl status memcached
$ sudo journalctl -u memcached -fУстранение неполадок #
| Симптом | Вероятная причина | Решение |
|---|---|---|
| Возвращается NOSECRET (код 65) | Инстанция не завершила первый запуск, а именно тогда создаются учётные данные. | Проверьте sudo systemctl status memcached и повторите. |
| Возвращается NOMEMCACHED (код 64) | Модуль установлен, но самого memcached на хосте нет. | Вы на образе, отличном от продуктового: установите memcached или используйте правильный AMI. |
Много evictions в status | Кеш мал для того, что вы храните: элементы вытесняются, чтобы освободить место. | Поднимите процент через optimize --memory-pct или перейдите на инстанцию с большим объёмом ОЗУ. |
| Кеш внезапно оказался пустым | Сервис перезапустился, а memcached ничего не сохраняет на диск. | После optimize это нормально. Чтобы применить без перезапуска, используйте --no-restart. |
| Клиент отвергает сертификат | Он самоподписанный и уникален для каждой инстанции. | Доверьтесь ему в клиенте или сверьте отпечаток через tls show. |
Застряли с модулем Memcached?
Напишите нам, приложив вывод «imaxe <module> status --json», и мы быстро ответим.