glusterfs分布式存储部署

GFS 分布式文件系统 一、GlusterFS概述 1.GlusterFS简介 GlusterFS 是一个开源的分布式文件系统。 由存储服务器、客户端以及NFS/Samba 存储网关(可选,根据需要选择使用)组成。 没有元数据服务器组件,这有助于提升整个系统的性能、可靠性和稳定性。 MFS 传统的分布式文件系统大多通过元服务器来存储元数据,元数据包含存储节点上的目录信息、目录结构等。这样的设计在浏览目录时效率高,但是也存在一些缺陷,例如单点故障。一旦元数据服务器出现故障,即使节点具备再高的冗余性,整个存储系统也将崩溃。而 G 阅读详情

 

2017年11月18日 15:56:56 goser329 阅读数:5953

glusterfs简介

 GlusterFS是一个高层次的分布式文件系统解决方案。通过增加一个逻辑层,对上层使用者掩盖了下面的实现,使用者不用了解也不需知道,文件的存储形式、分布。

 内部实现是整合了许多存储块(server)通过Infiniband RDMA或者 Tcp/Ip方式互联的一个并行的网络文件系统,这样的许多存储块可以通过许多廉价的x86主机,通过网络搭建起来

 其相对于传统NAS 、SAN、Raid的优点就是:

  1.容量可以按比例的扩展,且性能却不会因此而降低。

  2.廉价且使用简单,完全抽象在已有的文件系统之上。

  3.扩展和容错设计的比较合理,复杂度较低。扩展使用translator方式,扩展调度使用scheduling接口,容错交给了本地的文件系统来处理。

   4.适应性强,部署方便,对环境依赖低,使用,调试和维护便利。

 支持主流的linux系统发行版,包括 fc,ubuntu,debian,suse等,并已有若干成功应用。

glusterfs安装配置

 一般在企业中,采用的是分布式复制卷,因为有数据备份,数据相对安全,分布式条带卷目前对 gluster 来说没有完全成熟,存在一定的数据安全风险。

 网络要求全部千兆环境,gluster 服务器至少有 2 块网卡,1 块网卡绑定供 gluster 使用,剩余一块分配管理网络 IP,用于系统管理。如果有条件购买万兆交换机,服务器配置万兆网卡,存储性能会更好。网络方面如果安全性要求较高,可以多网卡绑定。

 跨地区机房配置 Gluster,在中国网络不适用。

 下面对glusterfs做分布式、条带、复制等做演示如下:

1、安装glusterfs前的环境准备

 首先关闭iptables和selinux,配置hosts文件如下:

1

2

3

4

5

6

7

