FastDFS是一款開源的輕量級分布式文件系統,純C實現,支持Linux、FreeBSD等Unix系統。
類google FS,不是通用的文件系統,只能通過專有API訪問。
FastDFS服務端有兩種角色:跟蹤器(tracker)和存儲節點(storage)。
tracker主要做調度工作,在訪問上起負載均衡的作用,在內存中記錄集群中group和storage的狀態信息,是連接client和storage的樞紐。
storage存儲服務器,文件和文件屬性都保存到存儲服務器上。
一、安裝fastdfs
下載libfastcommon包
https://github.com/happyfish100/libfastcommon/releases
下載fastdfs源碼包
https://github.com/happyfish100/fastdfs/releases
安裝libfastcommon
> tar xf libfastcommon-1.0.7.tar.gz > cd libfastcommon-1.0.7 > ./make.sh > ./make.sh install
安裝fastdfs
> tar xf fastdfs-5.09.tar.gz > cd fastdfs-5.09 > ./make.sh > ./make.sh install
如果出現ioevent.h:82:2: #error port me這樣的錯誤,請下載最新版的libfastcommon並安裝。
二、環境說明
創建兩台虛擬主機,IP分別為192.168.1.222和192.168.1.233,分別安裝fastdfs。
三、fastdfs的配置文件
配置文件默認在/etc/fdfs下
默認腳本在/etc/init.d下
創建兩個目錄,用來存放數據
> mkdir -p /data/fdfs_tracker > mkdir -p /data/fdfs_storage
復制配置文件
> cd /etc/fdfs > cp storage.conf.sample storage.conf > cp tracker.conf.sample tracker.conf
跟蹤器的配置文件tracker.conf
#綁定IP bind_addr= #端口 port=22122 #連接超時時間 connect_timeout=30 #日志數據路徑 base_path=/data/fdfs_tracker #上傳文件時選擇group的方法 #0:輪詢,1:指定組,2:選擇剩余空間最大 store_lookup=2 #如果上面的配置是1,那么這里必須指定組名 store_group=group2 #上傳文件時選擇server的方法 #0:輪詢,1:按IP地址排序,2:通過權重排序 store_server=0 #storage上預留空間 reserved_storage_space = 10%
存儲節點的配置文件storage.conf
#storage server所屬組名 group_name=group1 #綁定IP bind_addr= #storage server的端口 port=23000 #連接超時時間 connect_timeout=30 #日志數據路徑 base_path=/data/fdfs_storage/base #storage path的個數 store_path_count=2 #根據store_path_count的值,就要有storage0到storage(N-1)個 store_path0=/data/fdfs_storage/storage0 store_path1=/data/fdfs_storage/storage1 #跟蹤服務器 tracker_server=192.168.1.222:22122 tracker_server=192.168.1.233:22122
創建目錄,不然會出錯
> mkdir -p /data/fdfs_storage/base > mkdir -p /data/fdfs_storage/storage0 > mkdir -p /data/fdfs_storage/storage1
啟動服務
> /etc/init.d/fdfs_trackerd start > /etc/init.d/fdfs_storaged start
查看服務是否啟動
> ps -ef|grep fdfs > netstat -nltp
四、測試fastdfs
配置client文件
> cd /etc/fdfs > cp client.conf.sample client.conf > vi client.conf
#存放日志目錄 base_path=/data/client #跟蹤服務器 tracker_server=192.168.1.222:22122 tracker_server=192.168.1.233:22122
創建client目錄
> mkdir -p /data/client
通過fdfs_upload_file來測試(如果發生錯誤,請查看防火牆)
> echo "12345678" >> /data/1.txt > fdfs_upload_file /etc/fdfs/client.conf /data/1.txt
通過fdfs_download_file下載我們剛上傳的文件
> fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgB3li3a2mAejYPAAAADok0NhY177.txt
查看文件信息
> fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKgB3li3a2mAejYPAAAADok0NhY177.txt
追加文件
> echo "hello" >> /data/2.txt > fdfs_upload_appender /etc/fdfs/client.conf /data/1.txt > fdfs_append_file /etc/fdfs/client.conf group1/M00/00/00/wKgB3li3bxCEAcqhAAAAAIk0NhY869.txt /data/2.txt
刪除文件
> fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKgB3li3a2mAejYPAAAADok0NhY177.txt
查看集群
> fdfs_monitor /etc/fdfs/client.conf
五、fastdfs的nginx模塊
下載pcre和nginx源碼包
https://ftp.pcre.org/pub/pcre/
如:pcre-8.40.tar.gz
http://nginx.org/en/download.html
如:nginx-1.10.3.tar.gz
https://github.com/happyfish100/fastdfs-nginx-module
如:fastdfs-nginx-module-master.zip
創建用戶
> useradd -s /sbin/nologin -M nginx
安裝pcre
> tar xf pcre-8.40.tar.gz > cd pcre-8.40 > ./configure --prefix=/data/pcre > make && make install
安裝nginx
> yum install zlib-devel openssl-devel > unzip fastdfs-nginx-module-master.zip > tar xf nginx-1.10.3.tar.gz > cd nginx-1.10.3 > ./configure --prefix=/data/nginx \ > --with-pcre=/data/pcre-8.40 \ > --user=nginx \ > --group=nginx \ > --with-http_ssl_module \ > --with-http_realip_module \ > --with-http_stub_status_module \ > --add-module=/data/fastdfs-nginx-module-master/src > make && make install
拷貝配置文件
> cd /data/fastdfs-nginx-module-master/src > cp mod_fastdfs.conf /etc/fdfs/ > cd /data/fastdfs-5.09/conf > cp anti-steal.jpg http.conf mime.types /etc/fdfs/
修改nginx.conf
> vi /data/nginx/conf/nginx.conf
server { listen 80; server_name localhost; location ~ /group[0-9]/M00 { ngx_fastdfs_module; } }
修改mod_fastdfs.conf
> vi /etc/fdfs/mod_fastdfs.conf
#日志目錄 base_path=/tmp #跟蹤服務器 tracker_server=192.168.1.222:22122 tracker_server=192.168.1.233:22122 #url中是否有group名稱 url_have_group_name = true #storage path的個數 store_path_count=2 #根據store_path_count的值,就要有storage0到storage(N-1)個 store_path0=/data/fdfs_storage/storage0 store_path1=/data/fdfs_storage/storage1
啟動nginx
> /data/nginx/sbin/nginx
上傳一個文件
> echo "12345678" >> /data/1.txt > fdfs_upload_file /etc/fdfs/client.conf /data/1.txt
然后通過nginx訪問該文件
http://192.168.1.222/group1/M00/00/00/wKgB6Vi3fGiAMsO2AAAAB2BGSN8003.txt