gluster分佈式存儲總結與實踐

1 理論知識html

1.1 概念前端

1.1.1 全局統一命名空間的定義node

全局統一命名空間將磁盤和內存資源集成一個單一的虛擬存儲池,對上層用戶屏蔽了底層的物理硬件。算法

1.1.2 GlusterFS的定義後端

GlusterFS是一套可擴展的開源羣集文件系統,並可以輕鬆地爲客戶提供全局命名空間、分佈式前端以及高達數百PB級別的擴展性。centos

1.1.3 元數據的定義緩存

元數據,是用來描述一個給定的文件或是區塊在分佈式文件系統中所處的位置。bash

注:元數據時網絡附加存儲解決方案在規模化方面的致命弱點,因其全部節點都必須不斷與服務器(或集羣組)保持聯繫以延續真個羣集的元數據,故增長了額外的開銷,導致硬件在等待響應元數據請求過程當中而效率低下。服務器

1.2 數據定位技術
網絡

Gluster經過其自有的彈性Hash算法可計算出文件在羣集中每一個節點的位置,而無需聯繫羣集內的其餘節點,從而下降了追蹤元數據的變化而帶來額外的開銷。

1.2.1 數據訪問流程

- 根據輸入的文件路徑和文件名計算hash值

- 根據hash值在羣集中選擇子卷(存儲服務器),進行文件定位

- 對所選擇的子捲進行數據訪問

1.2.2 Davies-Meyer算法

Gluster使用Davies-Meyer算法計算文件名的hash值,得到一個32位整數,算法特色以下:

- 很是好的hash分佈性

- 高效率的計算

1.3 Gluster的架構

wKiom1eRw3WwZgNYAAFcG6myN7E359.png

1.3.1 存儲服務器(Brick Server)

- 存儲服務器主要提供基本的數據存儲功能

- 最終經過統一調度策略分佈在不一樣的存儲服務器上(經過Glusterfsd來處理數據服務請求)

- 數據以原始格式直接存儲於服務器本地文件系統(EXT3/EXT4/XFS/ZFS等)

1.3.2 客戶端和存儲網關(NFS/Samba)

wKiom1eR0QKjoFjqAAUFzRXNUgM880.png

- 客戶端的Glusterfs進程負責數據卷管理、I/O調度、文件定位、數據緩存等功能

- 客戶端利用FUSE(File System in User Space)模塊將GlusterFS掛載到本地文件系統上

- GlusterFS存儲網關提供彈性卷管理和NFS/GIFS訪問代理功能

1.3.3 節點間互聯

GlusterFS支持一下網絡互聯

- TCP/IP

- InfiniBand RDMA

1.4 Gluster的優勢

1.4.1 彈性存儲

Gluster羣集可根據業務需求靈活地增長或縮減數據存儲以及增刪存儲池中的資源,而不會中斷系統的運行。

1.4.2 橫向擴展

Gluster羣集可經過增長存儲節點來提高整個系統的容量或性能

1.4.3 高可靠性

Gluster羣集經過自動複製與自動修復來保證數據的可靠性(利用EXT3/ZFS等磁盤文件系統日誌)

1.5 Cluster的後端部署

1.5.1 兼容性

1)Cluster工做於Linux系統上層,其經過操做系統去解決與硬件的兼容性問題

2)可被部署與任何品牌的Linux系統(主要是RHEL和CentOS)

注:以上使得用戶可自由選擇硬件

1.5.2 數據存儲方式

- 只分布型,模擬了RAID0分佈狀況,文件只存儲於Gluster羣集的單個節點,但性能表現優良。

- 分佈式副本型,相似於RAID10,文件經過兩個節點(鏡像節點)同步使得單點故障不影響數據存取。

- 分段模型,執行上接近於標準化區塊層RAID0模式,該模式將文件拆分且分佈於多個節點上。

1.5.3 跨站點備份

Cluster羣集容許不一樣羣集鍵的多線路跨地域備份。

注:該方案用於避免羣集總體故障或數據遷移、異地備份。

