FastDFS安装使用教程
前提:
了解Linux命令,参考网站:http://blog.sina.com.cn/s/blog_13887bf130102xnk7.html
至少要知道make install,vim等命令。
一、准备工作-安装libevent
下载地址:https://pan.baidu.com/s/1KvGi9R67EdR9_rIiH2Etxg
FastDFS 内部绑定了 libevent 作为 http 服务器 ,在V2.0以上版本必须安装 libevent 。
查看libevent是否已安装
ls -al /usr/lib | grep libevent
如果已经安装了 libevent,请确认安装路径是 /usr ,否则编译 FastDFS 会出错。因为 FastDFS 在编译源程序时,需要到此目录下查找一些依赖文件。如果不是,建议首先卸载 libevent ,然后安装到 /usr 下。
1.解压libevent:
安装包下载后放到任意路径即可,例如我放在/root下。
tar xvzf libevent-2.0.19-stable.tar.gz
2.进入解压后的目录进行安装,分别执行:
./configure --prefix=/usr(如报not found,查看 3.报错解决)
make clean;
make
make install
3. 报错解决:
如果执行./configure报一些not found的错的话,说明有些底层的包没有安装,请参考:http://blog.sina.com.cn/s/blog_13887bf130102xl44.html
安装libevent完成。要ROOT权限
二、 安装 FastDFS
下载地址:https://pan.baidu.com/s/1-JbpvLN148eBqp2uNOKXhw
1.解压FastDFS:
安装包下载后放到任意路径即可,例如我放在/root下。
tar xvzf FastDFS_v5.02.tar.gz
2.http支持 (如果文件中找不到,可以不处理)
由于要使用内置的 http 服务,因此编辑 FastDFS/make.sh 文件,找到#WITH_HTTPD=1 修改成 WITH_HTTPD=1,以支持 http,如果文件中找不到,可以不处理
3.进入FastDFS目录,执行安装
./make.sh
./make.sh install
至此FastDFS安装完成
三、配置及启动Tracker Server
1.修改etc/fdfs/tracker.conf文件,修改如下(以下修改都是在192.168.10.75主服务器的修改)
修改base_path,该目录必须存在,用于存储日志及storage server等信息
base_path=/home/yuqing/fastdfs -> base_path=/home/fastdfs (在home下创建fastdfs文件夹)
修改http端口
http.server_port=8080 -> http.server_port=8090
http支持
##include http.conf -> #include http.conf (没有找到##的话,直接新增)
绑定IP
bind_addr=192.168.10.75
2.将http.conf文件拷贝到/etc/fdfs目录下
cp /root/FastDFS/conf/http.conf /etc/fdfs/ (如果安装后默认存在的话,这一步就不用处理了)
注:为了支持http,必须将这个文件拷贝到此目录
3.启动tracker服务器
fdfs_trackerd /etc/fdfs/tracker.conf
至此tracker server已经启动成功
查看进程: ps -ef|grep fdfs
4.停止tracker server
stop.sh /etc/fdfs/tracker.conf
四、配置及启动Storage Server
1.修改etc/fdfs/storage.conf文件,修改如下:
修改base_path,该目录必须存在
base_path=/home/yuqing/fastdfs -> /home/fastdfs (在home下创建对应文件夹)
文件的存储位置,在一台storage server上可以指定多个存储位置
store_path0=/home/yuqing/fastdfs -> /home/fastdfs
store_path1=/home/yuqing/fastdfs -> /home/fastdfs1
store_path2=/home/yuqing/fastdfs -> /home/fastdfs2
..
几个存储位置store_path_count就要设置对应数量的
store_path_count=2
(注:如果是多个存储位置,系统存放按照tracker.conf中配置的来。store_lookup=X 0:轮询 1:specify group 2:按剩余空间大小 )
storage所在组
group_name=myGroup
修改成tracker server的IP和端口信息
tracker_server=192.168.10.75:22122
http支持
##include http.conf ->#include http.conf (没有找到##的话,直接新增一行)
2.启动storage服务器
启动storage时需要先启动tracker:
fdfs_trackerd /etc/fdfs/tracker.conf
fdfs_storaged /etc/fdfs/storage.conf
至此storage server已经启动成功
查看进程: ps -ef|grep fdfs
如果执行完命令没有卡住就代表启动成功了,如果卡住了,无法进入下一个命令行,那就是启动失败了,按ctrl+c可以进入下一个命令行。
启动失败后,可以去/home/fastdfs/logs中查看日志。
我第一次storage启动失败的理由是:storage_ip_changed_dealer.c, line: 180, connect to tracker server 192.168.10.75:22122 fail, errno: 111, error info: Connection refused
这个错误说明连接到tracker失败了,说明肯定是防火墙拦截了,我直接关闭防火墙就成功了。执行停止服务和禁止开机自启就可以了。
防火墙命令大全:
systemctl status firewalld #查看firewalld状态
systemctl stop firewalld #停止firewalld服务
systemctl disable firewalld #禁止防火墙开启自启
systemctl mask firewalld #禁用firewalld服务
systemctl start firewalld #启动firewalld服务
systemctl enable firewalld #启动防火墙开启自启
systemctl unmask firewalld #启动firewalld服务
3.停止storage server
stop.sh /etc/fdfs/storage.conf
4.多个storage
如果要扩展增加storage,可以直接新增storage服务器,配置同上,绑定tracker即可。
五、上传文件
FastDFS安装包中,自带了客户端程序,通过程序可以进行文件上传。在使用这个客户端程序之前,首先需要配置client.conf,然后再进行文件上传及下载。
1.修改/etc/fdfs/conf/client.conf文件,修改如下:
base_path=/home/yuqing/fastdfs-> base_path=/home/fastdfs
tracker_server=192.168.10.75:22122
http.tracker_server_port=8090
##include http.conf ->#include http.conf
2. 上传文件
例如将安装包/root/FastDFS/conf中的测试图片anti-steal.jpg上传到FastDFS:
sudo /usr/local/bin/fdfs_test /etc/fdfs/client.conf upload /root/FastDFS/conf/anti-steal.jpg
如果没有报错,而且显示出file url就代表上传文件成功,即fastdfs功能正常。
3.记录地址,用于安装Nginx后打开文件
例:file url: http://192.168.10.75:8090/myGroup/M00/00/00/wKhzjFrv_sCAObTYAAKKTERYCgk969_big.jpg
4.安装nginx:
参考地址:http://blog.sina.com.cn/s/blog_13887bf130102xnk4.html
六、相关地址
Tracker.conf,storage.conf,client.conf等路径:etc/fdfs/
上传,下载等操作日志路径:base_path中配置的home/fastdfs/log/
七、java客户端相关说明
配置文件详解
connect_timeout = 2
network_timeout = 30
charset = ISO8859-1
http.tracker_http_port = 8090
http.anti_steal_token = no
http.secret_key = FastDFS1234567890 在etc/fdfs/http.conf中配置的
tracker_server = 192.168.10.75:22122
附tracker和storage的配置文件详解
tracker 的配置文件详解
disabled=false
#配置是否生效
bind_addr=192.168.10.75
#绑定IP
port=22122
#服务端口
connect_timeout=30
#连接超时时间
network_timeout=60
#tracker server的网络超时,单位为秒。
base_path=/home/fastdfs
#目录地址,里面会创建data(存放存储服务器信息)、logs,日志文件
max_connections=256
#系统提供服务最大连接数
work_threads=4
#线程数,通常设置CPU数
store_lookup=2
上传组(卷) 的方式 0:轮询方式 1: 指定组 2: 平衡负载(选择最大剩余空间的组(卷)上传)
这里如果在应用层指定了上传到一个固定组,那么这个参数被绕过
store_group=group1
当上一个参数设定为1 时 (store_lookup=1,即指定组名时),必须设置本参数为系统中存在的一个组名。如果选择其他的上传方式,这个参数就没有效了
store_server=0
选择哪个storage server 进行上传操作(一个文件被上传后,这个storage server就相当于这个文件的storage server源,会对同组的storage server推送这个文件达到同步效果)
# 0: 轮询方式
# 1: 根据ip 地址进行排序选择第一个服务器(IP地址最小者)
# 2: 根据优先级进行排序(上传优先级由storage server来设置,参数名为upload_priority)
store_path=0
选择storage server 中的哪个目录进行上传。storage server可以有多个存放文件的base path(可以理解为多个磁盘)。
# 0: 轮流方式,多个目录依次存放文件
# 2: 选择剩余空间最大的目录存放文件(注意:剩余磁盘空间是动态的,因此存储到的目录或磁盘可能也是变化的)
download_server=0
选择哪个 storage server 作为下载服务器
# 0: 轮询方式,可以下载当前文件的任一storage server
# 1: 哪个为源storage server 就用哪一个 (前面说过了这个storage server源 是怎样产生的) 就是之前上传到哪个storage server服务器就是哪个了
reserved_storage_space = 4GB
storage server 上保留的空间,保证系统或其他应用需求空间(指出 如果同组的服务器的硬盘大小一样,以最小的为准,也就是只要同组中有一台服务器达到这个标准了,这个标准就生效,原因就是因为他们进行备份)
log_level=info
#选择日志级别
run_by_group=
#操作系统运行FastDFS的用户组
run_by_user=
#操作系统运行FastDFS的用户
allow_hosts=*
#可以连接到此 tracker server 的ip范围(对所有类型的连接都有影响,包括客户端,storage server)
sync_log_buff_interval = 10
# 同步或刷新日志信息到硬盘的时间间隔,单位为秒
# 注意:tracker server 的日志不是时时写硬盘的,而是先写内存。
check_active_interval = 120
# 检测 storage server 存活的时间隔,单位为秒。
# storage server定期向tracker server 发心跳,如果tracker server在一个check_active_interval内还没有收到storage server的一次心跳,那边将认为该storage server已经下线。所以本参数值必须大于storage server配置的心跳时间间隔。通常配置为storage server心跳时间间隔的2倍或3倍。
thread_stack_size = 64KB
# 线程栈的大小。FastDFS server端采用了线程方式。更正一下,tracker server线程栈不应小于64KB,不是512KB。
# 线程栈越大,一个线程占用的系统资源就越多。如果要启动更多的线程(V1.x对应的参数为max_connections,
V2.0为work_threads),可以适当降低本参数值。
storage_ip_changed_auto_adjust = true
# 这个参数控制当storage server IP地址改变时,集群是否自动调整。注:只有在storage server进程重启时才完成自动调整。
storage_sync_file_max_delay = 86400
# V2.0引入的参数。存储服务器之间同步文件的最大延迟时间,缺省为1天。根据实际情况进行调整
storage_sync_file_max_time = 300
# V2.0引入的参数。存储服务器同步一个文件需要消耗的最大时间,缺省为300s,即5分钟。
http.disabled=true
#HTTP服务是否不生效 当然编译的时候我已经把 with_httpd宏去掉了
http.server_port=80
# HTTP服务端口
#下列参数只有 开启http服务才有用
http.check_alive_interval=30
http.check_alive_type=tcp
http.check_alive_uri=/status.html
http.need_find_content_type=true
storage.conf的配置
disabled=false
#配置是否生效
group_name=group1
#storage所在组(卷)
bind_addr=192.168.10.75
# 绑定IP,另一太 storage IP为 192.168.10.74
client_bind=true
#bind_addr通常是针对server的。当指定bind_addr时,本参数才有效。
port=23000
# 是storage 服务端口
connect_timeout=30
# 连接超时时间,针对socket套接字函数connect
network_timeout=60
# storage server 网络超时时间,单位为秒。
heart_beat_interval=30
# 心跳间隔时间,单位为秒
stat_report_interval=60
# storage server向tracker server报告磁盘剩余空间的时间间隔,单位为秒。
base_path=/home/fastdfs
# base_path 目录地址,根目录必须存在 子目录会自动生成
# 会产生data(数据存储地方)、 logs日志文件
max_connections=256
# 最大连接数
buff_size = 256KB
# 设置队列结点的buffer大小。
work_threads=4
# 工作线程数
disk_rw_separated = true
# 磁盘IO读写是否分离,缺省是分离的。
disk_reader_threads = 1
# 针对单个存储路径的读线程数,缺省值为1
disk_writer_threads = 1
# 针对单个存储路径的写线程数,缺省值为1
sync_wait_msec=200
# 同步文件时,如果从binlog中没有读到要同步的文件,休眠N毫秒后重新读取,0表示不休眠,立即再次尝试读取。
sync_interval=0
# 同步上一个文件后,再同步下一个文件的时间间隔,单位为毫秒,0表示不休眠,直接同步下一个文件。
sync_start_time=00:00
sync_end_time=23:59
# 允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定,相信sa都会明白。
write_mark_file_freq=500
# 把storage的mark文件定期同步到磁盘的时间间隔,单位为秒
store_path_count=1
# 存放文件时storage server支持多个路径(例如磁盘)。这里配置存放文件的基路径数目,通常只配一个目录。
store_path0=/home/fastdfs0
store_path1=/home/fastdfs1
# 逐一配置store_path个路径,索引号基于0。注意配置方法后面有0,1,2 ......,需要配置0到store_path - 1。
# 如果不配置base_path0,那边它就和base_path对应的路径一样。
subdir_count_per_path=32
# FastDFS存储文件时,采用了两级目录。这里配置存放文件的目录个数
tracker_server=192.168.10.75:22122
# tracker_server 的列表 要写端口的哦
log_level=info
# 日志级别
run_by_group=
# 运行storage 用户组
run_by_user=
# 运行storage 用户
allow_hosts=*
# 允许连接IP列表
file_distribute_path_mode=0
# 文件在data目录下分散存储策略。
# 0: 轮流存放
# 1: 随机存储
file_distribute_rotate_count=100
# 当上面的参数file_distribute_path_mode配置为0(轮流存放方式)时,本参数有效。
#当一个目录下的文件存放的文件数达到本参数值时,后续上传的文件存储到下一个目录中
fsync_after_written_bytes=0
# 当写入大文件时,每写入N个字节,调用一次系统函数fsync将内容强行同步到硬盘。0表示从不调用fsync
sync_log_buff_interval=10
# 同步或刷新日志信息到硬盘的时间间隔,单位为秒
sync_binlog_buff_interval=60
# 同步binglog(更新操作日志)到硬盘的时间间隔,单位为秒
sync_stat_file_interval=300
# 把storage的stat文件同步到磁盘的时间间隔,单位为秒。
thread_stack_size=512KB
# 线程栈的大小。FastDFS server端采用了线程方式。
# 线程栈越大,一个线程占用的系统资源就越多。
upload_priority=10
本storage server作为源服务器,上传文件的优先级,可以为负数。值越小,优先级越高。这里就和 tracker.conf 中store_server= 2时的配置相对应了
if_alias_prefix=
check_file_duplicate=0
#是否检测上传文件已经存在。如果已经存在,则不存在文件内容,建立一个符号链接以节省磁盘空间。 结合 fastdfh使用的。 1是检测,0是不检测,我们不使用fastdfh 当然 0
key_namespace=FastDFS
# 当上个参数设定为1 或 yes时 (true/on也是可以的) , 在FastDHT中的命名空间
keep_alive=0
# 与FastDHT servers 的连接方式 (是否为持久连接)