FastDFS集群部署

之前介紹過關(guān)于FastDFS單機部署搓彻,詳見博文:FastDFS單節(jié)點部署

下面來看下FastDFS集群部署簇搅,實現(xiàn)高可用(HA)完域。

服務(wù)器規(guī)劃

跟蹤服務(wù)器
跟蹤服務(wù)器1【主機】(Tracker Server):192.100.139.121
跟蹤服務(wù)器2【備機】(Tracker Server):192.100.139.122
group1存儲服務(wù)器
存儲服務(wù)器1(Storage Server):192.100.139.123
存儲服務(wù)器2(Storage Server):192.100.139.124
group2存儲服務(wù)器
存儲服務(wù)器3(Storage Server):192.100.139.125
存儲服務(wù)器4(Storage Server):192.100.139.126

操作系統(tǒng):CentOS7
用戶:root

數(shù)據(jù)存儲目錄:/fastdfs/storage

安裝包:

  1. FastDFS_v5.08.tar.gz:FastDFS源碼
  2. libfastcommon-master.zip:(從 FastDFS 和 FastDHT 中提取出來的公共 C 函數(shù)庫)
  3. fastdfs-nginx-module-master.zip:storage節(jié)點http服務(wù)nginx模塊
  4. nginx-1.10.0.tar.gz:Nginx安裝包
  5. ngx_cache_purge-2.3.tar.gz:圖片緩存清除Nginx模塊(集群環(huán)境會用到)

點擊這里下載所有安裝包。

下載完成后瘩将,將壓縮包解壓到/usr/local/src目錄下吟税。

一、所有tracker和storage節(jié)點都執(zhí)行如下操作

1姿现、安裝所需的依賴包

yum install make cmake gcc gcc-c++

2肠仪、安裝libfatscommon

cd /usr/local/src
#安裝unzip 命令: yum install -y unzip zip
unzip libfastcommon-master.zip
cd libfastcommon-master
## 編譯、安裝
./make.sh
./make.sh install

3备典、安裝FastDFS

cd /usr/local/src
tar -xzvf FastDFS_v5.08.tar.gz
cd FastDFS
./make.sh
./make.sh install

采用默認安裝方式异旧,相應(yīng)的文件與目錄檢查如下:

1、服務(wù)腳本

/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_trackerd

2提佣、配置文件(示例配置文件)

ll /etc/fdfs/
-rw-r--r-- 1 root root  1461 1月   4 14:34 client.conf.sample
-rw-r--r-- 1 root root  7927 1月   4 14:34 storage.conf.sample
-rw-r--r-- 1 root root  7200 1月   4 14:34 tracker.conf.sample

3吮蛹、命令行工具(/usr/bin目錄下)

ll /usr/bin/fdfs_*
-rwxr-xr-x    1 root root     260584 1月   4 14:34 fdfs_appender_test
-rwxr-xr-x    1 root root     260281 1月   4 14:34 fdfs_appender_test1
-rwxr-xr-x    1 root root     250625 1月   4 14:34 fdfs_append_file
-rwxr-xr-x    1 root root     250045 1月   4 14:34 fdfs_crc32
-rwxr-xr-x    1 root root     250708 1月   4 14:34 fdfs_delete_file
-rwxr-xr-x    1 root root     251515 1月   4 14:34 fdfs_download_file
-rwxr-xr-x    1 root root     251273 1月   4 14:34 fdfs_file_info
-rwxr-xr-x    1 root root     266401 1月   4 14:34 fdfs_monitor
-rwxr-xr-x    1 root root     873233 1月   4 14:34 fdfs_storaged
-rwxr-xr-x    1 root root     266952 1月   4 14:34 fdfs_test
-rwxr-xr-x    1 root root     266153 1月   4 14:34 fdfs_test1
-rwxr-xr-x    1 root root     371336 1月   4 14:34 fdfs_trackerd
-rwxr-xr-x    1 root root     251651 1月   4 14:34 fdfs_upload_appender
-rwxr-xr-x    1 root root     252781 1月   4 14:34 fdfs_upload_file

二、配置tracker服務(wù)器

1拌屏、復(fù)制tracker樣例配置文件匹涮,并重命名

cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf

2、修改tracker配置文件

vim /etc/fdfs/tracker.conf
# 修改的內(nèi)容如下:
disabled=false # 啟用配置文件
port=22122 # tracker服務(wù)器端口(默認22122)
base_path=/fastdfs/tracker  # 存儲日志和數(shù)據(jù)的根目錄
store_lookup=0 # 輪詢方式上傳