[root@data-1-3 ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.0.0.154      data-1-1

10.0.0.155      data-1-2

10.0.0.142      data-1-3

10.0.0.143      data-1-4

2、安装glusterfs源

 glusterfs源在阿里的epel源中是存在的,所以直接yum下载安装即可

1

2

3

4

5

6

7

8

yum search  centos-release-gluster

 

centos-release-gluster310.noarch

centos-release-gluster312.noarch

centos-release-gluster36.noarch

centos-release-gluster37.noarch

centos-release-gluster38.noarch

centos-release-gluster39.noarch

 这里我们使用glusterfs的3.10版本的源

1

yum  install centos-release-gluster310.noarch -y

3、安装glusterfs

 在安装glusterfs的时候直接指定源为glusterfs源,由于 源[centos-gluster310-test]的enable为0,所以在指定源的时候用--enablerepo来让源生效

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

[root@data-1-1 ~]# cat /etc/yum.repos.d/CentOS-Gluster-3.10.repo

# CentOS-Gluster-3.10.repo

#

# Please see http://wiki.centos.org/SpecialInterestGroup/Storage for more

# information

 

[centos-gluster310]

name=CentOS-$releasever - Gluster 3.10

baseurl=http://mirror.centos.org/centos/$releasever/storage/$basearch/gluster-3.10/

gpgcheck=1

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage

 

[centos-gluster310-test]

name=CentOS-$releasever - Gluster 3.10 Testing

baseurl=http://buildlogs.centos.org/centos/$releasever/storage/$basearch/gluster-3.10/

gpgcheck=0

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage

 安装glusterfs

1

yum --enablerepo=centos-gluster*-test install glusterfs-server glusterfs-cli glusterfs-geo-replication -y

4、查看glusterfs版本并启动glusterfs服务

1

2

3

4

5

[root@data-1-3 ~]# glusterfs  -V

glusterfs 3.10.7

 

#启动glusterfs服务

/etc/init.d/glusterd  start

5、将分布式存储主机加入到信任主机池并查看加入的主机状态

 随便在一个开启glusterfs服务的主机上将其他主机加入到一个信任的主机池里

1

2

3

4

5

6

[root@data-1-1 ~]# gluster peer probe  data-1-2

peer probe: success.

[root@data-1-1 ~]# gluster peer probe  data-1-3

peer probe: success.

[root@data-1-1 ~]# gluster peer probe  data-1-4

peer probe: success.

 查看主机池中主机的状态

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[root@data-1-1 ~]# gluster peer status

Number of Peers: 3

 

Hostname: data-1-2

Uuid: 08b26b41-1479-45b5-959f-03fd992f76cf

State: Peer in Cluster (Connected)

 

Hostname: data-1-3

Uuid: a59e47da-ba3d-4b23-bb7f-5d53f268dd3d

State: Peer in Cluster (Connected)

 

Hostname: data-1-4

Uuid: eaeef3f8-247b-4ff2-9f7b-6fdb678bb36a

State: Peer in Cluster (Connected)

6、在每台主机上创建几块硬盘,做接下来的分布式存储使用

 创建的硬盘要用xfs格式来格式化硬盘,如果用ext4来格式化硬盘的话,对于大于16TB空间格式化就无法实现了。所以这里要用xfs格式化磁盘(centos7默认的文件格式就是xfs),并且xfs的文件格式支持PB级的数据量

 centos6默认是不支持xfs的文件格式,所以要先安装xfs支持包

1

yum install xfsprogs -y

 用fdisk -l 查看磁盘设备,例如查看data-1-1的磁盘设备,这里的sdc、sdd、sde是新加的硬盘

1

2

3

4

5

6

[root@data-1-1 ~]# fdisk  -l

Disk /dev/sda: 8589 MB, 8589934592 bytes

Disk /dev/sdb: 3221 MB, 3221225472 bytes

Disk /dev/sdc: 2147 MB, 2147483648 bytes

Disk /dev/sdd: 3221 MB, 3221225472 bytes

Disk /dev/sde: 4294 MB, 4294967296 bytes

 特别说明:

 如果磁盘大于 2T 的话就用 parted 来分区,这里我们不用分区(可以不分区);
 做分布式文件系统的时候数据盘一般不需要做 RAID,一般系统盘会做 RAID 1;
 如果有raid卡的话,最好用上,raid卡有数据缓存功能,也能提高磁盘的iops,最好的话,用RAID 5;
 如果都不做raid的话,也是没问题的,glusterfs也是可以保证数据的安全的。

 格式化磁盘

1

2

3

[root@data-1-1 ~]# mkfs.xfs -f /dev/sdc

[root@data-1-1 ~]# mkfs.xfs -f /dev/sdd

[root@data-1-1 ~]# mkfs.xfs -f /dev/sde

 在四台机器上创建挂载块设备的目录,挂载硬盘到目录

1

2

3

4

5

6

7

mkdir -p /storage/brick{1..3}

echo "/dev/sdb  /storage/brick1 xfs defaults 0 0" >>/etc/fstab

echo "/dev/sdc  /storage/brick2 xfs defaults 0 0" >>/etc/fstab

echo "/dev/sdd  /storage/brick3 xfs defaults 0 0" >>/etc/fstab

 

#挂载

mount  -a

7、创建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形成一个复制关系,然后两个复制关系形成分布。

 企业一般用后两种,大部分会用分布式复制(可用容量为 总容量/复制份数),通过网络传输的话最好用万兆交换机,万兆网卡来做。这样就会优化一部分性能。它们的数据都是通过网络来传输的。

 配置分布式卷

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

#在信任的主机池中任意一台设备上创建卷都可以,而且创建好后再任意设备都可以查看

[root@data-1-1 ~]# gluster  volume  create  gv1 data-1-1:/storage/brick1/ data-1-2:/storage/brick1/ force

#启动卷gv1

[root@data-1-1 ~]# gluster volume start gv1

#查看创建的卷

[root@data-1-1 ~]# gluster volume info gv1

  

Volume Name: gv1

Type: Distribute

Volume ID: f2c4776c-1f53-4d26-b5a4-d61b4bc77f6c

Status: Started

Snapshot Count: 0

Number of Bricks: 2

Transport-type: tcp

Bricks:

Brick1: data-1-1:/storage/brick1

Brick2: data-1-2:/storage/brick1

Options Reconfigured:

transport.address-family: inet

nfs.disable: on

# 挂载卷到目录

[root@data-1-4 ~]# mount -t  glusterfs  127.0.0.1:/gv1  /mnt

[root@data-1-4 ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3       9.1G  3.7G  4.9G  43% /

tmpfs           491M     0  491M   0% /dev/shm

/dev/sda1       190M   27M  153M  16% /boot

/dev/sdb        3.0G   33M  3.0G   2% /storage/brick1

/dev/sdc        4.0G   33M  4.0G   1% /storage/brick2

/dev/sdd        5.0G   33M  5.0G   1% /storage/brick3

127.0.0.1:/gv1  4.0G   65M  4.0G   2% /mnt

# 在data-1-4 创建测试文件

[root@data-1-4 mnt]# touch {a..f}

[root@data-1-4 mnt]# ll

总用量 0

-rw-r--r-- 1 root root 0 11月  6 15:11 a

-rw-r--r-- 1 root root 0 11月  6 15:11 b

-rw-r--r-- 1 root root 0 11月  6 15:11 c

-rw-r--r-- 1 root root 0 11月  6 15:11 d

-rw-r--r-- 1 root root 0 11月  6 15:11 e

-rw-r--r-- 1 root root 0 11月  6 15:11 f

# 在data-1-2也可看到新创建的文件,信任存储池中的每一台主机挂载这个卷后都可以看到

[root@data-1-2 ~]# mount -t  glusterfs  127.0.0.1:/gv1  /mnt

[root@data-1-2 ~]# ll /mnt

total 0

-rw-r--r-- 1 root root 0 Nov  6 15:11 a

-rw-r--r-- 1 root root 0 Nov  6 15:11 b

-rw-r--r-- 1 root root 0 Nov  6 15:11 c

-rw-r--r-- 1 root root 0 Nov  6 15:11 d

-rw-r--r-- 1 root root 0 Nov  6 15:11 e

-rw-r--r-- 1 root root 0 Nov  6 15:11 f

# 文件实际存在位置data-1-1和data-1-2上的/storage/brick1目录下,通过hash分别存到data-1-1和data-1-2上的分布式磁盘上

[root@data-1-1 ~]# ll /storage/brick1

total 0

-rw-r--r-- 2 root root 0 Nov  6 15:11 a

-rw-r--r-- 2 root root 0 Nov  6 15:11 b

-rw-r--r-- 2 root root 0 Nov  6 15:11 c

-rw-r--r-- 2 root root 0 Nov  6 15:11 e

[root@data-1-2 ~]# ll /storage/brick1

total 0

-rw-r--r-- 2 root root 0 Nov  6 15:11 d

-rw-r--r-- 2 root root 0 Nov  6 15:11 f

 配置复制卷

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

# 创建复制式卷

[root@data-1-2 ~]# gluster volume  create  gv2  replica 2  data-1-1:/storage/brick2 data-1-2:/storage/brick2 force

# 启动创建的卷

[root@data-1-2 ~]# gluster volume start  gv2

# 查看卷信息

[root@data-1-2 ~]# gluster  volume info gv2

  

Volume Name: gv2

Type: Replicate

Volume ID: 27b85504-0a78-4dae-9332-056da410be2e

Status: Started

Snapshot Count: 0

Number of Bricks: 1 x 2 = 2

Transport-type: tcp

Bricks:

Brick1: data-1-1:/storage/brick2

Brick2: data-1-2:/storage/brick2

Options Reconfigured:

transport.address-family: inet

nfs.disable: on

# 挂载卷到目录,创建测试文件

[root@data-1-3 ~]# mount -t glusterfs 127.0.0.1:/gv2 /opt

[root@data-1-3 ~]# df  -h

127.0.0.1:/gv2  3.0G   33M  3.0G   2% /opt

[root@data-1-3 ~]# touch /opt/{1..6}

[root@data-1-3 ~]# ls /opt

1  2  3  4  5  6

#在其他设备上通过挂载可以查看到同样的内容

[root@data-1-4 mnt]# mount -t glusterfs 127.0.0.1:/gv2 /opt

[root@data-1-4 mnt]# ls  /opt

1  2  3  4  5  6

# 但是创建文件的实际存在位置为data-1-1和data-1-2上的/storage/brick2目录下,因为是复制卷,这两个目录下的内容是一致的。

[root@data-1-1 ~]# ls  /storage/brick2

1  2  3  4  5  6

[root@data-1-2 ~]# ls /storage/brick2

1  2  3  4  5  6

 配置条带卷

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

# 创建条带卷

[root@data-1-4 mnt]# gluster volume create gv3 stripe 2  data-1-1:/storage/brick3 data-1-2:/storage/brick3  force

# 启动条带卷

[root@data-1-4 mnt]# gluster volume  start  gv3

# 查看卷信息

[root@data-1-4 mnt]# gluster volume  info  gv3

  

Volume Name: gv3

Type: Stripe

Volume ID: 3b7d3294-0621-4a4b-a8c1-4a03960f9f08

Status: Started

Snapshot Count: 0

Number of Bricks: 1 x 2 = 2

Transport-type: tcp

Bricks:

Brick1: data-1-1:/storage/brick3

Brick2: data-1-2:/storage/brick3

Options Reconfigured:

transport.address-family: inet

nfs.disable: on

# 挂载卷到目录,创建测试文件

[root@data-1-4 mnt]# mount  -t  glusterfs  127.0.0.1:/gv3 /data3/

[root@data-1-4 mnt]# df -h

127.0.0.1:/gv3  8.0G   65M  8.0G   1% /data3

[root@data-1-4 mnt]# dd if=/dev/zero bs=1024 count=10000 of=/data3/10M.file

[root@data-1-4 mnt]# dd if=/dev/zero bs=1024 count=20000 of=/data3/20M.file

# 查看新创建的文件的大小

[root@data-1-4 mnt]# ll -h /data3

总用量 30M

-rw-r--r-- 1 root root 9.8M 11月  6 15:48 10M.file

-rw-r--r-- 1 root root  20M 11月  6 15:48 20M.file

# 文件实际存放位置及所在位置的大小

[root@data-1-1 ~]# ll -h /storage/brick3

total 15M

-rw-r--r-- 2 root root 4.9M Nov  6 15:48 10M.file

-rw-r--r-- 2 root root 9.8M Nov  6 15:48 20M.file

[root@data-1-2 ~]# ll  -h  /storage/brick3

total 15M

-rw-r--r-- 2 root root 4.9M Nov  6 15:48 10M.file

-rw-r--r-- 2 root root 9.8M Nov  6 15:48 20M.file

# 上面可以看到 10M 20M 的文件分别分成了 2 块(这是条带的特点),写入的时候是循环地一点一点在data-1-1和data-1-2的磁盘上写数据,跟raid0很类似

 上面配置的条带卷在生产环境是很少使用的,因为它会将文件破坏,比如一个图片,它会将图片一份一份地分别存到条带卷中的brick上。 

 配置分布式复制卷

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#将原有的复制卷gv2进行扩容,使其成为分布式复制卷

#要扩容前需停掉gv2

[root@data-1-2 ~]# gluster volume  stop gv2

Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y

#添加brick到gv2中

[root@data-1-4 mnt]# gluster  volume  add-brick gv2  replica 2  data-1-3:/storage/brick1  data-1-4:/storage/brick1 force

#启动gv2卷,并查看卷信息

[root@data-1-4 mnt]# gluster volume  start  gv2

volume start: gv2: success

[root@data-1-4 mnt]# gluster  volume info  gv2

  

Volume Name: gv2

# 这里显示是分布式复制卷,是在 gv2 复制卷的基础上增加 2 块 brick 形成的

Type: Distributed-Replicate

Volume ID: 27b85504-0a78-4dae-9332-056da410be2e

Status: Started

Snapshot Count: 0

Number of Bricks: 2 x 2 = 4

Transport-type: tcp

Bricks:

Brick1: data-1-1:/storage/brick2

Brick2: data-1-2:/storage/brick2

Brick3: data-1-3:/storage/brick1

Brick4: data-1-4:/storage/brick1

Options Reconfigured:

transport.address-family: inet

nfs.disable: on

 注意:当你给分布式复制卷和分布式条带卷增加 bricks 时,你增加的 bricks 数目必须是复制或条带数目的倍数,例如:你给一个分布式复制卷的 replica 为 2,你在增加 bricks 的时候数量必须为2、4、6、8等。 扩容后进行测试,发现文件都分布在扩容前的卷中。 

 配置分布式条带卷

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#将原有的复制卷gv3进行扩容,使其成为分布式条带卷

#要扩容前需停掉gv3

[root@data-1-4 ~]# gluster volume  stop gv3

#添加brick到gv3中

[root@data-1-4 ~]# gluster volume  add-brick gv3 stripe 2  data-1-3:/storage/brick2 data-1-4:/storage/brick2 force

#启动gv3卷,并查看卷信息

[root@data-1-4 mnt]# gluster volume  start  gv3

[root@data-1-3 brick2]# gluster volume  info  gv3

  

Volume Name: gv3

# 这里显示是分布式条带卷,是在 gv3 条带卷的基础上增加 2 块 brick 形成的

Type: Distributed-Stripe

Volume ID: 3b7d3294-0621-4a4b-a8c1-4a03960f9f08

Status: Started

Snapshot Count: 0

Number of Bricks: 2 x 2 = 4

Transport-type: tcp

Bricks:

Brick1: data-1-1:/storage/brick3

Brick2: data-1-2:/storage/brick3

Brick3: data-1-3:/storage/brick2

Brick4: data-1-4:/storage/brick2

Options Reconfigured:

transport.address-family: inet

nfs.disable: on

 分布式复制卷的最佳实践:

  1)搭建条件
  - 块服务器的数量必须是复制的倍数
  - 将按块服务器的排列顺序指定相邻的块服务器成为彼此的复制
  例如,8台服务器:
  - 当复制副本为2时,按照服务器列表的顺序,服务器1和2作为一个复制,3和4作为一个复制,5和6作为一个复制,7和8作为一个复制
  - 当复制副本为4时,按照服务器列表的顺序,服务器1/2/3/4作为一个复制,5/6/7/8作为一个复制
  2)创建分布式复制卷

 磁盘存储的平衡

  平衡布局是很有必要的,因为布局结构是静态的,当新的 bricks 加入现有卷,新创建的文件会分布到旧的 bricks 中,所以需要平衡布局结构,使新加入的 bricks 生效。布局平衡只是使新布局生效,并不会在新的布局中移动老的数据,如果你想在新布局生效后,重新平衡卷中的数据,还需要对卷中的数据进行平衡。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#在gv2的分布式复制卷的挂载目录中创建测试文件入下

