Flare 笔记
地址: http://labs.gree.jp/Top/OpenSource/Flare/Document/Installation-en.html
wget 'http://labs.gree.jp/data/source/flare-1.0.11.tgz'
tar zxvf flare-1.0.11.tgz
cd flare-1.0.11
./configure --with-boost=/usr/local/boost --with-tokyocabinet=/usr/local/tokyocabinet --prefix=/usr/local/flare
make
make install
配置:
mkdir /usr/local/flare/etc
cp etc/* /usr/local/flare/etc/
启动:
/usr/local/flare/bin/flarei --daemonize -f /usr/local/flare/etc/flarei.conf
概念
Flare有几个概念,需要理解
index server
这是索引服务器,用于控制node server的状态
注意,client并不直接和index server进行交互。
node server
这是实际存储节点. node有3种role:
master/slave/proxy
master是主节点,slave是分流节点,用于同步复制master
proxy则将client的请求转发到当前合适的节点(包括master/slave)。
有的人不太理解为什么要用proxy,是否多此一举,而实际测试表明,
通过proxy转发的请求的确要比直接connect到实际节点速度差很多。
这是因为,flare是一个集群,其中的node server是可以动态添加,删除的。
当某个node down后,index server会检测到,并标志其state为down。
此外,master 支持partition,因此通过proxy节点,client无需处理这些复杂问题。
根据作者的建议, proxy node应该和client本地运行,这样可以减少多余的tcp请求。
下面是我写的一个脚本,用于搭建一个典型的测试场景:
1个index server
2个master node,启用partition
1个slave,启用balance
由于flare把ip:port作为一个node,因此只需要1个ip,不同的port就可以快速实现测试需要的环境。
$./start_flare.sh
配置文件开始:
#!/bin/sh
#启动index server,监听 127.0.0.1:12120
flarei='/usr/local/flare/bin/flarei'
flarei_config='/usr/local/flare/etc/flarei.conf'
flared='/usr/local/flare/bin/flared'
flared_config='/usr/local/flare/etc/flared.conf'
data='/data/httpd/flare'
cmd="$flarei --daemonize -f $flarei_config"
echo "$cmd"
$cmd
sleep 0.5
#proxy
cmd="$flared --daemonize --data-dir $data/d0 --index-server-name 127.0.0.1 --index-server-port 12120 --server-name 127.0.0.1 --server-port 12121"
echo $cmd
$cmd
sleep 0.5
#master1 node
cmd="$flared --daemonize --data-dir $data/d1 --index-server-name 127.0.0.1 --index-server-port 12120 --server-name 127.0.0.1 --server-port 12122"
echo $cmd
$cmd
sleep 0.5
#slave node
cmd="$flared --daemonize --data-dir $data/d2 --index-server-name 127.0.0.1 --index-server-port 12120 --server-name 127.0.0.1 --server-port 12123"
echo $cmd
$cmd
sleep 0.5
#master2
cmd="$flared --daemonize --data-dir $data/d3 --index-server-name 127.0.0.1 --index-server-port 12120 --server-name 127.0.0.1 --server-port 12124"
echo $cmd
$cmd
echo "waiting dameon startup…"
sleep 3
echo "set nodes role…."
#exit 1
# 当某个node加入时,默认是proxy role,因此需要修改这些role
# 通过telnet到index server,可以执行这些命令,我们在脚本中可以使用
# nc来自动执行
# node role的命令格式:
# node role server port master|slave|proxy balance partiion
echo "node role 127.0.0.1 12122 master 1 0"|nc 127.0.0.1 12120
# 设置为slave, balance 为2,给于2倍read权重
echo "node role 127.0.0.1 12123 slave 2 0"|nc 127.0.0.1 12120
# 第2个master node,将partition设置为1,表明这是第2个partion,允许
#将部分数据从原来的master 同步过来
echo "node role 127.0.0.1 12124 master 1 1"|nc 127.0.0.1 12120
sleep 2
echo "stats nodes"|nc 127.0.0.1 12120
配置文件结束