分布式存儲---FastDFS+GlusterFS


一. 存儲概念


1.塊存儲的多種實現:

塊存儲: 就好比硬盤一樣, 直接掛在到主機,一般用於主機的直接存儲空間和數據庫應用的存儲

1.磁盤+LVS: 單機硬盤純存儲
2.DAS(DELL MD系列): 直連式存儲
3.SAN 存儲: 通過FC連接

2.文件存儲的多種實現:

文件存儲:與較底層的塊存儲不同, 上升到了應用層, 一般指的就是 NAS ,一套網絡儲存設備,。

1.NAS(nfs): 通過TCP/IP連接,延長較大,性能有限,單點故障

3.對象存儲的解釋:

對象存儲:具備塊存儲的高速以及文件存儲的共享等特性, 較為智能, 有自己的CPU, 內存, 網絡和磁盤, 比塊存儲和文件存儲更上層, 雲服務商一般提供用戶文件上傳下載讀取的Rest API, 方便應用集成此類服務。

二. Glusterfs相關


參考資料:http://gluster.readthedocs.io/en/latest/Quick-Start-Guide/Quickstart/

1.glusterfs優點:

適合存儲比較大的文件,比如openstack的鏡像或者視頻,存儲小文件性能堪憂。

2.安裝glusterfs:

安裝環境: 172.16.1.211 , 172.16.1.213

在兩台機器分別安裝,注意命令順。

# yum install centos-release-gluster
# yum install glusterfs-server
# /etc/init.d/glusterd start

3.建立信任關系:

只要在一台上面建立

[root@SH_T_ansiblecli_01 ~]# gluster peer probe 172.16.1.213 #后面更另外一台的IP
[root@SH_T_ansiblecli_01 ~]# gluster peer status

4.創建名稱為“test-volume ”的分布式卷:

這里寫圖片描述

172.16.1.211上創建目錄

# mkdir /data/exp1 -p

172.16.1.213上創建目錄

# mkdir /data/exp2 -p

隨意機器輸入:

# gluster volume create test-volume 172.16.1.211:/data/exp1 172.16.1.213:/data/exp2
ps:一般會提示目錄不是在獨立硬盤上,無法創建,后面加上force就可以了
# gluster volume create test-volume 172.16.1.211:/data/exp1 172.16.1.213:/data/exp2 force

# gluster volume info 查看邏輯卷信息
# gluster volume start test-volume #啟動邏輯卷

5.創建名稱為“rd1-volume ”的復制卷:

這里寫圖片描述
172.16.1.211上創建目錄

# mkdir /data/rd1-exp3 -p

172.16.1.213上創建目錄

# mkdir /data/rd1-exp4 -p

隨意機器輸入:

# gluster volume create rd1-volume replica 2 transport tcp 172.16.1.211:/data/rd1-exp3 172.16.1.213:/data/rd1-exp4 force
 cp-volume: 卷名稱 replica 2: 復制卷,復制2份,不加參數默認是分布式卷。 transport tcp: 通過tcp傳輸 # gluster volume info cp-volume #查看邏輯卷信息 # gluster volume start cp-volume #啟動邏輯卷

6.創建名稱為“rd0-volume ”的條帶卷:

這里寫圖片描述
172.16.1.211上創建目錄

# mkdir /data/rd0-exp1 -p

172.16.1.213上創建目錄

# mkdir /data/rd0-exp2 -p

隨意機器輸入:

# gluster volume create rd0-volume stripe 2 transport tcp 172.16.1.211:/data/rd0-exp1 172.16.1.213:/data/rd0-exp2 force
 rd0-volume: 卷名稱 stripe 2: 條帶卷,服務器2台,不加參數默認是分布式卷。 transport tcp: 通過tcp傳輸 # gluster volume info rd0-volume #查看邏輯卷信息 # gluster volume start rd0-volume #啟動邏輯卷

7.生產推薦使用,分布式復制卷:

這里寫圖片描述
需要4台服務器:server1,server2,server3,server4

# gluster volume create test1-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
ps: 與創建復制卷命令相同,但復制2份后面跟4台服務器

8.掛載glusterfs的邏輯卷:

# yum install glusterfs-client #安裝gluster客戶端
# mkdir /mnt/g1 /mnt/g2 /mnt/g3 #創建3個掛載點
# mount.glusterfs 172.16.1.211:/test-volume /mnt/g1 #掛載分布式卷到g1目錄
# mount.glusterfs 172.16.1.211:/rd1-volume /mnt/g2
# mount.glusterfs 172.16.1.211:/rd0-volume /mnt/g3

9.設置磁盤配額:

# gluster volume quota test-volume enable #為test-volume卷啟動配額
# gluster volume quota test-volume limit-usage /data 10GB #設置data目錄為10g的配額
# gluster volume quota test-volume list #查看test-volume卷配額情況

10.對邏輯卷進行擴展:

# mkdir /data/exp9 #模擬創建一個新磁盤
# gluster volume add-brick test-volume 172.16.1.211:/data/exp9 force 
   #將新創建的"/data/exp9"磁盤加入"test-volume"的邏輯卷中
# gluster volume rebalance test-volume start #重新均衡邏輯卷內容,不運行此命令新加入的磁盤就不會寫入內容

