GlusterFS分布式存儲


目錄

glusterfs簡介

glusterfs部署

glustefs分布式存儲優化

glusterfs在企業中應用場景

參考文章地址

 

一、glusterfs簡介

Glusterfs是一個開源的分布式文件系統,是Scale存儲的核心,能夠處理千數量級的客戶端。是整合了許多存儲塊(server)通過Infiniband RDMA或者 Tcp/Ip方式互聯的一個並行的網絡文件系統。

  特征:

  • 容量可以按比例的擴展,且性能卻不會因此而降低。
  • 廉價且使用簡單,完全抽象在已有的文件系統之上。
  • 擴展和容錯設計的比較合理,復雜度較低
  • 適應性強,部署方便,對環境依賴低,使用,調試和維護便利

二、glusterfs安裝部署

一般在企業中,采用的是分布式復制卷,因為有數據備份,數據相對安全。

 網絡要求全部千兆環境,gluster 服務器至少有 2 塊網卡,1 塊網卡綁定供 gluster 使用,剩余一塊分配管理網絡 IP,用於系統管理。如果有條件購買萬兆交換機,服務器配置萬兆網卡,存儲性能會更好。網絡方面如果安全性要求較高,可以多網卡綁定。

 跨地區機房配置 Gluster,在中國網絡格局下不適用。

  • 注意:GlusterFS將其動態生成的配置文件存儲在/var/lib/glusterd中。如果在任何時候GlusterFS無法寫入這些文件(例如,當后備文件系統已滿),它至少會導致您的系統不穩定的行為; 或者更糟糕的是,讓您的系統完全脫機。建議為/var/log等目錄創建單獨的分區,以確保不會發生這種情況。

1、安裝glusterfs前的環境准備 

  1.1、服務規划:

操作系統 IP 主機名 硬盤數量(三塊)
centos 7.4 10.0.0.101 node1 sdb:5G  sdc:5G  sdd:5G
centos 7.4 10.0.0.102 node2 sdb:5G  sdc:5G  sdd:5G
centos 7.4 10.0.0.103 node3 sdb:5G  sdc:5G  sdd:5G
centos 7.4 10.0.0.104 node4 sdb:5G  sdc:5G  sdd:5G
centos 7.4 10.0.0.105 node5-client sda:20G

 

   1.2、首先關閉iptables和selinux,配置hosts文件如下(全部glusterfs主機)

