Centos7 安装Bloom缓存中间件记录
Bloom是REST API缓存中间件,充当负载平衡器和REST API辅助程序之间的反向代理。
它完全与您的API实现无关,并且只需对现有API代码进行最少的更改即可起作用。Bloom依赖于redis
,配置为缓存 来存储缓存的数据。
它内置于Rust中,专注于稳定性,性能和低资源使用率。
第一部分:开始之前要先安装Redis
以安装 redis 6.0 为例:
wget http://download.redis.io/releases/redis-6.0.6.tar.gz
tar xzf redis-6.0.6.tar.gz
cd redis-6.0.6
make install PREFIX=/usr/local/redis
设置为后台启动
从 redis 的源码目录中复制 redis.conf 到 redis 的安装目录
cp redis-6.0.6/redis.conf /usr/local/redis/bin/
修改 redis.conf 文件,把 daemonize no 改为 daemonize yes
vim /usr/local/redis/bin/redis.conf
启动redis
/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
设置开机启动
vim /etc/systemd/system/redis.service
粘贴以下内容
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存后设置开机自启动
systemctl daemon-reload
systemctl start redis.service
systemctl enable redis.service
设置软连接
ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis
常用操作命令:
systemctl start redis.service #启动redis服务
systemctl stop redis.service #停止redis服务
systemctl restart redis.service #重新启动服务
systemctl status redis.service #查看服务当前状态
systemctl enable redis.service #设置开机自启动
systemctl disable redis.service #停止开机自启动
第二部分:安装cargo(若已安装则跳过)
yum install cargo
开始安装Bloom
cargo install bloom-server
提示: warning: be sure to add
/root/.cargo/bin to your PATH to be able to run the installed binaries
表示已安装完成
安装完成后需要将二进制文件加入到系统变量中,方便我们直接使用:
vim .bash_profile
打开后在文件最后一行粘贴如下代码:
export PATH="/root/.cargo/bin:$PATH"
保存并退出后
source .bash_profile
Bloom配置文件内容
创建一个新的 config.cfg 配置文件
vim config.cfg
config.cfg文件内容如下,要根据自己的实际情况进行修改:
# Bloom
# HTTP REST API caching middleware
# Configuration file
# Example: https://github.com/valeriansaliou/bloom/blob/master/config.cfg
[server]
log_level = "error" # 日志的详细程度,将其设置为error在生产
inet = "127.0.0.1:8085" # Bloom服务器应侦听的主机和TCP端口
[control]
inet = "127.0.0.1:8086" # 主机和TCP端口Bloom Control应该侦听
tcp_timeout = 300 # 与Bloom Control的空闲/死客户端连接超时
[proxy]
[[proxy.shard]]
shard = 0 # 分片索引
host = "localhost" # 目标主机,以代理此分片
port = 3000 # 目标用于代理此分片的TCP端口(即API侦听的位置
[cache]
ttl_default = 600 # 默认的缓存TTL,以秒为单位
executor_pool = 64 # 高速缓存执行程序池大小
disable_read = false # 是否禁用缓存中读取(用于测试
disable_write = false # 是否禁用缓存写入(用于测试
compress_body = true # 是否在商店压缩体
[redis]
host = "localhost" # 目标Redis主机
port = 6379 # 目标Redis TCP端口
database = 0 # 目标数据库
pool_size = 80 # Redis连接池的大小
max_lifetime_seconds = 60 # 与Redis的连接的最大生存时间
idle_timeout_seconds = 600 # 与Redis的空闲/死池连接超时
connection_timeout_seconds = 1 # 以秒为单位的超时
max_key_size = 256000 # 要存储在密钥的Redis中的最大数据大小
max_key_expiration = 2592000 # Redis中缓存的密钥的最大TTL
运行Bloom:
./bloom -c /path/to/config.cfg
第三部分:配置nginx
Bloom要求将Bloom-Request-Shard
客户端请求代理到Bloom时,Load Balancer设置HTTP标头。此标头告诉Bloom用来存储数据的缓存碎片(这样,您可以为在同一服务器上侦听的不同API子系统使用单个Bloom实例)。
# Your existing ruleset goes here
proxy_pass http://(...)
# Adds the 'Bloom-Request-Shard' header for Bloom
proxy_set_header Bloom-Request-Shard 0;
调整现有的CORS规则(如果使用)
如果在专用主机名的API运行(如https://api.crisp.chat
用于酥),不要忘记调整你的CORS相应的规则,使API Web客户端(即浏览器)可以利用ETag的是被布卢姆添加标题。这将有助于在速度较慢的网络上加快API读取请求的速度。*如果您没有现有的CORS规则,则可能不需要它们,因此请忽略它。*
# Merge those headers with your existing CORS rules
add_header 'Access-Control-Allow-Headers' 'If-Match, If-None-Match' always;
add_header 'Access-Control-Expose-Headers' 'Vary, ETag' always;
请注意,分片号是0到15之间的整数(8位无符号数字,上限为16个分片)。
示例nginx配置:
server {
listen 80;
server_name 你的域名;
ssl_session_timeout 70m;
keepalive_timeout 65;
tcp_nodelay on;
client_header_timeout 15;
client_body_timeout 15;
send_timeout 25;
# Redirect requests to odoo backend server
location / {
proxy_set_header Bloom-Request-Shard 0;
proxy_set_header Bloom-Request-Host $http_host;
proxy_set_header Bloom-Request-X-Forward-For $remote_addr;
proxy_set_header Bloom-Request-X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:8085; # 代理本地地址
}
}
已知问题,可能是由于配置没弄好,导致部分静态资源无法正常加载。报502错误。后续再看看。