nginx proxy_cache 多盘负载均衡

来源:互联网 发布:星野ナミ 知乎 编辑:程序博客网 时间:2024/06/16 10:47
nginx只有在1.7.0以上的版本才支持该功能,openresty什么版本不知道,不过最新版肯定是支持的,如果配置没问题缺一直失败的小伙伴考虑版本问题。

现在,假设我们有一台服务器,挂了3块硬盘,我们希望把该服务器用作“缓存代理”,缓存后端服务器的全部响应信息。预期的缓存数据量远大于可用的内存。它实际上是我们个人CDN的一个缓存节点。毫无疑问,在这种情况下,最重要的事情是发挥硬盘的最大性能。

我们的选择之一是配置一个RAID阵列。这种方法毁誉参半,现在,有了NGINX,我们可以有其他的选择:

# 我们假设每块硬盘挂载在相应的目录中:/mnt/disk1、/mnt/disk2、/mnt/disk3proxy_cache_path /mnt/disk1 levels=1:2 keys_zone=cache_1:256m max_size=1024G                 use_temp_path=off;proxy_cache_path /mnt/disk2 levels=1:2 keys_zone=cache_2:256m max_size=1024G                 use_temp_path=off;proxy_cache_path /mnt/disk3 levels=1:2 keys_zone=cache_3:256m max_size=1024G                 use_temp_path=off;
split_clients $request_uri $disk {    33.3%     1;    33.3%     2;    *         3;}location / {    proxy_pass http://backend;    proxy_cache_key $request_uri;    proxy_cache cache_$disk;}

在这份配置中,使用了3个独立的缓存,每个缓存专用一块硬盘,另外,3个独立的线程池也各自专用一块硬盘。

缓存之间(其结果就是磁盘之间)的负载均衡使用split_clients模块,split_clients非常适用于这个任务。

在 proxy_cache_path指令中设置use_temp_path=off,表示NGINX会将临时文件保存在缓存数据的同一目录中。这是为了避免在更新缓存时,磁盘之间互相复制响应数据。