Centos7 單節點安裝 FastDFS + FastDHT服務

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

至此,搭建配置、驗證完畢。

相關文章
相關標籤/搜索