[root@data-1-4 opt]# touch  {X..Z}

#新创建的文件只在老的brick中有,在新加入的brick中是没有的

[root@data-1-4 opt]# ll  /storage/brick1

总用量 0

[root@data-1-3 ~]# ll /storage/brick1

总用量 0

[root@data-1-1 ~]# ls  /storage/brick2

1  2  3  4  5  6  X  Y  Z

[root@data-1-2 ~]# ls /storage/brick2

1  2  3  4  5  6  X  Y  Z

# 从上面可以看到,新创建的文件还是在之前的 bricks 中,并没有分布中新加的 bricks 中

# 下面进行磁盘存储平衡

[root@data-1-2 ~]# gluster volume rebalance gv2 start

#查看平衡存储状态

[root@data-1-4 opt]# gluster volume rebalance gv2 status

# 查看磁盘存储平衡后文件在 bricks 中的分布情况

[root@data-1-3 ~]# ls  /storage/brick1

1  5  Y  Z

[root@data-1-4 opt]# ls  /storage/brick1

1  5  Y  Z

[root@data-1-1 ~]# ls  /storage/brick2

2  3  4  6  X

[root@data-1-2 ~]# ls /storage/brick2               

2  3  4  6  X

#从上面可以看出部分文件已经平衡到新加入的brick中了

 每做一次扩容后都需要做一次磁盘平衡。 磁盘平衡是在万不得已的情况下再做的,一般再创建一个卷就可以了。

 移除 brick

  你可能想在线缩小卷的大小,例如:当硬件损坏或网络故障的时候,你可能想在卷中移除相关的 bricks。
  注意:当你移除 bricks 的时候,你在 gluster 的挂载点将不能继续访问数据,只有配置文件中的信息移除后你才能继续访问 bricks 中的数据。当移除分布式复制卷或者分布式条带卷的时候,移除的 bricks 数目必须是 replica 或者 stripe 的倍数。

  但是移除brick在生产环境中基本上不做的,没什么意思,如果是硬盘坏掉的话,直接换个好的硬盘即可,然后再对新的硬盘设置卷标识就可以使用了,后面会演示硬件故障或系统故障的解决办法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#移除gv2中的data-1-3 data-1-4下的brick

