分佈式圖片服務器——FastDFS
FastDFS由淘寶開發平臺部資深架構師餘慶開發。該開源項目的主頁是 http://code.google.com/p/fastdfs
github:https://github.com/happyfish100
FastDFS 是用 c 語言編寫的一款開源的分佈式文件系統。FastDFS 爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用 FastDFS很容易搭建一套高性能的文件服務器集羣提供文件上傳、下載等服務。
FastDFS 架構包括 Tracker server 和 Storage server。客戶端請求 Tracker server 進行文件上傳、下載,通過 Tracker server 調度最終由 Storage server 完成文件上傳和下載。
Tracker server 作用是負載均衡和調度,通過 Tracker server 在文件上傳時可以根據一些策略找到 Storage server 提供文件上傳服務。可以將 tracker 稱爲追蹤服務器或調度服務器。
Storage server 作用是文件存儲,客戶端上傳的文件最終存儲在 Storage 服務器上,Storage server 沒有實現自己的文件系統而是利用操作系統的文件系統來管理文件。可以將storage稱爲存儲服務器。
Tracker:管理集羣,tracker 也可以實現集羣。每個 tracker 節點地位平等。收集 Storage 集羣的狀態。
Storage:實際保存文件 Storage 分爲多個組,每個組之間保存的文件是不同的。每個組內部可以有多個成員,組成員內部保存的內容是一樣的,組成員的地位是一致的,沒有主從的概念。
安裝
安裝libfastcommon
- 安裝gcc yum install gcc
- 解壓libfastcommon-1.0.39.tar
- 進入到解壓好的目錄編譯 ./make.sh
- 安裝編譯好的庫 ./make.sh install
libfastcommon默認會被安裝到/usr/lib64/libfastcommon.so,且安裝完後,會建立軟鏈接到:/usr/lib/libfastcommon.so
可以查看,ll /usr/lib目錄下:
安裝FastDFS
- 解壓fastdfs-5.11.tar
- 進入解壓好的目錄 ./make.sh 進行編譯
- 安裝編譯好的類庫 ./make.sh install(如果有錯誤信息就刪除重新安裝或者重啓,最好安裝在usr目錄下)
- 修改配置文件格式(把/etc/fdfs下的.sample的配置文件修改爲.conf)
cd /etc/fdfs/
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
安裝tracker
- 創建tracker工作目錄(用來保存tracker的data和log),這個目錄可以根據個人習慣來創建目錄的位置
mkdir -p /usr/fdfs/tracker
- 配置tracker
cd /etc/fdfs
vi tracker.conf
1.disabled=false #默認開啓
2.port=22122 #默認端口號
3.base_path=/usr/fdfs/tracker #我剛剛創建的目錄
4.http.server_port=6666 #默認端口是8080,容易衝突
- 啓動tracker:service fdfs_trackerd start
- 如果不能啓動或提示用systemctl可改用命令:systemctl start fdfs_trackerd
啓動成功後可以看到Starting FastDFS tracker server:
進入創建的tracker目錄,發現目錄中多了data和log兩個目錄
查看進程:ps -ef | grep fdfs
查看一下tracker的端口監聽情況(需要先安裝net-tools網絡工具包:yum install net-tools -y)
netstat -antp|grep fdfs
端口22122是否成功監聽
設置tracker開機啓動
1、查看開啓啓動文件權限:ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 220 11月 23 2013 /etc/rc.d/rc.local
2、有x執行權限(如果沒有,需要加一下:chmod +x /etc/rc.d/rc.local)
3、修改rc.local
vi /etc/rc.d/rc.local
service fdfs_trackerd start
安裝storage
- 創建storage工作目錄(一個storage和一個storage_data用來存儲數據),可以根據個人習慣來創建目錄的位置
mkdir -p /usr/fdfs/storage
mkdir -p /usr/fdfs/storage_data
- 配置storage
vi /etc/fdfs/storage.conf
1.disabled=false #默認
2.group_name=group1 #組名,根據實際情況修改
3.port=23000 #設置storage的端口號,默認是23000,同一個組的storage端口號必須一致
4.base_path=/usr/fdfs/storage #設置storage數據文件和日誌目錄
5.store_path_count=1 #存儲路徑個數,需要和store_path個數匹配
6.store_path0=/usr/fdfs/storage_data #實際文件存儲路徑
7.tracker_server=192.168.188.138:22122 #我虛擬機的ip地址
8.http.server_port=8888 #設置 http 端口號
- 啓動storage:service fdfs_storaged start
- 如果不能啓動或提示用systemctl可改用命令:systemctl start fdfs_storaged
啓動成功後可以看到Starting FastDFS storage server:
進入創建的tracker目錄,發現目錄中多了data和log兩個目錄
查看進程:ps -ef | grep fdfs
查看一下tracker的端口監聽情況(需要先安裝net-tools網絡工具包:yum install net-tools -y)
netstat -antp|grep fdfs
端口22122是否成功監聽
設置storage開機啓動
1、查看開啓啓動文件權限:ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 220 11月 23 2013 /etc/rc.d/rc.local
2、有x執行權限(如果沒有,需要加一下:chmod +x /etc/rc.d/rc.local)
3、修改rc.local
vi /etc/rc.d/rc.local
service fdfs_storaged start
校驗整合
fastdfs的東西都已安裝完成,最後我們還要確定一下,storage是否註冊到了tracker中去
查看命令:/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
如果輸出截圖所示,則整合成功
測試文件上傳
fastdfs執行./make.sh install後,一些執行命令會被安裝到/usr/bin/下
查看/usr/bin下的fastdfs執行命令:ls -la /usr/bin/fdfs*
配置客戶端
修改客戶端的配置文件:vi /etc/fdfs/client.conf
修改內容:
base_path=/usr/fdfs/tracker #tracker服務器文件路徑
tracker_server=192.168.2.123:22122 #tracker服務器IP地址和端口號
http.tracker_server_port=6666 # tracker 服務器的http端口號,必須和tracker的設置對應起來
模擬上傳
上傳一張本地圖片到usr目錄
確定圖片位置後,我們輸入上傳圖片命令把圖片上傳到FastDFS服務器
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/test.jpg
成功後會返回圖片的路徑:group1/M00/00/00/wKgCe162rfuAQjZfAADFbi0oR0A946.jpg
組名:group1
虛擬磁盤:M00
目錄:00/00
文件名稱:wKgCe162rfuAQjZfAADFbi0oR0A946.jpg
我們上傳的圖片會被上傳到我們創建的storage_data目錄的data目錄下
fastdfs的nginx模塊安裝
安裝nginx之前的準備:安裝nginx所需的依賴lib(yum安裝存在就覆蓋,沒有進行安裝)
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
安裝nginx並添加fastdfs-nginx-module
準備工作
- 上傳nginx、fastdfs-nginx-module至usr:
- 分別解壓:tar -xvf
- 將nginx額外複製一份,形成nginx-1.14.2-1和nginx-1.14.2-2(因爲tracker和storage各需一個nginx)
- 通過fastdfs-nginx-module將nginx-1.14.2-1和nginx-1.14.2-2粘合在一起
開始整合
- 修改fastdfs-nginx-module中的錯誤(路徑)
- 配置storage-nginx
- 配置tracker-nginx
- 測試
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
上述路徑是我們安裝fastdfs自動配置好的路徑,而fastdfs-nginx-module中配置文件的這兩項路徑與我們安裝好後自動生成的路徑不一致,如果不修改會造成整合錯誤
修改之前
修改好之後進入nginx-1.14.2-1,重新configure(配置,前綴內容爲輸出路徑):
./configure --prefix=/usr/nginx-1 --add-module=/usr/fastdfs-nginx-module-1.20/src
配置完成後進行編譯make:make
編譯完成後進行安裝:make install
回到usr目錄下ls查看,可以看到nginx-1目錄,說明第一個nginx和fastdfs-nginx-module粘合編譯完成
配置storage-nginx
修改 vim /usr/nginx-1/conf/nginx.conf
修改監聽端口 listen 9999, 新增location
server {
listen 9999;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ~/group1/M00 {
root /usr/fdfs/storage_data/data;
ngx_fastdfs_module;
}
location = /50x.html {
root html;
}
}
然後進入FastDFS安裝時解壓的目錄,將http.conf和mime.types拷貝到/etc/fdfs目錄下:
cd /usr/fastdfs-5.11/conf
cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/
把fastdfs-nginx-module安裝目錄中src目錄下的mod_fastdfs.conf也拷貝到/etc/fdfs目錄下:
cd /usr/fastdfs-nginx-module-1.20/src
cp mod_fastdfs.conf /etc/fdfs/
在/etc/fdfs/下 對mod_fastdfs.conf文件進行修改
vim /etc/fdfs/mod_fastdfs.conf
base_path=/usr/fdfs/storage #保存日誌目錄
tracker_server=192.168.188.138:22122 #tracker服務器的IP地址以及端口號
storage_server_port=23000 #storage服務器的端口號,默認即可
url_have_group_name = true #文件 url 中是否有 group 名,改爲true
store_path0=/usr/fdfs/storage_data #存儲路徑
group_count = 1 #設置組的個數,事實上這次只使用了group1
在文件的最後,設置group
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/usr/fdfs/storage_data
啓動nginx-1:/usr/nginx-1/sbin/nginx
設置開機自動啓動nginx:
修改rc.local
vim /etc/rc.d/rc.local
在最後增加:/usrl/nginx-1/sbin/nginx
配置tracker-nginx
進入nginx-1.14.2-1-2,配置:
./configure --prefix=/usr/nginx-2 --add-module=/usr/fastdfs-nginx-module-1.20/src
配置完成後進行編譯make:make
編譯完成後進行安裝:make install
修改nginx-2的nginx.conf,在http中做修改
upstream fdfs_group1 {
server 127.0.0.1:9999;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /group1/M00 {
proxy_pass http://fdfs_group1;
}
#location / {
# root html;
# index index.html index.htm;
#}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
啓動測試,訪問默認端口80
設置開機自啓
修改rc.local
vim /etc/rc.d/rc.local
在最後增加:/usrl/nginx-2/sbin/nginx
測試訪問tracker拿到storage中存儲的數據