因最近工作上需要,在项目引入了分布式文件系统。中间查看各种资料,发现国内关于分布式文件的资料好少,费了我不少功夫,特写博文以记录。
分布系统中,一个很重要的问题就是文件的分布式存储。早期的方式就是用nfs,也可能还有其他的。使用nfs也有各种优缺点,这里就不扯淡了。然后典型分布式文件系统就是Google的gfs ,Hadoop 的hdfs , Ceph , MogileFS , FastDFS (国人开发),还有淘宝 tfs ,gridfs MongoDB的一个内置功能 。 各自的优缺点和适用场景这里也不累赘了。查找下资料基本都有(不过都是12,11年发布的,新资料好少,这都三四年过去了不知道发展怎么样)
经过三四天的各种查资料,和朋友讨论学习,中间还找到了开源中国的技术哥哥聊了一下。最后还是选择了 fastDFS,。 引用一下他人的话: fastDFS 是一款类似Google FS的开源分布式文件系统,是纯C语言开发的。
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
官方论坛 http://bbs.chinaunix.net/forum-240-1.html
分布式文件系统FastDFS架构剖析 http://www.programmer.com.cn/4380/
其他不多说了,开始fastDFS + nginx了 (以下部分大部分是原作者写的,大家可以直接查看原文 fastdfs+nginx)
原文中文章尾部提供了各种安装包
虚拟机环境 2台centos6.5
192.168.73.128 tracker.test.com tracker
192.168.73.129 s1.test.com s1
1. 节点和关闭服务(未关闭貌似也没事)
service iptables stop
chkconfig iptables off
vi /etc/selinux/config
修改 selinux=disable
2. Tracker和storage上安装FastDFS
yum install -y gcc gcc-c++
解压将安装包复制到/usr/local/src目录下
安装libfastcommon
#step 1. enterthe libfastcommon dir
cd libfastcommon
#step 2. make
./make.sh
#step 3. makeinstall
./make.sh install
安装FastDFS
#step 1. 更改make.sh文件中TARGET_CONF_PATH=/usr/local/FastDFS
#step 2. enter the FastDFS dir
cd FastDFS
#step 3.execute:
./make.sh
#step 4. makeinstall
./make.sh install
3. 配置Tracker和Storage
修改/etc/fdfs/tracker.conf.sample另存为tracker.conf
Tracker:
mkdir /mnt/fastdfs_tracker (数据存储)
vim /etc/fdfs/tracker.conf
base_path=/mnt/fastdfs_tracker (tracker.conf文件中找到base_path=/数据存放区)
fdfs_trackerd /etc/fdfs/tracker.conf (启动服务 ,*重要提示,在Ubuntu14.04中到此处会报错误,本人在此跳入好大坑,之后处理无果,换系统之(centos6.5))
Storage:
mkdir /mnt/fastdfs_storage_info
mkdir /mnt/fastdfs_storage_data
base_path=/mnt/fastdfs_storage_info
store_path0=/mnt/fastdfs_storage_data
tracker_server=192.168.73.128:22122
以上三句打开/etc/fdfs/storeage.conf.sample文件找到修改自己对应的值
fdfs_storaged /etc/fdfs/storage.conf (启动存储节点)
出错请查看日志:
/mnt/fastdfs_tracker/logs/tracker.log
/mnt/fastdfs_storage_info/logs/storage.log
4. 配置Storage (此步骤切记安装nginx在storage服务器上,tracker上安装无效)
安装nginx依赖包
yum install –y openssl-devel pcre-devel zlib-devel
设置软连接(ps:可以将下面加入到/etc/rc.d/rc.local):(此处不知道是不是本人没用设置软连接成功,为之后埋下了大地雷,天坑)
ln -sv /usr/include/fastcommon /usr/local/include/fastcommon
ln -sv /usr/local/FastDFS/include/fastdfs /usr/local/include/fastdfs
ln -sv /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -sv /usr/local/FastDFS/lib64/libfdfsclient.so /usr/lib64/libfdfsclient.so
/usr/local/FastDFS/bin/fdfs_trackerd/etc/fdfs/tracker.conf restart
注:linux64加载的是lib64目录因此设置软连接至lib64
cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf/etc/fdfs/
vi /etc/fdfs/mod_fastdfs.conf
tracker_server=192.168.1.50:22122#修改为tracker server信息
url_have_group_name= true #改为true
store_path0=/mnt/fastdfs_storage_data#改为数据存储路径,和storage.conf一样。
将安装包解压到/usr/local/src目录下
cd /usr/local/nginx-1.7.8
./configure–prefix=/usr/local/nginx –add-module=/usr/local/fastdfs-nginx-module/src
make &&make install (本人在此处make的时候报错了,大家不用慌,记得看错误,我当时的错误差不多都是找不到.h .c等头文件,只需要在系统中用find / -name filename 找到文件复制到你自己的fastdfs-nginx-module/src/路径中,再次编译)
修改nginx配置文件:
vi/usr/local/nginx/conf/nginx.conf
复制代码
location /group1/M00 {
root /mnt/fastdfs_storage_data;
ngx_fastdfs_module;
}
安装nginx有问题,可以执行:
yum groupinstall"Development Tools"
ldd $(which /usr/local/nginx/sbin/nginx)
命令详解:
Tracker server启动
/usr/local/FastDFS/bin/fdfs_trackerd /etc/fdfs/tracker.conf
Storage server启动
/usr/local/FastDFS/bin/fdfs_storaged /etc/fdfs/storage.conf
查看是否启动成功
netstat -ntpl | grep fdfs
Storage server启动nginx
cd /usr/local/nginx/sbin
~./nginx
Nginx.conf
不打开直接下载文件:
location/
{
if($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){
add_headerContent-Disposition: 'attachment;';
}
}
到此基本fastDFS安装就结束了 ,之后再使用过程在记录 。 在弄分布式文件系统的整个过程,系统中还安装过hdfs ,gridfs,确实走了不少弯路,很大原因可能是:分布式文件应用还不够广,资料老旧,社区分享资料少 , 总之就是资料少。所以我决定以后再实践过程中,尽量多记多分享。
本文参考了好多文章博文,这里就不一一列了,挑几个代表性的:
几大分布式系统的简介: http://elf8848.iteye.com/blog/1724382
fastDFS官方资料 http://bbs.chinaunix.net/forum.php?mod=forumdisplay&fid=240&page=1 (有问题可以在这个地方找到)