这个模块做什么 #
Memcached 靠一个文本文件和少数几个选项来配置:给它多少内存、多少线程、多少连接。这些数字取决于实例规格,选错代价不小——要么缓存不够用,要么吃掉系统需要的内存。
memcached 模块把这些以及服务周边的一切都接管了:依据机器真实内存计算调优参数,管理SASL 凭据(本镜像强制要求),维护首次启动时生成的 TLS 证书——绝不烘焙进 AMI——并提供带服务统计的实时状态。
读取凭据或改动配置的命令需要 root(请用 sudo)。使用 optimize 要留意:应用新值会重启服务,而重启会清空缓存。若想自己控制重启时机,请加 --no-restart。
快速指南 #
选择你要做的事。每个配方都已写好命令——复制它并点击复制即可。
1
查看服务状态
一眼确认缓存是否健康,以及当前生效的调优参数。
用 ubuntu 用户通过 SSH 连接到实例。
查询状态:你会看到监听的端口、TLS 与 SASL 是否启用、已应用的调优参数以及实时统计(占用内存、条目数、命中与未命中):
$ sudo imaxe memcached status要用于面板或脚本?加上 --json:
$ sudo imaxe memcached status --json2
连接到缓存
取得用户名、密码和端口,好让应用连过来。
本镜像强制使用 SASL:没有匿名访问。查询本实例的凭据(密码默认打码):
$ sudo imaxe memcached credentials真要复制时,再以明文显示:
$ sudo imaxe memcached credentials --show-password11211 端口走 TLS;11212 是明文且只监听回环地址,供系统自身工具使用。不要把 11211 暴露到公网:只开放给你的 VPC CIDR。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 或 shell 历史中:
$ sudo imaxe memcached users add app1 --stdinimaxe memcached users rotate <用户>。不带名字则轮换产品用户的密码。5
检查 TLS 证书
检查有效期并续期实例证书。
证书在每个实例首次启动时生成,因此绝不会在机器之间共用。查看当前使用的证书:
$ sudo imaxe memcached tls show随时都可以续期,即便当前证书仍然有效:
$ sudo imaxe memcached tls renew --forcetls show 打印出的 SHA-256 指纹。凭据与证书由 instance-setup 在每次启动时生成,由 systemd 调用。如果某个命令返回 65,说明该实例尚未完成首次启动:动手之前先看 sudo systemctl status memcached。
用法概要 #
imaxe memcached <子命令> [flags]几乎所有子命令都需要 root(请用 sudo),因为它们要读取 SASL 数据库、证书或服务配置。给 status、credentials、users list 或 tls show 加上 --json 可获得机器可读的输出。
子命令 #
| 子命令 | 作用 | 相关选项 |
|---|---|---|
| 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 | 在主机防火墙(ufw)中打开 memcached 端口。 | --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:保留不动的内存(MB),留给系统和其他服务。 |
| --threads | int | 0 | 用于 optimize:工作线程数。0 表示按 CPU 数推导。 |
| --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/ | systemd drop-in,包含模块设置的启动参数。 |
| /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。 |
status 中 evictions 很多 | 相对于存放的数据缓存太小:为腾出空间而逐出条目。 | 用 optimize --memory-pct 提高百分比,或换用内存更大的实例。 |
| 缓存突然变空 | 服务重启过,而 memcached 不会把任何数据持久化到磁盘。 | 执行 optimize 后属正常。若想应用但不重启,请用 --no-restart。 |
| 客户端拒绝该证书 | 它是自签名的,且每个实例各不相同。 | 在客户端信任它,或用 tls show 校验指纹。 |
Memcached 模块遇到问题了?
把「imaxe <module> status --json」的输出发给我们,我们会尽快回复你。