(親測有效 宿主機是ubuntu16.4虛擬機)
FastDFS
FastDFS是是一個輕量級、高性能的開源分佈式文件系統,用純C語言開發,包括文件存儲、文件同步、文件訪問(上傳、下載)、存取負載均衡、在線擴容、相同內容只存儲一份等功能,適合有大容量存儲需求的應用或系統
FastDFS 的作者餘慶在其 GitHub 上是這樣描述的:
FastDFS 是一個開源的高性能分佈式文件系統。其主要功能包括文件存儲、文件同步和文件訪問(文件上傳和文件下載),可以解決高容量和負載平衡問題。FastDFS 應滿足基於照片共享站點和視頻共享站點等文件的網站的服務要求。
FastDFS 有兩個角色:跟蹤器(Tracker)和存儲器(Storage)。Tracker 負責文件訪問的調度和負載平衡,Storage 存儲文件及其功能是文件管理,包括文件存儲、文件同步、提供文件訪問接口。它還管理元數據,這些元數據是表示爲文件的鍵值對的屬性。Tracker 和 Storage 節點都可以由一臺或多臺服務器構成。這些服務器均可以隨時增加或下線而不會影響線上服務,當然各個節點集羣至少需要一臺服務 Running。注意,其中 Tracker 集羣中的所有服務器都是對等的(P2P),可以根據服務器的壓力情況隨時增加或減少。
此外,官網還存儲系統做了詳盡的說明,爲了支持大容量,Storage 節點採用了分卷(或分組)的組織方式。存儲系統由一個或多個卷組成,卷與卷之間的文件是相互獨立的,所有卷的文件容量累加就是整個存儲系統中的文件容量。一個卷可以由一臺或多臺 Storage 服務器組成,一個卷下的存儲服務器中的文件都是相同的,卷中的多臺存儲服務器起到了冗餘備份和負載均衡的作用。在卷中增加服務器時,同步已有的文件由系統自動完成,同步完成後,系統自動將新增服務器切換到線上提供服務。當存儲空間不足或即將耗盡時,可以動態添加捲。只需要增加一臺或多臺服務器,並將它們配置爲一個新的卷,這樣就擴大了存儲系統的容量。關於卷或組的概念暫且不過多深入,後面的安裝部署中會後詳細的說明。
FastDFS安裝
安裝Git
fastdfs依賴libfastcommon,需要從github上clone到本地編譯安裝。因此首先需
apt-get install git
克隆libfastcommon庫
libfastcommon的源在項目https://github.com/happyfish100/libfastcommon 需要使用git將其clone至本地安裝。
git clone https://github.com/happyfish100/libfastcommon.git
安裝libfastcommon依賴
進入libfastcommon目錄,依次執行腳本:
./make.sh
和
./make.sh install
設置環境變量和軟鏈接
在32位ubuntu中,libfastcommon會安裝在/usr/lib 中,64位系統則安裝在 /usr/lib64 中。依次執行以下命令:(根據自己的操作系統選擇路徑)
export LD_LIBRARY_PATH=/usr/lib/
和
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
下載、解壓並安裝FastDFS
Fastdfd的Github下載地址爲:
https://github.com/happyfish100/fastdfs/releases
下載完成後,執行命令:
tar xzf fastdfs-5.08.tar.gz
進入解壓後的目錄,依次執行:
./make.sh
和
./make.sh insta
FastDFS配置
安裝完成後會生成相應的文件與目錄
- 服務腳本
/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_tracke
- 配置文件(這三個是作者給的樣例配置文件)
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
- 命令工具,/usr/bin目錄下
常用的命令
1: 啓動FastDFS
tracker:/usr//bin/fdfs_trackered /etc/fdfs/tracker.conf
storage: /usr//bin/fdfs_storaged /etc/fdfs/storage.conf
2:關閉FastDFS
tracker:/usr//bin/stop.sh /usr//bin/fdfs_tracker
storage:/usr//bin/stop.sh /usr//bin/fdfs_storage
或者 killall fdfs_trackered(storaged) -------注意,千萬不要使用-9強行殺死進程。
3:重啓FastDFS
tracker:/usr//bin/restart.sh /usr//bin/fdfs_trackered
storage:/usr//bin/restart.sh /usr//bin/fdfs_storaged
4:查看集羣情況
在任意一臺storage(tracker也可以)
/usr//bin/fdfs_monitor /etc/fdfs/storage.conf
5:刪除一個storage:
在任意一臺storage(tracker也可以)
/usr//bin/fdfs_monitor /etc/fdfs/storage.conf delete group2 20.12.1.73
修改配置文件
拷貝fastdfs-5.08/conf 下複製mime.types http.conf
到 /etc/fdfs下
cp mime.types http.conf /etc/fdfs/
在/etc/fdfs 下,有三個示例配置文件:
client.conf.sample
storage.conf.samle
tracker.conf.sample
首先將這三個文件名中的sample去掉,改爲
client.conf
storage.conf
tracker.conf
配置FastDFS跟蹤器(Tracker)
修改tracker.conf配置
# 配置文件是否不生效,false 爲生效
disabled=false
# 提供服務的端口
port=22122
# Tracker 數據和日誌目錄地址(根目錄必須存在,子目錄會自動創建)
base_path=/home/fastdfs/tracker
# HTTP 服務端口
http.server_port=8090
具體請查看配置文件詳解http://bbs.chinaunix.net/thread-1941456-1-1.html
啓動tracker服務,並監聽
/usr//bin/fdfs_trackered /etc/fdfs/tracker.conf
netstat -unltp|grep fdfs
配置 FastDFS 存儲 (Storage)
修改storage.conf配置
# 配置文件是否不生效,false 爲生效
disabled=false
# 指定此 storage server 所在 組(卷)
group_name=group1
# storage server 服務端口
port=23000
# 心跳間隔時間,單位爲秒 (這裏是指主動向 tracker server 發送心跳)
heart_beat_interval=30
# Storage 數據和日誌目錄地址(根目錄必須存在,子目錄會自動生成)
base_path=/home/fastdfs/storage
# 存放文件時 storage server 支持多個路徑。這裏配置存放文件的基路徑數目,通常只配一個目錄。
store_path_count=1
# 逐一配置 store_path_count 個路徑,索引號基於 0。
# 如果不配置 store_path0,那它就和 base_path 對應的路徑一樣。
store_path0=/home/fastdfs/storage
# FastDFS 存儲文件時,採用了兩級目錄。這裏配置存放文件的目錄個數。
# 如果本參數只爲 N(如: 256),那麼 storage server 在初次運行時,會在 store_path 下自動創建 N * N 個存放文件的子目錄。
subdir_count_per_path=256
# tracker_server 的列表 ,會主動連接 tracker_server
# 有多個 tracker server 時,每個 tracker server 寫一行
tracker_server=172.17.0.3:22122
# 允許系統同步的時間段 (默認是全天) 。一般用於避免高峯同步產生一些問題而設定。
sync_start_time=00:00
sync_end_time=23:59
# 訪問端口
http.server_port=8888
修改client.conf配置
# Client 的數據和日誌目錄
base_path=/home/fastdfs/client
# Tracker端口
tracker_server=172.17.0.3:22122
# HTTP端口
http.tracker_server_port=8888
#include http.conf
注意,#include http.conf 這句,原配置文件中有2個#,刪掉一個。
啓動服務,並監聽
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
netstat -unltp|grep fdfs
查看Storage和Tracker是否在通信
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
FastDFS安裝完畢,並且上傳已測試通過,但無法下載。因此安裝Nginx作爲服務器以支持Http方式訪問文件。
Nginx
安裝編譯工具及庫文件
gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel
安裝Nginx有兩種方式
yum安裝
源碼包安裝
先說明下yum和源碼包安裝的區別:
yum安裝是在線安裝,好處是:安裝方式簡單,不易出錯;
源碼包安裝是先將nginx的源碼下載下來,在自己的系統裏編譯生成可執行文件,然後執行,好處是:因爲是在自己的系統上編譯的,更符合自己系統的性能,也就是說在自己的系統上執行nginx服務性能效率更好
源碼安裝注意:
yum安裝nginx
yum在線安裝會將nginx的安裝文件放在系統的不同位置,可以通過命令rpm -ql nginx來查看安裝路徑
$ yum -y install nginx
卸載的時候,只能通過命令來卸載,因爲我們不可能將這些文件自己手動刪除,可以通過命令rpm -e nginx來卸載,這個命令一般不會報錯,因爲nginx不與其他的包有依賴關係,如果提示關於依賴包的問題,可以嘗試rpm -e --nodeps nginx來卸載,這個命令相當於強制卸載,不考慮依賴問題。
啓動命令
yum安裝nginx,可以通過系統服務命令service來啓動或停止
service nginx start #啓動 nginx 服務
service nginx stop #停止 nginx 服務
service nginx restart #重啓 nginx 服務
源碼包安裝nginx
在/u01/soft目錄下,下載nginx源碼包,並解壓:
$ wget http://nginx.org/download/nginx-1.15.8.tar.gz
$ tar -zxvf nginx-1.15.8.tar.gz -C /u01/app/
在/u01/soft目錄下,下載fastdfs-nginx-module模塊包,並解壓:
$ wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
$ mv V1.20.tar.gz fastdfs-nginx-module_V1.20.tar.gz
$ tar -zxvf fastdfs-nginx-module_V1.20.tar.gz -C /u01/app/
進入/u01/app/nginx-1.15.8目錄安裝nginx,並加入fastdfs-nginx-module模塊:
$ ./configure --prefix=/usr/local/nginx --add-module=../fastdfs-nginx-module-1.20/src/
編譯、安裝:
$ make && make install
可能遇到報錯信息:
/usr/include/fastdfs/fdfs_define.h:15:27: fatal error: common_define.h: No such file or directory
解決方案:修改fastdfs-nginx-module-1.20/src/config文件
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
重新編譯、安裝
$ ./configure --prefix=/usr/local/nginx --add-module=../fastdfs-nginx-module-1.20/src/
$ make && make install
--prefix=PATH:指定nginx的安裝目錄。默認/usr/local/nginx
--conf-path=PATH:設置nginx.conf配置文件的路徑。nginx允許使用不同的配置文件啓動,通過命令行中的-c選項。默認爲conf/nginx.conf
--user=name:設置nginx工作進程的用戶。安裝完成後,可以隨時在nginx.conf配置文件更改user指令。默認的用戶名是nobody。--group=name類似
--with-pcre:設置PCRE庫的源碼路徑,如果已通過yum方式安裝,使用--with-pcre自動找到庫文件。使用--with-pcre=PATH時,需要從PCRE網站下載pcre庫的源碼並解壓,指定pcre的源碼路徑 ,比如:--with-pcre=/root/pcre-8.39/。perl正則表達式使用在location指令和 ngx_http_rewrite_module模塊中。
--with-zlib=PATH:指定zlib(版本1.1.3 - 1.2.5)的源碼解壓目錄。在默認就啓用的網絡傳輸壓縮模塊ngx_http_gzip_module時需要使用zlib 。
--with-http_ssl_module:使用https協議模塊。默認情況下,該模塊沒有被構建。前提是openssl與openssl-devel已安裝
--with-http_stub_status_module:用來監控 Nginx 的當前狀態
--with-http_realip_module:通過這個模塊允許我們改變客戶端請求頭中客戶端IP地址值(例如X-Real-IP 或 X-Forwarded-For),意義在於能夠使得後臺服務器記錄原始客戶端的IP地址
--add-module=PATH:添加第三方外部模塊,如fastdfs-nginx-module或緩存模塊。每次添加新的模塊都要重新編譯(Tengine可以在新加入module時無需重新編譯)
查看nginx的版本及模塊
/usr/local/nginx/sbin/nginx -V
成功標識
image.png
源碼包安裝nginx啓動的時候不能使用service來啓動,需要執行nginx安裝目錄下的sbin目錄下的 nginx可執行程序纔行
配置fastdfs-nginx-module和nginx
在/u01/app/fastdfs-nginx-module-1.20/src目錄下複製mod_fastdfs.conf文件到/etc/fdfs目錄下
$ cp mod_fastdfs.conf /etc/fdfs/
在/etc/fdfs目錄下修改mod_fastdfs.conf配置
base_path=/home/fastdfs
# 連接超時時間
connect_timeout=10
# Tracker Server
tracker_server=172.17.0.3:22122
# StorageServer 默認端口
storage_server_port=23000
# 如果文件ID的uri中包含/group**,則要設置爲true
url_have_group_name = true
# Storage 配置的store_path0路徑,必須和storage.conf中的一致
store_path0=/home/fastdfs/storage
在/usr/local/nginx/conf目錄下配置nginx,修改nginx.conf文件
location ~/M00 {
root /home/fastdfs/storage/data;
ngx_fastdfs_module;
}
拷貝/u01/app/fastdfs-5.11/conf目錄下的http.conf、mime.types文件到/etc/fdfs/目錄下
$ cp http.conf mime.types /etc/fdfs/
啓動nginx
$ /usr/local/nginx/sbin/nginx