Centos7 安装Bloom缓存中间件记录

WX20200830-212901@2x.png

BloomREST API缓存中间件,充当负载平衡器和REST API辅助程序之间的反向代理

它完全与您的API实现无关,并且只需对现有API代码进行最少的更改即可起作用。Bloom依赖于redis,配置为缓存 来存储缓存的数据。

它内置于Rust中,专注于稳定性,性能和低资源使用率。

Github地址https://github.com/valeriansaliou/bloom

第一部分:开始之前要先安装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错误。后续再看看。

Last modification:September 6th, 2020 at 09:29 pm
If you think my article is useful to you, please feel free to appreciate