将 Varnish 缓存存储在硬盘中

7 cache varnish disk-cache

情况是:
我正在构建 PHP 应用程序,并且需要 http 缓存。
Varnish 很棒,很多人告诉我 Varnish 将缓存数据存储在 RAM 中。但我希望它缓存在硬盘中。

有什么方法可以将 Varnish 缓存数据存储在硬盘中?

Thi*_*iro 11

Varnish 缓存数据的主要方式有两种:

  1. 到内存(使用 malloc 存储配置)
  2. 到磁盘(使用文件存储配置)

你要求#2。在这种方法中,Varnish 将始终将缓存写入磁盘,并依靠 OS 虚拟内存子系统将最常用的磁盘页面保留在 RAM 中。

如果您使用的是 Red Hat/CentOS,请编辑您的 /etc/sysconfig/varnish

NFILES=131072
MEMLOCK=82000
VARNISH_VCL_CONF=/etc/varnish/default.vcl
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1
VARNISH_ADMIN_LISTEN_PORT=6082
VARNISH_MIN_THREADS=200
VARNISH_MAX_THREADS=2000
VARNISH_THREAD_TIMEOUT=120
VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin
VARNISH_STORAGE_SIZE=50%
#VARNISH_STORAGE_SIZE=1G
VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}"
VARNISH_TTL=120

# DAEMON_OPTS is used by the init script.  If you add or remove options, make
# sure you update this section, too.
#             -h classic,500009 \
DAEMON_OPTS="-f ${VARNISH_VCL_CONF} \
             -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
             -t ${VARNISH_TTL} \
             -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \
             -u varnish -g varnish \
             -s ${VARNISH_STORAGE} \
             -p thread_pool_min=200 \
             -p thread_pool_max=2000 \
             -p thread_pools=8 \
             -p listen_depth=4096 \
             -p session_linger=50/100/150 \
             -p lru_interval=60"
Run Code Online (Sandbox Code Playgroud)

如果没有,你想要这样的东西:

 varnishd -s file,/var/lib/varnish/varnish_storage.bin,50%
Run Code Online (Sandbox Code Playgroud)

50% 将使用可用磁盘的一半。您也可以使用 10G 等。使用文件存储时,建议将 /var/lib/varnish 挂载到非日志文件系统(例如 ext2),并在挂载 FS 时使用 noatime 和 nodiratime。


Rya*_*air 5

看看架构师笔记。快速阅读一下,您应该非常清楚地了解基础知识。最需要注意的是 Varnish 不区分磁盘和内存,这是内核的工作。


gek*_*kkz 4

Varnish 将数据存储在磁盘上,然后将其拉入 RAM 以加速请求。如果不修改源代码,我怀疑您所要求的是否可行。