启动器 产品 Bitnami 文档imaxe CLI 博客 联系
imaxe memcached 缓存 v1.1.0

无需改文件即可运维缓存

根据你的实例算出并应用合适的缓存容量、线程数与连接数,管理 SASL 凭据TLS 证书,并实时展示服务状态——全程无需手动编辑 memcached.conf

$ imaxe memcached status
版本
v1.1.0
子命令
9
配置
/etc/imaxe/memcached.yml
需要 root
端口
11211 TLS · 11212 local

这个模块做什么 #

Memcached 靠一个文本文件和少数几个选项来配置:给它多少内存、多少线程、多少连接。这些数字取决于实例规格,选错代价不小——要么缓存不够用,要么吃掉系统需要的内存。

memcached 模块把这些以及服务周边的一切都接管了:依据机器真实内存计算调优参数,管理SASL 凭据(本镜像强制要求),维护首次启动时生成的 TLS 证书——绝不烘焙进 AMI——并提供带服务统计的实时状态

开始之前

读取凭据或改动配置的命令需要 root(请用 sudo)。使用 optimize 要留意:应用新值会重启服务,而重启会清空缓存。若想自己控制重启时机,请加 --no-restart

快速指南分步任务

快速指南 #

选择你要做的事。每个配方都已写好命令——复制它并点击复制即可。

1

查看服务状态

一眼确认缓存是否健康,以及当前生效的调优参数。

ubuntu 用户通过 SSH 连接到实例。

查询状态:你会看到监听的端口、TLS 与 SASL 是否启用、已应用的调优参数以及实时统计(占用内存、条目数、命中与未命中):

terminal
$ sudo imaxe memcached status

要用于面板或脚本?加上 --json

terminal
$ sudo imaxe memcached status --json
如果 hits 持续增长而 evictions 保持在低位,说明缓存容量合适。若逐出量激增,请跳到调整缓存容量
2

连接到缓存

取得用户名、密码和端口,好让应用连过来。

本镜像强制使用 SASL:没有匿名访问。查询实例的凭据(密码默认打码):

terminal
$ sudo imaxe memcached credentials

真要复制时,再以明文显示:

terminal
$ sudo imaxe memcached credentials --show-password
11211 端口走 TLS;11212 是明文且只监听回环地址,供系统自身工具使用。不要把 11211 暴露到公网:只开放给你的 VPC CIDR。
3

调整缓存容量

按机器的实际规格重新计算内存、线程与连接数。

先看看会算出什么值,不改动任何东西:

terminal
$ sudo imaxe memcached optimize --show

如果满意就应用。服务会重启,缓存被清空:

terminal
$ sudo imaxe memcached optimize

想要更多缓存、留给系统更少余量?调高内存百分比:

terminal
$ sudo imaxe memcached optimize --memory-pct 75
加上 --dry-run 还能看到将写入的配置块。而 --no-restart 只写入不重启:新值会在下次启动时生效。
4

创建 SASL 用户

为你的应用创建、轮换或删除凭据。

列出 SASL 数据库中已有的用户:

terminal
$ sudo imaxe memcached users list

为每个应用建一个,密码随机生成:

terminal
$ sudo imaxe memcached users add app1

需要指定密码?通过标准输入传入,这样它不会出现在 ps 或 shell 历史中:

terminal
$ sudo imaxe memcached users add app1 --stdin
要更改某个用户的密码:imaxe memcached users rotate <用户>。不带名字则轮换产品用户的密码。
5

检查 TLS 证书

检查有效期并续期实例证书。

证书在每个实例首次启动时生成,因此绝不会在机器之间共用。查看当前使用的证书:

terminal
$ sudo imaxe memcached tls show

随时都可以续期,即便当前证书仍然有效:

terminal
$ sudo imaxe memcached tls renew --force
这是长期有效的自签名证书。你的客户端需要信任它,或校验 tls show 打印出的 SHA-256 指纹。
启动不了,或找不到凭据?

凭据与证书由 instance-setup 在每次启动时生成,由 systemd 调用。如果某个命令返回 65,说明该实例尚未完成首次启动:动手之前先看 sudo systemctl status memcached

CLI 参考命令、选项与文件

用法概要 #

用法
imaxe memcached <子命令> [flags]

