<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          搭建分布式文件系統(tǒng)FastDFS

          共 6632字,需瀏覽 14分鐘

           ·

          2020-08-04 10:18

          閱讀文本大概需要3分鐘。

          0x01:前言

            FastDFS(Fast Distributed File System)是一款開源輕量級(jí)分布式文件系統(tǒng);

          FastDFS服務(wù)端有兩個(gè)角色:跟蹤器(tracker)和存儲(chǔ)節(jié)點(diǎn)(storage)。

          • 跟蹤器(tracker)

            tracker Server是fastDFS的協(xié)調(diào)者(中間人角色);完整的fastDFS服務(wù)運(yùn)行期間,我們將對(duì)無法對(duì)storage Server進(jìn)行直接管理,僅僅我們發(fā)起的操作會(huì)對(duì)storage Server內(nèi)的文件進(jìn)行操作,而真正對(duì)storage Server進(jìn)行管理的是tracker Server——每個(gè)storage Server在啟動(dòng)后,會(huì)連接tracker Server并告知之自己的信息(如所在group),并且在tracker Server與該storage Server之間保持連接,兩個(gè)角色之間會(huì)進(jìn)行信息的交流,tracker Server會(huì)根據(jù)storage Server的反饋信息,在內(nèi)存中(tracker Server不需要持久化任何數(shù)據(jù))建立group==>[storage server list]映射表。

            在fastDFS集群中,多個(gè)tracker Server之間的信息數(shù)據(jù)會(huì)進(jìn)行同步,而這一機(jī)制并不是由tracker Server之間互相完成的,而是由storage Server完成的。因?yàn)樵趕torage Server的配置文件有該fastDFS服務(wù)中的所有tracker Server,storage Server會(huì)為每一個(gè)tracker Server創(chuàng)建一個(gè)通信線程,在storage Server與tracker Server通信過程中,如果該tracker Server返回的該group的storage Server列表信息相對(duì)于本機(jī)較少,那么storage Server就會(huì)將該tracker Server上所沒有的該group的storage Server列表信息同步給該tracker Server。這就使得各tracker Server之間的數(shù)據(jù)保持一致。

          • 存儲(chǔ)節(jié)點(diǎn)(storage)

            storage Server是存儲(chǔ)的角色,存儲(chǔ)文件由storage Server進(jìn)行管理。每一個(gè)storage Server的數(shù)據(jù)存儲(chǔ)目錄會(huì)有兩級(jí)子目錄,每一級(jí)都有256個(gè)子文件夾,一共有256*256=65536個(gè)文件夾。當(dāng)有新文件被寫入時(shí),會(huì)以hash的方式被路由到其中的某個(gè)子目錄下,然后新文件數(shù)據(jù)直接作為一個(gè)本地文件存儲(chǔ)到該目錄中。

            storage Server以group【或volume(一個(gè)意思)】為單位組織,即便整個(gè)fastDFS只有一個(gè)storage Server,它也有一個(gè)group。

            在fastDFS集群中,以group為單位可以方便負(fù)載均衡,由tracker Server配合可以實(shí)現(xiàn)改組內(nèi)訪問壓力的均衡;也可以方便副本(即備份)數(shù)量的定制,同一組內(nèi)的storage Server的數(shù)量減一,即為副本的數(shù)量。

            在一個(gè)group內(nèi)的storage Server之間的數(shù)據(jù)會(huì)互為備份,這一功能是由后臺(tái)線程完成的。當(dāng)客戶端將一個(gè)文件寫入group內(nèi)的一個(gè)storage Server,則會(huì)認(rèn)為文件寫入成功,后臺(tái)線程便會(huì)將文件同步到該group內(nèi)的storage Server。注意:由于一個(gè)group內(nèi)的storage Server數(shù)據(jù)互為備份,所以存儲(chǔ)空間的容量由該group內(nèi)的最小容量的storage Server決定。

            同一個(gè)group內(nèi)的storage Server在寫文件后,會(huì)寫一份binlog,這個(gè)binlog記錄著文件名等元信息,它用于后臺(tái)的同步,每個(gè)storage Server會(huì)記錄向該group內(nèi)其他storage Server的同步進(jìn)度,記錄進(jìn)度的方式是時(shí)間戳,為的是避免機(jī)器down掉失去同步進(jìn)度,以便在機(jī)器重啟后接著進(jìn)度繼續(xù)同步。同時(shí)storage Server的同步進(jìn)度會(huì)以元數(shù)據(jù)發(fā)送給tracker Server,以便在client訪問文件時(shí),作為tracker Server選擇服務(wù)的storage Server的參考(即哪臺(tái)strong Server上有該文件)。


          0x02:安裝libfastcommon

          1. 獲取libfastcommon安裝包:

            wget https://github.com/happyfish100/libfastcommon/archive/V1.0.38.tar.gz
          2. 解壓安裝包:tar -zxvf V1.0.38.tar.gz

          3. 進(jìn)入目錄:cd libfastcommon-1.0.38

          4. 執(zhí)行編譯:./make.sh

          5. 安裝:./make.sh install?

          可能遇到的問題:

          -bash: make: command not found
          -bash: gcc: command not found

          解決方案:
          debian通過apt-get install gcc make安裝
          centos通過yum -y install gcc make安裝


          0x03:安裝FastDFS

          1. 獲取fdfs安裝包:

            wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
          2. 解壓安裝包:tar -zxvf V5.11.tar.gz

          3. 進(jìn)入目錄:cd fastdfs-5.11

          4. 執(zhí)行編譯:./make.sh

          5. 安裝:./make.sh install?

          6. 查看可執(zhí)行命令:ls -la /usr/bin/fdfs*?


          0x04:配置Tracker服務(wù)

          1. 進(jìn)入/etc/fdfs目錄,有三個(gè).sample后綴的文件(自動(dòng)生成的fdfs模板配置文件),通過cp命令拷貝tracker.conf.sample,刪除.sample后綴作為正式文件:?

          2. 編輯tracker.conf:vi tracker.conf,修改相關(guān)參數(shù)

            base_path=/home/mm/fastdfs/tracker  #tracker存儲(chǔ)data和log的跟路徑,必須提前創(chuàng)建好
            port=23000 #tracker默認(rèn)23000
            http.server_port=80 #http端口,需要和nginx相同
          3. 啟動(dòng)tracker(支持start|stop|restart):

            /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
          4. 查看tracker啟動(dòng)日志:進(jìn)入剛剛指定的base_path(/home/mm/fastdfs/tracker)中有個(gè)logs目錄,查看tracker.log文件?

          5. 查看端口情況:netstat -apn|grep fdfs?

          可能遇到的報(bào)錯(cuò):

          /usr/bin/fdfs_trackerd: error while loading shared libraries:
          libfastcommon.so: cannot open shared object file:
           No such file or directory

          解決方案:建立libfastcommon.so軟鏈接
          ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
          ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so


          0x05:配置Storage服務(wù)

          1. 進(jìn)入/etc/fdfs目錄,有cp命令拷貝storage.conf.sample,刪除.sample后綴作為正式文件;

          2. 編輯storage.conf:vi storage.conf,修改相關(guān)參數(shù):

            base_path=/home/mm/fastdfs/storage   #storage存儲(chǔ)data和log的跟路徑,必須提前創(chuàng)建好
            port=23000 #storge默認(rèn)23000,同一個(gè)組的storage端口號(hào)必須一致
            group_name=group1 #默認(rèn)組名,根據(jù)實(shí)際情況修改
            store_path_count=1 #存儲(chǔ)路徑個(gè)數(shù),需要和store_path個(gè)數(shù)匹配
            store_path0=/home/mm/fastdfs/storage #如果為空,則使用base_path
            tracker_server=10.122.149.211:22122 #配置該storage監(jiān)聽的tracker的ip和port
          3. 啟動(dòng)storage(支持start|stop|restart):

            /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
          4. 查看storage啟動(dòng)日志:進(jìn)入剛剛指定的base_path(/home/mm/fastdfs/storage)中有個(gè)logs目錄,查看storage.log文件?

          5. 此時(shí)再查看tracker日志:發(fā)現(xiàn)已經(jīng)開始選舉,并且作為唯一的一個(gè)tracker,被選舉為leader?

          6. 查看端口情況:netstat -apn|grep fdfs?

          7. 通過monitor來查看storage是否成功綁定:

            /usr/bin/fdfs_monitor /etc/fdfs/storage.conf

            ?


          0x06:安裝Nginx和fastdfs-nginx-module模塊

          1. 下載Nginx安裝包

            wget http://nginx.org/download/nginx-1.15.2.tar.gz
          2. 下載fastdfs-nginx-module安裝包

            wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
          3. 解壓nginx:tar -zxvf nginx-1.15.2.tar.gz

          4. 解壓fastdfs-nginx-module:tar -xvf V1.20.tar.gz

          5. 進(jìn)入nginx目錄:cd nginx-1.10.1

          6. 安裝依賴的庫

            apt-get update
            apt-get install libpcre3 libpcre3-dev openssl libssl-dev libperl-dev
          7. 配置,并加載fastdfs-nginx-module模塊:

            ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module-1.20/src/
          8. 編譯安裝:

            make
            make install
          9. 查看安裝路徑:whereis nginx?

          10. 啟動(dòng)、停止:

            cd /usr/local/nginx/sbin/
            ./nginx
            ./nginx -s stop #此方式相當(dāng)于先查出nginx進(jìn)程id再使用kill命令強(qiáng)制殺掉進(jìn)程
            ./nginx -s quit #此方式停止步驟是待nginx進(jìn)程處理任務(wù)完畢進(jìn)行停止
            ./nginx -s reload
          11. 驗(yàn)證啟動(dòng)狀態(tài):wget "http://127.0.0.1"?

          12. 查看此時(shí)的nginx版本:發(fā)現(xiàn)fastdfs模塊已經(jīng)安裝好了?

          可能的報(bào)錯(cuò):

          /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文件,然后重新第7步開始
          ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
          CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"


          0x08:配置Nginx和fastdfs-nginx-module模塊

          1. 配置mod-fastdfs.conf,并拷貝到/etc/fdfs文件目錄下

            cd fastdfs-nginx-module-1.20/src/
            cp mod_fastdfs.conf /etc/fdfs
          2. 進(jìn)入/etc/fdfs修改mod-fastdfs.conf:

            base_path=/home/mm/fastdfs
            tracker_server=10.122.149.211:22122 #tracker的地址
            url_have_group_name=true #url是否包含group名稱
            storage_server_port=23000 #需要和storage配置的相同
            store_path_count=1 #存儲(chǔ)路徑個(gè)數(shù),需要和store_path個(gè)數(shù)匹配
            store_path0=/home/mm/fastdfs/storage #文件存儲(chǔ)的位置
          3. 配置nginx,80端口server增加location如圖:

            cd /usr/local/nginx/conf/
            vi nginx.conf

            ?

          4. 最后需要拷貝fastdfs解壓目錄中的http.conf和mime.types:

            cd /usr/local/src/fastdfs-5.11/conf
            cp mime.types http.conf /etc/fdfs/


          0x09:FastDFS常用命令測(cè)試

          上傳文件
          1. 進(jìn)入/etc/fdfs目錄,有cp命令拷貝client.conf.sample,刪除.sample后綴作為正式文件;

          2. 修改client.conf相關(guān)配置:

            base_path=/home/mm/fastdfs/tracker //tracker服務(wù)器文件路徑
            tracker_server=10.122.149.211:22122 //tracker服務(wù)器IP地址和端口號(hào)
            http.tracker_server_port=80 # tracker服務(wù)器的http端口號(hào),必須和tracker的設(shè)置對(duì)應(yīng)起來
          3. 新建一個(gè)測(cè)試文檔1.txt,內(nèi)容為abc

          4. 命令:

            /usr/bin/fdfs_upload_file  <config_file> <local_filename>
          5. 示例:

            /usr/bin/fdfs_upload_file  /etc/fdfs/client.conf 1.txt

            ?

            組名:group1
            磁盤:M00
            目錄:00/00
            文件名稱:CnqV01trmeyAbAN0AAAABLh3frE677.txt
          6. 查看結(jié)果,進(jìn)入storage的data目錄:?

          7. 通過wget和瀏覽器方式訪問成功:

            wget http://10.122.149.211/group1/M00/00/00/CnqV01trmeyAbAN0AAAABLh3frE677.txt

            ?

          下載文件:
          1. 命令:

            /usr/bin/fdfs_download_file <config_file> <file_id> [local_filename]
          2. 示例:

            /usr/bin/fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/CnqV01trmeyAbAN0AAAABLh3frE677.txt a.txt
          3. 查看結(jié)果:?

          刪除文件:
          1. 命令:

            /usr/bin/fdfs_delete_file <config_file> <file_id>
          2. 示例:

            /usr/bin/fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/CnqV01trmeyAbAN0AAAABLh3frE677.txt
          3. 查看結(jié)果,進(jìn)入storage的data目錄文件不存在,通過wget再次獲取404:




          往期精彩



          01?Sentinel如何進(jìn)行流量監(jiān)控

          02?Nacos源碼編譯

          03?基于Apache Curator框架的ZooKeeper使用詳解

          04?spring boot項(xiàng)目整合xxl-job

          05?互聯(lián)網(wǎng)支付系統(tǒng)整體架構(gòu)詳解

          關(guān)注我

          每天進(jìn)步一點(diǎn)點(diǎn)

          喜歡!在看?
          瀏覽 49
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  特级西西444www大精品视频免费看 | 黑人操逼视频在线播放 | 久久久久亚洲AV成人无在 | 痴汉视频网站免费看视频 | 毛片片|