[root@data-1-2 ~]# gluster volume  stop  gv2

[root@data-1-2 ~]# gluster volume remove-brick gv2 replica 2 data-1-3:/storage/brick1 data-1-4:/storage/brick1 force

[root@data-1-2 ~]# gluster  volume start  gv2

[root@data-1-3 ~]# ls  /storage/brick1

1  5  Y  Z

# 如果误操作删除了后,其实文件还在 /storage/brick1 里面的,加回来就可以了

[root@data-1-3 ~]# gluster volume  stop  gv2

[root@data-1-3 ~]# gluster volume add-brick  gv2  replica 2 data-1-3:/storage/brick1 data-1-4:/storage/brick1 force

[root@data-1-3 ~]# gluster volume info  gv2

  

Volume Name: gv2

Type: Distributed-Replicate

Volume ID: 27b85504-0a78-4dae-9332-056da410be2e

Status: Stopped

Snapshot Count: 0

Number of Bricks: 2 x 2 = 4

Transport-type: tcp

Bricks:

Brick1: data-1-1:/storage/brick2

Brick2: data-1-2:/storage/brick2

Brick3: data-1-3:/storage/brick1

Brick4: data-1-4:/storage/brick1

Options Reconfigured:

transport.address-family: inet

nfs.disable: on

 删除卷

  一般会用在命名不规范的时候才会删除