1.5.4 跨站點延伸

Cluster羣集容許內部節點跨物理站點。

注:跨站點的帶寬或延遲可能會影響羣集的性能表現

1.6 客戶端部署

1.6.1 支持的客戶端

Cluster可經過多種不一樣的協議實現客戶端訪問,如:

- Gluster客戶端

- NFS

- CIFS

- WebDAV

- HTTP

- 其餘

注:只有本地的Gluster客戶端才正常支持高可用性、大規模的並行文件訪問或使用循環域名服務、UCARP(虛擬路由冗餘協議的簡化版)、CTDB(用於羣集存儲的Samba項目)相結合的硬件負載羣衡器。

1.6.2 客戶端高可用原理

- 客戶端主動聯繫羣集中的全部節點

- 客戶端使用Hash算法計算出本身位於拓撲結構中的位置

- 客戶端從所需求的託管節點處接收數據

- 應用程序可經過Gluster分卷獲知鏡像節點單點故障

1.7 Gluster羣集管理工具

- Web GUI

- 命令行工具(管理很是簡單便捷)

1.8 卷的類型

卷是塊的集合且更多的gluster文件系統的操做發生在卷。Gluster文件系統基於需求支持不一樣類型的卷。某些擅長卷縮放存儲大小,某些擅長提升性能和冗餘。

1.8.1 Distributed Glusterfs Volume

分佈式卷是Glusterfs的默認卷,當你建立一個卷若是沒有指定卷的類型,將使用這個默認的選項去建立分佈式卷。

wKioL1eULZ_y4XnHAAC4beaL-ac532.png

1)特色

- 文件分佈在不一樣的塊服務器(文件1可分佈在塊服務器1或2,但不能兩臺同時分佈,沒有冗餘)

- 更容易和廉價地擴展卷的大小

2)缺點

- 單點故障會形成數據丟失

- 依賴底層的數據保護

3)建立分佈式卷

#gluster volume create test-volume server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
Creation of test-volume has been successful
Please start the volume to access data

4)顯示分佈式卷信息

#gluster volume info
Volume Name: test-volumeType: DistributeStatus: Created
Number of Bricks: 4Transport-type: tcpBricks:Brick1: server1:/exp1Brick2: server2:/exp2Brick3: server3:/exp3Brick4: server4:/exp4

1.8.2 Replicated Glusterfs Volume

複製卷將克服分佈式卷的數據丟失問題,其用於可靠的數據冗餘

wKiom1eUOPmzgGORAACsL8CfHUI515.png

1)特色

- 該模式在全部的塊服務器被保持一個精確的副本

- 卷的副本數量可由客戶建立的時候決定

- 至少由兩個塊服務器或3個來建立一個卷

- 一個塊服務故障仍然可從其餘塊服務器讀取數據

2)建立複製卷

# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2
Creation of test-volume has been successful
Please start the volume to access data

1.8.3 Distributed Replicated Glusterfs Volume

分佈式複製卷文件分佈在另一個塊的複製集合,該類型用於數據冗餘的高可用和存儲縮放

wKioL1eUOUiSUsRtAAD1095bDP8621.png

1)搭建條件

- 塊服務器的數量必須是複製的倍數

- 將按塊服務器的排列順序指定相鄰的塊服務器成爲彼此的複製

例如,8臺服務器:

- 當複製副本爲2時,按照服務器列表的順序,服務器1和2做爲一個複製,3和4做爲一個複製,5和6做爲一個複製,7和8做爲一個複製

- 當複製副本爲4時,按照服務器列表的順序,服務器1/2/3/4做爲一個複製,5/6/7/8做爲一個複製

2)建立分佈式複製卷

# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
Creation of test-volume has been successful
Please start the volume to access data

1.8.4 Striped Glusterfs Volume

條帶卷適用於解決大文件高併發下帶來的高負載和低性能問題。

wKioL1eUOaPCaZAfAACpNvdyUGo216.png

1)特色

- 數據被分割成更小塊分佈到塊服務器羣中的不一樣條帶區

