关于Linux操作系统中FastDFS部署手册
关于本次FastDFS_3.11版本的部署实验环境如下表所示:
FastDFS部署环境 | ||||
类别 | OS | FastDFS | 机器台数 | 备注 |
版本 | RedHat_Linux.5.4-x86_64 | FastDFS_v3.11 | 2 |
表格 1
安装开发工具和所需的开发包
配置yum升级服务或安装系统时选择安装相关的依赖组件,这里使用yum对包进行安装,如下所示:
yum groupinstall-y "development tools"
yum install-y gcc pcre-devel zlib-devel openssl-devel
检查libevent状态并卸载之(所有服务器上都需要执行)
查询系统已安装的libevent版本并卸载
rpm -qa libevent
libevent-1.4.13-1.el6.x86_64
rpm -e --nodeps libevent
安装libevent(所有服务器上都需要执行)
tar xvzf libevent-2.0.21-stable.tar.gz
cdlibevent-2.0.21-stable
./configure;make;make install
通软连接将库文件链接到/lib64
ln -s /usr/local/lib/libevent-2.0.so.5 /lib64/libevent-2.0.so.5 (64位操作系统必须32位不需要)
关于FastDFS的安装在所有的的服务器(tracker、storage)上都要执行此操作。
解压缩安装包
cd ~
tar xvzf FastDFS_v3.11.tar.gz
cd FastDFS
修改 make.sh中下述两个选项
#WITH_HTTPD=1 àWITH_HTTPD=1
#WITH_LINUX_SERVICE=1 àWITH_LINUX_SERVICE=1 [去掉前面的#号即可]
编译安装
./make.sh;./make.sh install
创建日志存储目录/home/iflytek/fastdfs(该目录可自定义)
mkdir -p /home/iflytek/fastdfs
修改tracker.conf配置
vi /etc/fdfs/tracker.conf
base_path=/home/yuqing/fastdfs -> base_path=/home/iflytek/fastdfs
store_group=group2àstore_group=group1
##include http.conf à#includehttp.conf
启动tracker
/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
重新启动tracker命令如下:
/usr/local/bin/restart.sh /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
安装libevent和FastDFS的步骤与tracker是一样的。先安装libevent和FastDFS组件,再依照下面的步骤安装其他的组件:
创建FastDFS数据存储目录/home/iflytek/fastdfs(该目录可自定义)
mkdir -p /home/iflytek/fastdfs
修改storage.conf配置
# vi /etc/fdfs/storage.conf
base_path=/home/yuqing/fastdfs --> /home/iflytek/fastdfs
store_path0=/home/yuqing/fastdfs --> store_path0=/home/iflytek/fastdfs
group_name=group1
tracker_server=192.168.209.121:22122 --> tracker_server=192.168.12.193:22122
##include http.conf --> #include http.conf
取消storage默认的http服务
#HTTPsettings
http.disabled=true
启动storage
/usr/local/bin/fdfs_storaged/etc/fdfs/storage.conf
重新启动storage命令如下:
/usr/local/bin/restart.sh /usr/local/bin/fdfs_storaged/etc/fdfs/storage.conf
此时确保可以与tracker通讯,关闭tracker服务器的防火墙或添加入站规则。如果此时出现异常请检查/home/iflytek/fastdfs/logs/storage.log文件的相关内容。
下述关于nginx的部署安装都是在storage服务器上进行的
安装fastdfs-nginx-module和nginx组件
解压fastdfs-nginx-module模块
cd ~
tar xvzf fastdfs-nginx-module_v1.10.tar.gz
安装nginx
cd ~
tar xvzf nginx-1.5.1.tar.gz
cd nginx-1.5.1
make clean
./configure --prefix=/usr/local/nginx --add-module=/root/fastdfs-nginx-module/src
make;make install
在nginx的server配置段中增加M00的location声明
vi/usr/local/nginx/conf/nginx.conf
location /group1/M00 {
root /home/iflytek/fastdfs/data;
ngx_fastdfs_module;
}
修改nginx默认工作端口
修改nginx默认工作端口80为8888,如下图所示
创建M00目录的软连接
mkdir-p /home/iflytek/fastdfs/data/M00
ln-s /home/iflytek/fastdfs/data /home/iflytek/fastdfs/data/M00
nginx启动和开机自启动
/usr/local/nginx/sbin/nginx
echo"/usr/local/nginx/sbin/nginx" >> /etc/rc.local
修改mod_fastdfs.conf
cp/root/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vi /etc/fdfs/mod_fastdfs.conf
# the base path to store log files
base_path=/home/storage 改为base_path=/home/iflytek/fastdfs====> 放置log的目录
# FastDFS tracker_server can ocur more than once, andtracker_server format is
# "host:port",host can be hostname or ip address
tracker_server=192.168.12.193:22122 ====>tracker server的ip和端口,此处可以写多个tracker server,每行一个
# the group name of storage server
group_name=group1 ====> 此台storage server所属的服务器组名
# if uri including group name
# default value is false
url_have_group_name = true ====> 在URL中包含group名称
# store_path#, based 0, if store_path0 not exists, it‘svalue is base_path
# the paths must be exist
store_path0=/home/iflytek/fastdfs ====> 放置文件的目录
在FastDFS的tracker或者storage节点上都可以承担client的角色。只需要配置一下client即可(本例在tracker节点上配置client),详细配置如下:
修改client.conf
# vi /etc/fdfs/client.conf
base_path=/home/yuqing/fastdfs-> base_path=/home/iflytek/fastdfs
tracker_server=192.168.209.121:22122 -> tracker_server=192.168.12.193:22122
##include http.conf ->#include http.conf
上传文件之前需先将工作目录切换到文件所在的目录中去(本例所上传的文件在/root目录下)
cd /root
文件上传
usr/local/bin/fdfs_test /etc/fdfs/client.conf upload install.log
/usr/local/bin/fdfs_test /etc/fdfs/client.conf upload install.log
1. This is FastDFS client test program v3.11
2.
3. Copyright (C) 2008, Happy Fish / YuQing
4.
5. FastDFS may be copied only under the terms of the GNU General
6. Public License V3, which may be found in the FastDFS source kit.
7. Please visit the FastDFS Home Page http://www.csource.org/
8. for more detail.
9.
10. [2012-09-12 15:43:03] DEBUG - base_path=/home/iflytek/fastdfs, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0
11.
12. tracker_query_storage_store_list_without_group:
13. server 1. group_name=group1, ip_addr=192.168.0.11, port=23000
14.
15. group_name=group1, ip_addr=192.168.0.11, port=23000
16. storage_upload_by_filename
17. group_name=group1, remote_filename=M00/00/00/CAAAC1BQPQqy0zXVAAWp7X_1XGc.tar.gz
18. source ip address: 192.168.0.11
19. file timestamp=2012-09-12 15:43:06
20. file size=371181
21. file crc32=2146786407
22. file url: http://192.168.12.193:8080/group1/M00/00/00/CAAAC1BQPQqy0zXVAAWp7X_1XGc.tar.gz
23. storage_upload_slave_by_filename
24. group_name=group1, remote_filename=M00/00/00/CAAAC1BQPQqy0zXVAAWp7X_1XGc_big.tar.gz
25. source ip address: 8.0.0.11
26. file timestamp=2012-09-12 15:43:06
27. file size=371181
28. file crc32=2146786407
29. file url: http://192.168.12.193:8080/group1/M00/00/00/CAAAC1BQPQqy0zXVAAWp7X_1XGc_big.tar.gz
通过浏览器访问上述标红的文件地址,如果浏览器返回文件的内容则说明部署成功。
在FastDFS的一个Group中可以设置多个存储路径,这样就可以使数据存储到多个存储目录中。设置多路径后至于数据存储到哪个目录中是由FastDFS随机分配的,关于Group中多存储路径的设置详细信息如下所述:
修改storage服务器上的storage.conf
编辑storage.conf
Vi /etc/fdfs/storage.conf
修改存储路径节点数
# path(disk or mount point) count, default value is 1
store_path_count=3 //根据实际情况修改配置的路径数,我这里配置了三个路径,默认是1
添加存储路径
# store_path#, based 0, if store_path0 not exists, it‘svalue is base_path
# the paths must be exist
store_path0=/iflytek/fastdfs //第一个数据存储路径
store_path1=/home/iflytek/fastdfs //第二个存储路径
store_path2=/opt/iflytek/fastdfs //第三个存储路径
#store_path1=/home/yuqing/fastdfs2
备注:上面的三个存储路径必须事先提前建立好,否则在重启storage服务时会提示找不到路径。路径的命名规则需遵守store_pathN的方式其中N代表1,2,3….N。
在nginx的server配置段中增加location声明
在storage.conf中增加了多个路径后需要在nginx的配置中对该配置进行声明,否则存储的数据将无法下载,这里以增加两个路径为例。
编辑nginx.conf增加如下配置项
Vi /usr/local/nginx/conf/nginx.conf
备注:必须在nginx的配置文件中作上述声明,否则上传的文件将无法通过返回的url地址进行下载。在此声明中store_path0对应M00,store_path1对应M01,以此类推。
对新增加目录创建软连接
ln –s /home/iflytek/fastdfs/data /home/iflytek/fastdfs/data/M01
ln –s /opt/iflytek/fastdfs/data /opt/iflytek/fastdfs/data/M02
修改storage服务器上的mod_fastdfs.conf文件
修改存储路径节点数
#path(disk or mount point) count, default value is 1
store_path_count=3
添加存储路径
#store_path#, based 0, if store_path0 not exists, it‘s value is base_path
#the paths must be exist
store_path0=/iflytek/fastdfs
store_path1=/home/iflytek/fastdfs
store_path2=/opt/iflytek/fastdfs
备注:在mod_fastdfs.conf中添加文件目录和storage.conf中增加的目录是相同的。
FAQ:
一个 tracker 可以有多个 stroage,一个 storage 也可以有多个 tracker
trackerip 必须全部写进 client 配置文件中,同时每次改变 client 配置文件,必须重启 php 加载新增 tracker 时,需 PHP 重启加载。
想要把fastDFS产生的记录清空,再重新搭建一次,应该删除哪些文件
停止storage server 和tracker server,删除base_path下的data 子目录即可
如何删除无效的 storage server?
可以使用 fdfs_monitor 来删除,命令行如下:
/usr/local/bin/fdfs_monitor<config_filename>delete <group_name><storage_ip>
例如:
/usr/local/bin/fdfs_monitor/etc/fdfs/client.conf delete group1 192.168.1.84
注意:如果被删除的 storage server 的状态是 ACTIVE,也就是该 storage server 还在线上服务的情况下,是无法删除掉的。
查看 tracker_server 及 storage_server 状态
/usr/local/bin/fdfs_monitor/etc/fdfs/client.conf
重启 tracker server 命令:
sh/data/soft/FastDFS/restart.sh /usr/local/bin/fdfs_trackerd/etc/fdfs/tracker.conf
重启 storage server 命令:
sh/data/soft/FastDFS/restart.sh /usr/local/bin/fdfs_storaged/etc/fdfs/storage.conf
FastDFS配置详解之Storage配置
1 基本配置
disabled
#func:该配置文件是否生效
#valu:
##true:无效
##false:生效
disabled=false
group_name
#func;本storage server所属组名
group_name=group1
bind_addr
#func:绑定本storage server的IP
bind_addr=
client_bind
#func:bind_addr是针对server的,当指定bind_addr时,本参数才有效。
#valu:
##true:绑定bind_addr所指定的IP
##false:绑定本机的任意IP
client_bind=true
port
#func:storage server端口
port=23000
connect_timeout
#func:连接超时
connect_timeout=30
network_timeout
#func:网络超时
network_timeout=60
heart_beat_interval
#func:本storage向tracker发送心跳时间间隔
heart_beat_interval=30
stat_report_interval
#func:硬盘存储空间使用情况检测时间间隔
stat_report_interval=60
base_path
#func:base_path
base_path=/home/michael/fdfs/base4storage
max_connections
#func:本storage server支持的最大并发连接数
max_connections=256
buff_size
#func:buff size to recv/send data
buff_size=256KB
work_thread
#func:work thread count, should <= max_connections
#valu:默认为4
#sinc:v2.0
work_thread=4
store_path_count/ store_path
#func:storage path的个数
#valu:默认为1
store_path_count=1
#func:根据store_path_count的值,如果是N个,就要有store_path0, store_path1 ... store_path(N-1)
#valu:
store_path0=/home/michael/fdfs/storage0
subdir_count_per_path
#func:FastDFS存储文件时,默认采用了两级目录。这里配置存放文件的目录个数
subdir_count_per_path=32
tracker_server
#func:tracker_server 的列表 要写端口号
tracker_server=192.168.6.188:22122
tracker_server=192.168.6.189:22122
tracker_server=192.168.6.190:22122
log_level
#func:
log_level=info
run_by_group
#func:
run_by_group
run_by_user
#func
run_by_user
allow_hosts
#func:允许连接的客户端IP列表
allow_hosts=*
file_distribute_path_mode
#func:文件分布到data path的方式
#valu:
## 0:轮询
## 1:随机,根据哈希code
file_distribute_path_mode=0
file_distribute_rotate_count
#func:当file_distribute_path_mode设置为0(轮询)时,该值才有效。功能是,当写文件计数打到该值时,转至下一个path。
file_distribute_rotate_count=100
thread_stack_size
#func:线程栈大小
#valu:要求至少512KB
thread_stack_size=512KB
upload_priority
#func:上传优先级。只有tracker.conf中store_server=2时,才有效。
#valu:值约小,优先级越高。默认为10.
upload_priority=10
if_alias_prefix
#func:
#valu:
if_alias_prefix=
check_file_duplicate
#func:是否检查file重复。但为1时,使用FastDHT存储文件索引
#valu:默认为0
##1, yes, true or on:check
##0, no, false or off:不check
check_file_duplicate=0
key_namespace
#func:当上个参数设定为1或yes时(true/on也是可以的),在FastDHT中的命名空间
key_namespace=FastDFS
keep_alive
#func:与FastDHT的连接方式
#valu:默认为0,短连接
## 0:短连接(short connection)
## 1:长连接(persistent connection)
keep_alive=0
2 IO
disk_rw_separated
#func:是否I/O分离
#valu:默认为true
##true:分离
##false:不分离
disk_rw_separated=true
disk_rw_direct
#func:是否直接写,不使用cache
#value:
##true:直接写
##false:不直接写
disk_rw_direct=false
disk_reader_threads
#func:每个storage base path的读线程数。对于disk_rw_separated=true的方式该值为0.
#valu:默认为1
disk_reader_threads=1
disk_writer_threads
#func:每个storage base path的写线程数。对于disk_rw_separated=true的方式该值为0.
#valu:默认为1
disk_writer_threads=1
3 同步
#func:同步文件时,如果从binlog中没有读到要同步的文件,休眠N毫秒后重新读取。
#valu:单位为毫秒。0表示不休眠,立即再次尝试读取。
sync_wait_msec=50
sync_interval
#func:同步一个文件后,在下次进行同步前的休息时间
#valu:单位为毫秒
sync_interval=0
sync_start_time
#func:每天存储同步的开始时间。
#valu:HH:mm
sync_start_time=00:00
sync_end_time
#func:每天存储同步的结束时间。
#valu:HH:mm
sync_end_time=23:59
write_mark_file_freq
#func:把storage的mark文件定期同步到磁盘的时间间隔
#valu:单位为秒
write_mark_file_freq=500
fsync_after_written_bytes
#func:当写大文件时,每写入N个字节,调用一次系统函数fsync将内容强行同步到硬盘。
#valu:0表示从不调用fsync
fsync_after_written_bytes=0
sync_log_buff_interval
#func:同步或刷新日志信息到硬盘的时间间隔
#valu:单位为秒
sync_log_buff_interval=10
sync_binlog_buff_interval
#func:同步binlog(更新操作日志)到硬盘的时间间隔
#valu:单位为秒
sync_binlog_buff_interval=60
sync_stat_file_interval
#func:把storage的stat文件同步到磁盘的时间间隔
#valu:单位为秒
sync_stat_file_interval=300
4HTTP 相关
是否启用 HTTP
#func:是否开启HTTP
http.disabled
domain
#func:如果将该项留空,则使用IP,否则可以通过tracker来redirect。
http.domain_name=
serverport
#func:HTTP端口号
http.server_port
trunksize
#func:trunk file size
http.trunk_size=256KB
否需要从文件扩展名确定文件内容
#func:是否需要从文件扩展名确定文件内容
http.need_find_content_type=true
FastDFS配置详解之Tracker配置
1 基本配置
disable
#func:配置是否生效
#valu:true、false
disable=false
bind_addr
#func:绑定IP
#valu:IP地址
bind_addr=192.168.6.102
port
#func:服务端口
#valu:端口整数值
port=22122
connect_timeout
#func:连接超时
#valu:秒单位正整数值
connect_timeout=30
network_timeout
#func:网络超时
#valu:秒单位正整数值
network_timeout=60
base_path
#func:Tracker数据/日志目录地址
#valu:路径
base_path=/home/michael/fdfs/base4tracker
max_connections
#func:最大连接数
#valu:正整数值
max_connections=256
work_threads
#func:线程数,通常设置CPU数
#valu:正整数值
work_threads=4
store_lookup
#func:上传文件的选组方式。
#valu:0、1或2。
# 0:表示轮询
# 1:表示指定组
# 2:表示存储负载均衡(选择剩余空间最大的组)
store_lookup=2
store_group
#func:指定上传的组,如果在应用层指定了具体的组,那么这个参数将不会起效。另外如果store_lookup如果是0或2,则此参数无效。
#valu:group1等
store_group=group1
store_server
#func:上传服务器的选择方式。(一个文件被上传后,这个storage server就相当于这个文件的storage server源,会对同组的storage server推送这个文件达到同步效果)
#valu:0、1或2
# 0:轮询方式(默认)
# 1:根据ip 地址进行排序选择第一个服务器(IP地址最小者)
# 2:根据优先级进行排序(上传优先级由storage server来设置,参数名为upload_priority),优先级值越小优先级越高。
store_server=0
store_path
#func:上传路径的选择方式。storage server可以有多个存放文件的base path(可以理解为多个磁盘)。
#valu:
# 0:轮流方式,多个目录依次存放文件
# 2:存储负载均衡。选择剩余空间最大的目录存放文件(注意:剩余磁盘空间是动态的,因此存储到的目录或磁盘可能也是变化的)
store_path=0
download_server
#func:下载服务器的选择方式。
#valu:
# 0:轮询(默认)
# 1:IP最小者
# 2:优先级排序(值最小的,优先级最高。)
download_server=0
reserved_storage_space
#func:保留空间值。如果某个组中的某个服务器的剩余自由空间小于设定值,则文件不会被上传到这个组。
#valu:
# Gor g for gigabyte
# Mor m for megabyte
# Kor k for kilobyte
reserved_storage_space=1GB
log_level
#func:日志级别
#valu:
#emerg for emergency
#alert
#crit for critical
#error
#warn for warning
#notice
#info for information
#debug for debugging
log_level=info
run_by_group/ run_by_user
#func:指定运行该程序的用户组
#valu:用户组名或空
run_by_group=
#func:
#valu:
run_by_user=
allow_hosts
#func:可以连接到tracker server的ip范围。可设定多个值。
#valu
allow_hosts=
check_active_interval
#func:检测 storage server 存活的时间隔,单位为秒。
# storage server定期向tracker server 发心跳,
# 如果tracker server在一个check_active_interval内还没有收到storage server的一次心跳,
# 那边将认为该storage server已经下线。所以本参数值必须大于storage server配置的心跳时间间隔。
# 通常配置为storage server心跳时间间隔的2倍或3倍。
check_active_interval=120
thread_stack_size
#func:设定线程栈的大小。 线程栈越大,一个线程占用的系统资源就越多。
# 如果要启动更多的线程(V1.x对应的参数为max_connections,V2.0为work_threads),可以适当降低本参数值。
#valu:如64KB,默认值为64,trackerserver线程栈不应小于64KB
thread_stack_size=64KB
storage_ip_changed_auto_adjust
#func:这个参数控制当storage server IP地址改变时,集群是否自动调整。注:只有在storageserver进程重启时才完成自动调整。
#valu:true或false
storage_ip_changed_auto_adjust=true
2 同步
storage_sync_file_max_delay
#func:同组storage服务器之间同步的最大延迟时间。存储服务器之间同步文件的最大延迟时间,根据实际情况进行调整
#valu:秒为单位,默认值为1天(24*3600)
#sinc:v2.0
storage_sync_file_max_delay=86400
storage_sync_file_max_time
#func:存储服务器同步一个文件需要消耗的最大时间,缺省为300s,即5分钟。
#sinc:v2.0
storage_sync_file_max_time=300
sync_log_buff_interval
#func:同步或刷新日志信息到硬盘的时间间隔。注意:tracker server 的日志不是时时写硬盘的,而是先写内存。
#valu:以秒为单位
sync_log_buff_interval=10
3trunk 和 slot
#func:是否使用trunk文件来存储几个小文件
#valu:true或false
#sinc:v3.0
use_trunk_file=false
#func:最小slot大小
#valu:<= 4KB,默认为256字节
#sinc:v3.0
slot_min_size=256
#func:最大slot大小
#valu:>= slot_min_size,当小于这个值的时候就存储到trunk file中。默认为16MB。
#sinc:v3.0
slot_max_size=16MB
#func:trunk file的size
#valu:>= 4MB,默认为64MB
#sinc:v3.0
trunk_file_size=64MB
4HTTP 相关
是否启用 HTTP
#func:HTTP是否生效
#valu:true或false
http.disabled=false
HTTP服务器端口号
#func:tracker server上的http port
#valu:
#note:只有http.disabled=false时才生效
http.server_port=7271
检查Storage存活状态的间隔时间(心跳检测)
#func:检查storage http server存活的间隔时间
#valu:单位为秒
#note:只有http.disabled=false时才生效
http.check_alive_interval=30
心跳检测使用的协议方式
#func:检查storage http server存活的方式
#valu:
#tcp:连接到storage server的http端口,不进行request和response。
#http:storage check alive url must return http status 200.
#note:只有http.disabled=false时才生效
http.check_alive_type=tcp
检查 Storage 状态的 URI
#func:检查storage http server是否alive的uri/url
#note:只有http.disabled=false时才生效
http.check_alive_uri=/status.html
need_find_content_type
#func:if need find content type form file extension name
#note:只有http.disabled=false时才生效
http.need_find_content_type=true
HTTP配置文件
#func:”#include http.conf“表示redirect to includeother settings
#includehttp.conf
原文地址:http://lz710.blog.51cto.com/8184961/1695941