1

2

[root@data-1-3 ~]# gluster volume stop gv1

[root@data-1-3 ~]# gluster volume delete  gv1

 模拟误删除卷信息故障及解决办法

1

2

3

4

5

6

7

8

9

10

11

12

[root@data-1-3 mnt]# ls  /var/lib/glusterd/vols

gv2  gv3  gv4

#删除卷gv4的卷信息

[root@data-1-3 brick2]# rm  -rf  /var/lib/glusterd/vols/gv4

#再查看卷信息情况如下:gv4卷信息被删除了

[root@data-1-3 mnt]# ls  /var/lib/glusterd/vols

gv2  gv3

#因为其他节点服务器上的卷信息是完整的,比如从data-1-4上同步所有卷信息如下:

[root@data-1-3 mnt]# gluster volume  sync  data-1-4

#验证卷信息是否同步过来

[root@data-1-3 mnt]# ls  /var/lib/glusterd/vols

gv2  gv3  gv4

 模拟复制卷数据不一致故障及解决办法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#复制卷的存储位置的数据如下:

[root@data-1-1 ~]# ls /storage/brick2

2  3  4  6  X

[root@data-1-2 ~]# ls /storage/brick2

2  3  4  6  X

#接着在data-1-1上删除一个数据来模拟复制卷数据不一致

[root@data-1-1 ~]# rm -f  /storage/brick2/X

[root@data-1-1 ~]# ls /storage/brick2

2  3  4  6 

[root@data-1-2 ~]# ls /storage/brick2

2  3  4  6  X

#通过访问这个复制卷的挂载点的数据来同步数据

[root@data-1-3 mnt]# mount  -t glusterfs 127.0.0.1:/gv2 /opt/

[root@data-1-3 mnt]# cat /opt/X

#这时候再看复制卷的数据是否同步成功

[root@data-1-1 ~]# ls /storage/brick2

2  3  4  6  X

[root@data-1-2 ~]# ls /storage/brick2

2  3  4  6  X

8、glusterfs分布式存储优化

 GlusterFS文件系统优化  

  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:缓存已经被读过的、

 系统优化实例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

[root@data-1-1 ~]# gluster volume set gv4 performance.write-behind on

volume set: success

[root@data-1-1 ~]# gluster volume set gv4 performance.flush-behind on

volume set: success

[root@data-1-1 ~]# gluster volume set gv4 performance.cache-refresh-timeout 1

volume set: success

[root@data-1-1 ~]# gluster volume  info gv4

  

Volume Name: gv4

Type: Distribute

Volume ID: bef2ec82-43fd-4219-be8f-b326a34900c9

Status: Started

Snapshot Count: 0

Number of Bricks: 2

Transport-type: tcp

Bricks:

Brick1: data-1-1:/storage/brick1

Brick2: data-1-2:/storage/brick1

Options Reconfigured:

performance.cache-refresh-timeout: 1

performance.flush-behind: on

performance.write-behind: on

transport.address-family: inet

nfs.disable: on

 监控及日常维护

  使用zabbix自带的模板即可,CPU、内存、磁盘空间、主机运行时间、系统load。日常情况要查看服务器监控值,遇到报警要及时处理。

  #看下节点有没有在线
  gluster volume status

  #启动完全修复
  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 gv2 limit-usage /data 20MB   --表示/mnt挂载点下的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

  例如队文件夹的限额设置:

1

2

3

4

5

6

7

8

[root@data-1-1 ~]# mount  -t  glusterfs  127.0.0.1:/gv3  /mnt/

[root@data-1-1 ~]# ls  /mnt

10M.file  10M.file2  20M.file  mydir

[root@data-1-1 ~]# gluster volume quota gv3 limit-usage /mydir  20MB

[root@data-1-1 ~]# dd  if=/dev/zero of=50M.file  bs=1024  count=50000