# gluster volume info test-volume #查看是否加入
# gluster volume status test-volume #查看磁盤狀態

11.對邏輯卷進行收縮:

這個操作要小心,可能會丟失數據

# gluster volume remove-brick test-volume 172.16.1.211:/data/exp9 force 
   #將“/data/exp9”磁盤從“test-volume”邏輯卷中刪除

三. FastDFS相關


1.fastdfs的特性:

1.C實現
2.只能通過專有的API訪問
3.高性能,高擴展
4.一般用在大於4K小於500M的文件存儲

2、FastDFS的上傳過程

FastDFS向使用者提供基本文件訪問接口,比如upload、download、append、delete等,以客戶端庫的方式提供給用戶使用。

這里寫圖片描述
根據前邊的講解,我們知道Storage Server會定期的向Tracker Server發送自己的存儲信息。當Tracker Server Cluster中的Tracker Server不止一個時,各個Tracker之間的關系是對等的,所以客戶端上傳時可以選擇任意一個Tracker。

當Tracker收到客戶端上傳文件的請求時,會為該文件分配一個可以存儲文件的group,當選定了group后就要決定給客戶端分配group中的哪一個storage server。當分配好storage server后,客戶端向storage發送寫文件請求,storage將會為文件分配一個數據存儲目錄。然后為文件分配一個fileid,最后根據以上的信息生成文件名存儲文件。文件名的格式如下:
這里寫圖片描述

3.FastDFS的安裝部署:

官網:https://github.com/happyfish100
部署2台服務器: 172.16.1.211 172.16.1.213

1.先安裝lib包
# git clone https://github.com/happyfish100/libfastcommon.git #下載lib包
# cd libfastcommon/
# ./make.sh
# ./make.sh install #要先安裝gcc,make等

2.安裝fastdfs:
# git clone https://github.com/happyfish100/fastdfs.git
# cd fastdfs
# ./make.sh
# ./make.sh install

3.創建文件存放目錄:
# mkdir -p /data/fdfs_storaged
# mkdir -p /data/fdfs_trackerd

4.修改配置文件:

兩台服務器都要做下面的操作

# cd /etc/fdfs/
# cp storage.conf.sample storage.conf
# cp tracker.conf.sample tracker.conf
# vim tracker.conf #追蹤服務器配置

base_path=/data/fdfs_trackerd 

# vim storage.conf

base_path=/data/fdfs_storaged/base
store_path0=/data/fdfs_storaged/store

tracker_server=172.16.1.211:22122    #指定追蹤服務器IP,我們有兩台就配置兩個
tracker_server=172.16.1.213:22122

# mkdir /data/fdfs_storaged/base
# mkdir /data/fdfs_storaged/store

5.啟動fastdfs服務:

# /etc/init.d/fdfs_trackerd start
# /etc/init.d/fdfs_storaged start

6.配置fastdfs客戶端:

# cd /etc/fdfs/
# cp client.conf.sample client.conf
# mkdir /data/fdfs_storaged/tmp
# vim client.conf

base_path=/data/fdfs_storaged/tmp #存放日志目錄

tracker_server=172.16.1.211:22122
tracker_server=172.16.1.213:22122

7.通過客戶端連接並上傳文件:

上傳"/etc/passwd"文件到fastdfs服務器:
# fdfs_upload_file /etc/fdfs/client.conf /etc/passwd 

下載剛才上傳的文件:
# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBAB01mCyc-AJ9pnAAAFfnXniCQ5694871

查看文件屬性:
# fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/rBAB01mCyc-AJ9pnAAAFfnXniCQ5694871

刪除上傳的文件:
# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/rBAB1VmCz8qABQC4AAAABncc3SA670.txt

監控fastdfs的狀態:
# fdfs_monitor /etc/fdfs/client.conf

8.通過nginx訪問fastdfs:

# tar -zxvf nginx-1.10.2.tar.gz
# cd nginx-1.10.2

下載fastdfs的nginx模塊,編譯安裝的時候加進去
# git clone https://github.com/happyfish100/fastdfs-nginx-module.git
# ./configure --prefix=/usr/local/nginx-fastdfs --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --add-module=./fastdfs-nginx-module/src/
# make && make install

拷貝配置文件到fasstdfs配置里面
# cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
# cd /root/fastdfs/conf/ #進入fastdfs安裝包文件夾
# cp anti-steal.jpg http.conf mime.types /etc/fdfs/

# cd /usr/local/nginx-fastdfs/
# vim conf/nginx.conf 配置文件server中添加

         location /group1/M00 {
            root /data/fdfs_storaged/store;
            ngx_fastdfs_module;
        }

# vim /etc/fdfs/mod_fastdfs.conf #修改客戶端配置文件

tracker_server=172.16.1.211:22122
tracker_server=172.16.1.213:22122


url_have_group_name = true #url是否包含group信息
store_path0=/data/fdfs_storaged/store

啟動nginx后就可以通過url訪問了:
# curl 172.16.1.211/group1/M00/00/00/rBAB01mC7OqAKx6RAAAFfnXniCQ1855579

ps:生產環境可以用nginx反向代理訪問,在group的每個節點上都裝個nginx-fastdfs


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM