扶凯

取势 明道 优术

STF 相关设置 615 views

作者为 扶 凯 发表

目录

典型安装


MySQL


STF 需要 MySQL 5.x 系列(在安装 MySQL > 5.1 之前,请看有关 Q4M 的部分)

除了实际的对象外,其它的信息的所有数据将被存放在这个MySQL,所以你要小心调整,并给它充足的空间。

当你的 MySQL 可以运行了,使用 stf.sql 来创建一个数据库(e.g. https://github.com/stf-storage/stf/blob/master/misc/stf.sql)

Job Queue


综述

STF 使用队列来和后端的 worker 来进行通信.你当前可以选择 Q4M  要么 TheSchwartz .如果是一个非常高压的系统,你也许会更加想使用 Q4M(我们之所以这么讲是因为我们没有在生产的系统上布置使用 TheSchwartz ).

注意一定要记得设置你的 STF 的队列:你必须在环境变量中指定怎么样连接到你的队列处理系统,也可以修改你的配置文件.

# 1) 如果你使用环境变量来修改
# You need to do the same for workers, too!
env STF_QUEUE_DSN="dbi:mysql:dbname=stf_queue" \
    STF_QUEUE_USERNAME=foobar \
    STF_QUEUE_USERNAME=password \
    plackup -a etc/dispatcher.psgi
# 2) 如果你通过修改配置文件 config.pl 
'DB::Queue' => [
    "dbi:mysql:dbname=stf_queue",
    "foobar",
    "password",
    {
        AutoCommit => 1,
        AutoInactiveDestroy => 1,
        RaiseError => 1,
        mysql_enable_utf8 => 1,
    }
],

你必须有下面二个中的任意一个,才能正常工作 

Q4M

Q4M (http://q4m.github.com) 是 MySQL 一个非常快速的存储引擎, 强健的队列.

如果要安装 Q4M 需要 MySQL 5.1 以上,如果从源代码来安装的话,就需要 MySQL 的源代码.

Q4M 的实例通常比主后端 MySQL 数据库需要少得多的资源,所以,除非你的流量是非常大才有必要分开安装,不然为节约成本可以和其他服务托管在同一台机器(见“典型安装”图)

如果你的 Q4M server 在运行了, 使用 stf_queue.sql 来创建一个新的队列数据库 (e.g. https://github.com/stf-storage/stf/blob/master/misc/stf.sql)

TheSchwartz

TheSchwartz (CPAN) 是一个由 Six Apart Ltd 开发的任务队列.使用的是 MySQL 的后端. 不象 Q4M, TheSchwartz 不需要特定的存储引擎,所以如果你不能安装Q4M, 使用这个是一个非常不错的主意.

安装 TheSchwartz, 只需要简单的从 CPAN:

cpanm TheSchwartz

如果你安装完了 TheSchartz, 使用 stf_schwartz.sql 创建一个新的数据库(e.g. https://github.com/stf-storage/stf/blob/master/misc/stf_schwartz.sql)

当然,你也必须设置你的 worker 和你的调度器使用 TheSchwartz  的后端,需要设置 STF_QUEUE_TYPE 成 "Schwartz":

export STF_QUEUE_TYPE=Schwartz
plackup -a dispatcher.psgi

要么

export STF_QUEUE_TYPE=Schwartz
./bin/stf-worker

看 Envicornment Variables 有详细的关于 STF_QUEUE_TYPE 的内容

调度器代理


综述

STF 当前信赖  reproxying 通过 X-Reproxy-URL 来实现,所以你需要设置一个调度的 HTTP 代理服务器. 任何代理服务器只要可以处理的 X-Reproxy-URL 都行, 但当前我们只在生产环境使用 Apache  (通过 mod_reproxy), 在  dotCloudstf-on-dotcloud, 是使用 nginx.

Apache

Apache原生并没有 X-Reproxy-URL 支持. 你必须安装  mod_reproxy (which is in turn based on Kazuho Oku's original version)

你需要在你的 proxy 中打开设置  ReproxyIgnoreHeader 指令, 因为 mod_reproxy 不支持chunked.

Reproxy on
ReproxyIgnoreHeader Accept-Ranges

可以看 the sample config file 有更加多的详细信息

nginx

nginx 原生并不支持X-Reproxy-URL ,但我们非常容易的来实现一个这个,只需要简单的配置.

location = "/reproxy" {
    internal;
    resolver xxx.xxx.xxx.xxx; # set up a proper resolver
    set $reproxy $upstream_http_x_reproxy_url;
    proxy_pass $reproxy;
}

你需要为你的 dispatcher调度器设置下面的环境变量:

# 打开 X-Accel-Redirect header
STF_NGINX_STYLE_REPROXY: 1

# 设置内部的 redirect url . 需要和你在 nginx 中配置的目录一样
# 如果你在 nginx 中是配置的 "/reproxy",,你在这个地方也需要这样配置
STF_NGINX_STYLE_REPROXY_ACCEL_REDIRECT_HEADER: /reproxy

Memcached


综述

STF 使用 memcached 来增强性能.通常你可以安装在和调度器同一台机器上,启动后在 config.pl 中设置 Memcached 部分的 server:port 就可以了

 

STF 管理接口


STF 有一个简单的管理接口.你可以使用 etc/admin.psgi 来启动这个接口

# Note: 选择一个合适的端口. 9000 只是随机选择了一个可用的端口

plackup -p 9000 -a etc/admin.psgi

现在你可以通过 http://127.0.0.1:9000/ 来打开管理接口了.

STF Workers


Workers 做了一堆的事情, 包括会一直密切注意对象 object 的复制, 删除和 buckets, 还有一些其它的其他各种有意思的东西。Workers 可以被安装在任何地方只要它可以访问的 Q4M 的队列.在我们“典型安装”的图中他是和 dispatcher 调度器的机器在同一台机器.
多少个工作的 workers 这个取决于你的设置.你需要确保你有足够的工人来处理您的队列,让队列不会溢出。

 

STF Storage 综述


存储(Storages)在这个系统中只是一个简单的  HTTP 服务器,是通过 HTTP 协议的  HTTP GET, PUT, DELETE 来实现的基本的 CRUD (创建,增加,更新,删除)的功能..STF 本身提供了一个简单的 PSGI 的 app 来处理这些, 但如果你认为这些功能不够,你可以选择和开发你自己的等效功能,这也是非常的容易.因为都是标准 HTTP 的协议.

我们使用 STF 自带的那个简单的服务存储功能的应用程序,你会更加容易部署::

# Note: pick a real port. 8888 is just a random number I came up with right now
export STF_STORAGE_ROOT=/path/to/storage
plackup -a $STF_HOME/etc/storage.psgi -p 8888

你必须告诉 STF 的调度器怎么访问这个存储节点,我们需要在数据库 "storage" 表插入一行记录

INSERT INTO storage (id, uri, mode) VALUES ( 1, "http://127.0.0.1:8888", 1 );

其实,这个你完全可以通过你的管理接口来实现,the admin interface.

STF Dispatcher 综述


STF 的调度需要进行配置才能知道它运行时参数,我们通过环境变量.所有的配置最后还是要放到配置文件中的.但通过环境变量很容易的指定你需要进行打开/关闭什么东西的切换
(相应的, config 脚本中也有这些配置,详见下文)
config.pl

配置存储在一个普通的Perl脚本文件. 默认是 etc/config.pl . STF 提供的默认 config.pl 对于大多数用途应该是足够的,但您随时可以自定义你喜欢的 – 它只是一个Perl脚本!

如果您使用自己的配置脚本,一定要看看你的环境变量 – 本文档中所有的环境变量都是指您的默认 config.pl 文件.
如果你使用默认的配置文件 config.pl.你只要修改下面几个值:

DB::Master

'DB::Master' => [
    $dsn,
    $username,
    $passsword,
    \%options,
]

这些参数的列表是用来告诉怎么样连接  STF 的数据库的. 正常情况你必须修改 $dsn, $username, 和 $password. 看 etc/config.pl 的配置文件. 如果你想进一步的定制这些参数你可以看看 DBI.pm  的文档.

DB::Queue

这些参数是告诉你,怎么样连接 STF Q4M 的实例 (or TheSchartz database). 看 DB::Master .

Memcached

'Memcached' => {
    servers => \@list_of_servers,
    ... other ...
}

这是用来指定 Memcached 的服务器来存储你的数据. 这些值是用来传给  Cache::Memcached::Fast 的. 所以你可以看看这个模块相关的接口信息

 

这里是讲你怎么启动的调度,你需要设置一些环境变量。

# 任何整数值。每个调度程序必须是唯一的
# you don't need to set this if you edited your config.pl to include this value
# in Dispatcher.host_id field.
export STF_HOST_ID=101

# 你指定你使用 nginx 的代理 (default: 0)
# export STF_NGINX_STYLE_REPROXY=1
# 指定如果你使用其它的 url 不同于 /reproxy (default: /reproxy)
# export STF_NGINX_STYLE_REPROXY_ACCEL_REDIRECT_URL=/path/to/reproxy

# 指定使用 TheSchwartz 来做你的队列处理 (默认: Q4M)
# export STF_QUEUE_TYPE=Schwartz

# 指定 stf 的根目录. (默认: 当前目录)
# export STF_HOME=/path/to/stf

# 如果你不使用支持 X-Reproxy-URL 的反向代理,你需要设置为真,这只做为测试用
# export USE_PLACK_REPROXY=1

plackup -a /path/to/dispatcher.psgi

环境变量


Name Applies to Default Value Description
STF_HOME All Current Directory  STF 安装的路径
STF_DEBUG All false 设置成 1 可以用可以见到一些 debug 的信息
STF_TIMER All false 设置成 1 可以用来测量 STF 的性能,可以见到一些相关的信息
STF_HOST_ID Dispatcher (null) The UNIQUE host id for each dispatcher. This is used to generate a unique ID for buckets and objects, so you MUST provide a unique integer value for each of your dispatchers. If you don't specify a value in Dispatcher.host_id in your config.pl this variable is required
USE_PLACK_REPROXY Dispatcher false When set to a true value, will automatically load Plack::Middleware::Reproxy::Furl to do the reproxying for you. This is required if you're not running behind a X-Reproxy-URL capable reverse proxy. DO NOT USE in production environments.
STF_NGINX_STYLE_PROXY Dispatcher false When set to a true value, will include X-Accel-Redirect HTTP header in the dispatcher response for GET requests.
STF_NGINX_STYLE_PROXY_ACCEL_REDIRECT_URL Dispatcher /reproxy The URL that is configured to process the reproxying.
STF_MYSQL_DSN Dispatcher/Worker dbi:mysql:dbname=stf DBI-style connect string for your MySQL (main) database.
STF_MYSQL_USERNAME Dispatcher/Worker root DBI-style username for your MySQL (main) database (maybe omitted if specified in DSN).
STF_MYSQL_PASSWORD Dispatcher/Worker root DBI-style password for your MySQL (main) database (maybe omitted if specified in DSN).
STF_QUEUE_TYPE Dispatcher/Worker Q4M The type of job queue to use. By default Q4M is used. specify "Schwartz" to use TheSchwartz. See also: STF_QUEUE_DSN, STF_QUEUE_USERNAME, STF_QUEUE_PASSWORD
STF_QUEUE_DSN Dispatcher/Worker dbi:mysql:dbname=stf_queue DBI-style connect string for your queue database.
STF_QUEUE_USERNAME Dispatcher/Worker root DBI-style username for your queue database (maybe omitted if specified in DSN).
STF_QUEUE_PASSWORD Dispatcher/Worker root DBI-style password for your queue database (maybe omitted if specified in DSN).
STF_STORAGE_ROOT Storage (null) The root directory where files should be stored. Required.

© livedoor Co., Ltd.

来了就留个评论吧! 没有评论