- 分佈減小了負載且更小的文件加速了存取的速度

2)缺點

- 沒有數據冗餘

3)建立條帶卷

格式:

gluster volume create NEW-VOLNAME [stripe COUNT] [transport [tcp | dma | tcp,rdma]] NEW-BRICK...

範例:

# gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2
Creation of test-volume has been successful
Please start the volume to access data

1.8.5 Distributed Striped Glusterfs Volume

wKiom1eUOgyQ1GU_AADSF1tRLiY273.png

1)特色

- 相對於條帶卷文件可被分割成更小的塊分佈到塊服務器中的多個塊中的不一樣條帶區

2)建立

格式:

gluster volume create NEW-VOLNAME [stripe COUNT] [transport [tcp | rdma | tcp,rdma]] NEW-BRICK...

範例:

# gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
Creation of test-volume has been successful
Please start the volume to access data

2 實踐部分

2.1 環境信息

2.1.1 主機信息

GlusterH0[1-4]:

hostname=GlusterH0[1-4].cmdschool.org

ipaddress=10.168.0.19[2-5]


GlusterGW:

hostname=GlusterGW.cmdschool.org

ipaddress=10.168.0.190

2.1.2 名稱解析配置

In GlusterH0[1-3] & GlusterGW :

echo "10.168.0.190 GlusterGW.cmdschool.org" >> /etc/hosts
echo "10.168.0.192 GlusterH01.cmdschool.org" >> /etc/hosts
echo "10.168.0.193 GlusterH02.cmdschool.org" >> /etc/hosts
echo "10.168.0.194 GlusterH03.cmdschool.org" >> /etc/hosts
echo "10.168.0.195 GlusterH04.cmdschool.org" >> /etc/hosts

2.1.3 配置YUM源

In GlusterH0[1-3] & GlusterGW :

yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
curl http://download.gluster.org/pub/gluster/glusterfs/3.7/LATEST/CentOS/glusterfs-epel.repo > /etc/yum.repos.d/glusterfs-epel.repo

2.1.4 關閉防火牆

In GlusterH0[1-3] & GlusterGW :

/etc/init.d/iptables stop
chkconfig iptables off

2.2 配置數據存儲根目錄

In GlusterH0[1-3] :

2.2.1 新建分區

fdisk /dev/sdb

詳細嚮導以下:

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x089fd1ab.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-26108, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-26108, default 26108): 
Using default value 26108

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

2.2.2 發現並校驗

partx /dev/sdb
ls /dev/sdb*

2.2.3 建立文件系統

mkfs.xfs -i size=512 /dev/sdb1

2.2.4 配置掛載

mkdir -p /data/brick1
echo '/dev/sdb1 /data/brick1 xfs defaults 1 2' >> /etc/fstab
mount -a && mount

2.3 配置glusterfs服務端

In GlusterH0[1-3] :

2.3.1 安裝yum源

yum install -y glusterfs-server

2.3.2 啓動服務

/etc/init.d/glusterd start
chkconfig glusterd on

2.4 配置信任池

In GlusterH01:

gluster peer probe GlusterH02.cmdschool.org
gluster peer probe GlusterH03.cmdschool.org
gluster peer probe GlusterH04.cmdschool.org

顯示如成功信息:

peer probe: success.

2.5 配置GlusterFS卷

2.5.1 配置存儲位置

In GlusterH0[1-3] :

mkdir /data/brick1/gv0

2.5.2 建立Gluster卷

In GlusterH01 :

gluster volume create gv0 replica 2 transport tcp GlusterH01.cmdschool.org:/data/brick1/gv0 GlusterH02.cmdschool.org:/data/brick1/gv0 GlusterH03.cmdschool.org:/data/brick1/gv0 GlusterH04.cmdschool.org:/data/brick1/gv0

顯示如成功信息:

volume create: gv0: success: please start the volume to access data

2.5.3 啓動GlusterFS卷

In GlusterH01 :

gluster volume start gv0

顯示如成功信息:

volume start: gv0: success