其它參數(shù)保留默認配置槐壳, 具體配置解釋可參考官方文檔說明:http://bbs.chinaunix.net/thread-1941456-1-1.html

3然低、創(chuàng)建base_path指定的目錄

mkdir -p /fastdfs/tracker

4、防火墻中打開tracker服務(wù)器端口( 默認為 22122)

vi /etc/sysconfig/iptables

附加:若/etc/sysconfig目錄下沒有iptables文件可隨便寫一條iptables命令配置個防火墻規(guī)則务唐,如:

iptables -P OUTPUT ACCEPT

然后用命令:service iptables save進行保存雳攘,默認就保存到 /etc/sysconfig/iptables文件里。這時既有了這個文件枫笛,防火墻也可以啟動了吨灭。接下來要寫策略,也可以直接寫在/etc/sysconfig/iptables里了刑巧。
添加如下端口行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT

重啟防火墻

service iptables restart

5喧兄、啟動tracker服務(wù)器

/etc/init.d/fdfs_trackerd start

初次啟動无畔,會在/fastdfs/tracker目錄下生成logs、data兩個目錄吠冤。

drwxr-xr-x 2 root root 4096 1月   4 15:00 data
drwxr-xr-x 2 root root 4096 1月   4 14:38 logs

檢查FastDFS Tracker Server是否啟動成功:

ps -ef | grep fdfs_trackerd

三浑彰、配置storage服務(wù)器

1、復(fù)制storage樣例配置文件拯辙,并重命名

cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf

2郭变、編輯配置文件

vi /etc/fdfs/storage.conf
# 修改的內(nèi)容如下:
disabled=false # 啟用配置文件
port=23000 # storage服務(wù)端口
base_path=/fastdfs/storage          # 數(shù)據(jù)和日志文件存儲根目錄
store_path0=/fastdfs/storage        # 第一個存儲目錄
tracker_server=192.100.139.121:22122 # tracker服務(wù)器IP和端口
tracker_server=192.100.139.122:22122 #tracker服務(wù)器IP2和端口
http.server_port=8888 # http訪問文件的端口

配置group_name
不同分組配置不同group_name

group_name=group1
group_name=group2

其它參數(shù)保留默認配置, 具體配置解釋可參考官方文檔說明:http://bbs.chinaunix.net/thread-1941456-1-1.html

3涯保、創(chuàng)建基礎(chǔ)數(shù)據(jù)目錄

mkdir -p /fastdfs/storage

4诉濒、防火墻中打開storage服務(wù)器端口( 默認為 23000)

vi /etc/sysconfig/iptables

添加如下端口行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

重啟防火墻

service iptables restart

可以通過/fastdfs/storage/logs/storaged.log查看啟動日志。

5夕春、啟動storage服務(wù)器

/etc/init.d/fdfs_storaged start

初次啟動未荒,會在/fastdfs/storage目錄下生成logs、data兩個目錄及志。

drwxr-xr-x 259 root root 4096 Mar 31 06:22 data
drwxr-xr-x   2 root root 4096 Mar 31 06:22 logs

檢查FastDFS Tracker Server是否啟動成功:

[root@gyl-test-t9 ~]# ps -ef | grep fdfs_storaged
root 1336     1  3 06:22 ?        00:00:01 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
root 1347   369  0 06:23 pts/0    00:00:00 grep fdfs_storaged

四片排、文件上傳測試(ip01)

1、修改Tracker服務(wù)器客戶端配置文件

cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
vim /etc/fdfs/client.conf
# 修改以下配置困肩,其它保持默認
base_path=/fastdfs/tracker
tracker_server=192.100.139.121:22122 # tracker服務(wù)器IP和端口
tracker_server=192.100.139.122:22122  #tracker服務(wù)器IP2和端口

2划纽、執(zhí)行文件上傳命令

#/usr/local/src/test.png 是需要上傳文件路徑 
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/test.png
返回文件ID號:group1/M00/00/00/tlxkwlhttsGAU2ZXAAC07quU0oE095.png
(能返回以上文件ID,說明文件已經(jīng)上傳成功)

或者

/usr/bin/fdfs_test /etc/fdfs/client.conf upload client.conf

image

五锌畸、在所有storage節(jié)點安裝fastdfs-nginx-module

1勇劣、fastdfs-nginx-module 作用說明