注:node01~node04所有的主機hosts文件均為此內容;同時全部修改為對應的主機名,centos7修改主機名方式:#hostnamectl set-hostname 主機名 (即為臨時和永久生效)
可以使用#hostnamectl status 查看系統基本信息
復制代碼
[root@node01 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.101  node01
10.0.0.102  node02
10.0.0.103  node03
10.0.0.104  node04
[root@node01 ~]# systemctl stop firewalld.service #停止firewalld
[root@node01 ~]# systemctl disable firewalld.service #禁止firewalld開機自啟
[root@node01 ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config #關閉SELinux
[root@node01 ~]# setenforce 0
[root@node01 ~]# getenforce
Permissive
[root@node01 ~]# ntpdate time.windows.com #同步時間
復制代碼

   1.3、安裝gluterfs源(全部glusterfs主機)

復制代碼
[root@node01 ~]#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo   #不是必須的
[root@node01 ~]#yum search  centos-release-gluster #查看有哪些版本的glusterfs源    
================================================ N/S matched: centos-release-gluster =================================================
centos-release-gluster310.noarch : Gluster 3.10 (Long Term Stable) packages from the CentOS Storage SIG repository
centos-release-gluster312.noarch : Gluster 3.12 (Long Term Stable) packages from the CentOS Storage SIG repository
centos-release-gluster313.noarch : Gluster 3.13 (Short Term Stable) packages from the CentOS Storage SIG repository
centos-release-gluster36.noarch : GlusterFS 3.6 packages from the CentOS Storage SIG repository
centos-release-gluster37.noarch : GlusterFS 3.7 packages from the CentOS Storage SIG repository
centos-release-gluster38.noarch : GlusterFS 3.8 packages from the CentOS Storage SIG repository
centos-release-gluster39.noarch : Gluster 3.9 (Short Term Stable) packages from the CentOS Storage SIG repository
復制代碼

     這里我們使用glusterfs的3.12版本的源

[root@node01 ~]# yum  -y  install centos-release-gluster312.noarch

   1.4、安裝glusterfs(全部glusterfs主機)

在安裝glusterfs的時候直接指定源為glusterfs源,由於 源[centos-gluster310-test]的enable為0,所以在指定源的時候用--enablerepo來讓源生效

  cat /etc/yum.repos.d/CentOS-Gluster-3.12.repo

    安裝glusterfs

[root@node01 ~]# yum -y --enablerepo=centos-gluster*-test install glusterfs-server glusterfs-cli glusterfs-geo-replication

  1.5、查看glusterfs版本並啟動glusterfs服務(全部glusterfs主機)

復制代碼
[root@node01 ~]# glusterfs -V
glusterfs 3.12.5

[root@node01 ~]# systemctl start glusterd.service
[root@node01 ~]# systemctl enable glusterd.service
[root@node01 ~]# systemctl status glusterd.service
[root@node01 ~]# netstat -lntup
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      866/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      972/master          
tcp        0      0 0.0.0.0:24007           0.0.0.0:*               LISTEN      2268/glusterd       
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::22                   :::*                    LISTEN      866/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      972/master          
udp        0      0 0.0.0.0:111             0.0.0.0:*                           2266/rpcbind        
udp        0      0 0.0.0.0:745             0.0.0.0:*                           2266/rpcbind        
udp        0      0 127.0.0.1:323           0.0.0.0:*                           527/chronyd         
udp6       0      0 :::111                  :::*                                2266/rpcbind        
udp6       0      0 :::745                  :::*                                2266/rpcbind        
udp6       0      0 ::1:323                 :::*                                527/chronyd 
復制代碼

   1.6、格式化磁盤(全部glusterfs主機)

  在每台主機上創建幾塊硬盤,做接下來的分布式存儲使用

 注:創建的硬盤要用xfs格式來格式化硬盤,如果用ext4來格式化硬盤的話,對於大於16TB空間格式化就無法實現了。所以這里要用xfs格式化磁盤(centos7默認的文件格式就是xfs),並且xfs的文件格式支持PB級的數據量

 如果是centos6默認是不支持xfs的文件格式,要先安裝xfs支持包

yum install xfsprogs -y

  用fdisk -l 查看磁盤設備,例如查看data-1-1的磁盤設備,這里的sdc、sdd、sde是新加的硬盤

[root@node01 ~]# fdisk -l
Disk /dev/sdb: 5368 MB, 5368709120 bytes
Disk /dev/sdc: 5368 MB, 5368709120 bytes
Disk /dev/sdd: 5368 MB, 5368709120 bytes

   特別說明:

   如果磁盤大於 2T 的話就用 parted 來分區,這里我們不用分區(可以不分區);
   做分布式文件系統的時候數據盤一般不需要做 RAID,一般系統盤會做 RAID 1;
   如果有raid卡的話,最好用上,raid卡有數據緩存功能,也能提高磁盤的iops,最好的話,用RAID 5;
   如果都不做raid的話,也是沒問題的,glusterfs也是可以保證數據的安全的。

這里使用官方推薦的格盤方式:http://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/#purpose-of-this-document
[root@node01 ~]# mkfs.xfs  -i size=512 /dev/sdb
[root@node01 ~]# mkfs.xfs  -i size=512 /dev/sdc
[root@node01 ~]# mkfs.xfs  -i size=512 /dev/sdd

  在四台機器上創建掛載塊設備的目錄,掛載硬盤到目錄

復制代碼
mkdir -p /data/brick{1..3}
echo '/dev/sdb /data/brick1 xfs defaults 0 0' >> /etc/fstab
echo '/dev/sdc /data/brick2 xfs defaults 0 0' >> /etc/fstab
echo '/dev/sdd /data/brick3 xfs defaults 0 0' >> /etc/fstab
#掛載
mount -a

[root@node01 ~]# df -h
/dev/sdc        5.0G   33M  5.0G   1% /data/brick2
/dev/sdd        5.0G   33M  5.0G   1% /data/brick3
/dev/sdb        5.0G   33M  5.0G   1% /data/brick1
復制代碼

注:再次說明——以上操作均在node01-node04上同時操作

 

 2、操作

   2.1、將分布式存儲主機加入到信任主機池並查看加入的主機狀態

 隨便在一個開啟glusterfs服務的主機上將其他主機加入到一個信任的主機池里,這里選擇node01

[root@node01 ~]# gluster peer probe node02
peer probe: success. 
[root@node01 ~]# gluster peer probe node03
peer probe: success. 
[root@node01 ~]# gluster peer probe node04
peer probe: success.

       查看主機池中主機的狀態

復制代碼
[root@node01 ~]# gluster peer status
Number of Peers: 3      #除本機外,還有三台主機主機池中

Hostname: node02
Uuid: 6020709d-1b46-4e2c-9cdd-c4b3bba47b4b
State: Peer in Cluster (Connected)

Hostname: node03
Uuid: 147ee557-51f1-43fe-a27f-3dae2880b5d4
State: Peer in Cluster (Connected)

Hostname: node04
Uuid: f61af299-b00d-489c-9fd9-b4f6a336a6c7
State: Peer in Cluster (Connected)
注意:一旦建立了這個池,只有受信任的成員可能會將新的服務器探測到池中。新服務器無法探測池,必須從池中探測。
復制代碼

 

  2.2、創建glusterfs卷

GlusterFS 五種卷  

  • Distributed:分布式卷,文件通過 hash 算法隨機分布到由 bricks 組成的卷上。
  • Replicated: 復制式卷,類似 RAID 1,replica 數必須等於 volume 中 brick 所包含的存儲服務器數,可用性高。
  • Striped: 條帶式卷,類似 RAID 0,stripe 數必須等於 volume 中 brick 所包含的存儲服務器數,文件被分成數據塊,以 Round Robin 的方式存儲在 bricks 中,並發粒度是數據塊,大文件性能好。
  • Distributed Striped: 分布式的條帶卷,volume中 brick 所包含的存儲服務器數必須是 stripe 的倍數(>=2倍),兼顧分布式和條帶式的功能。
  • Distributed Replicated: 分布式的復制卷,volume 中 brick 所包含的存儲服務器數必須是 replica 的倍數(>=2倍),兼顧分布式和復制式的功能。

 分布式復制卷的brick順序決定了文件分布的位置,一般來說,先是兩個brick形成一個復制關系,然后兩個復制關系形成分布。

 企業一般用后兩種,大部分會用分布式復制(可用容量為 總容量/復制份數),通過網絡傳輸的話最好用萬兆交換機,萬兆網卡來做。這樣就會優化一部分性能。它們的數據都是通過網絡來傳輸的。

 配置分布式卷

復制代碼
#在信任的主機池中任意一台設備上創建卷都可以,而且創建好后可在任意設備掛載后都可以查看
[root@node01 ~]# gluster volume create gv1 node01:/data/brick1 node02:/data/brick1 force #創建分布式卷 volume create: gv1: success: please start the volume to access data [root@node01 ~]# gluster volume start gv1 #啟動卷gv1 volume start: gv1: success [root@node01 ~]# gluster volume info gv1 #查看gv1的配置信息 Volume Name: gv1 Type: Distribute #分布式卷 Volume ID: 85622964-4b48-47d5-b767-d6c6f1e684cc Status: Started Snapshot Count: 0 Number of Bricks: 2 Transport-type: tcp Bricks: Brick1: node01:/data/brick1 Brick2: node02:/data/brick1 Options Reconfigured: transport.address-family: inet nfs.disable: on [root@node01 ~]# mount -t glusterfs 127.0.0.1:/gv1 /opt #掛載gv1卷 [root@node01 ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點/dev/sdc 5.0G 33M 5.0G 1% /data/brick2 /dev/sdd 5.0G 33M 5.0G 1% /data/brick3 /dev/sdb 5.0G 33M 5.0G 1% /data/brick1 127.0.0.1:/gv1 10G 65M 10G 1% /opt #連個設備容量之和 [root@node01 ~]# cd /opt/ [root@node01 opt]# touch {a..f} #創建測試文件 [root@node01 opt]# ll 總用量 0 -rw-r--r--. 1 root root 0 2月 2 23:59 a -rw-r--r--. 1 root root 0 2月 2 23:59 b -rw-r--r--. 1 root root 0 2月 2 23:59 c -rw-r--r--. 1 root root 0 2月 2 23:59 d -rw-r--r--. 1 root root 0 2月 2 23:59 e -rw-r--r--. 1 root root 0 2月 2 23:59 f
# 在node04也可看到新創建的文件,信任存儲池中的每一台主機掛載這個卷后都可以看到
[root@node04 ~]# mount -t glusterfs 127.0.0.1:/gv1 /opt
[root@node04 ~]# ll /opt/
總用量 0
-rw-r--r--. 1 root root 0 2月   2 2018 a
-rw-r--r--. 1 root root 0 2月   2 2018 b
-rw-r--r--. 1 root root 0 2月   2 2018 c
-rw-r--r--. 1 root root 0 2月   2 2018 d
-rw-r--r--. 1 root root 0 2月   2 2018 e
-rw-r--r--. 1 root root 0 2月   2 2018 f
[root@node01 opt]# ll /data/brick1/
總用量 0
-rw-r--r--. 2 root root 0 2月   2 23:59 a
-rw-r--r--. 2 root root 0 2月   2 23:59 b
-rw-r--r--. 2 root root 0 2月   2 23:59 c
-rw-r--r--. 2 root root 0 2月   2 23:59 e
[root@node02 ~]# ll /data/brick1
總用量 0
-rw-r--r--. 2 root root 0 2月   2 23:59 d
-rw-r--r--. 2 root root 0 2月   2 23:59 f
#文件實際存在位置node01和node02上的/data/brick1目錄下,通過hash分別存到node01和node02上的分布式磁盤上
復制代碼

 

配置復制卷

復制代碼
注:復制模式,既AFR, 創建volume 時帶 replica x 數量: 將文件復制到 replica x 個節點中。
這條命令的意思是使用Replicated的方式,建立一個名為gv2的卷(Volume),存儲塊(Brick)2個,分別為node01:/data/brick2和node02:/data/brick2;
fore為強制創建:因為復制卷在雙方主機通信有故障再恢復通信時容易發生腦裂。本次為實驗環境,生產環境不建議使用。

[root@node01 ~]# gluster volume create gv2 replica 2 node01:/data/brick2 node02:/data/brick2 force volume create: gv2: success: please start the volume to access data [root@node01 ~]# gluster volume start gv2 #啟動gv2卷 volume start: gv2: success [root@node01 ~]# gluster volume info gv2 #查看gv2信息 Volume Name: gv2 Type: Replicate #復制卷 Volume ID: 9f33bd9a-7096-4749-8d91-1e6de3b50053 Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: node01:/data/brick2 Brick2: node02:/data/brick2 Options Reconfigured: transport.address-family: inet nfs.disable: on performance.client-io-threads: off
[root@node01 ~]# mount -t glusterfs 127.0.0.1:/gv2 /mnt
[root@node01 ~]# df -h
文件系統        容量  已用  可用 已用% 掛載點
/dev/sdc        5.0G   33M  5.0G    1% /data/brick2
/dev/sdd        5.0G   33M  5.0G    1% /data/brick3
/dev/sdb        5.0G   33M  5.0G    1% /data/brick1
127.0.0.1:/gv1   10G   65M   10G    1% /opt
127.0.0.1:/gv2  5.0G   33M  5.0G    1% /mnt #容量是總容量的一半
[root@node01 ~]# cd /mnt/
[root@node01 mnt]# touch {1..6}
[root@node01 mnt]# ll /data/brick2
總用量 0
-rw-r--r--. 2 root root 0 2月   3 01:06 1
-rw-r--r--. 2 root root 0 2月   3 01:06 2
-rw-r--r--. 2 root root 0 2月   3 01:06 3
-rw-r--r--. 2 root root 0 2月   3 01:06 4
-rw-r--r--. 2 root root 0 2月   3 01:06 5
-rw-r--r--. 2 root root 0 2月   3 01:06 6
[root@node02 ~]# ll /data/brick2
總用量 0
-rw-r--r--. 2 root root 0 2月   3 01:06 1
-rw-r--r--. 2 root root 0 2月   3 01:06 2
-rw-r--r--. 2 root root 0 2月   3 01:06 3
-rw-r--r--. 2 root root 0 2月   3 01:06 4
-rw-r--r--. 2 root root 0 2月   3 01:06 5
-rw-r--r--. 2 root root 0 2月   3 01:06 6
#創建文件的實際存在位置為node01和node02上的/data/brick2目錄下,因為是復制卷,這兩個目錄下的內容是完全一致的。
復制代碼

 

配置條帶卷

 
        
復制代碼
[root@node01 ~]# gluster volume create gv3 stripe 2 node01:/data/brick3 node02:/data/brick3 force
volume create: gv3: success: please start the volume to access data
[root@node01 ~]# gluster volume start gv3
volume start: gv3: success
[root@node01 ~]# gluster volume info gv3
 
Volume Name: gv3
Type: Stripe
Volume ID: 54c16832-6bdf-42e2-81a9-6b8d7b547c1a
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node01:/data/brick3
Brick2: node02:/data/brick3
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node01 ~]# mkdir /data01
[root@node01 ~]# mount -t glusterfs 127.0.0.1:/gv3 /data01
[root@node01 ~]# df -h
文件系統        容量  已用  可用 已用% 掛載點
127.0.0.1:/gv3   10G   65M   10G    1% /data01
[root@node01 ~]# dd if=/dev/zero bs=1024 count=10000 of=/data01/10M.file
[root@node01 ~]# dd if=/dev/zero bs=1024 count=20000 of=/data01/20M.file
[root@node01 ~]# ll /data01/ -h
總用量 30M
-rw-r--r--. 1 root root 9.8M 2月   3 02:03 10M.file
-rw-r--r--. 1 root root  20M 2月   3 02:04 20M.file
*************************************************************************************
#文件的實際存放位置:
[root@node01 ~]# ll -h /data/brick3
總用量 15M
-rw-r--r--. 2 root root 4.9M 2月   3 02:03 10M.file
-rw-r--r--. 2 root root 9.8M 2月   3 02:03 20M.file
[root@node02 ~]# ll -h /data/brick3
總用量 15M
-rw-r--r--. 2 root root 4.9M 2月   3 02:03 10M.file
-rw-r--r--. 2 root root 9.8M 2月   3 02:04 20M.file
# 上面可以看到 10M 20M 的文件分別分成了 2 塊(這是條帶的特點),寫入的時候是循環地一點一點在node01和node02的磁盤上.

#上面配置的條帶卷在生產環境是很少使用的,因為它會將文件破壞,比如一個圖片,它會將圖片一份一份地分別存到條帶卷中的brick上。
復制代碼
 
        

 配置分布式復制卷

最少需要4台服務器才能創建,[生產場景推薦使用此種方式]

復制代碼
#將原有的復制卷gv2進行擴容,使其成為分布式復制卷;
#要擴容前需停掉gv2
  [root@node01 ~]# gluster volume stop gv2
[root@node01 ~]# gluster volume add-brick gv2 replica 2 node03:/data/brick1 node04:/data/brick1 force  #添加brick到gv2中
volume add-brick: success
[root@node01 ~]# gluster volume start gv2
volume start: gv2: success
[root@node01 ~]# gluster volume info gv2
 
Volume Name: gv2
Type: Distributed-Replicate    # 這里顯示是分布式復制卷,是在 gv2 復制卷的基礎上增加 2 塊 brick 形成的
Volume ID: 9f33bd9a-7096-4749-8d91-1e6de3b50053
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node01:/data/brick2
Brick2: node02:/data/brick2
Brick3: node03:/data/brick1
Brick4: node04:/data/brick1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

注意:當你給分布式復制卷和分布式條帶卷增加 bricks 時,你增加的 bricks 數目必須是復制或條帶數目的倍數,
例如:你給一個分布式復制卷的 replica 為 2,你在增加 bricks 的時候數量必須為2、4、6、8等。
擴容后進行測試,發現文件都分布在擴容前的卷中。
復制代碼

 


配置分布式條帶卷
復制代碼
#將原有的復制卷gv3進行擴容,使其成為分布式條帶卷
#要擴容前需停掉gv3
[root@node01 ~]# gluster volume stop gv3 [root@node01 ~]# gluster volume add-brick gv3 stripe 2 node03:/data/brick2 node04:/data/brick2 force #添加brick到gv3中 [root@node01 ~]# gluster volume start gv3 volume start: gv3: success [root@node01 ~]# gluster volume info gv3 Volume Name: gv3 Type: Distributed-Stripe # 這里顯示是分布式條帶卷,是在 gv3 條帶卷的基礎上增加 2 塊 brick 形成的 Volume ID: 54c16832-6bdf-42e2-81a9-6b8d7b547c1a Status: Started Snapshot Count: 0 Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: node01:/data/brick3 Brick2: node02:/data/brick3 Brick3: node03:/data/brick2 Brick4: node04:/data/brick2 Options Reconfigured: transport.address-family: inet nfs.disable: on
復制代碼
 
        

 

再次注明文章出處:http://blog.csdn.net/goser329/article/details/78569257

分布式復制卷的最佳實踐:

 1)搭建條件
  - 塊服務器的數量必須是復制的倍數
