Linux实战教学笔记52:GlusterFS分布式存储系统
一,分布式文件系統(tǒng)理論基礎(chǔ)
1.1 分布式文件系統(tǒng)出現(xiàn)
- 計(jì)算機(jī)通過(guò)文件系統(tǒng)管理,存儲(chǔ)數(shù)據(jù),而現(xiàn)在數(shù)據(jù)信息爆炸的時(shí)代中人們可以獲取的數(shù)據(jù)成指數(shù)倍的增長(zhǎng),單純通過(guò)增加硬盤(pán)個(gè)數(shù)來(lái)擴(kuò)展計(jì)算機(jī)文件系統(tǒng)的存儲(chǔ)容量的方式,已經(jīng)不能滿足目前的需求。
- 分布式文件系統(tǒng)可以有效解決數(shù)據(jù)的存儲(chǔ)和管理難題,將固定于某個(gè)地點(diǎn)的某個(gè)文件系統(tǒng),擴(kuò)展到任意多個(gè)地點(diǎn)/多個(gè)文件系統(tǒng),眾多的節(jié)點(diǎn)組成一個(gè)文件系統(tǒng)網(wǎng)絡(luò)。每個(gè)節(jié)點(diǎn)可以分布在不同的地點(diǎn),通過(guò)網(wǎng)絡(luò)進(jìn)行節(jié)點(diǎn)間的通信和數(shù)據(jù)傳輸。人們?cè)谑褂梅植际轿募到y(tǒng)時(shí),無(wú)需關(guān)心數(shù)據(jù)是存儲(chǔ)在哪個(gè)節(jié)點(diǎn)上,或者是從哪個(gè)節(jié)點(diǎn)從獲取的,只需要像使用本地文件系統(tǒng)一樣管理和存儲(chǔ)文件系統(tǒng)中的數(shù)據(jù)。
1.2 典型代表NFS
NFS(Network File System)即網(wǎng)絡(luò)文件系統(tǒng),它允許網(wǎng)絡(luò)中的計(jì)算機(jī)之間通過(guò)TCP/IP網(wǎng)絡(luò)共享資源。在NFS的應(yīng)用中,本地NFS的客戶端應(yīng)用可以透明地讀寫(xiě)位于遠(yuǎn)端NFS服務(wù)器上的文件,就像訪問(wèn)本地文件一樣。NFS的優(yōu)點(diǎn)如下:
(1)節(jié)約使用的磁盤(pán)空間
客戶端經(jīng)常使用的數(shù)據(jù)可以集中存放在一臺(tái)機(jī)器上,并使用NFS發(fā)布,那么網(wǎng)絡(luò)內(nèi)部所有計(jì)算機(jī)可以通過(guò)網(wǎng)絡(luò)訪問(wèn),不必單獨(dú)存儲(chǔ)。
(2)節(jié)約硬件資源
NFS還可以共享軟驅(qū),CDROM和ZIP等的存儲(chǔ)設(shè)備,減少整個(gè)網(wǎng)絡(luò)上的可移動(dòng)設(shè)備的數(shù)量。
(3)用戶主目錄設(shè)定
對(duì)于特殊用戶,如管理員等,為了管理的需要,可能會(huì)經(jīng)常登陸到網(wǎng)絡(luò)中所有的計(jì)算機(jī),若每個(gè)客戶端,均保存這個(gè)用戶的主目錄很繁瑣,而且不能保證數(shù)據(jù)的一致性。實(shí)際上,經(jīng)過(guò)NFS服務(wù)的設(shè)定,然后在客戶端指定這個(gè)用戶的主目錄位置,并自動(dòng)掛載,就可以在任何計(jì)算機(jī)上使用用戶主目錄的文件。
1.3 面臨的問(wèn)題
存儲(chǔ)空間不足,需要更大容量的存儲(chǔ)
直接用NFS掛載存儲(chǔ),有一定風(fēng)險(xiǎn),存在單點(diǎn)故障
某些場(chǎng)景不能滿足需求,大量的訪問(wèn)磁盤(pán)IO是瓶頸
1.4 GlusterFS概述
- GlusterFS是Scale-Out存儲(chǔ)解決方案Gluster的核心,它是一個(gè)開(kāi)源的分布式文件系統(tǒng),具有強(qiáng)大的橫向擴(kuò)展能力,通過(guò)擴(kuò)展能夠支持?jǐn)?shù)PB存儲(chǔ)容量和處理數(shù)千客戶端。GlusterFS借助TCP/IP或InfiniBand RDMA網(wǎng)絡(luò)將物理分布的存儲(chǔ)資源聚集在一起,使用單一全局命名空間來(lái)管理數(shù)據(jù)。
- GlusterFS支持運(yùn)行在任何標(biāo)準(zhǔn)IP網(wǎng)絡(luò)上標(biāo)準(zhǔn)應(yīng)用程序的標(biāo)準(zhǔn)客戶端,用戶可以在全局統(tǒng)一的命令空間中使用NFS/CIFS等標(biāo)準(zhǔn)協(xié)議來(lái)訪問(wèn)應(yīng)用程序。GlusterFS使得用戶可擺脫原有的獨(dú)立,高成本的封閉存儲(chǔ)系統(tǒng),能夠利用普通廉價(jià)的存儲(chǔ)設(shè)備來(lái)部署可集中管理,橫向擴(kuò)展,虛擬化的存儲(chǔ)池,存儲(chǔ)容量可擴(kuò)展至TB/PB級(jí)。
- 目前glusterfs已被redhat收購(gòu),它的官方網(wǎng)站是:http://www.gluster.org/
超高性能(64個(gè)節(jié)點(diǎn)時(shí)吞吐量也就是帶寬甚至達(dá)到32GB/s)
1.5 GlusterFS企業(yè)主要應(yīng)用場(chǎng)景
理論和實(shí)踐上分析,GlusterFS目前主要適用大文件存儲(chǔ)場(chǎng)景,對(duì)于小文件尤其是海量小文件(小于1M),存儲(chǔ)效率和訪問(wèn)性能都表現(xiàn)不佳。海量小文件LOSF問(wèn)題是工業(yè)界和學(xué)術(shù)界公認(rèn)的難題,GlusterFS作為通用的分布式文件系統(tǒng),并沒(méi)有對(duì)小文件作額外的優(yōu)化措施(小于1M),性能不好也是可以理解的。
- [x] Media
文檔,圖片,音頻,視頻
- [x] Shared storage
云存儲(chǔ),虛擬化存儲(chǔ),HPC(高性能計(jì)算)
- [x] Big data
日志文件,RFID(射頻識(shí)別)數(shù)據(jù)
二,部署安裝
2.1 GlusterFS 安裝前的準(zhǔn)備
| Linux_node1 | 192.168.200.150 | mystorage01 |
| Linux_node2 | 192.168.200.151 | mystorage02 |
| Linux_node3 | 192.168.200.152 | mystorage03 |
| Linux_node4 | 192.168.200.153 | mystorage04 |
| Linux_node5 | 192.168.200.154 | WebServerClinet |
2.2 GlusterFS 安裝
2.2.1 修改主機(jī)名
略
2.2.2 添加hosts文件實(shí)現(xiàn)集群主機(jī)之間相互能夠解析
[root@glusterfs01 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.200.150 glusterfs01 192.168.200.151 glusterfs02 192.168.200.152 glusterfs03 192.168.200.153 glusterfs042.2.3 關(guān)閉selinux和防火墻
#關(guān)閉selinux sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/sysconfig/selinux #關(guān)閉iptables service iptables stop chkconfig iptables off2.2.4 利用教程附帶的rpm軟件包組,充當(dāng)本地定制化yum源
yum -y install createrepo yum -y install glusterfs-server glusterfs-cli glusterfs-geo-replication2.3 配置glusterfs
2.3.1 查看glusterfs版本信息
[root@glusterfs01 ~]# which glusterfs /usr/sbin/glusterfs [root@glusterfs01 ~]# glusterfs -V glusterfs 3.7.20 built on Jan 30 2017 15:39:27 Repository revision: git://git.gluster.com/glusterfs.git Copyright (c) 2006-2013 Red Hat, Inc. <http://www.redhat.com/> GlusterFS comes with ABSOLUTELY NO WARRANTY. It is licensed to you under your choice of the GNU Lesser General Public License, version 3 or any later version (LGPLv3 or later), or the GNU General Public License, version 2 (GPLv2), in all cases as published by the Free Software Foundation.2.3.2 啟動(dòng)停止服務(wù)
[root@glusterfs01 ~]# /etc/init.d/glusterd status #查看服務(wù)狀態(tài) glusterd (pid 906) is running... [root@glusterfs01 ~]# /etc/init.d/glusterd stop #停止 Stopping glusterd: [ OK ] [root@glusterfs01 ~]# /etc/init.d/glusterd status glusterd is stopped [root@glusterfs01 ~]# /etc/init.d/glusterd start #啟動(dòng) Starting glusterd: [ OK ] [root@glusterfs01 ~]# /etc/init.d/glusterd status glusterd (pid 1356) is running... [root@glusterfs01 ~]# chkconfig glusrerd on #添加開(kāi)機(jī)啟動(dòng)2.3.3 存儲(chǔ)主機(jī)加入信任存儲(chǔ)池
虛擬機(jī)添加信任存儲(chǔ)池
特別提示:只需要讓一個(gè)虛擬機(jī)進(jìn)行添加操作即可。但自己并不需要添加信任自己
2.3.4 查看虛擬機(jī)信任狀態(tài)添加結(jié)果
[root@glusterfs01 ~]# gluster peer status Number of Peers: 3Hostname: glusterfs02 Uuid: 0b52290d-96b0-4b9c-988d-44062735a8a8 State: Peer in Cluster (Connected)Hostname: glusterfs03 Uuid: c5dd23d5-c93c-427c-811b-3255da3c9691 State: Peer in Cluster (Connected) Hostname: glusterfs04 Uuid: a43ac51b-641c-4fc4-be56-f6873423b462 State: Peer in Cluster (Connected)同學(xué)們可以查看每臺(tái)虛擬機(jī)的信任狀態(tài),他們此時(shí)彼此都應(yīng)該已經(jīng)互有信任記錄了
2.3.5 配置前的準(zhǔn)備工作
在企業(yè)里我們還需要分區(qū)然后才能進(jìn)行格式化。但是我們這里就省略了,我們直接格式化每臺(tái)虛擬機(jī)的那塊10G硬盤(pán)
[root@glusterfs01 ~]# mkfs.ext4 /dev/sdb mke2fs 1.41.12 (17-May-2010) /dev/sdb is entire device, not just one partition! Proceed anyway? (y,n) y Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2621440 blocks 131072 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2684354560 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 28 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.在四臺(tái)機(jī)器上執(zhí)行mkdir -p /gluster/brick1 建立掛在塊設(shè)備的目錄
掛載磁盤(pán)到文件系統(tǒng)(4臺(tái)都做,步驟相同)
繼續(xù)重復(fù)以上步驟,將第二塊磁盤(pán)sdc格式化,并掛載到每臺(tái)虛擬機(jī)的/gluster/brick2上
4臺(tái)虛擬機(jī)加入開(kāi)機(jī)自動(dòng)掛載
[root@glusterfs01 ~]# echo "mount /dev/sdb /gluster/brick1" >> /etc/rc.local [root@glusterfs01 ~]# echo "mount /dev/sdc /gluster/brick2" >> /etc/rc.local [root@glusterfs01 ~]# tail -2 /etc/rc.local mount /dev/sdb /gluster/brick1 mount /dev/sdc /gluster/brick22.3.6 創(chuàng)建volume分布式卷
- [x] 基本卷:
- 分布式卷(Distributed):
- 復(fù)制卷(Replicated):
- 條帶式卷(Striped):
- [x] 復(fù)合卷:
- 分布式復(fù)制卷(Distributed Replicated):
- 分布式條帶卷(Distributed Striped):
- 復(fù)制條帶卷(Replicated Striped):
- 分布式復(fù)制條帶卷(Distributed Replicated Striped):
2.3.7 volume的兩種掛載方式
(1)以glusterfs方式掛載
#掛載卷到目錄(在glusterfs01上操作) [root@glusterfs01 ~]# mount -t glusterfs 127.0.0.1:/gs1 /mnt #將本地的分布式卷gs01掛載到/mnt目錄下 [root@glusterfs01 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 18G 1.1G 16G 7% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 485M 33M 427M 8% /boot /dev/sr0 4.2G 4.2G 0 100% /media/cdrom /dev/sdb 9.9G 151M 9.2G 2% /gluster/brick1 127.0.0.1:/gs1 20G 302M 19G 2% /mnt #掛載成功,我們看到磁盤(pán)空間已經(jīng)整合 #在掛載好的/mnt目錄里創(chuàng)建實(shí)驗(yàn)文件(在glusterfs01上操作) [root@glusterfs01 ~]# touch /mnt/{1..5} [root@glusterfs01 ~]# ls /mnt 1 2 3 4 5 #在其他虛擬機(jī)上掛載分布式卷gs1,查看同步掛載結(jié)果 [root@glusterfs02 rpm]# mount -t glusterfs 127.0.0.1:/gs1 /mnt [root@glusterfs02 rpm]# ls /mnt 1 2 3 4 5 [root@glusterfs03 rpm]# mount -t glusterfs 127.0.0.1:/gs1 /mnt [root@glusterfs03 rpm]# ls /mnt 1 2 3 4 5 [root@glusterfs04 ~]# mount -t glusterfs 127.0.0.1:/gs1 /mnt [root@glusterfs04 ~]# ls /mnt 1 2 3 4 5(2)以NFS方式進(jìn)行掛載
在掛載之前我們先來(lái)看一下如何打開(kāi)glusterfs的NFS掛載方式
#在glusterfs01上執(zhí)行如下操作 [root@glusterfs01 ~]# gluster volume status #查看分布式卷的狀態(tài) Status of volume: gs1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick glusterfs01:/gluster/brick1 49152 0 Y 1911 Brick glusterfs02:/gluster/brick1 49152 0 Y 1695 NFS Server on localhost N/A N/A N N/A #本地分布式卷NFS掛載未開(kāi)啟 NFS Server on glusterfs04 2049 0 Y 2679 NFS Server on glusterfs02 2049 0 Y 2600 #出現(xiàn)具體的端口就表明開(kāi)啟了 NFS Server on glusterfs03 2049 0 Y 2608 Task Status of Volume gs1 ------------------------------------------------------------------------------ There are no active volume tasks以上結(jié)果是是什么原因呢?
如果NFS Server的掛載端口顯示N/A表示未開(kāi)啟掛載功能,這是由于要先進(jìn)行nfs掛載是需要裝兩個(gè)nfs的軟件包的rpcbind和nfs-utils
當(dāng)然就算系統(tǒng)裝了這兩個(gè)軟件包,那么我們也需要開(kāi)啟rpcbind服務(wù),然后在重啟glusterfs服務(wù)才能夠進(jìn)行nfs掛載的操作。
現(xiàn)在我們就來(lái)開(kāi)啟glusterfs01的nfs掛載功能,如下:
接下來(lái),我們嘗試在準(zhǔn)備好的第五臺(tái)虛擬機(jī)WebServer上進(jìn)行nfs方式的掛載
#在Webserver上進(jìn)行如下操作 [root@WebServer ~]# rpm -qa nfs-utils #查看nfs-utils是否安裝 nfs-utils-1.2.3-39.el6.x86_64 [root@WebServer ~]# mount -t nfs 192.168.200.150:/gs1 /mnt #以nfs方式遠(yuǎn)程掛載分布式卷 mount.nfs: rpc.statd is not running but is required for remote locking. mount.nfs: Either use '-o nolock' to keep locks local, or start statd. mount.nfs: an incorrect mount option was specified #根據(jù)提示我們加上-o nolock參數(shù) [root@WebServer ~]# mount -o nolock -t nfs 192.168.200.150:/gs1 /mnt [root@WebServer ~]# ls /mnt #掛載成功 1 2 3 4 5 6 666 sss yunjisuan [root@WebServer ~]# touch /mnt/benet #創(chuàng)建文件測(cè)試 [root@WebServer ~]# ls /mnt 1 2 3 4 5 6 666 benet sss yunjisuan #在glusterfs任意虛擬機(jī)上進(jìn)行如下操作 [root@glusterfs04 ~]# mount -t glusterfs 127.0.0.1:/gs1 /mnt [root@glusterfs04 ~]# ls /mnt 1 2 3 4 5 6 666 benet sss yunjisuan #數(shù)據(jù)已經(jīng)同步2.3.8 創(chuàng)建分布式復(fù)制卷
#在任意一臺(tái)gluster虛擬機(jī)上進(jìn)行如下操作 [root@glusterfs01 ~]# gluster volume create gs2 replica 2 glusterfs03:/gluster/brick1 glusterfs04:/gluster/brick1 force volume create: gs2: success: please start the volume to access data [root@glusterfs01 ~]# gluster volume info gs2 Volume Name: gs2 Type: Replicate #復(fù)制卷 Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8 Status: Created Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: glusterfs03:/gluster/brick1 Brick2: glusterfs04:/gluster/brick1 Options Reconfigured: performance.readdir-ahead: on [root@glusterfs01 ~]# gluster volume start gs2 #啟動(dòng)卷 volume start: gs2: success2.3.9 創(chuàng)建分布式條帶卷
[root@glusterfs01 ~]# gluster volume create gs3 stripe 2 glusterfs01:/gluster/brick2 glusterfs02:/gluster/brick2 force volume create: gs3: success: please start the volume to access data [root@glusterfs01 ~]# gluster volume info gs3 Volume Name: gs3 Type: Stripe #條帶卷 Volume ID: 6d2e27c7-f5a1-4473-9df8-a7261851a2ed Status: Created Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: glusterfs01:/gluster/brick2 Brick2: glusterfs02:/gluster/brick2 Options Reconfigured: performance.readdir-ahead: on [root@glusterfs01 ~]# gluster volume start gs3 #啟動(dòng)卷 volume start: gs3: success三,進(jìn)行卷的數(shù)據(jù)寫(xiě)入測(cè)試
在WebServer服務(wù)器掛載創(chuàng)建的三種類型卷gs1,gs2,gs3,進(jìn)行數(shù)據(jù)寫(xiě)入測(cè)試
3.1 分布式卷gs1的數(shù)據(jù)寫(xiě)入測(cè)試
#在WebServer上進(jìn)行數(shù)據(jù)寫(xiě)入操作 [root@WebServer ~]# mount -o nolock -t nfs 192.168.200.150:/gs1 /mnt [root@WebServer ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 18G 1014M 16G 7% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 485M 33M 427M 8% /boot /dev/sr0 4.2G 4.2G 0 100% /media/cdrom 192.168.200.150:/gs1 20G 301M 19G 2% /mnt [root@WebServer ~]# touch /mnt/{1..10} [root@WebServer ~]# ls /mnt/ 1 10 2 3 4 5 6 7 8 9 #在glusterfs01和glusterfs02上進(jìn)行查看(看看數(shù)據(jù)到底寫(xiě)入了哪個(gè)盤(pán)) [root@glusterfs01 ~]# ls /gluster/brick1 1 5 7 8 9 [root@glusterfs02 ~]# ls /gluster/brick1 10 2 3 4 6結(jié)論:分布式卷的數(shù)據(jù)存儲(chǔ)方式是將數(shù)據(jù)平均寫(xiě)入到每個(gè)整合的磁盤(pán)中,類似于raid0,寫(xiě)入速度快,但這樣磁盤(pán)一旦損壞沒(méi)有糾錯(cuò)能力。
3.2 分布式復(fù)制卷gs2的數(shù)據(jù)寫(xiě)入測(cè)試
#在WebServer上進(jìn)行數(shù)據(jù)寫(xiě)入操作 [root@WebServer ~]# mount -o nolock -t nfs 192.168.200.150:/gs2 /mnt [root@WebServer ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 18G 1014M 16G 7% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 485M 33M 427M 8% /boot /dev/sr0 4.2G 4.2G 0 100% /media/cdrom 192.168.200.150:/gs2 9.9G 151M 9.2G 2% /mnt #可用容量減半 [root@WebServer ~]# ls /mnt lost+found [root@WebServer ~]# touch /mnt/{1..10} [root@WebServer ~]# ls /mnt 1 10 2 3 4 5 6 7 8 9 lost+found #在glusterfs03和glusterfs04上進(jìn)行查看(看看數(shù)據(jù)到底寫(xiě)入了哪個(gè)盤(pán)) [root@glusterfs03 ~]# ls /gluster/brick1 1 10 2 3 4 5 6 7 8 9 lost+found [root@glusterfs04 ~]# ls /gluster/brick1 1 10 2 3 4 5 6 7 8 9 lost+found結(jié)論:分布式復(fù)制卷的數(shù)據(jù)存儲(chǔ)方式為,每個(gè)整合的磁盤(pán)中都寫(xiě)入同樣的數(shù)據(jù)內(nèi)容,類似于raid1,數(shù)據(jù)非常安全,讀取性能高,占磁盤(pán)容量。
3.3 分布式條帶卷gs3的數(shù)據(jù)寫(xiě)入測(cè)試
結(jié)論:我們發(fā)現(xiàn)分布式條帶卷,是將數(shù)據(jù)的容量平均分配到了每個(gè)整合的磁盤(pán)節(jié)點(diǎn)上。大幅提高大文件的并發(fā)讀訪問(wèn)。
四,存儲(chǔ)卷中brick塊設(shè)備的擴(kuò)容
4.1 分布式復(fù)制卷的擴(kuò)容
[root@glusterfs01 ~]# gluster volume add-brick gs2 replica 2 glusterfs03:/gluster/brick2 glusterfs04:/gluster/brick2 force #添加兩個(gè)塊設(shè)備 volume add-brick: success [root@glusterfs01 ~]# gluster volume info gs2 Volume Name: gs2 Type: Distributed-Replicate Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8 Status: Started Number of Bricks: 2 x 2 = 4 #已經(jīng)擴(kuò)容 Transport-type: tcp Bricks: Brick1: glusterfs03:/gluster/brick1 Brick2: glusterfs04:/gluster/brick1 Brick3: glusterfs03:/gluster/brick2 Brick4: glusterfs04:/gluster/brick2 Options Reconfigured: performance.readdir-ahead: on特別提示:
對(duì)分布式復(fù)制卷和分布式條帶卷進(jìn)行擴(kuò)容時(shí),要特別注意,如果創(chuàng)建卷之初的時(shí)候選擇的是replica 2 或者stripe 2。那么擴(kuò)容時(shí),就必須一次性擴(kuò)容兩個(gè)或兩個(gè)的倍數(shù)的塊設(shè)備。
例如你給一個(gè)分布式復(fù)制卷的replica為2,你在增加bricks的時(shí)候數(shù)量必須為2,4,6,8等。
4.2 查看擴(kuò)容后的容量并進(jìn)行寫(xiě)入測(cè)試
#在WebServer上掛載gs2并查看掛載目錄的容量 [root@WebServer ~]# umount /mnt [root@WebServer ~]# mount -o nolock -t nfs 192.168.200.150:/gs2 /mnt [root@WebServer ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 18G 1.3G 16G 8% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 485M 33M 427M 8% /boot /dev/sr0 4.2G 4.2G 0 100% /media/cdrom 192.168.200.150:/gs2 20G 301M 19G 2% /mnt #已經(jīng)擴(kuò)容我們?cè)俅螌?xiě)入數(shù)據(jù)
#在WebServer上進(jìn)行數(shù)據(jù)寫(xiě)入操作 [root@WebServer ~]# touch /mnt/{11..20} [root@WebServer ~]# ls /mnt 1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9 lost+found #在glusterfs03和glusterfs04上查看數(shù)據(jù)存到哪里去了 [root@glusterfs03 ~]# gluster volume info gs2 Volume Name: gs2 Type: Distributed-Replicate Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8 Status: Started Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: glusterfs03:/gluster/brick1 #組成gs2的塊設(shè)備就在03和04上 Brick2: glusterfs04:/gluster/brick1 Brick3: glusterfs03:/gluster/brick2 Brick4: glusterfs04:/gluster/brick2 Options Reconfigured: performance.readdir-ahead: on [root@glusterfs03 ~]# ls /gluster/brick1 1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9 lost+found [root@glusterfs03 ~]# ls /gluster/brick2 lost+found #什么都沒(méi)有 [root@glusterfs04 ~]# ls /gluster/brick1 1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9 lost+found [root@glusterfs04 ~]# ls /gluster/brick2 lost+found #還是什么都沒(méi)有通過(guò)對(duì)擴(kuò)容的gs2進(jìn)行寫(xiě)入測(cè)試,我們發(fā)現(xiàn)數(shù)據(jù)并沒(méi)有被寫(xiě)入到新加入的塊設(shè)備中,這是為甚什么?
這是因?yàn)?#xff0c;為了數(shù)據(jù)的安全,新擴(kuò)容塊設(shè)備的卷,默認(rèn)必須先做一次磁盤(pán)平衡(塊設(shè)備同步),如此才能正常開(kāi)始使用。
4.3 進(jìn)行磁盤(pán)存儲(chǔ)的平衡
注意:平衡布局是很有必要的,因?yàn)椴季纸Y(jié)構(gòu)是靜態(tài)的,當(dāng)新的bricks加入現(xiàn)有卷,新創(chuàng)建的文件會(huì)分布到舊的bricks中,所以需要平衡布局結(jié)構(gòu),使新加入的bricks生效。布局平衡只是使新布局生效,并不會(huì)在新的布局移動(dòng)老的數(shù)據(jù),如果你想在新布局生效后,重新平衡卷中的數(shù)據(jù),還需要對(duì)卷中的數(shù)據(jù)進(jìn)行平衡。
#對(duì)gs2進(jìn)行磁盤(pán)存儲(chǔ)平衡 [root@glusterfs01 ~]# gluster volume rebalance gs2 start volume rebalance: gs2: success: Rebalance on gs2 has been started successfully. Use rebalance status command to check status of the rebalance process. ID: 0024338c-84df-4edb-b68c-107415a27506 #檢查gs2塊設(shè)備磁盤(pán)平衡結(jié)果 [root@glusterfs03 ~]# ls /gluster/brick1 10 12 14 15 16 17 2 3 4 6 lost+found [root@glusterfs03 ~]# ls /gluster/brick2 1 11 13 18 19 20 5 7 8 9 lost+found [root@glusterfs04 ~]# ls /gluster/brick1 10 12 14 15 16 17 2 3 4 6 lost+found [root@glusterfs04 ~]# ls /gluster/brick2 1 11 13 18 19 20 5 7 8 9 lost+found執(zhí)行磁盤(pán)存儲(chǔ)平衡以后,我們發(fā)現(xiàn)數(shù)據(jù)被復(fù)制成了4份在4個(gè)塊設(shè)備中。
五,存儲(chǔ)卷的縮減與刪除
(1)對(duì)存儲(chǔ)卷中的brick進(jìn)行縮減
注意:你可能想在線縮小卷的大小,例如:當(dāng)硬件損壞或者網(wǎng)絡(luò)故障的時(shí)候,你可能想在卷中移除相關(guān)的bricks。注意,當(dāng)你移除bricks的時(shí)候,你在gluster的掛載點(diǎn)將不能繼續(xù)訪問(wèn)是數(shù)據(jù),只有配置文件中的信息移除后你才能繼續(xù)訪問(wèn)bricks的數(shù)據(jù)。當(dāng)移除分布式復(fù)制卷或者分布式條帶卷的時(shí)候,移除的bricks數(shù)目必須是replica或者stripe的倍數(shù)。例如:一個(gè)分布式條帶卷的stripe是2,當(dāng)你移除bricks的時(shí)候必須是2,4,6,8等。
#先停止卷gs2 [root@glusterfs01 ~]# gluster volume stop gs2 Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y volume stop: gs2: success#然后移除卷,因?yàn)槭菑?fù)制卷且replica為2,因此每次移除必須是2的倍數(shù) [root@glusterfs01 ~]# gluster volume remove-brick gs2 replica 2 glusterfs03:/gluster/brick2 glusterfs04:/gluster/brick2 force Removing brick(s) can result in data loss. Do you want to Continue? (y/n) y volume remove-brick commit force: success #我們發(fā)現(xiàn)gs2的卷已經(jīng)被移除 [root@glusterfs01 ~]# gluster volume info gs2 Volume Name: gs2 Type: Replicate Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8 Status: Stopped Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: glusterfs03:/gluster/brick1 Brick2: glusterfs04:/gluster/brick1 Options Reconfigured: performance.readdir-ahead: on #重新啟動(dòng)卷gs2 [root@glusterfs01 ~]# gluster volume start gs2 volume start: gs2: success(2)對(duì)存儲(chǔ)卷進(jìn)行刪除
#停止卷gs1 [root@glusterfs01 ~]# gluster volume stop gs1 Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y volume stop: gs1: success #刪除卷gs1 [root@glusterfs01 ~]# gluster volume delete gs1 Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y volume delete: gs1: success #查看卷信息,發(fā)現(xiàn)gs1已經(jīng)沒(méi)了 [root@glusterfs01 ~]# gluster volume info Volume Name: gs2 Type: Replicate Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8 Status: Started Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: glusterfs03:/gluster/brick1 Brick2: glusterfs04:/gluster/brick1 Options Reconfigured: performance.readdir-ahead: on Volume Name: gs3 Type: Stripe Volume ID: 6d2e27c7-f5a1-4473-9df8-a7261851a2ed Status: Started Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: glusterfs01:/gluster/brick2 Brick2: glusterfs02:/gluster/brick2 Options Reconfigured: performance.readdir-ahead: on特別提示:
無(wú)論是縮減卷還是刪除卷,并不會(huì)是清除卷中的數(shù)據(jù)。數(shù)據(jù)仍舊會(huì)保存在對(duì)應(yīng)磁盤(pán)上。
六,構(gòu)建企業(yè)級(jí)分布式存儲(chǔ)
6.1 硬件要求
一般選擇2U的機(jī)型,磁盤(pán)STAT盤(pán)4T,如果I/O要求比較高,可以采購(gòu)SSD固態(tài)硬盤(pán)。為了充分保證系統(tǒng)的穩(wěn)定性和性能,要求所有g(shù)lusterfs服務(wù)器硬件配置盡量一致,尤其是硬盤(pán)數(shù)量和大小。機(jī)器的RAID卡需要帶電池,緩存越大,性能越好。一般情況下,建議做RAID10,如果出于空間要求考慮,需要做RAID5,建議最好能有1-2塊硬盤(pán)的熱備盤(pán)。
6.2 系統(tǒng)要求和分區(qū)劃分
系統(tǒng)要求使用CentOS6.x,安裝完成后升級(jí)到最新版本,安裝的時(shí)候,不要使用LVM,建議/boot分區(qū)200M,根分區(qū)100G,swap分區(qū)和內(nèi)存一樣大小,剩余空間給gluster使用,劃分單獨(dú)的硬盤(pán)空間。系統(tǒng)安裝軟件沒(méi)有特殊要求,建議除了開(kāi)發(fā)工具和基本的管理軟件,其他軟件一律不裝。
6.3 網(wǎng)絡(luò)環(huán)境
網(wǎng)絡(luò)要求全部千兆環(huán)境,gluster服務(wù)器至少有2塊網(wǎng)卡,1塊網(wǎng)卡綁定供gluster使用,剩余一塊分配管理網(wǎng)絡(luò)ip,用于系統(tǒng)管理。如果有條件購(gòu)買萬(wàn)兆交換機(jī),服務(wù)器配置萬(wàn)兆網(wǎng)卡,存儲(chǔ)性能會(huì)更好。網(wǎng)絡(luò)方面如果安全性要求高,可以多網(wǎng)卡綁定。
6.4 服務(wù)器擺放分布
服務(wù)器主備機(jī)器要放在不同的機(jī)柜,連接不同的交換機(jī),即使一個(gè)機(jī)柜出現(xiàn)問(wèn)題,還有一份數(shù)據(jù)正常訪問(wèn)。
6.5 構(gòu)建高性能,高可用存儲(chǔ)
一般在企業(yè)中,采用的是分布式復(fù)制卷,因?yàn)橛袛?shù)據(jù)備份,數(shù)據(jù)相對(duì)安全,分布式條帶卷目前對(duì)glusterfs來(lái)說(shuō)沒(méi)有完全成熟,存在一定的是數(shù)據(jù)安全風(fēng)險(xiǎn)。
6.5.1 開(kāi)啟防火墻端口
一般在企業(yè)應(yīng)用中Linux防火墻是打開(kāi)的,開(kāi)通服務(wù)器之間訪問(wèn)的端口
iptables -I INPUT -p tcp --dport 24007:24011 -j ACCEPT iptables -I INPUT -p tcp --dport 49152:49162 -j ACCEPT [root@glusterfs01 ~]6.5.2 Glusterfs文件系統(tǒng)優(yōu)化
| Auth.allow | IP訪問(wèn)授權(quán) | *(allow all) | IP地址 |
| Cluster.min-free-disk | 剩余磁盤(pán)空間閾值 | 10% | 百分比 |
| Cluster.stripe-block-size | 條帶大小 | 128KB | 字節(jié) |
| Network.frame-timeout | 請(qǐng)求等待時(shí)間 | 1800s | 0-1800 |
| Network.ping-timeout | 客戶端等待時(shí)間 | 42s | 0-42 |
| Nfs.disabled | 關(guān)閉NFS服務(wù) | Off | Off|on |
| Performance.io-thread-count | IO線程數(shù) | 16 | 0-65 |
| Performance.cache-refresh-timeout | 緩存校驗(yàn)周期 | 1s | 0-61 |
| Performance.cache-size | 讀緩存大小 | 32MB | 字節(jié) |
Performance.quick-read:優(yōu)化讀取小文件的性能
Performance.read-ahead:用預(yù)讀的方式提高讀取的性能,有利于應(yīng)用頻繁持續(xù)性的訪問(wèn)文件,當(dāng)應(yīng)用完成當(dāng)前數(shù)據(jù)塊讀取的時(shí)候,下一個(gè)數(shù)據(jù)塊就已經(jīng)準(zhǔn)備好了。
Performance.write-behind:寫(xiě)入數(shù)據(jù)時(shí),先寫(xiě)入緩存內(nèi),再寫(xiě)入硬盤(pán)內(nèi),以提高寫(xiě)入的性能。
Performance.io-cache:緩存已經(jīng)被讀過(guò)的。
調(diào)整方法:
Glusster volume set <卷> <參數(shù)>
[root@glusterfs01 ~]# gluster volume info gs2 Volume Name: gs2 Type: Replicate Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8 Status: Started Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: glusterfs03:/gluster/brick1 Brick2: glusterfs04:/gluster/brick1 Options Reconfigured: performance.readdir-ahead: on [root@glusterfs01 ~]# gluster volume set gs2 performance.read-ahead on #設(shè)置預(yù)緩存優(yōu)化 volume set: success [root@glusterfs01 ~]# gluster volume info gs2 Volume Name: gs2 Type: Replicate Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8 Status: Started Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: glusterfs03:/gluster/brick1 Brick2: glusterfs04:/gluster/brick1 Options Reconfigured: performance.read-ahead: on #已經(jīng)添加上了 performance.readdir-ahead: on [root@glusterfs01 ~]# gluster volume set gs2 performance.cache-size 256MB #設(shè)置讀緩存大小 volume set: success [root@glusterfs01 ~]# gluster volume info gs2 Volume Name: gs2 Type: Replicate Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8 Status: Started Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: glusterfs03:/gluster/brick1 Brick2: glusterfs04:/gluster/brick1 Options Reconfigured: performance.cache-size: 256MB #已經(jīng)添加上了 performance.read-ahead: on performance.readdir-ahead: on6.5.3 監(jiān)控及日常維護(hù)
使用Zabbix自帶模板即可。Cpu,內(nèi)存,主機(jī)存活,磁盤(pán)空間,主機(jī)運(yùn)行時(shí)間,系統(tǒng)load。日常情況要查看服務(wù)器的監(jiān)控值,遇到報(bào)警要及時(shí)處理。
七 生產(chǎn)環(huán)境遇到常見(jiàn)故障處理
7.1 硬盤(pán)故障
因?yàn)榈讓幼隽藃aid配置,有硬件故障,直接更換硬盤(pán),會(huì)自動(dòng)同步數(shù)據(jù)。(raid5)
7.2 一臺(tái)主機(jī)故障
一臺(tái)節(jié)點(diǎn)故障的情況包括以下類型:
1,物理故障
2,同時(shí)有多塊硬盤(pán)故障,造成是數(shù)據(jù)丟失
3,系統(tǒng)損壞不可修復(fù)
解決方法:
找一臺(tái)完全一樣的機(jī)器,至少要保證硬盤(pán)數(shù)量和大小一致,安裝系統(tǒng),配置和故障機(jī)同樣的ip,安裝gluster軟件,保證配置一樣,在其他健康的節(jié)點(diǎn)上執(zhí)行命令gluster peer status,查看故障服務(wù)器的uuid
#例如: [root@glusterfs03 ~]# gluster peer status Number of Peers: 3Hostname: glusterfs02 Uuid: 0b52290d-96b0-4b9c-988d-44062735a8a8 State: Peer in Cluster (Connected) Hostname: glusterfs04 Uuid: a43ac51b-641c-4fc4-be56-f6873423b462 State: Peer in Cluster (Connected) Hostname: glusterfs01 Uuid: 198f2c7c-1104-4671-8989-b430b77540e9 State: Peer in Cluster (Connected) [root@glusterfs03 ~]#修改新加機(jī)器的/var/lib/glusterd/glusterd.info和故障機(jī)器的一樣
[root@glusterfs04 ~]# cat /var/lib/glusterd/glusterd.info UUID=a43ac51b-641c-4fc4-be56-f6873423b462 operating-version=30712在新機(jī)器掛載目錄上執(zhí)行磁盤(pán)故障的操作(任意節(jié)點(diǎn))
[root@glusterfs04 ~]# gluster volume heal gs2 full Launching heal operation to perform full self heal on volume gs2 has been successful Use heal info commands to check status就會(huì)自動(dòng)開(kāi)始同步,但是同步的時(shí)候會(huì)影響整個(gè)系統(tǒng)的性能
可以查看狀態(tài)
轉(zhuǎn)載于:https://www.cnblogs.com/skyhu365/p/10652878.html
總結(jié)
以上是生活随笔為你收集整理的Linux实战教学笔记52:GlusterFS分布式存储系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 远程桌面时提示凭证不工作怎么办 远程桌面
- 下一篇: Linux篇 | 多网卡绑定技术 bin