FastDFS通過Tracker服務(wù)器,將文件放在Storage服務(wù)器存儲潭枣,但是同組存儲服務(wù)器之間需要進入文件復(fù)制比默,有同步延遲的問題。假設(shè)Tracker服務(wù)器將文件上傳到了ip01盆犁,上傳成功后文件ID已經(jīng)返回給客戶端命咐。此時FastDFS存儲集群機制會將這個文件同步到同組存儲ip02,在文件還沒有復(fù)制完成的情況下谐岁,客戶端如果用這個文件ID在ip02上取文件醋奠,就會出現(xiàn)文件無法訪問的錯誤。而fastdfs-nginx-module可以重定向文件連接到源服務(wù)器取文件伊佃,避免客戶端由于復(fù)制延遲導(dǎo)致的文件無法訪問錯誤窜司。(解壓后的fastdfs-nginx-module在nginx安裝時使用)

2、解壓 fastdfs-nginx-module_v1.16.tar.gz

cd /usr/local/src
tar -xzvf fastdfs-nginx-module_v1.16.tar.gz

3航揉、修改 fastdfs-nginx-module 的 config 配置文件

cd fastdfs-nginx-module/src
vim config

CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"

修改為:

CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

4塞祈、安裝編譯 Nginx 所需的依賴包

yum install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel

5、上傳當(dāng)前的穩(wěn)定版本 Nginx(nginx-1.6.2.tar.gz)到 /usr/local/src 目錄

6帅涂、編譯安裝 Nginx (添加 fastdfs-nginx-module 模塊)

cd /usr/local/src/
tar -zxvf nginx-1.10.0.tar.gz
cd nginx-1.10.0
./configure --prefix=/opt/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src
make && make install

7议薪、復(fù)制 fastdfs-nginx-module 源碼中的配置文件到 /etc/fdfs 目錄尤蛮,并修改

cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vi /etc/fdfs/mod_fastdfs.conf

修改以下配置:

connect_timeout=10
base_path=/tmp
tracker_server=192.100.139.121:22122 # tracker服務(wù)器IP和端口
tracker_server=192.100.139.122:22122 #tracker服務(wù)器IP2和端口
group_name=group1                 #當(dāng)前服務(wù)器的group名
url_have_group_name=true #url中包含group名稱
store_path0=/fastdfs/storage #存儲路徑
group_count=2                   #設(shè)置組的個數(shù)

#在最后添加 
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/fastdfs/storage

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/fastdfs/storage

注意group_name的設(shè)置,如果是group1就設(shè)置為group1斯议,如果是group2就設(shè)置為group2

8产捞、復(fù)制 FastDFS 的部分配置文件到 /etc/fdfs 目錄

cd /usr/local/src/FastDFS/conf
cp http.conf mime.types /etc/fdfs/

9、在 /fastdfs/storage 文件存儲目錄下創(chuàng)建軟連接捅位,將其鏈接到實際存放數(shù)據(jù)的目錄

ln -s /fastdfs/storage/data/ /fastdfs/storage/data/M00

10轧葛、配置 Nginx(/usr/local/nginx/conf/nginx.conf)

user nobody;
worker_processes 1;
events {
    worker_connections 1024;
}
http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
    server {
        listen 8888;
        server_name localhost;
        location ~/group[1-2]/M00 {
            ngx_fastdfs_module;
        }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }

}

說明:

A搂抒、8888 端口值是要與/etc/fdfs/storage.conf中的 http.server_port=8888 相對應(yīng)艇搀,因為 http.server_port 默認為 8888,如果想改成 80求晶,則要對應(yīng)修改過來焰雕。
B、Storage 對應(yīng)有多個 group 的情況下芳杏,訪問路徑帶 group 名矩屁,如/group1/M00/00/00/xxx,對應(yīng)的 Nginx 配置為:

location ~/group([0-9])/M00 {
       ngx_fastdfs_module;
}

C爵赵、如查下載時如發(fā)現(xiàn)老報 404,將 nginx.conf 第一行 user nobody 修改為 user root 后重新啟動吝秕。

11、防火墻中打開 Nginx 的 8888 端口

vi /etc/sysconfig/iptables

添加:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT

重啟防火墻

service iptables restart

啟動nginx:

/usr/local/nginx/sbin/nginx
(重啟 Nginx 的命令為:/usr/local/nginx/sbin/nginx -s reload)

六空幻、驗證:通過瀏覽器訪問測試時上傳的文件

切換追蹤服務(wù)器IP同樣可以訪問

