fastdfs_v4.06分布式文件系统的安装及配置
整体网络配置
1
Tracker Server 192.168.127.11 /home/tracker 端口:22122
2
Storage1 Server 192.168.127.12 group1 /home/storage 端口:23000
3
Storage2 -Server1(源) 192.168.127.13 group2 /home/storage 端口:23000
4
Storage2 -Server2 192.168.127.14 group2 /home/storage 端口:23000
5
注意:
6
1.Storage2 同组的fastdfs服务的端口必须一致: port=23000
7
2.一台服务器可以装多个组但不能装同组的多个Storage,日志会报错误
8
3.Version 4.05之前fastdfs内部绑定了libevent作为http服务器.Version 4.05之后的版本删除了内置的web http服务
01
#软件安装包存储:
02
/usr/local/src
03
/usr/local/fastdfs fastdfs安装目录
04
05
#基本目录列表:
06
#创建fastdfs用户
07
/usr/sbin/groupadd fastdfs
08
/usr/sbin/useradd -g fastdfs fastdfs
09
#创建存储数据目录
10
mkdir -p /home/fastdfs/tracker;#创建tracker目录保存运行日志
11
mkdir -p /home/fastdfs/storage;#创建Storage目录保存运行日志及其data数据
12
13
为方便查找目录,设置变量
14
# vi .bashrc
15
alias worksrc='cd /usr/local/src;ls'
16
alias workfastdfs='cd /usr/local/fastdfs;ls'
17
alias worktracker='cd /home/fastdfs/tracker;ls'
18
alias workstorage='cd /home/fastdfs/storage;ls'
19
#track启动 重启 停止
20
alias sertracker='service fdfs_trackerd'
21
#storage启动 重启 停止
22
alias serstorage='service fdfs_storaged'
23
配置生效
24
# source .bashrc
安装libevent 和 fastdfs
首先安装libevent. fastdfs在编译源程序时fastdfs内部调用libevent的处理机制,,需要用到libevent一些依赖文件,否则编译fastdfs会出错
01
##卸载系统自带libevent,自带版本过低,安装fastdfs会出错
02
rpm -qa|grep libevent;yum remove libevent*
03
#下载安装libevent
04
worksrc;
05
wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.19-stable.tar.gz;
06
tar -zxvf libevent-2.0.19-stable.tar.gz;
07
cd libevent-2.0.19-stable;
08
make clean;
09
./configure --prefix=/usr/local/libevent
10
make && make install;
11
##为libevent创建软链接到/lib库下,64位系统对应/lib64
12
ln -s /usr/local/libevent/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
13
ln -s /usr/local/libevent/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5
14
#
15
命令汇总:worksrc;wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.19-stable.tar.gz;tar -zxvf libevent-2.0.19-stable.tar.gz;cd libevent-2.0.19-stable;make clean;./configure --prefix=/usr/local/libevent;make && make install;cd ../
安装fastdfs的步骤
1
wget http://fastdfs.googlecode.com/files/FastDFS_v4.06.tar.gz
2
tar -zxvf FastDFS_v4.06.tar.gz
3
cd FastDFS
由于定义/usr/local/fastdfs为fastdfs安装目录,所以需要修改make.sh
1
vim make.sh
2
TARGET_PREFIX=/usr/local 修改为 /usr/local/fastdfs
3
TARGET_CONF_PATH=/etc/fdfs 修改为 /usr/local/fastdfs/conf
4
/etc/fdfs 全部替换为 /usr/local/fastdfs/conf
5
#安装
6
./make.sh C_INCLUDE_PATH=/usr/local/libevent/include LIBRARY_PATH=/usr/local/libevent/lib
7
./make.sh install
安装Tracker Server -192.168.127.11
引用上例中安装libevent 和 fastdfs步骤
配置及启动Tracker Server,端口:22122
01
#修改tracker.conf配置
02
vim /usr/local/fastdfs/conf/tracker.conf
03
# the tracker server port
04
port=22122
05
# the base path to store data and log files
06
base_path=/home/yuqing/fastdfs -> base_path=/home/fastdfs/tracker #日志目录
07
reserved_storage_space = 4GB -> reserved_storage_space = 1GB
08
#unix group name to run this program,
09
#not set (empty) means run by the group of current user
10
run_by_group= -> fastdfs
11
#unix username to run this program,
12
#not set (empty) means run by current user
13
run_by_user= -> fastdfs
14
#开启自定义server ID取代ip形式,方便内部网络服务器更换ip
15
use_storage_id = true #使用server ID作为storage server标识
16
storage_ids_filename = storage_ids.conf #<id> <group_name> <ip_or_hostname>
17
id_type_in_filename = id #文件名反解析中包含server ID,以前是ip
18
#PHP扩展支持连接池
19
use_connection_pool = true
20
connection_pool_max_idle_time = 3600
21
#
22
#移动storage_ids.conf文件
23
cp -r /usr/local/src/FastDFS/conf/storage_ids.conf /usr/local/fastdfs/conf/
24
#编辑storage服务器ID与IP地址的对应关系
25
vim /usr/local/fastdfs/conf/storage_ids.conf
26
#<id> <group_name> <ip_or_hostname>
27
100001 group1 192.168.205.12
28
100002 group2 192.168.205.13
29
100003 group2 192.168.205.14
1
# base_path 附目录说明:
2
tracker server目录及文件结构:
3
${base_path}
4
|__data
5
| |__storage_groups.dat:存储分组信息
6
| |__storage_servers.dat:存储服务器列表
7
|__logs
8
|__trackerd.log:tracker server日志文件
启动Tracker Server
1
chown -R fastdfs:fastdfs /home/fastdfs
01
#启动脚本
02
vim /etc/init.d/fdfs_trackerd
03
#增加下面的内容
04
#!/bin/bash
05
#
06
# fdfs_trackerd Starts fdfs_trackerd
07
#
08
#
09
# chkconfig: 2345 99 01
10
# description: FastDFS tracker server
11
### BEGIN INIT INFO
12
# Provides: $fdfs_trackerd
13
### END INIT INFO
14
# Source function library.
15
. /etc/init.d/functions
16
FastDfs='/usr/local/fastdfs'
17
CONF="$FastDfs/conf/tracker.conf"
18
if [ ! -f $CONF ]; then
19
echo "file $CONF does not exist!"
20
exit 2
21
fi
22
PRG="$FastDfs/bin/fdfs_trackerd"
23
if [ ! -f $PRG ]; then
24
echo "file $PRG does not exist!"
25
exit 2
26
fi
27
Stop="$FastDfs/bin/stop.sh"
28
if [ ! -f $Stop ]; then
29
echo "file $Stop does not exist!"
30
exit 2
31
fi
32
Restart="$FastDfs/bin/restart.sh"
33
if [ ! -f $Restart ]; then
34
echo "file $Restart does not exist!"
35
exit 2
36
fi
37
RETVAL=0
38
start() {
39
echo -n $"Starting FastDFS tracker server: "
40
$PRG $CONF &
41
RETVAL=$?
42
echo
43
return $RETVAL
44
}
45
stop() {
46
echo -n $"Stop FastDFS tracker server: "
47
$Stop $PRG $CONF
48
RETVAL=$?
49
return $RETVAL
50
}
51
rhstatus() {
52
status fdfs_trackerd
53
}
54
restart() {
55
$Restart $PRG $CONF &
56
}
57
case "$1" in
58
start)
59
start
60
;;
61
stop)
62
stop
63
;;
64
status)
65
rhstatus
66
;;
67
restart|reload)
68
restart
69
;;
70
condrestart)
71
restart
72
;;
73
*)
74
echo $"Usage: $0 {start|stop|status|restart|condrestart}"
75
exit 1
76
esac
77
exit $?
78
#
79
#增加x权限
80
chmod a+x /etc/init.d/fdfs_trackerd
1
#启动成功,加入开机启动
2
# vim /etc/rc.d/rc.local
3
service fdfs_trackerd start
4
#启动过程中出现的错误
5
#./fdfs_trackerd: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
6
#解决办法
7
ln -s /usr/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5
#检查tracker是否启动成功,可以查看如下文件
1
vim /home/fastdfs/tracker/logs/trackerd.log
2
#[2012-08-26 19:01:30] INFO - FastDFS v4.06, base_path=/home/fastdfs/tracker, run_by_group=fastdfs, run_by_user=fastdfs, connect_timeout=30s, network_timeout=60s, port=22122, bind_addr=, max_connections=256, work_threads=4, store_lookup=2, store_group=, store_server=0, store_path=0, reserved_storage_space=10.00%, download_server=0, allow_ip_count=-1, sync_log_buff_interval=10s, check_active_interval=120s, thread_stack_size=64 KB, storage_ip_changed_auto_adjust=1, storage_sync_file_max_delay=86400s, storage_sync_file_max_time=300s, use_trunk_file=0, slot_min_size=256, slot_max_size=16 MB, trunk_file_size=64 MB, trunk_create_file_advance=0, trunk_create_file_time_base=02:00, trunk_create_file_interval=86400, trunk_create_file_space_threshold=20 GB, trunk_init_check_occupying=0, trunk_init_reload_from_binlog=0, use_storage_id=1, id_type_in_filename=id, storage_id_count=1, rotate_error_log=0, error_log_rotate_time=00:00, rotate_error_log_size=0, store_slave_file_use_link=0, use_connection_pool=1, g_connection_pool_max_idle_time=3600s
安装Storage Server -192.168.127.12
配置及启动存储服务(Storage Server)
引用上例中安装libevent 和 fastdfs步骤
01
#修改storage.conf配置
02
vim /usr/local/fastdfs/conf/storage.conf
03
# the name of the group this storage server belongs to
04
group_name=group1
05
# the name of the group this storage server belongs to
06
# the storage server port #the storage server port
07
port=23000
08
# the base path to store data and log files #日志目录
09
base_path=/home/yuqing/fastdfs -> /home/fastdfs/storage
10
# store_path#, based 0, if store_path0 not exists, it's value is base_path #data数据存储目录
11
# the paths must be exist
12
store_path0=/home/fastdfs/storage
13
#unix group name to run this program,
14
#not set (empty) means run by the group of current user
15
run_by_group= -> fastdfs
16
#unix username to run this program,
17
#not set (empty) means run by current user
18
run_by_user= -> fastdfs
19
# tracker_server can ocur more than once, and tracker_server format is
20
# "host:port", host can be hostname or ip address
21
tracker_server=192.168.209.121:22122 -> tracker_server=192.168.127.11:22122
01
# base_path 附目录说明:
02
tracker server目录及文件结构:
03
${base_path}
04
|__data
05
| |__storage_stat.dat:本地存储信息
06
| |__sync
07
| |__ binlog.000
08
| |__ binlog.index
09
|__logs
10
|__storaged.log:storage server日志文件
01
#编辑启动脚本
02
vim /etc/init.d/fdfs_storaged
03
#增加下面的内容
04
#!/bin/bash
05
#
06
# fdfs_storaged Starts fdfs_storaged
07
#
08
#
09
# chkconfig: 2345 99 01
10
# description: FastDFS storage server
11
### BEGIN INIT INFO
12
# Provides: $fdfs_storaged
13
### END INIT INFO
14
# Source function library.
15
. /etc/init.d/functions
16
FastDfs='/usr/local/fastdfs'
17
CONF="$FastDfs/conf/storage.conf"
18
if [ ! -f $CONF ]; then
19
echo "file $CONF does not exist!"
20
exit 2
21
fi
22
PRG="$FastDfs/bin/fdfs_storaged"
23
if [ ! -f $PRG ]; then
24
echo "file $PRG does not exist!"
25
exit 2
26
fi
27
Stop="$FastDfs/bin/stop.sh"
28
if [ ! -f $Stop ]; then
29
echo "file $Stop does not exist!"
30
exit 2
31
fi
32
Restart="$FastDfs/bin/restart.sh"
33
if [ ! -f $Restart ]; then
34
echo "file $Restart does not exist!"
35
exit 2
36
fi
37
RETVAL=0
38
start() {
39
echo -n $"Starting FastDFS storage server: "
40
$PRG $CONF &
41
RETVAL=$?
42
echo
43
return $RETVAL
44
}
45
stop() {
46
echo -n $"Stop FastDFS storage server: "
47
$Stop $PRG $CONF
48
RETVAL=$?
49
return $RETVAL
50
}
51
rhstatus() {
52
status fdfs_storaged
53
}
54
restart() {
55
$Restart $PRG $CONF &
56
}
57
case "$1" in
58
start)
59
start
60
;;
61
stop)
62
stop
63
;;
64
status)
65
rhstatus
66
;;
67
restart|reload)
68
restart
69
;;
70
condrestart)
71
restart
72
;;
73
*)
74
echo $"Usage: $0 {start|stop|status|restart|condrestart}"
75
exit 1
76
esac
77
exit $?
78
#
79
#增加x权限
80
chmod a+x /etc/init.d/fdfs_storaged
01
#启动storage
02
service fdfs_storaged restart
03
#接下来会出现很多mkdir data path,这是系统在创建数据目录
04
data path: /home/fastdfs/storage/data, mkdir sub dir...
05
mkdir data path: 00 ...
06
mkdir data path: 01 ...
07
mkdir data path: 02 ...
08
mkdir data path: 03 ...
09
.......................
10
data path: /home/fastdfs/storage/data, mkdir sub dir done.
1
#启动成功,加入开机启动
2
# vim /etc/rc.d/rc.local
3
service fdfs_storaged restart
安装Storage Server -192.168.127.13
配置及启动存储服务(Storage Server)
引用上例中安装libevent 和 fastdfs步骤
01
#修改storage.conf配置
02
vim /usr/local/fastdfs/conf/storage.conf
03
# the name of the group this storage server belongs to
04
group_name=group2
05
# the name of the group this storage server belongs to
06
# the storage server port #the storage server port
07
port=23000
08
# the base path to store data and log files #日志目录
09
base_path=/home/yuqing/fastdfs -> /home/fastdfs/storage
10
# store_path#, based 0, if store_path0 not exists, it's value is base_path #data数据存储目录
11
# the paths must be exist
12
store_path0=/home/fastdfs/storage
13
#unix group name to run this program,
14
#not set (empty) means run by the group of current user
15
run_by_group= -> fastdfs
16
#unix username to run this program,
17
#not set (empty) means run by current user
18
run_by_user= -> fastdfs
19
# tracker_server can ocur more than once, and tracker_server format is
20
# "host:port", host can be hostname or ip address
21
tracker_server=192.168.209.121:22122 -> tracker_server=192.168.127.11:22122
01
# base_path 附目录说明:
02
tracker server目录及文件结构:
03
${base_path}
04
|__data
05
| |__storage_stat.dat:本地存储信息
06
| |__sync
07
| |__ binlog.000
08
| |__ binlog.index
09
|__logs
10
|__storaged.log:storage server日志文件
01
#启动storage
02
service fdfs_storaged restart
03
#接下来会出现很多mkdir data path,这是系统在创建数据目录
04
data path: /home/fastdfs/storage/data, mkdir sub dir...
05
mkdir data path: 00 ...
06
mkdir data path: 01 ...
07
mkdir data path: 02 ...
08
mkdir data path: 03 ...
09
.......................
10
data path: /home/fastdfs/storage/data, mkdir sub dir done.
1
#启动成功,加入开机启动
2
# vim /etc/rc.d/rc.local
3
service fdfs_storaged restart
安装Storage Server -192.168.127.14
配置及启动存储服务(Storage Server)
引用上例中安装libevent 和 fastdfs步骤
01
#修改storage.conf配置
02
vim /usr/local/fastdfs/conf/storage.conf
03
# the name of the group this storage server belongs to
04
group_name=group2
05
# the name of the group this storage server belongs to
06
# the storage server port #the storage server port
07
port=23000
08
# the base path to store data and log files #日志目录
09
base_path=/home/yuqing/fastdfs -> /home/fastdfs/storage
10
# store_path#, based 0, if store_path0 not exists, it's value is base_path #data数据存储目录
11
# the paths must be exist
12
store_path0=/home/fastdfs/storage
13
#unix group name to run this program,
14
#not set (empty) means run by the group of current user
15
run_by_group= -> fastdfs
16
#unix username to run this program,
17
#not set (empty) means run by current user
18
run_by_user= -> fastdfs
19
# tracker_server can ocur more than once, and tracker_server format is
20
# "host:port", host can be hostname or ip address
21
tracker_server=192.168.209.121:22122 -> tracker_server=192.168.127.11:22122
01
# base_path 附目录说明:
02
tracker server目录及文件结构:
03
${base_path}
04
|__data
05
| |__storage_stat.dat:本地存储信息
06
| |__sync
07
| |__ binlog.000
08
| |__ binlog.index
09
|__logs
10
|__storaged.log:storage server日志文件
01
#启动storage
02
service fdfs_storaged restart
03
#接下来会出现很多mkdir data path,这是系统在创建数据目录
04
data path: /home/fastdfs/storage/data, mkdir sub dir...
05
mkdir data path: 00 ...
06
mkdir data path: 01 ...
07
mkdir data path: 02 ...
08
mkdir data path: 03 ...
09
.......................
10
data path: /home/fastdfs/storage/data, mkdir sub dir done.
1
#启动成功,加入开机启动
2
# vim /etc/rc.d/rc.local
3
service fdfs_storaged restart
测试及使用fastdfs-192.168.127.11
fastdfs之配置client
1
vim /usr/local/fastdfs/conf/client.conf
2
base_path=/home/yuqing/fastdfs-> base_path=/home/fastdfs/tracker
3
tracker_server=192.168.209.121:22122 -> tracker_server=192.168.127.11:22122
1
cd /usr/local/bin
2
vim aa.txt 增加内容:展示aa.txt文本数据 :wq
3
./fdfs_test /usr/local/fastdfs/conf/client.conf upload aa.txt
执行成功后会出现如下提示:
01
# ./fdfs_test /usr/local/fastdfs/conf/client.conf upload aa.txt
02
[2012-08-25 02:08:26] INFO - base_path=/home/fastdfs/tracker, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0
03
tracker_query_storage_store_list_without_group:
04
server 1. group_name=group2, ip_addr=192.168.127.13, port=23000
05
group_name=group2, ip_addr=192.168.127.6, port=23000
06
storage_upload_by_filename
07
group_name=group2, remote_filename=M00/00/00/wKh_BlA3wxql4hTXAAAAB8v-VvY710.txt
08
source ip address: 192.168.127.13
09
file timestamp=2012-08-25 02:08:26
10
file size=7
11
file crc32=3422443254
12
file url:
13
storage_upload_slave_by_filename
14
group_name=group2, remote_filename=M00/00/00/wKh_BlA3wxql4hTXAAAAB8v-VvY710_big.txt
15
source ip address: 192.168.127.6
16
file timestamp=2012-08-25 02:08:26
17
file size=7
18
file crc32=3422443254
19
file url:
1
执行过程中可能出现防火墙封口:
2
# ERROR - file: tracker_proto.c, line: 420, connect to 192.168.127.11:22122 fail, errno: 113, error info: No route to host
3
解决:
4
iptables -L;iptables -F;service iptables stop
测试下载文件
在浏览器中,输入上图中的url地址, tracker server会自动重定向到存储文件的storage server,文件下载成功。至此,已经成功搭建了fastdfs,编写你自己的client来进行访问吧:
1
展示aa.txt文本数据
常规命令范例:
01
#监控storage
02
/usr/local/fastdfs/bin/fdfs_monitor /usr/local/fastdfs/conf/storage.conf
03
#如果存在多个多个组,只需要监控其中一个组,就能调出所有组的状态
04
05
#删除组内服务器storage和查看各个组内服务器状态
06
/usr/local/fastdfs/bin/fdfs_monitor /usr/local/fastdfs/conf/client.conf delete group2 192.168.127.13
07
/usr/local/fastdfs/bin/fdfs_monitor /usr/local/fastdfs/conf/client.conf
08
storage server有7个状态,如下(数值从1~7):
09
# FDFS_STORAGE_STATUS:INIT :初始化,尚未得到同步已有数据的源服务器
10
# FDFS_STORAGE_STATUS:WAIT_SYNC :等待同步,已得到同步已有数据的源服务器
11
# FDFS_STORAGE_STATUS:SYNCING :同步中
12
# FDFS_STORAGE_STATUS:DELETED :已删除,该服务器从本组中摘除
13
# FDFS_STORAGE_STATUS:OFFLINE :离线
14
# FDFS_STORAGE_STATUS:ONLINE :在线,尚不能提供服务
15
# FDFS_STORAGE_STATUS:ACTIVE :在线,可以提供服务