Centos7 單節點安裝 FastDFS + FastDHT服務javascript
一、安裝gcc(編譯時須要)css
FastDFS是C語言開發,安裝FastDFS須要先將官網下載的源碼進行編譯,編譯依賴gcc環境,若是沒有gcc環境,須要安裝gcchtml
yum install -y gcc gcc-c++java
二、安裝libevent(運行時需求)node
若安裝了桌面圖形界面,就不須要安裝;FastDFS依賴libevent庫;nginx
yum -y install libevent libevent-develc++
三、安裝libfastcommon 並優化tcpgit
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS運行所須要的一些基礎庫。github
(1)下載vim
git clone https://github.com/happyfish100/libfastcommon.git
(2)切換到目錄
cd /usr/local/libfastcommon
(3)編譯安裝
./make.sh #編譯
./make.sh install #安裝
安裝後的截圖:
(4)優化一下內核
vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 30
sysctl -p
四、安裝FastDFS
(1)上傳 FastDFS_v5.08.tar.gz 到 centos 上;
(2)將 FastDFS_v5.08.tar.gz 解壓至/usr/local/下
tar xzvf FastDFS_v5.08.tar.gz -C /usr/local/
(3)切換目錄到: /usr/local/FastDFS/ 下,編譯和安裝;
cd /usr/local/FastDFS/
./make.sh && ./make.sh install #編譯以後接着進行安裝
安裝後的截圖:
(4)安裝成功將安裝目錄下的conf下的文件拷貝到/etc/fdfs/下;
cp /usr/local/FastDFS/conf/* /etc/fdfs/
五、配置和啓動tracker
(1)切換目錄到: /etc/fdfs/ 目錄下;
(2)拷貝一份新的tracker配置文件
cp tracker.conf.sample tracker.conf
(3)修改tracker.conf 配置文件
vim tracker.conf
base_path=/fastdfs/fdfs_tracker/ port=22122 #偵聽端口 http.server_port=80 #配置http端口
(4)建立 /fastdfs/fdfs_tracker/ 目錄
mkdir -p /fastdfs/fdfs_tracker/
(5)啓動tracker,運行以下命令:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
注意:在 /fastdfs/fdfs_tracker/ 目錄下生成兩個目錄, 一個是數據,一個是日誌;
六、配置和啓動storage
(1)切換目錄到: /etc/fdfs/ 目錄下;
(2)拷貝一份新的storage配置文件
cp storage.conf.sample storage.conf
(3)修改storage.conf ;
vim storage.conf
group_name=group1 base_path=/fastdfs/fdfs_storage store_path_count=1 # 1個存儲目錄 #store存放文件的位置(store_path) store_path0=/fastdfs/fdfs_storage/fdfs_storage_0 #一個目錄對應一塊硬盤 #若是有多個掛載磁盤則定義多個store_path,以下 #store_path1=/fastdfs/fdfs_storage/fdfs_storage_1 #store_path2=/fastdfs/fdfs_storage/fdfs_storage_2 #配置tracker服務器:IP tracker_server=192.168.1.245:22122 #若是有多個則配置多個tracker #tracker_server=192.168.101.4:22122 #偵聽端口 port=23000 #配置http端口 http.server_port=8888
(4)建立 /fastdfs/fdfs_storage/fdfs_storage_0目錄
mkdir -p /fastdfs/fdfs_storage/fdfs_storage_0
(5)啓動storage, 運行命令以下:
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
ls /fastdfs/fdfs_storage/fdfs_storage_0
顯示目錄以下:
七、使用FastDFS自帶工具測試
(1)切換目錄到 /etc/fdfs/ 目錄下;
(2)拷貝一份新的client配置文件
cp client.conf.sample client.conf
(3)修改client.conf ;
vim client.conf,
base_path=/fastdfs/fdfs_client http.tracker_server_port=80 tracker_server=192.168.1.245:22122 #與tracker配置的http.server_port端口一致,保存路徑生成的URL就是80端口訪問 #注意:若tracker有多個,能夠配置多個,以下: #tracker_server=...... #tracker_server=......
(4)拷貝一張圖片 fdfs_test.png 到Centos服務器上的 /tmp 目錄下;
(5)進行測試,運行以下:(運行測試程序,讀取/etc/fdfs/client.conf 文件,上傳/tmp目錄下的fdfs_test.png文件)
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /tmp/fdfs_test.png
以上圖中的文件地址:
http://192.168.1.245/group1/M00/00/00/wKgB9VuwhmeAfNulAACDdns27_Y436_big.png
對應storage服務器上的
/fastdfs/fdfs_storage/fdfs_storage_0/data/00/00/wKgB9VuwhmeAfNulAACDdns27_Y436_big.png文件;
注:因爲如今尚未和nginx整合沒法使用http下載。
(6)防火牆開啓相應的端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=22122/tcp –permanent
firewall-cmd --zone=public --add-port=23000/tcp –permanent
firewall-cmd --zone=public --add-port={80/tcp,8080/tcp,22122/tcp,23000/tcp} --permanent # 同樣的
firewall-cmd --reload
firewall-cmd --list-all
八、FastDFS 和nginx整合
8.1 在tracker上安裝 nginx
在每一個tracker上安裝nginx,的主要目的是作負載均衡及實現高可用。若是隻有一臺tracker能夠不配置nginx。
一個tracker對應多個storage,經過nginx對storage負載均衡;
8.2 在storage 上安裝nginx
(1)上傳 fastdfs-nginx-module.tar.gz 到Centos服務器上;
(2)解壓 fastdfs-nginx-module.tar.gz 到 /usr/local目錄下;
tar -xzf fastdfs-nginx-module.tar.gz -C /usr/local/
(3)切換目錄到: /usr/local/fastdfs-nginx-module/src/ 目錄下
cd /usr/local/fastdfs-nginx-module/src/
(4)修改config文件,將文件中的全部 /usr/local/ 路徑改成 /usr/
默認就都是/usr路徑了,因此此處不用更改。
(5)將fastdfs-nginx-module/src下的mod_fastdfs.conf拷貝至/etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/
(6)並修改 /etc/fdfs/mod_fastdfs.conf 的內容;
vi /etc/fdfs/mod_fastdfs.conf
base_path=/fastdfs/fdfs_nginx tracker_server=192.168.1.245:22122 #tracker_server=192.168.172.20:22122 #(多個tracker配置多行) #tracker_server=tracker:22122 url_have_group_name=true #url中包含group名稱 store_path_count=1 #指定文件存儲路徑(上面配置的store路徑) store_path0=/fastdfs/fdfs_storage/fdfs_storage_0
(7)將libfdfsclient.so拷貝至/usr/lib下(默認就在,不用修改)
cp /usr/lib64/libfdfsclient.so /usr/lib/
(8)建立目錄
mkdir -p /var/temp/nginx/client
mkdir -p /fastdfs/fdfs_nginx
8.3 Nginx的安裝
(1)上傳 nginx-1.10.2.tar.gz 到Centos服務器上;
(2)解壓 nginx-1.10.2.tar.gz 到 /usr/local目錄下;
tar -zxvf nginx-1.10.2.tar.gz -C /usr/local/src
(3)安裝nginx的依賴庫
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
(4)進入nginx解壓的目錄下:
cd /usr/local/src/nginx-1.10.2/
(5)加入模塊命令配置
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/usr/local/fastdfs-nginx-module/src
注意:上邊將臨時文件目錄指定爲/var/temp/nginx,須要在/var下建立temp及nginx目錄;
(6)編譯並安裝
make && make install
安裝成功後查看生成的目錄,以下所示:
ls /usr/local/nginx/
刪除解壓包:
rm -rf /usr/local/src/nginx-1.10.2/
(7)拷貝配置文件到 /etc/fdfs 下;
cd /usr/local/FastDFS/conf
cp http.conf mime.types /etc/fdfs/
(8)修改nginx配置文件
mkdir -p /usr/local/nginx/logs # 建立logs目錄
cd /usr/local/nginx/conf/
vim nginx.conf
##----------------------------------------- user nobody; worker_processes 2; pid /var/run/nginx/nginx.pid; worker_rlimit_nofile 65535; events { worker_connections 65535; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log error; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 8m; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; server { listen 80; server_name 192.168.1.245; location / { root html; index index.html index.htm; } location /group1/M00/ { root /fastdfs/fdfs_storage/fdfs_storage_0; ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } ##-----------------------------------------
說明:
(a.) server_name指定本機ip;
(b.) location /group1/M00/:
group1爲nginx 服務FastDFS的分組名稱,M00是FastDFS自動生成編號,
對應store_path0=/home/fdfs_storage,若是FastDFS定義store_path1,這裏就是M01
-----------------------------------------
(9)配置打開文件數大小
vim /etc/security/limits.conf
# End of file * soft nofile 100000 * hard nofile 100000 * soft nproc 100000 * hard nproc 100000
ulimit -n 100000 #即時生效
(10)nginx的啓動
cd /usr/local/nginx/sbin/
./nginx
查詢nginx進程
(11) fastdfs 和 nginx 服務的開機自啓動:
chmod +x /etc/rc.local
#start fastdfs /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart /usr/local/nginx/sbin/nginx
exit 0
九、在瀏覽器中訪問上傳到fastDFS的圖片
由於Centos系統有防火牆,須要先開放相應的端口,才能夠在瀏覽器中訪問;
http://192.168.1.245/group1/M00/00/00/wKgB9VuwhmeAfNulAACDdns27_Y436_big.png
十、整合FastDHT服務
(1)簡介:
因爲FastDFS自己不能對重複上傳的文件進行去重,而FastDHT能夠作到去重。FastDHT是一個高性能的分佈式哈希系統,它是基於鍵值對存儲的,並且它須要依賴於Berkeley DB做爲數據存儲的媒介,同時須要依賴於libfastcommon。
(2)下載FastDHT_v1.23.tar.gz,下載地址:
https://code.google.com/archive/p/fastdht/downloads
FastDHT:FastDHT_v1.23.tar.gz
(3)下載Berkeley DB,下載地址:
http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
Berkeley DB:db-18.1.25.tar.gz
(4)安裝Berkeley DB,將db-18.1.25.tar.gz上傳到/usr/local/src目錄下。
(5)解壓安裝包
tar -xzf db-18.1.25.tar.gz -C /usr/local/src/
(6)進入build_unix目錄,必須是這個目錄
cd /usr/local/src/db-18.1.25/build_unix
(7)執行命令(必定要是進入上面的目錄後,使用相對路徑執行命令):
../dist/configure --prefix=/usr/local/db-18.1.25
make && make install
rm -rf /usr/local/src/db-18.1.25/
ls /usr/local/db-18.1.25/
(8)DB安裝完畢,會在/usr/local目錄下生成目錄db-18.1.25
(9)安裝FastDHT,將FastDHT_v1.23.tar.gz拷貝到/usr/local目錄下,解壓:
cd /usr/local
tar -xzf FastDHT_v1.23.tar.gz
mv FastDHT fastdht
(10)進入fastdht目錄,修改make.sh文件,修改:
CFLAGS=’-Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/local/db-18.1.25/include/ -L/usr/local/db-18.1.25/lib/’
注:標紅部分爲要加入的內容。
(11)進入fastdht目錄,編譯安裝:
編譯前,必定要確認是否已經安裝了libevent、libevent-devel 和libfastcommon依賴安裝包。
yum -y install libevent libevent-devel
libfastcommon # 編譯安裝
cd /usr/local/fastdht/
./make.sh
./make.sh install
注:依賴包,通常在安裝FastDFS的時候就安裝了,但libevent-devel這個依賴包在大部分博客文章中未提到須要安裝,若是不安裝這個包,編譯百分百過不去,是個大坑。
安裝成功後fastdht被安裝在/etc/fdht目錄下,生成3個配置文件
cd /etc/fdht/ && ls
(12)配置FastDHT,建立fastdht目錄:
mkdir -p /fastdfs/fastdht
(13)修改/etc/fdht/目錄下的配置文件fdht_client.conf,依次修改以下內容:
vim /etc/fdht/fdht_client.conf
base_path=/fastdfs/fastdht #(該目錄必須是已經存在的) keep_alive=1 #include /etc/fdht/fdht_servers.conf ##(本行前有#表示打開,若是想關閉此選項,則應該爲##開頭)
(14)修改/etc/fdht/目錄下的配置文件fdht_servers.conf,依次修改以下內容:
vim /etc/fdht/fdht_servers.conf
group_count = 1 group0 = 192.168.1.245:11411
(15)修改/etc/fdht/目錄下的fdhtd.conf文件,依次修改以下內容:
vim /etc/fdht/fdhtd.conf
port=11411 bash_path= /fastdfs/fastdht #(該目錄必須是已經存在的,前面已經建立過了) #include /etc/fdht/fdht_servers.conf ##(本行前有#表示打開,若是想關閉此選項,則應該爲##開頭)
(16)配置/etc/fdfs/目錄下的storage.conf文件,依次修改以下內容:
vim /etc/fdfs/storage.conf
#是否檢測上傳文件已經存在。若是已經存在,則創建一個索引連接以節省磁盤空間 check_file_duplicate=1 #當上個參數設定爲1時 , 在FastDHT中的命名空間 key_namespace=FastDFS #長鏈接配置選項,若是爲0則爲短鏈接 1爲長鏈接 keep_alive=1 #此處特別須要注意配置,## 開頭纔是註釋 #include /etc/fdht/fdht_servers.conf
(17)執行以下命令:
cp /usr/local/db-18.1.25/lib/libdb-18.so /usr/lib/ # 庫文件
cp /usr/local/db-18.1.25/lib/libdb-18.so /usr/lib64/ # 庫文件
#開放端口11411
firewall-cmd --zone=public --add-port=11411/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
(18)啓動FastDHT:
fdhtd /etc/fdht/fdhtd.conf restart
啓動報錯(未加載庫文件):
解決辦法:
ldconfig # 從新加載
ldd /usr/local/bin/fdhtd
#從新啓動服務,成功。
fdhtd /etc/fdht/fdhtd.conf restart
(20)重啓一下fdfs_trackerd和fdfs_storaged服務,便於後面的測試:
若是啓動服務報錯(這是個大坑,能查到的資料有限):
解決辦法:
由於是庫文件受到損壞致使的,因此須要把庫文件刪除後再從新安裝一遍。
rm -rf /usr/lib64/libfastcommon.so
rm -rf /usr/lib/libfastcommon.so
rm -rf /usr/local/lib/libfastcommon.so.1
rm -rf /usr/local/libfastcommon
而後從新解壓安裝一次libfastcommon依賴包,再重啓服務就不報錯了。
(21)測試屢次上傳同一個文件,經過客戶端命令測試上傳:
cd /tmp
echo 「This is a test」 > /tmp/fast-test
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /tmp/fast-test #這條命令纔會去重
注:/usr/bin/fdfs_test /etc/fdfs/client.conf upload /tmp/fast-test #這條命令是不會去重的。
(22)上傳成功後返回路徑,查看storage存儲對應存儲路徑,發現返回的爲一個軟連接,以後每次重複上傳的fast-test都是返回一個指向第一次上傳的文件的軟連接。也就保證了文件只保存了一份。
須要說明的是,FastDFS不會返回原始文件的索引,返回的所有都是軟連接,當全部的軟連接都被刪除的時候,原始文件也會從FastDFS中被刪除。
(23) fastdfs 、fdhtd和 nginx 服務的開機自啓動:
chmod +x /etc/rc.local
#start fastdfs /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart /usr/local/bin/fdhtd /etc/fdht/fdhtd.conf restart /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart /usr/local/nginx/sbin/nginx exit 0
至此,搭建配置、驗證完畢。