http://192.100.139.123:8888/group1/M00/00/00/CmSKtFj13gyAen4oAAH0yXi-HW8296.png

http://192.100.139.124:8888/group1/M00/00/00/CmSKtFj13gyAen4oAAH0yXi-HW8296.png

因為緩存問題烁峭,125、126兩臺機器也能通過url訪問group1上的文件

七秕铛、tracker節(jié)點安裝nginx

1约郁、下載需要的依賴庫文件

yum -y install pcre pcre-devel zlib zlib-devel

2、解壓并安裝nginx但两,加入ngx_cache_purge(加入緩存模塊)

tar -zxvf nginx-1.10.0.tar.gz
tar -zxvf ngx_cache_purge-2.3.tar.gz

cd nginx-1.10.0
./configure --add-module=/usr/local/src/ngx_cache_purge-2.3
make && make install

3鬓梅、配置nginx負載均衡和緩存

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    #設(shè)置group1的服務(wù)器
    upstream fdfs_group1 {
        server 192.100.139.123:8888 weight=1 max_fails=2 fail_timeout=30s;
        server 192.100.139.124:8888 weight=1 max_fails=2 fail_timeout=30s;
    }
    #設(shè)置group2的服務(wù)器
    upstream fdfs_group2 {
        server 192.100.139.125:8888 weight=1 max_fails=2 fail_timeout=30s;
        server 192.100.139.126:8888 weight=1 max_fails=2 fail_timeout=30s;
    }

    server {
        listen       8000;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #設(shè)置group1的負載均衡參數(shù)
        location /group1/M00 {
            proxy_pass http://fdfs_group1;
        }
        #設(shè)置group2的負載均衡參數(shù)
        location /group2/M00 {
            proxy_pass http://fdfs_group2;
        }

        #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;
        }

    }

}

4、防火墻設(shè)置

參考上面設(shè)置

5谨湘、啟動nginx

/usr/local/nginx/sbin/nginx

6绽快、上傳文件

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/test.png

7、通過tracker地址訪問

http://192.100.139.121:8000/group2/M00/00/00/wKhYdFtdrv-AdFphAAAexdAvMYY481.png

http://192.100.139.121:8000/group2/M00/00/00/wKhYdFtdrv-AdFphAAAexdAvMYY481.png

八紧阔、Java API 客戶端配置

1坊罢、前往GitHub下載Java_client代碼。https://github.com/fzmeng/fastdfs.client

2.在你的項目src/java/resources 下加入文件 fastdfs_client.conf

注意修改tracker服務(wù)器Ip地址

connect_timeout = 2
network_timeout = 30
charset = ISO8859-1
http.tracker_http_port = 8888
http.anti_steal_token = no
tracker_server=192.100.139.121:22122
tracker_server=192.100.139.122:22122
default_group_name=group1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寓辱,一起剝皮案震驚了整個濱河市艘绍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秫筏,老刑警劉巖诱鞠,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挎挖,死亡現(xiàn)場離奇詭異,居然都是意外死亡航夺,警方通過查閱死者的電腦和手機蕉朵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阳掐,“玉大人始衅,你說我怎么就攤上這事$员#” “怎么了汛闸?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長艺骂。 經(jīng)常有香客問我诸老,道長,這世上最難降的妖魔是什么钳恕? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任别伏,我火速辦了婚禮,結(jié)果婚禮上忧额,老公的妹妹穿的比我還像新娘厘肮。我一直安慰自己,他們只是感情好睦番,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布类茂。 她就那樣靜靜地躺著,像睡著了一般抡砂。 火紅的嫁衣襯著肌膚如雪大咱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天注益,我揣著相機與錄音碴巾,去河邊找鬼。 笑死丑搔,一個胖子當(dāng)著我的面吹牛厦瓢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播啤月,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼煮仇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谎仲?” 一聲冷哼從身側(cè)響起浙垫,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后夹姥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杉武,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年辙售,在試婚紗的時候發(fā)現(xiàn)自己被綠了轻抱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡旦部,死狀恐怖祈搜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情士八,我是刑警寧澤容燕,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站曹铃,受9級特大地震影響缰趋,放射性物質(zhì)發(fā)生泄漏捧杉。R本人自食惡果不足惜陕见,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望味抖。 院中可真熱鬧评甜,春花似錦、人聲如沸仔涩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熔脂。三九已至佩研,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霞揉,已是汗流浹背旬薯。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留适秩,地道東北人绊序。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像秽荞,于是被迫代替她去往敵國和親骤公。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容