几乎所有子命令都需要 root(请用 sudo),因为它们要读取 SASL 数据库、证书或服务配置。给 statuscredentialsusers listtls show 加上 --json 可获得机器可读的输出。

子命令 #

子命令作用相关选项
optimize为本实例计算并应用最合适的缓存容量、线程数与连接数。--memory-pct --dry-run --show --no-restart
status服务状态:监听、TLS、SASL、已应用的调优参数与实时统计。--json
credentials显示本实例的 SASL 凭据以及连接方式。--json --show-password
users管理 SASL 用户:listaddrotatedelete--password --stdin --json
set-password修改产品 SASL 用户的密码。users rotate 的快捷方式。--random --stdin
open-port在主机防火墙(ufw)中打开 memcached 端口。--cidr --json
close-port在主机防火墙中关闭该端口,并移除已有规则。--json
tls本实例的 TLS 证书:showrenew--force --json
instance-setup在服务启动前准备实例。systemd 每次启动都会调用它。--bake

参数与选项 #

选项类型默认值说明
--memory-pctint60用于 optimize:可用内存中划给缓存的百分比。
--reserve-mem-mbint512用于 optimize:保留不动的内存(MB),留给系统和其他服务。
--threadsint0用于 optimize:工作线程数。0 表示按 CPU 数推导。
--max-connectionsint0用于 optimize:并发连接数。0 表示按缓存容量推导。
--dry-runboolfalse用于 optimize:不写入任何内容;展示计算值以及将要应用的配置块。
--showboolfalse用于 optimize:仅打印计算出的值。
--no-restartboolfalse用于 optimize:写入配置但不重启服务。重启会清空缓存。
--passwordstring用于 users add/rotate:指定密码。省略时随机生成。
--stdinboolfalse用于 users add/rotate:从标准输入读取密码,使其不出现在 ps 或历史记录中。
--show-passwordboolfalse用于 credentials:以明文打印密码。默认打码。
--forceboolfalse用于 tls renew:即使当前证书有效且属于本实例也重新生成。
--randomboolfalse用于 set-password:生成强密码并只打印一次。
--cidrstring用于 open-port:将规则限制为该来源。不指定时允许任何来源。
--jsonboolfalse将结果以结构化 JSON 输出到 stdout

文件与路径 #

路径内容
/etc/imaxe/memcached.yml模块配置:服务、路径,以及 optimize、TLS 与 SASL 的默认值。
/etc/memcached.confmemcached 的配置,由 optimize 写入:请勿手动编辑。
/etc/systemd/system/memcached.service.d/systemd drop-in,包含模块设置的启动参数。
/etc/memcached/tls/实例的证书与私钥,在首次启动时生成。
/etc/sasl2/memcached-sasldb2SASL 数据库,保存用户及其密码。

memcached.yml 示例:

/etc/imaxe/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 $? 查看——便于在脚本中串联:

0OK操作成功完成。
1ERR未分类的通用错误。请查看日志。
2USAGE参数或子命令无效。
64NOMEMCACHED本机未安装 memcached。
65NOSECRET请求了本实例尚未生成的凭据。
66NOUFW本机上没有可用的 ufw。

操作时实时跟踪服务:

terminal
$ sudo systemctl status memcached
$ sudo journalctl -u memcached -f

故障排查 #

现象可能原因解决办法
返回 NOSECRET(退出码 65)实例尚未完成首次启动,而凭据正是在那时生成的。检查 sudo systemctl status memcached 后重试。
返回 NOMEMCACHED(退出码 64)模块已安装,但主机上没有 memcached。你使用的不是本产品的镜像:请安装 memcached 或改用正确的 AMI。
statusevictions 很多相对于存放的数据缓存太小:为腾出空间而逐出条目。optimize --memory-pct 提高百分比,或换用内存更大的实例。
缓存突然变空服务重启过,而 memcached 不会把任何数据持久化到磁盘。执行 optimize 后属正常。若想应用但不重启,请用 --no-restart
客户端拒绝该证书它是自签名的,且每个实例各不相同。在客户端信任它,或用 tls show 校验指纹。

Memcached 模块遇到问题了?

把「imaxe <module> status --json」的输出发给我们,我们会尽快回复你。

联系支持