fastDFS是用c写的一款开源的分布式文件系统,可以很容易地搭建一套分布式文件系统。
fastDFS中的三个角色
- 追踪器(Tracker)->管理者:管理存储节点,类似于Hadoop中的namenode
- 需要多个Tracker以避免单点故障
- 与Hadoop不同的是Tracker是以轮询的方式实现的
- 存储节点(storage)->存储节点:存储数据,类似于Hadoop中的DataNode
- (实现)客户端(client)->界面管理:上传下载功能的实现
安装
下载 libfastcommon与fastdfs
安装过程相同:
先安装libfastcommon
./make.sh && ./make.sh install
再安装fastdfs
./make.sh && ./make.sh install
工作顺序
- 启动Tracker
- Tracker接收storage的心跳信息并与其建立映射
- 启动storage
- 单独开启一个线程
- 汇报节点状态
- 汇报当前存储节点的磁盘信息
- 汇报数据同步情况
- 汇报数据被下载的次数
- 启动客户端
- 上传
- 连接Tracker,询问存储节点信息
- Tracker查询符合上传文件大小的存储节点并返回节点信息
- Tracker将节点信息返回给client
- (集群)选择需要连接的Tracker
- 发送文件
- 选择存储的group
- 存储上传文件后返回的一个文件地址
- 下载
- 连接Tracker,查询文件所在节点
- Tracker返回存储文件的节点信息,返回节点的ip:端口
- (集群)选择需要连接的Tracker
- 下载文件
测试安装
安装
libfastcommon-1.36.zip(fastdfs的基础库包 )
- unzip libfastcommon-1.36.zip
- ./make.sh
- ./make.sh install
fastdfs-5.10.tar.gz
tar zxvf fastdfs-5.10.tar.gz
./make.sh
./make.sh install
测试
1 2
| #fastDFS安装的所有的可执行程序: /usr/bin/fdfs_* fdfs_test
|
fastDFS配置文件
配置文件默认位置: /etc/fdfs
- client.conf.sample
- storage.conf.sample
- storage_ids.conf.sample
- tracker.conf.sample
tracker.conf
1 2 3 4 5
| # 将追踪器和部署的主机的IP地址进程绑定, 也可以不指定 # 如果不指定, 会自动绑定当前主机IP, 如果是云服务器建议不要写 bind_addr=192.168.247.135 # 追踪器监听的端口 port=22122 # 追踪器存储日志信息的目录, xxx.pid文件, 必须是一个存在的目录 base_path=/home/yuqing/fastdfs
|
storage.conf
1 2 3 4 5 6 7 8 9 10 11
| # 当前存储节点对应的主机属于哪一个组 group_name=group1 group_name=group1 # 当前存储节点和所应该的主机进行IP地址的绑定, 如果不写, 有fastdfs自动绑定 bind_addr= # 存储节点绑定的端口 port=23000 # 存储节点写log日志的路径 base_path=/home/yuqing/fastdfs # 存储节点提供的存储文件的路径个数 store_path_count=2 # 具体的存储路径 store_path0=/home/yuqing/fastdfs store_path1=/home/yuqing/fastdfs1 # 追踪器的地址信息 tracker_server=192.168.247.135:22122 tracker_server=192.168.247.136:22122 tracker_server=192.168.247.135:22122 tracker_server=192.168.247.136:22122
|
client.conf
1 2 3 4 5 6
| # 客户端写log日志的目录 # 该路径必须存在 # 当前的用户对于该路径中的文件有读写权限 # 当前用户robin # 指定的路径属于root base_path=/home/yuqing/fastdfs # 要连接的追踪器的地址信息 tracker_server=192.168.247.135:22122 tracker_server=192.168.247.136:22122
|
启动
tracker追踪器的启动
1 2 3 4 5 6 7
| # 启动程序在 /usr/bin/fdfs_* # 启动 fdfs_trackerd 追踪器的配置文件(/etc/fdfs/tracker.conf) # 关闭 fdfs_trackerd 追踪器的配置文件(/etc/fdfs/tracker.conf) stop # 重启 fdfs_trackerd 追踪器的配置文件(/etc/fdfs/tracker.conf) restart
|
storage存储节点的启动
1 2 3 4 5 6
| # 启动 fdfs_storaged 存储节点的配置文件(/etc/fdfs/stroga.conf) # 关闭 fdfs_storaged 存储节点的配置文件(/etc/fdfs/stroga.conf) stop # 重启 fdfs_storaged 存储节点的配置文件(/etc/fdfs/stroga.conf) restart
|
client客户端启动
1 2 3 4 5 6
| # 上传 fdfs_upload_file 客户端的配置文件(/etc/fdfs/client.conf) 要上传的文件 # 得到的结果字符串: group1/M00/00/00/wKj3h1vC-PuAJ09iAAAHT1YnUNE31352.c # 下载 fdfs_download_file 客户端的配置文件(/etc/fdfs/client.conf) 上传成功之后得到的字符串(fileID)
|
fastdfs状态检测
1 2
| # 检测命令 fdfs_monitor /etc/fdfs/client.conf
|
storage的七种状态
1 2 3 4 5 6 7
| # FDFS_STORAGE_STATUS:INIT:初始化,尚未得到同步已有数据的源服务器 # FDFS_STORAGE_STATUS:WAIT_SYNC :等待同步,已得到同步已有数据的源服务器 # FDFS_STORAGE_STATUS:SYNCING:同步中 # FDFS_STORAGE_STATUS:DELETED:已删除,该服务器从本组中摘除 # FDFS_STORAGE_STATUS:OFFLINE:离线 # FDFS_STORAGE_STATUS:ONLINE:在线,尚不能提供服务 # FDFS_STORAGE_STATUS:ACTIVE:在线,可以提供服务
|
fileID
file.md -> group1/M00/00/00wKhS_VlrEf0AdIZyAAAJT0wCgr43848.md
- group1
- 文件上传到的存储节点的哪个组
- 如果有多个组,组名是变化的
- M00
- 虚拟目录
- 和存储节点的配置项映射
- store_path0=/home/yuqing/fastdfs/data -> M00
- store_path1=/home/yuqing/fastdfs1/data -> M01
- 00/00
- wKhS_VlrEfOAdIZyAAAJTOwCGr43848.md
- 文件名包含的信息,
- Base64编码,信息包括:
- 源storage server ip地址
- 文件创建时间
- 文件大小
- 文件CRC32校验码
- 随机数