Flare How To中文版(何涛翻译)
启动一个节点:
1.创建配置文件(index server)
2.创建配置文件(node server)
3.编辑 /etc/default/flare (仅针对debian包)
4.配置 syslog(可选)
5.运行
6.配置节点设置
添加从节点:
1.准备新的servers
2.创建配置文件
3.检查节点状态
4.配置节点状态
5.配置获取平衡
添加主节点
1.准备新的servers
2.配置节点设置
3.添加从节点(可选)
4.设置状态
添加proxy节点
删除一个节点
MySQL 复制支持(非常具有可实验性的)
注意事项
启动一个节点
首先,把Flare当作一个单节点启动,同时我们需要提前决定数据的目录,以下的例子假定数据的目录是"/home/flare".
1.创建配置文件(index server)
Flare 需要运行一个index server(flarei)及一个或多个node server(flared),首先,我们为index server创建一个配置文件。
如果你通过debian安装包安装的Flare,你会发现flarei.conf已经在/etc目录下了,否则你需要手动创建一个flarei.conf()
以下是为本文创建的一个例子:
# data directory
data-dir = /home/flare
# syslog facility
log-facility = local0
# max connections to accept
max-connection =
512
# node down threshold
monitor-threshold =
3
# node monitoring interval (index server sends
"ping"
w/
this
interval)
monitor-interval =
1
# server name of myself
server-name = flare.example.com
# server port of myself
server-port =
12120
# max thread pool size
thread-pool-size =
8
|
你可以在参考页找到更多的细节
2. 创建配置文件(node server)
接下来,我们需要为一个node server创建配置文件,像"flarei.conf"一样,如果你是通过debian安装包安装的Flare,它应该已经在/etc目录下了,否则,你需要手工创建(你可以在/etc下的源码包中找到一个例子文件)
下列行是这个文档的一个例子
# data directory
data-dir = /home/flare
# name of index server (sync
this
to
"server-name"
of flarei.conf)
index-server-name = flare.example.com
# port number of index server (sync
this
to
"server-port"
of flarei.conf)
index-server-port =
12120
# syslog facility
log-facility = local0
# max-connections to accept
max-connection =
1024
# number of lock slots to access records
mutex-slot =
64
# number of proxy request concurrency
proxy-concurrency =
2
# server name of myself
server-name = flare.example.com
# server port of myself
server-port =
12121
# stack size of each thread (kb)
stack-size =
128
# storage options
storage-ap =
4
storage-bucket-size =
16777216
# storage-compress =
# storage-large =
true
# storage type (currently only
"tch"
is available)
storage-type = tch
# max number of thread pool
thread-pool-size =
16
|
3.编辑 /etc/default/flare(仅仅对debian安装包有效)
如果你通过Debian安装包安装的Flare,你依然需要编辑 /etc/default/flare
RUN_INDEX=
"yes"
RUN_NODE=
"yes"
CONF_INDEX=
"/etc/flarei.conf"
CONF_NODE=
"/etc/flared.conf"
DATA_INDEX=
"/home/flare"
DATA_NODE=
"/home/flare"
|
在本例中,需要根据flarei.conf 和flared.conf来修改data_index及data_mode的值(如果你创建把flare*.conf创建了在其他的目录中,你需要修改conf_index和conf_node的值)
4.配置syslog(可选)
如果你想查看log信息,你需要配置syslog.conf(通常是/etc/syslog.conf ,然而如果你想用其他的syslog后台程序,它也可能是rsyslog.conf 或者syslogng.conf ),以下行是典型的一个例子(针对syslogd):
# Log
for
flare
local0.* /var/log/flare.log
|
5.运行
现在,配置都将完成,你可以运行像以下一样运行flare
$ sudo /usr/local/flare/bin/flarei -f /home/flarei.conf --daemonize
$ sudo /usr/local/flare/bin/flared -f /home/flared.conf --daemonize
我们需要先运行flarei因为flared会尝试把自己注册在启动程序中(如果失败,则flared已经存在)
如果你使用的是Debian安装包,以下命令行也是一个选择
$ sudo /etc/init.d/flare start
log消息将会像以下显示(如果你配置了syslog)
flarei[
8603
]: [
3069409824
][NTC][flarei.cc:
105
-startup] flarei version
1.0
.
0
- system logger started
flarei[
8603
]: [
3069409824
][NTC][flarei.cc:
107
-startup] application startup in progress...
flarei[
8603
]: [
3069409824
][NTC][flarei.cc:
108
-startup] config_path: /etc/flarei.conf
flarei[
8603
]: [
3069409824
][NTC][flarei.cc:
109
-startup] daemonize:
true
flarei[
8603
]: [
3069409824
][NTC][flarei.cc:
110
-startup] data_dir: /home/flare
flarei[
8603
]: [
3069409824
][NTC][flarei.cc:
111
-startup] max_connection:
512
flarei[
8603
]: [
3069409824
][NTC][flarei.cc:
112
-startup] monitor_threshold:
3
flarei[
8603
]: [
3069409824
][NTC][flarei.cc:
113
-startup] monitor_interval:
1
flarei[
8603
]: [
3069409824
][NTC][flarei.cc:
114
-startup] server_name: flare.example.com
flarei[
8603
]: [
3069409824
][NTC][flarei.cc:
115
-startup] server_port:
12120
flarei[
8603
]: [
3069409824
][NTC][flarei.cc:
116
-startup] stack_size:
128
flarei[
8603
]: [
3069409824
][NTC][flarei.cc:
117
-startup] thread_pool_size:
8
flarei[
8604
]: [
3069409824
][NTC][app.cc:
90
-_daemonize] daemon process created -> now i have
new
pid [
8604
]
flarei[
8604
]: [
3069409824
][NTC][cluster.cc:
1210
-_reconstruct_node_partition] reconstructing node partition map... (from
0
entries in node map)
flarei[
8604
]: [
3069409824
][NTC][cluster.cc:
1309
-_reconstruct_node_partition] node partition map:
flarei[
8604
]: [
3069409824
][NTC][cluster.cc:
1328
-_reconstruct_node_partition] node partition map (prepare):
flarei[
8604
]: [
3069409824
][NTC][flarei.cc:
164
-run] entering running loop
...
flared[
8607
]: [
3069975072
][NTC][flared.cc:
109
-startup] flared version
1.0
.
0
- system logger started
flared[
8607
]: [
3069975072
][NTC][flared.cc:
111
-startup] application startup in progress...
flared[
8607
]: [
3069975072
][NTC][flared.cc:
112
-startup] config_path: /etc/flared.conf
flared[
8607
]: [
3069975072
][NTC][flared.cc:
113
-startup] daemonize:
true
flared[
8607
]: [
3069975072
][NTC][flared.cc:
114
-startup] data_dir: /home/flare
flared[
8607
]: [
3069975072
][NTC][flared.cc:
115
-startup] index_server_name: flare.example.com
flared[
8607
]: [
3069975072
][NTC][flared.cc:
116
-startup] index_server_port:
12120
flared[
8607
]: [
3069975072
][NTC][flared.cc:
117
-startup] max_connection:
1024
flared[
8607
]: [
3069975072
][NTC][flared.cc:
118
-startup] mutex_slot:
64
flared[
8607
]: [
3069975072
][NTC][flared.cc:
119
-startup] proxy_concurrency:
2
flared[
8607
]: [
3069975072
][NTC][flared.cc:
120
-startup] server_name: flare.example.com
flared[
8607
]: [
3069975072
][NTC][flared.cc:
121
-startup] server_port:
12121
flared[
8607
]: [
3069975072
][NTC][flared.cc:
122
-startup] stack_size:
128
flared[
8607
]: [
3069975072
][NTC][flared.cc:
123
-startup] storage_ap:
4
flared[
8607
]: [
3069975072
][NTC][flared.cc:
124
-startup] storage_bucket_size:
16777216
flared[
8607
]: [
3069975072
][NTC][flared.cc:
125
-startup] storage_compress:
flared[
8607
]: [
3069975072
][NTC][flared.cc:
126
-startup] storage_large:
false
flared[
8607
]: [
3069975072
][NTC][flared.cc:
127
-startup] storage_type: tch
flared[
8607
]: [
3069975072
][NTC][flared.cc:
128
-startup] thread_pool_size:
16
flared[
8608
]: [
3069975072
][NTC][app.cc:
90
-_daemonize] daemon process created -> now i have
new
pid [
8608
]
|
6.配置node设置
最终的,我们的node server已经开始运行了,但是我们仍然需要配置 node的设置,请像这样配置node的状态
$ telnet flare.example.com
12120
...
Escape character is
'^\]'
.
stats nodes
|
接着,我们就能得到node的统计数据
STAT flare.example.com:
12121
:role proxy
STAT flare.example.com:
12121
:state active
STAT flare.example.com:
12121
:partition
0
STAT flare.example.com:
12121
:balance \-
1
STAT flare.example.com:
12121
:thread_type
16
END
|
如同这些行显示的那样,我们的node “flare.example.com:12121”是一个“proxy” 并且并没有“master”存在,所以我们需要设置这个node为“master”:
$ telnet flare.example.com
12120
...
Escape character is
'^\]'
.
node role flare.example.com
12121
master
1
0
|
我们会收到回应
OK
|
以下是 对index server的“node role” 命令
[node server name] [node server port] [role=(master|slave|proxy)] [balance] ([partition])
|
之后,我们再运行
stats nodes
|
我们将得到如下的信息:
STAT flare.example.com:
12121
:role master
STAT flare.example.com:
12121
:state active
STAT flare.example.com:
12121
:partition
0
STAT flare.example.com:
12121
:balance
1
STAT flare.example.com:
12121
:thread_type
16
END
|
这有点像我们有一个持久化的memcached的服务器,如果想看一个node server是否运行正常,可以尝试 “set”和“get”命令
$ telnet flare.example.com
12121
...
set key1
0
0
4
test
STORED
get key1
VALUE key1
0
4
test
END
|
要注意的是我们也能通过memcached的客户端包来存取
添加 从节点
如果当负载很高并仅有1个server的时候,添加冗余或者从节点都可以解决这些问题
1.准备一个新的server
准备为从节点安装服务器并安装Flare
2.创建配置文件
如同以下来为flared.conf创建一个配置文件
# data directory
data-dir = /home/flare
# name of index server (sync
this
to
"server-name"
of flarei.conf)
index-server-name = flare.example.com
# port number of index server (sync
this
to
"server-port"
of flarei.conf)
index-server-port =
12120
# syslog facility
log-facility = local0
# max-connections to accept
max-connection =
1024
# number of lock slots to access records
mutex-slot =
64
# number of proxy request concurrency
proxy-concurrency =
2
# server name of myself
server-name = node1.example.com
# server port of myself
server-port =
12121
# stack size of each thread (kb)
stack-size =
128
# storage options
storage-ap =
4
storage-bucket-size =
16777216
# storage-compress =
# storage-large =
true
# storage type (currently only
"tch"
is available)
storage-type = tch
# max number of thread pool
thread-pool-size =
16
|
如果你仅仅是想验证以下一个从节点的行为,你可以运行Flare在另外一个端口(例如12122),因为Flare通过‘server name:port number’来标识。
如果你是通过debian安装包安装的Flare,你则需要修改 /etc/default/flare
RUN_INDEX=
"no"
RUN_NODE=
"yes"
CONF_INDEX=
"/etc/flarei.conf"
CONF_NODE=
"/etc/flared.conf"
DATA_INDEX=
"/home/flare"
DATA_NODE=
"/home/flare"
|
需要注意的是 RUN_INDEX被设置成“no”
3.检查 node的状态
当另外一个节点成功的启动,可以通过命令“stats nodes”来检查状态
$ telnet flare.example.com
12120
...
Escape character is
'^]'
.
STAT flare.example.com:
12121
:role master
STAT flare.example.com:
12121
:state active
STAT flare.example.com:
12121
:partition
0
STAT flare.example.com:
12121
:balance
1
STAT flare.example.com:
12121
:thread_type
16
STAT node1.example.com:
12121
:role proxy
STAT node1.example.com:
12121
:state active
STAT node1.example.com:
12121
:partition -
1
STAT node1.example.com:
12121
:balance
0
STAT node1.example.com:
12121
:thread_type
17
END
|
我们可以看到的是新节点的角色被设置成了proxy,在这个状态下,所有到node1.example.com:12121的请求都被代理到了flare.example.com:12121.
来验证这个行为,连到node1.example.com:12121并发送一个“get”命令
get key1
|
或许你将获得同上面例子同样的结果:
VALUE key1
0
4
test
END
|
这当然是一个重要的功能,但是这个节点还远不是一个从节点,因此我们需要设置这个节点为一个从节点。
4.配置node设置
使用“node role”来设置nodes的角色
$ telnet flare.example.com
12120
Escape character is
'^]'
.
node role node1.example.com
12121
slave
1
0
OK
|
以上表明我们把“node1.example.com:12121”的角色设置成从节点并且 partition=0, 并且access balance设置成1
在我们的命令被接受后,Flare将:
1.index server 给每个node发送通知(在这个例子中,node1.example.com的角色被设置成“prepare” 并且这个节点的balance被强制设成0)
2.在flare.example.com:12121收到这个通知后,这个节点开始复制接下来的请求到node1.example.com:12121
3.在node1.example.com:12121收到这个通知后,这个节点开始从主节点导数据(在这个例子中是flare.example.com:12121)
4.数据导完后,node1.example.com:12121发送请求转换这个节点到“active”的状态
5.index server发送通知到每个节点
所以,在发布一个“node role”的命令后等待几分钟,‘stats nodes’将会告诉我们这个情形,如果整个过程都成功完成,你将会得到如下的结果:
STAT flare.example.com:
12121
:role master
STAT flare.example.com:
12121
:state active
STAT flare.example.com:
12121
:partition
0
STAT flare.example.com:
12121
:balance
1
STAT flare.example.com:
12121
:thread_type
16
STAT node1.example.com:
12121
:role slave
STAT node1.example.com:
12121
:state active
STAT node1.example.com:
12121
:partition
0
STAT node1.example.com:
12121
:balance
0
STAT node1.example.com:
12121
:thread_type
17
END
|
(node1.example.com:12121的角色得到了更新)
5.设置连接的balance
’stats node‘命令显示出node1.example.com:12121的角色转换成了master,但是同时也表明balance被设置成0,所以所有通过其他proxy节点的的请求并不会被平衡的分布到这个节点,所以我们需要像这样发送一条“node role”命令:
node role node1.example.com
12121
slave
2
|
增加一个主节点
增加从节点能够解决一部分类型的问题,但是如果记录的数量特别打,我们需要给主节点分区,也就是说,增加主节点和从节点几乎能耐够解决我们所有的关于大规模性的问题。
1.准备新的server
安装master(原文写的是slave,但是我觉得在这里应该是master)并安装flare,并想创建slave server一样创建配置文件。
2.配置节点设置
添加master同样可以通过”node role“命令:
node role node2.example.com
12121
master
1
1
|
需要注意的是最后一个参数(= partition)被设置成了1,(如果你已经有2台master server,你需要设置成2).
然后,“stats nodes”将会显示如下信息:
...
STAT node2.example.com:
12121
:role master
STAT node2.example.com:
12121
:state prepare
STAT node2.example.com:
12121
:partition
1
STAT node2.example.com:
12121
:balance
1
STAT node2.example.com:
12121
:thread_type
18
|
在这种情形下,Flare将会采取如下动作:
活动的master复制所有的请求数据到node2.example.com:12121(并非所有数据,但是仅仅是对新分区来说合适的数据)
3.增加从节点(可选的)
你同样可以增加从节点来准备主节点,如果你想增加一个从节点(node3.example.com:12121)到 node2.example.com:12121,发送如下“node role”命令:
node role node3.example.com
12121
slave
1
1
|
4.设置 状态
在添加一个新的主节点的后,该节点的状态并不会自动的转换(它并不像添加一个从节点),因为这会导致一个非意愿的装载一个新的主节点.所以我们在数据导入完毕后需要手动的使用“node state”转换一个节点的状态.
node state node2.example.com active
|
可以通过发送“stats threads”命令,并检查“op”项并发现“dump”来确认导入是否结束,如果没有发现“op:dump”,则导入已经结束(也可以查看“stats”命令的“curr_items”项)
添加proxy节点
proxy节点只是把所有的请求根据当前的节点状态分发给合适的server。这将导致这种服务器的理解有些问题,但是在某些情况下,这是非常重要的.
proxy 节点被认为运行成每个client的本地进程,这一位着所有的节点都发送请求到本地proxy节点,这将减少在不同的分区节点之间的伪造的proxy请求,例如:
+-----+ get key1 +-------+ (proxy) get key1 +-------+
| ws1 | -> | node2 | -> | node1 |
+-----+ +-------+ +-------+
|
一个本地的proxy节点将总是选择恰当的节点来连接并减少tcp的连接
+------------------------+
| get key1 +--------+| (proxy) get key1 +-------+
| ws1 -> | flared |-> -> | node1 |
| +--------+| +-------+
+------------------------+
|
删除一个节点
如果你想删除一个节点,推荐使用如下流程(在这个例子中,我们将尝试删除node1.example.com:12121).
首先,发送“node state”命令到index server
node state node1.example.com
12121
down
|
并关掉这个进程(flared) w/ kill 命令(kill -KILL 导致非意愿的失败,所以请发送SIGTERM命令)
node remove node1.example.com
12121
|
MySQL 复制支持(非常具有可实验性的)
Flare在接下来的过程中中有着像MySQL 主服务器一样的行为(作者在MySQL 5.0.32中进行了验证,并不保证MySQL 4.x得到了支持)
用--enable-mysql-replication选项来对 Flare进行打包(Flare的debian包中已经包含该选项)[#z3d75f38]
添加以下行到flared.conf文件[#qac3209c]
# enable mysql replication feature (just comment
this
out disables
this
feature)
mysql-replication =
true
# port number
mysql-replication-port =
12122
# server id
mysql-replication-id =
16
# database name
mysql-replication-db = flare
# table name
mysql-replication-table = flare
|
创建上面的数据库名和表明创建表
mysql> CREATE DATABASE flare;
Query OK,
1
row affected (
0.00
sec)
mysql> use flare;
Database changed
mysql> CREATE TABLE flare
(k VARCHAR(
255
) NOT NULL,
v MEDIUMBLOB,
flag INT UNSIGNED,
version BIGINT UNSIGNED,
expire DATETIME,
PRIMARY KEY(k)) CHARSET=binary;
Query OK,
0
rows affected (
0.01
sec)
|
发布CHANGE MASTER命令到你的从节点[#q1fee194]
mysql> CHANGE MASTER TO master_host=
'flare.example.com'
,
master_port=
12122
,
master_user=
'foo'
,
master_password=
'bar'
;
|
(Flare忽略客户端鉴权所以master_user和master_password被忽略了)[#va60f438]
开始复制[[#s33635f8]]
mysql> START SLAVE;
|
注意事项:
Flare当前并没有binlog(所以历史数据不会被复制)
Flare忽略客户端鉴权