GlusterFS基本知识
文件系统
- 组成:文件系统接口,对对象管理的软件集合,对象及属性
- 作用:负载为用户建立文件、存入、读取、修改、转储文件,控制文件的存取
- 文件系统的挂载使用:除根文件系统以外的文件系统创建后 要使用需要先挂载点后菜可以被访问,挂载点及分区设备文件关联的某个目录文件
GlusterFS
概述:它是开源的分布式文件系统,由存储服务器、客户端以及NFS/Samba存储网关组成
GlusterFS特点
- 拓展性和高性能
- 高可用性
- 全局统一命名空间(指共享),提供了一个API,为用户访问GFS服务器中数据的唯一入口
- 弹性卷管理
- 基于标准协议 :客户端和存储服务器交互需要借助网络,而相关的网络协议包括TCP/IP协议
GlusterFS组成
- 存储服务器:存储节点信息
- 客户端;存储元数据,帮用户定位文件的位置,索引等信息
- NFS/Samba存储网关组成
GlusterFS专业术语
- brick :用于存储用户数据的服务器
- FUSE:远程的GFS,客户端的请求要交给FUSE(伪文件系统),就可以实现跨界点存储在GFS上
- volume :本地文件系统的“分区”
- VFS(虚拟端口):内核态的虚拟文件系统,用户是先提交请求给VFS,然后VFS交给FUSE再交给GFS客户端,最好客户端交给远程的存储
- glusterd:是运行在存储节点的进程
GlusterFS工作流程
- 客户端存储将文件放入,通过system call调用VFS内核寻端口
- VFS将数据交给FUSE,FUSE将数据保存到/dev/fuse虚拟设备中(缓存中),然后唤醒GFS-client
- client将数据传输给server端,server端通过VFS将数据保存在EXT3这种文件系统中,然后保存到brick存储服务器
GlusterFS卷类型
- distribute volume:分布式卷
- stripe voluem :条带卷
- replica volume :负责卷
- distribute stripe volume :分布式条带卷
- distribute replica volume :分布式负责卷
- stripe replica volume :条带负责卷
- distribute stripe replicavolume :分布式条带负责卷
GlusterFS集群部署
设备准备,四台CentOS7作为GFS节点,一台客户端
- node1-4节点:磁盘/dev/sdb1 挂载点:/whd/sdb1
磁盘/dev/sde1 挂载点:/whd/sdc1
磁盘/dev/sdd1 挂载点:/whd/sdd1
磁盘/dev/sde1 挂载点:/whd/sde1
IP地址分别为:192.168.118.100 192.168.118.200
192.168.118.50 192.168.118.55
client端:192.168.118.88
vim /opt/fdisk.sh
echo "the disks exist list:"
fdisk -l |grep '磁盘 /dev/sd[a-z]'
echo "=================================================="
PS3="chose which disk you want to create:"
select VAR in `ls /dev/sd*|grep -o 'sd[b-z]'|uniq` quit
do
case $VAR in
sda)
fdisk -l /dev/sda
break ;;
sd[b-z])
echo "n ##创建磁盘
p
w" | fdisk /dev/$VAR
mkfs.xfs -i size=512 /dev/${VAR}"1" &> /dev/null
mkdir -p /data/${VAR}"1" &> /dev/null
echo -e "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0\n" >> /etc/fstab
mount -a &> /dev/null
break ;;
quit)
break;;
*)
echo "wrong disk,please check again";;
esac
done
chmod +x /opt/fdisk.sh
cd /opt/
sh -x fdisk.sh
[root@node4 opt]
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 xfs 197G 5.4G 192G 3% /
devtmpfs devtmpfs 895M 0 895M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 11M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 xfs 197M 152M 45M 78% /boot
tmpfs tmpfs 182M 4.0K 182M 1% /run/user/42
tmpfs tmpfs 182M 36K 182M 1% /run/user/0
/dev/sdb1 xfs 20G 33M 20G 1% /data/sdb1
/dev/sdc1 xfs 20G 33M 20G 1% /data/sdc1
/dev/sdd1 xfs 20G 33M 20G 1% /data/sdd1
/dev/sde1 xfs 20G 33M 20G 1% /data/sde1
添加地址映射
echo "192.168.118.200 node1" >> /etc/hosts
echo "192.168.118.55 node2" >> /etc/hosts
echo "192.168.118.100 node3" >> /etc/hosts
echo "192.168.118.50 node4" >> /etc/hosts
echo "192.168.118.88 client" >> /etc/hosts
unzip gfsrepo.zip
cd /etc/yum.repos.d/
mkdir bak
mv CentOS-* bak
vim gfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum clean all
yum makecache
rpm -e --nodeps glusterfs-api glusterfs-libs glusterfs-fuse glusterfs-cli glusterfs glusterfs-client-xlators
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service
[root@node1 gfsrepo]
peer probe: success.
[root@node1 gfsrepo]
peer probe: success.
[root@node1 gfsrepo]
peer probe: success.
[root@node1 gfsrepo]
peer probe: success. Probe on localhost not needed
[root@node1 gfsrepo]
Number of Peers: 3
Hostname: node1
Uuid: 83a80dc9-316f-4472-a9b2-8b8b0563bd66
State: Peer in Cluster (Connected)
Hostname: node2
Uuid: 0033f686-4ea0-43f7-922e-dd5bf47ad454
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 7821c5d7-e0f3-4f41-b376-f9dbdbad7377
State: Peer in Cluster (Connected)
卷名称 卷类型 Brick
dis-volume 分布式卷 node1(/data/sdb1)、node2(/data/sdb1)
stripe-volume 条带卷 node1(/data/sdc1)、node2(/data/sdc1)
rep-volume 复制卷 node3(/data/sdb1)、node4(/data/sdb1)
dis-stripe 分布式条带卷 node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1)
dis-rep 分布式复制卷 node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1)
```bash
创建分布式卷,会提醒需要开启
[root@node1 gfsrepo]
volume create: dis-volume: success: please start the volume to access data
[root@node1 gfsrepo]
dis-volume
[root@node1 gfsrepo]
Usage: volume start <VOLNAME> [force]
[root@node1 gfsrepo]
Volume Name: dis-volume
Type: Distribute
Volume ID: c542f24d-b18f-432f-acdd-6f7bb9ee6e1b
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdb1
Brick2: node2:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 gfsrepo]
volume create: stripe-volume: success: please start the volume to access data
[root@node1 gfsrepo]
volume start: stripe-volume: success
[root@node1 gfsrepo]
Volume Name: stripe-volume
Type: Stripe
Volume ID: 80ff853d-2439-4a31-81c9-99da146883e4
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdc1
Brick2: node2:/data/sdc1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 gfsrepo]
volume create: rep-volume: success: please start the volume to access data
[root@node1 gfsrepo]
volume start: rep-volume: success
[root@node1 gfsrepo]
Volume Name: rep-volume
Type: Replicate
Volume ID: fbac45bc-a688-4228-a96b-d9407bd40f08
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/data/sdb1
Brick2: node4:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 gfsrepo]
volume create: dis-stripe: success: please start the volume to access data
[root@node1 gfsrepo]
volume start: dis-stripe: success
[root@node1 gfsrepo]
Volume Name: dis-stripe
Type: Distributed-Stripe
Volume ID: e83bc20b-70ae-486a-a7bc-5c20d774da6f
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdd1
Brick2: node2:/data/sdd1
Brick3: node3:/data/sdd1
Brick4: node4:/data/sdd1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@client yum.repos.d]
[root@client yum.repos.d]
volume start: dis-rep: success
[root@node1 ~]
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: d13a594e-ed13-4cc4-a8a7-ec7c145bc766
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/data/sde1
Brick2: node2:/data/sde1
Brick3: node3:/data/sde1
Brick4: node4:/data/sde1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]
dis-rep
dis-stripe
dis-volume
rep-volume
stripe-volume
[root@client ~]
[root@client yum.repos.d]
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
[root@client yum.repos.d]
[root@client yum.repos.d]
[root@client yum.repos.d]
[root@client yum.repos.d]
[root@client yum.repos.d]
[root@client yum.repos.d]
[root@client yum.repos.d]
[root@client yum.repos.d]
[root@client yum.repos.d]
mount.glusterfs node1:dis-volume /test/dis
mount.glusterfs node1:stripe-volume /test/stripe
mount.glusterfs node1:rep-volume /test/rep
mount.glusterfs node1:dis-stripe /test/dis_stripe
mount.glusterfs node1:dis-rep /test/dis_rep
[root@client ~]
vim /etc/fstab
node1:dis-volume /test/dis glusterfs defaults,_netdev 0 0
node1:stripe-volume /test/stripe glusterfs defaults,_netdev 0 0
node1:rep-volume /test/rep glusterfs defaults,_netdev 0 0
node1:dis-stripe /test/dis_stripe glusterfs defaults,_netdev 0 0
node1:dis-rep /test/dis_rep glusterfs defaults,_netdev 0 0
[root@client ~]
[root@client ~]
[root@client opt]
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0442097 秒,474 MB/秒
[root@client opt]
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0903227 秒,232 MB/秒
[root@client opt]
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0920415 秒,228 MB/秒
[root@client opt]
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0890255 秒,236 MB/秒
[root@client opt]
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.0900589 秒,233 MB/秒
[root@client opt]
[root@client opt]
[root@client opt]
[root@client opt]
[root@client opt]
node1:
[root@node1 yum.repos.d]
总用量 80M
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo4.log
node2:
[root@node2 yum.repos.d]
总用量 20M
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo5.log
[root@node1 yum.repos.d]
总用量 50M
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo4.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo5.log
[root@node2 yum.repos.d]
总用量 50M
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo4.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo5.log
[root@node4 yum.repos.d]
总用量 100M
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo4.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo5.log
[root@node3 yum.repos.d]
total 100M
-rw-r--r--. 2 root root 20M 八月 13 09:45 demo1.log
-rw-r--r--. 2 root root 20M 八月 13 09:45 demo2.log
-rw-r--r--. 2 root root 20M 八月 13 09:45 demo3.log
-rw-r--r--. 2 root root 20M 八月 13 09:45 demo4.log
-rw-r--r--. 2 root root 20M 八月 13 09:45 demo5.log
[root@node1 yum.repos.d]
总用量 40M
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo4.log
[root@node2 yum.repos.d]
总用量 40M
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo4.log
[root@node4 yum.repos.d]
总用量 10M
-rw-r--r--. 2 root root 10M 8月 13 09:45 demo5.log
[root@node3 yum.repos.d]
total 10M
-rw-r--r--. 2 root root 10M 八月 13 09:45 demo5.log
[root@node1 yum.repos.d]
总用量 80M
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo4.log
[root@node2 yum.repos.d]
总用量 80M
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo1.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo2.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo3.log
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo4.log
[root@node4 yum.repos.d]
总用量 20M
-rw-r--r--. 2 root root 20M 8月 13 09:45 demo5.log
[root@node3 yum.repos.d]
total 20M
-rw-r--r--. 2 root root 20M 八月 13 09:45 demo5.log
- 破坏性测试:关闭node2节点在client端观察
分布式卷:
[root@client test]
[root@client dis]
总用量 81920
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo1.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo2.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo3.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo4.log
条带卷:
[root@client test]
[root@client stripe]
ls: 正在读取目录.: 传输端点尚未连接
总用量 0
分布式条带卷
[root@client dis]
[root@client dis_stripe]
总用量 20480
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo5.log
[root@client dis_stripe]
[root@client dis_rep]
总用量 102400
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo1.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo2.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo3.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo4.log
-rw-r--r--. 1 root root 20971520 8月 13 09:45 demo5.log
测试结果:带复制卷的都比较安全
|