2.5.4 驗證卷的信息

In GlusterH01 :

gluster volume info

顯示以下:

Type: Distributed-Replicate
Volume ID: 96b06e32-deb5-487a-aa00-afd6624dcb97
Status: Started
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: GlusterH01.cmdschool.org:/data/brick1/gv0
Brick2: GlusterH02.cmdschool.org:/data/brick1/gv0
Brick3: GlusterH03.cmdschool.org:/data/brick1/gv0
Brick4: GlusterH04.cmdschool.org:/data/brick1/gv0
Options Reconfigured:
features.quota-deem-statfs: on
features.inode-quota: on
features.quota: on
performance.readdir-ahead: on

2.6 配置Gluster客戶端

In GlusterGW :

2.6.1 安裝客戶端相關包

yum install -y glusterfs-fuse

2.6.2 手動掛載卷gv0到本地

mount -t glusterfs GlusterH01.cmdschool.org:/gv0 /mnt

2.6.3 自動掛載卷gvo到本地

echo 'GlusterH01.cmdschool.org:/gv0 /mnt glusterfs defaults 0 0' >> /etc/fstab

2.7 測試Gluster卷

2.7.1 寫入測試

In GlusterGW :

for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/copy-test-$i; done

2.7.2 寫入確認

In GlusterGW :

ls -lA /mnt/ | wc -l

In GlusterH0[1-3] :

ls -lA /data/brick1/gv0/

---------------------------------------------------------

官方的參閱文檔

--------------

官方主頁:

http://www.gluster.org

官方快速安裝文檔:

http://gluster.readthedocs.io/en/latest/Quick-Start-Guide/Quickstart/

官方安裝指南:

http://gluster.readthedocs.io/en/latest/Install-Guide/Overview/

管理員手冊:

http://gluster.readthedocs.io/en/latest/Administrator%20Guide/

YUM源地址:

http://download.gluster.org/pub/gluster/

架構:

http://gluster.readthedocs.io/en/latest/Quick-Start-Guide/Architecture/#architecture


非官方參閱文檔

--------------

CentOS的配置文檔:

https://wiki.centos.org/SpecialInterestGroup/Storage/gluster-Quickstart

系統架構:

http://wenku.baidu.com/link?url=TFOa9AaI4Rw9saYwCk6I3MlB3ynHl7Orb0i7VajyGLGeHgHQI-DXM1wQPH206B8F1syXSB1UVMqR3P3lKWGXGfFDqFsZqDJaIVLoqCD6K23

架構解讀:

http://os.51cto.com/art/201110/299072.htm

http://blog.csdn.net/zonelan/article/details/8468383

http://jingyan.baidu.com/article/046a7b3ef65250f9c27fa9d9.html

http://wenku.baidu.com/link?url=ZfKvYzTrs4bc08h_aQOHJpI6w0452rZqLXeySDMee9g1_uyhoVOkq5Jdgo5S0GkilarXm9YC3UOpYzFnQ9eQRDNQdE2G0bfLZKGakGJBErm

實踐文章:
http://www.jb51.net/os/RedHat/347181.html

NFS掛載

http://unix.stackexchange.com/questions/102617/having-trouble-exporting-fuse-via-nfs

Windows掛載NFS

http://wenku.baidu.com/link?url=HBPmuCUc--ySFXctE4sybCAt7kLGjc6ilqBs0i6oG6Q0GEW8Hdwlchms6ZqW6arrZ2f3YRCdd6nyC-zI6QHHiGx931Fk6ZgidkzSpq-1mXO

解決Windows掛載Linux NFS只讀的方法

https://help.joyent.com/entries/22180102-Mounting-Windows-to-NFS-servers

馬哥的博客

http://mp.weixin.qq.com/s?__biz=MzA3OTgyMDcwNg==&mid=2650625872&idx=1&sn=d1953b96d93c0baf4d4a0beabbc2aa8f&scene=1&srcid=0817AReukVf9WsMxeMXacP7N#rd

相關文章
相關標籤/搜索