- 將按塊服務器的排列順序指定相鄰的塊服務器成為彼此的復制
例如,8台服務器:
- 當復制副本為2時,按照服務器列表的順序,服務器1和2作為一個復制,3和4作為一個復制,5和6作為一個復制,7和8作為一個復制
- 當復制副本為4時,按照服務器列表的順序,服務器1/2/3/4作為一個復制,5/6/7/8作為一個復制
2)創建分布式復制卷

磁盤存儲的平衡
平衡布局是很有必要的,因為布局結構是靜態的,當新的 bricks 加入現有卷,新創建的文件會分布到舊的 bricks 中,所以需要平衡布局結構,使新加入的 bricks 生效。布局平衡只是使新布局生效,並不會在新的布局中移動老的數據,如果你想在新布局生效后,重新平衡卷中的數據,還需要對卷中的數據進行平衡。
復制代碼
#在gv2的分布式復制卷的掛載目錄中創建測試文件入下
[root@node01 ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 127.0.0.1:/gv2 10G 65M 10G 1% /mnt [root@node01 ~]# cd /mnt/ [root@node01 mnt]# touch {x..z}
#新創建的文件只在老的brick中有,在新加入的brick中是沒有的 [root@node01 mnt]# ls /data/brick2 1 2 3 4 5 6 x y z [root@node02 ~]# ls /data/brick2 1 2 3 4 5 6 x y z [root@node03 ~]# ll -h /data/brick1 總用量 0 [root@node04 ~]# ll -h /data/brick1 總用量 0
# 從上面可以看到,新創建的文件還是在之前的 bricks 中,並沒有分布中新加的 bricks 中

# 下面進行磁盤存儲平衡
[root@node01 ~]# gluster volume rebalance gv2 start
[root@node01 ~]# gluster volume rebalance gv2 status #查看平衡存儲狀態
# 查看磁盤存儲平衡后文件在 bricks 中的分布情況
[root@node01 ~]# ls /data/brick2
1  5  y
[root@node02 ~]# ls /data/brick2
1  5  y
[root@node03 ~]# ls /data/brick1
2  3  4  6  x  z
[root@node04 ~]# ls /data/brick1
2  3  4  6  x  z
#從上面可以看出部分文件已經平衡到新加入的brick中了
每做一次擴容后都需要做一次磁盤平衡。 磁盤平衡是在萬不得已的情況下再做的,一般再創建一個卷就可以了。
復制代碼

 

 

移除 brick

你可能想在線縮小卷的大小,例如:當硬件損壞或網絡故障的時候,你可能想在卷中移除相關的 bricks。
  注意:當你移除 bricks 的時候,你在 gluster 的掛載點將不能繼續訪問數據,只有配置文件中的信息移除后你才能繼續訪問 bricks 中的數據。當移除分布式復制卷或者分布式條帶卷的時候,移除的 bricks 數目必須是 replica 或者 stripe 的倍數。

 
        

  但是移除brick在生產環境中基本上不做的,如果是硬盤壞掉的話,直接換個好的硬盤即可,然后再對新的硬盤設置卷標識就可以使用了,后面會演示硬件故障或系統故障的解決辦法。

復制代碼
[root@node01 ~]# gluster volume stop gv2
[root@node01 ~]# gluster volume remove-brick gv2 replica 2 node03:/data/brick1 node04:/data/brick1 force   #強制移除brick塊
[root@node01 ~]# gluster volume info gv2    
Volume Name: gv2
Type: Replicate
Volume ID: 9f33bd9a-7096-4749-8d91-1e6de3b50053
Status: Stopped
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node01:/data/brick2
Brick2: node02:/data/brick2
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
# 如果誤操作刪除了后,其實文件還在 /storage/brick1 里面的,加回來就可以了 [root@node01 ~]# gluster volume add-brick gv2 replica 2 node03:/data/brick1 node04:/data/brick1 force volume add-brick: success [root@node01 ~]# gluster volume info gv2 Volume Name: gv2 Type: Distributed-Replicate Volume ID: 9f33bd9a-7096-4749-8d91-1e6de3b50053 Status: Stopped Snapshot Count: 0 Number of Bricks: 2 x 2 = 4 Transport-type: tcp Bricks: Brick1: node01:/data/brick2 Brick2: node02:/data/brick2 Brick3: node03:/data/brick1 Brick4: node04:/data/brick1 Options Reconfigured: transport.address-family: inet nfs.disable: on performance.client-io-threads: off
復制代碼

刪除卷
  一般會用在命名不規范的時候才會刪除 
[root@node01 ~]# gluster volume stop gv1
[root@node01 ~]# gluster volume delete gv

模擬誤刪除卷信息故障及解決辦法
復制代碼
[root@node01 ~]# ls /var/lib/glusterd/vols/
gv2  gv3
[root@node01 ~]# rm -rf /var/lib/glusterd/vols/gv3 #刪除卷gv3的卷信息
[root@node01 ~]# ls /var/lib/glusterd/vols/     #再查看卷信息情況如下:gv3卷信息被刪除了
gv2
[root@node01 ~]# gluster volume sync node02      #因為其他節點服務器上的卷信息是完整的,比如從node02上同步所有卷信息如下:
Sync volume may make data inaccessible while the sync is in progress. Do you want to continue? (y/n) y
volume sync: success
[root@node01 ~]# ls /var/lib/glusterd/vols/    #驗證卷信息是否同步過來
gv2  gv3
復制代碼

 

模擬復制卷數據不一致故障及解決辦法

復制代碼
[root@node01 ~]# ls /data/brick2    #復制卷的存儲位置的數據
1  5  y
[root@node01 ~]# rm -f /data/brick2/y 
[root@node01 ~]# ls /data/brick2
1  5
[root@node02 ~]# ls /data/brick2
1  5  y
[root@node01 ~]# gluster start gv2   #因為之前關閉了,如果未關閉可以忽略此步。
[root@node01 ~]# cat /mnt/y     #通過訪問這個復制卷的掛載點的數據來同步數據
[root@node01 ~]# ls /data/brick2/     #這時候再看復制卷的數據是否同步成功
1  5  y
復制代碼

 

3、glustefs分布式存儲優化

復制代碼
Auth_allow  #IP訪問授權;缺省值(*.allow all);合法值:Ip地址
Cluster.min-free-disk  #剩余磁盤空間閥值;缺省值(10%);合法值:百分比
Cluster.stripe-block-size  #條帶大小;缺省值(128KB);合法值:字節
Network.frame-timeout  #請求等待時間;缺省值(1800s);合法值:1-1800
Network.ping-timeout  #客戶端等待時間;缺省值(42s);合法值:0-42
Nfs.disabled  #關閉NFS服務;缺省值(Off);合法值:Off|on
Performance.io-thread-count  #IO線程數;缺省值(16);合法值:0-65
Performance.cache-refresh-timeout  #緩存校驗時間;缺省值(1s);合法值:0-61
Performance.cache-size  #讀緩存大小;缺省值(32MB);合法值:字節

Performance.quick-read: #優化讀取小文件的性能
Performance.read-ahead: #用預讀的方式提高讀取的性能,有利於應用頻繁持續性的訪問文件,當應用完成當前數據塊讀取的時候,下一個數據塊就已經准備好了。
Performance.write-behind:先寫入緩存內,在寫入硬盤,以提高寫入的性能。
Performance.io-cache:緩存已經被讀過的、
復制代碼

 

 

3.1、優化參數調整方式

復制代碼
命令格式:
gluster.volume set <卷><參數>


例如:
#打開預讀方式訪問存儲
[root@node01 ~]# gluster volume set gv2 performance.read-ahead on

#調整讀取緩存的大小
[root@mystorage gv2]# gluster volume set gv2 performance.cache-size 256M
復制代碼

 

 

3.2、監控及日常維護

復制代碼
使用zabbix自帶的模板即可,CPU、內存、磁盤空間、主機運行時間、系統load。日常情況要查看服務器監控值,遇到報警要及時處理。
#看下節點有沒有在線
gluster volume status nfsp

#啟動完全修復
gluster volume heal gv2 full

#查看需要修復的文件
gluster volume heal gv2 info

#查看修復成功的文件
gluster volume heal gv2 info healed

#查看修復失敗的文件
gluster volume heal gv2 heal-failed

#查看主機的狀態
gluster peer status

#查看腦裂的文件
gluster volume heal gv2 info split-brain

#激活quota功能
gluster volume quota gv2 enable

#關閉quota功能
gulster volume quota gv2 disable

#目錄限制(卷中文件夾的大小)
gluster volume quota limit-usage /data/30MB --/gv2/data

#quota信息列表
gluster volume quota gv2 list

#限制目錄的quota信息
gluster volume quota gv2 list /data

#設置信息的超時時間
gluster volume set gv2 features.quota-timeout 5

#刪除某個目錄的quota設置
gluster volume quota gv2 remove /data

備注:quota功能,主要是對掛載點下的某個目錄進行空間限額。如:/mnt/gulster/data目錄,而不是對組成卷組的空間進行限制。
復制代碼

 

 

3.3、Gluster日常維護及故障處理

注:給自己的提示:此處如有不詳之處查看qq微雲--linux-glusterfs文件夾

 1、硬盤故障

如果底層做了raid配置,有硬件故障,直接更換硬盤,會自動同步數據。
  如果沒有做raid處理方法:
參看其他博客:http://blog.51cto.com/cmdschool/1908647

 

 2、一台主機故障

https://www.cnblogs.com/xiexiaohua007/p/6602315.html

一台節點故障的情況包含以下情況:

物理故障
同時有多塊硬盤故障,造成數據丟失
系統損壞不可修復
解決方法:

找一台完全一樣的機器,至少要保證硬盤數量和大小一致,安裝系統,配置和故障機同樣的 IP,安裝 gluster 軟件,
保證配置一樣,在其他健康節點上執行命令 gluster peer status,查看故障服務器的 uuid

 

復制代碼
[root@mystorage2 ~]# gluster peer status
Number of Peers: 3

Hostname: mystorage3
Uuid: 36e4c45c-466f-47b0-b829-dcd4a69ca2e7
State: Peer in Cluster (Connected)

Hostname: mystorage4
Uuid: c607f6c2-bdcb-4768-bc82-4bc2243b1b7a
State: Peer in Cluster (Connected)

Hostname: mystorage1
Uuid: 6e6a84af-ac7a-44eb-85c9-50f1f46acef1
State: Peer in Cluster (Disconnected)
復制代碼
修改新加機器的 /var/lib/glusterd/glusterd.info 和 故障機器一樣

[root@mystorage1 ~]# cat /var/lib/glusterd/glusterd.info
UUID=6e6a84af-ac7a-44eb-85c9-50f1f46acef1
operating-version=30712
在信任存儲池中任意節點執行

# gluster volume heal gv2 full
就會自動開始同步,但在同步的時候會影響整個系統的性能。

可以查看狀態

# gluster volume heal gv2 info
復制代碼

 

 

 

GlusterFS在企業中應用場景

  理論和實踐分析,GlusterFS目前主要使用大文件存儲場景,對於小文件尤其是海量小文件,存儲效率和訪問性能都表現不佳,海量小文件LOSF問題是工業界和學術界的人工難題,GlusterFS作為通用的分布式文件系統,並沒有對小文件額外的優化措施,性能不好也是可以理解的。

Media
  -文檔、圖片、音頻、視頻
 *Shared storage  
  -雲存儲、虛擬化存儲、HPC(高性能計算)
 *Big data
  -日志文件、RFID(射頻識別)數據

 

 

 

參考文章地址

官方手冊:http://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/#purpose-of-this-document

官方原理說明:http://docs.gluster.org/en/latest/Administrator%20Guide/Setting%20Up%20Volumes/

主要查看博文:https://www.liuliya.com/archive/733.html

劉愛貴博士分享:http://blog.csdn.net/liuaigui/article/details/17331557

其他博主:http://blog.csdn.net/goser329/article/details/78569257

其他博主原理說明:https://www.cnblogs.com/jicki/p/5801712.html

 

python3
原文地址:https://www.cnblogs.com/huangyanqi/p/8406534.html#autoid-0-0-0


免責聲明!

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



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