[root@data-1-1 ~]# cp 50M.file /mnt/mydir/

cp: cannot create regular file `/mnt/mydir/50M.file': Disk quota exceeded

#复制大于限额数的时候,提示磁盘限额限制  备注:

  quota功能,主要是对挂载点下的某个目录进行空间限额。如:/mnt/mydir目录,而不是对组成卷组的空间进行限制。

9、Gluster日常维护及故障处理

 1、硬盘故障

  如果底层做了raid配置,有硬件故障,直接更换硬盘,会自动同步数据。
  如果没有做raid处理方法:  

  因为生产环境中主要部署分布式复制卷,所以这里以复制卷的方式演示硬盘故障后修复复制卷的操作,下面在虚拟机上演示如下:

  1、首先在虚拟机中移除损坏的硬盘,重新添加一个硬盘,添加的新硬盘在虚拟机中是不立刻生效的,所以还要重启服务器

  2、新添加的硬盘序号是在其他硬盘后,所以重启服务器后,系统会对硬盘的序号做自动调整,那么新添加的硬盘序号和损坏的硬盘序号就不一样了

  3、格式化新添加的硬盘mkfs.xfs  -f  /dev/sdd,并对fstab表做一下调整,让以前的硬盘挂载点保持不变,将新添加的硬盘对应的挂载点设置成损坏硬盘的挂载点

  4、重新挂载 mount  -a 

  接下来便为复制卷的修复过程

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

#恢复复制卷 brick1

#恢复流程

1、重新建立故障brick目录

cd  /storage/

setfattr -n trusted.gfid -v

0x00000000000000000000000000000001 brick1

setfattr -n trusted.glusterfs.dht -v

0x000000010000000000000000ffffffff brick1

setfattr -n trusted.glusterfs.volume-id -v

0xcc51d546c0af4215a72077ad9378c2ac brick1

-v 的参数设置成你的值

2、设置扩展属性(参考另一个复制 brick)

3、重启 glusterd服务

4、触发数据自修复

find /opt -type f -print0 | xargs -0 head -c1 >/dev/null >/dev/null

#在好的机器上找到复制卷的brick 查看扩展属性

[root@data-1-3 storage]# getfattr  -d  -m . -e hex  brick1

# file: brick1

trusted.gfid=0x00000000000000000000000000000001

trusted.glusterfs.dht=0x00000001000000007fffffffffffffff

trusted.glusterfs.dht.commithash=0x3334383937323537363200

trusted.glusterfs.volume-id=0x27b855040a784dae9332056da410be2e

#brick1中的数据为

[root@data-1-3 ~]# ls  /storage/brick1

1  5  hah.txt  Y  Z

#修复data-1-4上的brick1

[root@data-1-4 storage]# setfattr -n trusted.gfid -v 0x00000000000000000000000000000001 brick1

[root@data-1-4 storage]# setfattr -n trusted.glusterfs.dht -v 0x00000001000000007fffffffffffffff brick1

[root@data-1-4 storage]# setfattr  -n trusted.glusterfs.volume-id -v 0x27b855040a784dae9332056da410be2e brick1

[root@data-1-4 storage]# getfattr  -d -m  . -e hex brick1                       # file: brick1

trusted.gfid=0x00000000000000000000000000000001

trusted.glusterfs.dht=0x00000001000000007fffffffffffffff

trusted.glusterfs.volume-id=0x27b855040a784dae9332056da410be2e

[root@data-1-4 storage]# /etc/init.d/glusterd  restart

#重启glusterfs查看brick1中的数据还是没有的,那么试着重启复制卷

[root@data-1-4 storage]# gluster volume stop  gv2

[root@data-1-4 storage]# gluster volume start  gv2 

#结果brick1中依然没有数据

最终的方式就是在data-1-3上的挂载点内访问数据才可同步到data-1-4上的brick1中

[root@data-1-3 ~]# cat  /opt/1

[root@data-1-4 storage]# ls brick1

1  5  Y

 2、主机故障
  一台节点故障的情况包括以下情况:
   a)物理故障;

   b)同时有多快硬盘故障,造成数据丢失;

   c)系统损坏不可修复

  解决方法:

   1)找一台完全一样的机器,至少要保证数量和大小一致,安装系统,配置和故障机器同样的ip安装gluster软件,保证配置都一样,在其他健康的节点上执行命令gluster peer status,查看故障服务器的uuid。   

   2)修改新加机器的/var/lib/glusterd/glusterd.info和故障机器的一样。

    [root@data-1-4 ~]# cat /var/lib/glusterd/glusterd.info           
     UUID=eaeef3f8-247b-4ff2-9f7b-6fdb678bb36a

    在新机器挂在目录上执行磁盘故障的操作,在任意节点上执行

    [root@data-1-4 ~]# gluster volume heal gv1 full 就会自动开始同步,但是同步的时候会影响整个系统的性能。
   3)查看状态 [root@drbd01~]# gluster volume heal gv2 info

GlusterFS分布式文件系统群集 GlusterFS简介、GlusterFS部署 阅读详情

相关推荐

Glusterfs分布式存储

GFS开源分布式存储

m0_62948770的博客 1839

GlusterFS(GFS)分布式文件系统

介绍GlusterFS(GFS)分布式文件系统;详细介绍常用的五种卷:分布式卷(Distribute volume)、条带卷(Stripe volume)、复制卷(Replica volume)、分布式条带卷(Distribute Stripe volume)和分布式复制卷(Distribute Replica volume)

MONGJUK的博客 1万+

GlusterFS分布式存储部署+总结

基础环境搭建 node1 [root@node1 ~]# hostnamectl set-hostname node1 [root@node1 ~]# setenforce 0 [root@localhost ~]# getenforce Permissive [root@localhost ~]# date Fri Nov 30 19:11:20 CST 2018 [root@localho...

sunshine1_0的博客 3795

探索GlusterFS:开源分布式文件系统

在大数据时代背景下,随着企业与个人数据量的爆炸式增长,传统的单机文件系统已经无法满足日益增长的数据存储和访问需求。在此背景下,一种名为GlusterFS的开源分布式文件系统应运而生,以其卓越的可扩展性、高可用性和高性能特性,为海量数据存储提供了有力支持。本文将深入探讨GlusterFS的工作原理、核心特性以及实际应用场景

hy199707的博客 2523

锐捷交换机堆叠配置举例

一、组网需求: 1)四台S2628G进行堆叠; 2)设备在堆叠前先设置好优先级; 3)使用光口堆叠的设备如RG-S2928G-E相关配置 二、组网拓扑 三、配置要点: 普通堆叠设备不需要配置,只要把堆叠模块和线缆连接好即可 堆叠模块不支持热插拔,即插在模块连上线缆后不能立即生效,需要重启设备才生效。 如果拔掉堆叠插槽后,想再插上模块堆叠,那么必须重启设备才生效 设备堆叠需要协商参数,时间会比较久,请耐心等待 堆叠时设备建议是...

dongsheng_9234的专栏 8289

NRF24L01模块的5个常见问题及解决方案:从信号干扰到功耗优化

本文深入探讨NRF24L01无线模块在STM32开发中的5大常见问题及解决方案,包括通信距离优化、数据丢失排查、电源噪声抑制、SPI通信故障处理以及低功耗设计。通过代码示例和电路图分析,提供实用的优化策略,帮助开发者提升无线通信的稳定性和效率。

weixin_28256233的博客 226

Glusterfs 分布式存储安装部署

Glusterfs 分布式存储安装部署   Glusterfs 分布式存储部署 是存储当中可以选择的一种 现在很多虚拟化 云计算都在用软件存储 例如 ceph Glusterfs 等等 今天我们部署一下Glusterfs环境   GlusterFs安装   环境信息:          Glusterfs-01                          10.20.0...

破茧 2834

【Python】SUMO + Python 联合仿真平台

强化学习的核心思想是让智能体 (Agent) 通过与环境 (Environment) 的交互来学习如何做出最优决策,以最大化累积奖励 (Cumulative Reward)。在交通场景中,智能体可以是交通信号控制器、自动驾驶车辆或交通管理中心,环境则是 SUMO 模拟的交通路网,奖励则与交通效率、安全、环保等目标相关。交通系统本质上是动态的、随机的、高度复杂的系统,传统的基于规则或模型的优化方法在面对不断变化的需求和突发事件时,往往显得力不从心。强化学习的优势在于:在交通领域,强化学习已经被广泛应用于:为了

宅男很神经 1989

Glusterfs分布式存储部署

Glusterfs是一个开源的分布式文件系统,容量可以按比例的扩展,且性能却不会因此而降低。 廉价且使用简单,完全抽象在已有的文件系统之上。 扩展和容错设计的比较合理,复杂度较低 适应性强,部署方便,对环境依赖低,使用,调试和维护便利。 一. 环境准备 1. 服务器 192.168.1.10 gfs01 192.168.1.11 gfs02 192.168.1.13 gfs03 192.168.1.14 gfs04 2. 添加磁盘 添加数据硬盘,每台服务器至少2块硬盘,1块是系统盘,另一块是存放数据,数据

范一刀的博客 674

【速通RAG实战:索引】4.RAG文档解析技术

通过本文技术方案,可构建高精准、高效率的文档解析流水线,为 RAG 应用提供坚实的知识底座。核心在于**格式解析的鲁棒性**和**语义分块的准确性**,后续通过持续的性能优化和质量监控,逐步提升索引质量和检索效率。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1547

代谢组数据分析(四):多种差异分析方法筛选代谢物标记物

本文详细介绍了代谢组学中常用的差异分析方法,包括倍数变化法、T检验、VIP值在OPLS-DA中的应用。通过这些方法,研究者能够筛选出在不同组别间具有显著差异的代谢物,为疾病诊断和治疗提供线索。文章还提供了一个整合的R函数run_metabolomeDA,便于研究人员进行一站式差异分析,并展示了如何生成火山图来可视化结果。

专注生信领域 6776

基于GlusterFS的分布式存储集群部署实战指

本指南完整演示了从单机部署到集群验证的全流程,通过4种卷类型展示了GlusterFS的灵活架构。至少3个存储节点保证数据安全配置专有存储网络(建议万兆网卡)实施定期健康检查和备份策略结合Prometheus+Grafana构建监控体系通过合理规划卷类型和副本策略,GlusterFS可满足从PB级对象存储到高并发文件服务的多样化需求。

weixin_75145375的博客 735

基于Simulink的电力电子系统电磁兼容性(EMC)仿真

在电力电子系统中,由于高频开关器件的存在,会产生大量的电磁干扰(EMI),这对系统的稳定性和可靠性提出了挑战。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证电力电子系统的电磁兼容性。本教程将详细介绍如何使用 Simulink 进行电力电子系统的电磁兼容性仿真。通过本教程,我们详细介绍了如何使用 Simulink 进行电力电子系统的电磁兼容性仿真。为了模拟电力电子系统中的电磁干扰(EMI),我们需要添加噪声源模块。为了更好地分析系统的电磁兼容性特性,可以在模型中添加频谱分析工具。

amy_mhd的博客 1127

Linux常用服务部署实战三(万字长文):分布式存储-GlusterFS

glusterfs是一个免费,开源的分布式文件系统(它属于文件存储类型主要由 Z RESEARCH 公司负责开发。GlusterFS 具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS 可以将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据,可为各种不同的数据负载提供优异的性能。GlusterFS 主要由存储服务器(Brick Server)、客户端以及 NFS/Samba 存储网关组成。

github_31369641的博客 1869

多模态脑区细分图谱 HCP-MMP v1.0, Glasser et al. 2016 皮层和皮下区域,简写和全称对应关系

人类连接组计划多模态脑区细分图谱(HCP-MMP)提供了对人类大脑皮层区域的非常有用的细分(Glasser et al. 2016a, b)。图谱是多模态的,因为每个区域都是根据四个标准的组合定义的,包括结构(T1加权/T2加权髓鞘含量和皮层厚度图)、静息态功能连接、基于任务的激活和拓扑地形组织。HCP-MMP v1.0图谱包含每个半球180个皮层区域,基于210名参与者的分析。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 2626

dify安装ollama插件及OLLAMA模型添加失败问题完整解决方法

plugin_daemon-1 | 2025/05/10 17:37:36 stdio.go:160: [INFO]plugin langgenius/ollama:0.0.6: Installed model: ollama 提示ollama安装成功,再添加模型就不会有问题了。安装dify1.2.0和1.3.1均出现OLLAMA插件安装失败或插件安装后添加模型失败的问题,具体表现为一是添加ollama插件时没反应,需要二次添加才成功;二是添加模型时点保存报500错误或点保存后没反应,无法成功添加。

symstandsun的博客 9080

openEuler环境下GlusterFS分布式存储集群部署指南

(注意2.5,2.6只有open-Euler1一个节点配置,2.1-2.4三个节点都需要配置)登录 node1 节点,使用如下命令,添加其他信任池节点。这里我的用磁盘sdb,sdc作为集群的共享存储。磁盘分区(分出sdb1,sdc1)对创建出来的磁盘分区进行格式化。配置完成后,查看信任池状态。创建挂载点并进行客户端挂载。安装gluster客户端。

2302_77791905的博客 1027

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

glusterfs(分布式存储)部署

glusterfs(分布式存储)是企业中的主流部署形式 GlusterFS部署: 参考:http://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/ # kubectl create -f glusterfs-endpoints.json # kubectl create -f glusterfs-service.json 准备: ...

机器重启员的博客 1031

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

CentOS7 离线部署GlusterFS分布式存储(glusterfs 3.8.15)

在CentOS7系统上部署GlusterFS分布式存储

蛋黄派的博客 1632

分布式存储:Ceph、GlusterFS、MinIO架构与部署

摘要:本文对比了三种主流分布式存储系统(Ceph、GlusterFS、MinIO)的架构特点和部署方案。Ceph作为统一存储平台功能强大但部署复杂,适合云平台后端;GlusterFS采用简单"乐高式"扩展,适合文件共享场景;MinIO轻量且云原生,专为对象存储优化。文章从架构设计、部署复杂度、典型应用场景等维度进行详细解析,并给出选型建议:Ceph适合统一存储需求,GlusterFS快速搭建共享文件系统,MinIO则是云原生对象存储的首选,企业需根据具体需求、运维能力和成本选择合适方案。

星哥玩云 590

Helm 部署配置redis集群+glusterfs分布式存储应用

1、helm的安装不做赘述,网上有很多教程。 2、helm添加Chart库 添加微软库 helm repo add stable http://mirror.azure.cn/kubernetes/charts/ 目前我本地的Chart库如下 添加了之后,查询redis结果如下 helm search repo redis -l 可以查看历史版本 3、 拉取部署文件: helm pull stable/redis-ha 不指定标签时默认拉取最新版本,拉取的是一个压缩包 解压

intelrain的博客 1399

GlusterFS容器化部署终极指南:5分钟构建分布式存储系统

想要快速搭建企业级分布式存储系统?GlusterFS容器化部署正是你需要的解决方案!GlusterFS作为一款开源的软件定义分布式存储系统,可以在几分钟内扩展到PB级别容量,为你的容器化应用提供可靠的数据存储基础。 ## 🚀 为什么选择GlusterFS容器化部署? GlusterFS容器化部署结合了分布式存储和容器技术的双重优势。通过Docker容器,你可以轻松实现: - **快速部署*

gitblog_00616的博客 1051

helm部署mysql_Helm 部署配置mysql+glusterfs分布式存储应用

1、使用的 Helm repo如下 最开始没添加这个,下载的 stable/mysql ,不是很合适,后面加了这个源helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubatorhelm repo updatehelm search mysqlha新建一个文件夹mysqlhelm fetch inc...

weixin_39519619的博客 380
上一篇: docker的【save】和【load】命令使用
下一篇: 编辑器加载中another app is currently holding the yum lock;waiting for it to exit... 有时用yum升级一些文件时,会出现以下情况:
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值