当前位置: 首页>后端>正文

centos glusterfs部署 glusterfs 客户端

架构:

glusterfs 是一个分布式的文件系统。分为客户端和服务端。

客户端:指的是我们挂载 glusterfs 服务集群的 机器节点

服务端:搭建的glusterfs 集群

基本概念:

卷名:集群创建后,我们可以把这个集群当成一个整体,创建多个 分布式的卷,这些的卷又有很多类型,如distribution、replica、这两种混合的。我们给这个卷起的名字就是卷名,客户端挂载的时候需要指定卷名,这就是它的作用。

集群的搭建步骤:

双节点:192.168.10.23 、192.168.10.23

磁盘:sdb

目录:/data

  1. 创建逻辑卷
pvcreate /dev/sdb
gcreate vg0 /dev/sdb
lvcreate -n lv0 vg0
lvcreate -l 100%VG -n lv0 vg0
fdisk -l
mkfs.xfs -i size=512 /dev/vg0/lv0
mount /dev/vg0/lv0 /data
df -hT
echo '/dev/vg0/lv0 /data xfs defaults 0 0' >> /etc/fstab
  1. 安装glusterfs 相关软件
  • 安装centos yum 源,这种只能在centos上安装
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

修改 $releasever 为7 ,使用sed 命令,或者直接去目录里改

yum search  centos-release-gluster
yum install centos-release-gluster41.noarch -y

yum 安装依赖包
./autogen.sh
./configure --without-libtirpc --disable-linux-io_uring && make install -j 8
#make && make install  #使用了-j 8 就不用 make install了

/sbin/mount.glusterfs mount -t glusterfs

systemctl daemon-reload
systemctl start glusterd
glusterd 也可也手动启动。但是命令提示的功能也没有,这个以后再配置

make 的时候报错,可能是默认使用的python2,在编译完成之后就可以看得到是 with pyhton2.7 ,

update-alternatives --list python
update-alternatives --install /usr/bin/python python /usr/bin/python2 1
update-alternatives --install /usr/bin/python python /usr/bin/python3 2

最后发现只是少了一个 python-devel 的包,这个包在第一步中可能被忽略了,没有装上,现在用yum 装上即可

  1. 创建 glusterfs 卷
gluster peer probe 192.168.10.24  #在23 上把24 加到可信池里
gluster pool list	  #查看状态
gluster peer status 	

gluster volum create gv0 192.168.10.23:/data/brick1 192.168.10.24:/data/brick1
gluster volume start gv0
gluster volume status 
gluster volume info
  1. 客户端挂载
#安装客户端
yum install glusterfs-fuse -y

mount -t glusterfs 192.168.10.22:/gv0 /mnt/gv0

底层原理分析

在客户端创建文件到共享卷的时候,客户端里 可以用 ll 命令看到文件的硬链接是1,而到服务端去看文件时,可以观察到文件硬链接为2。在隐藏目录.glusterfs 中肯定存在 这两个文件对应关系。

客户端里看到的文件 links 为1 ,服务端里的文件 links 为2,如果在服务端删的话,./glusterfs里的文件就多了一个 -links 为1 的文件,这个对应的是客户端能看到的文件。只有再删除了这个,文件才能真实的被删除,空间才能释放掉。

硬链接原理:硬连接的作用是允许一个文件可以拥有多个路径名。因此源文件和硬链接文件是仅文件名不同的相同文件,创建文件的硬链接相当于为文件又起了一个新的文件名而已。一个inode 可以对应多个文件名,用 ls -l 命令就可以看到。
只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

实验一:

服务端删除问价后,重启 数据卷,看看是否会恢复数据

重启后没有恢复数据,即使 隐藏目录里的 硬链接还在。

#找到硬链接为2的所有文件,然后删除,-link =1 说明只有一个 硬链接
find . -samefile -L `find . -links 2 -type f | grep -Ev "db|health|stub|0{4}"` -execdir rm {} \;

要正确的删除软链接,来释放空间。

软连接有的是链接目录,而不单单是文件,rm -rf 可能会删除目录所有内容了

# 客户端里看到的文件 links 为1 ,服务端里的文件 links 为2,如果在服务端删的话,./glusterfs里的文件就
# 多了一个 -links 为1 的文件,这个对应的是客户端能看到的文件

#找到 .gluster已删除的硬链接,brick里的 links 为1
#find .glusterfs -links 1 -type f | grep -Ev "health|db" | xargs ls -l

# find . -links 1 -type f | grep -Ev "db|health|stub|0{4}" | xargs ls -l

#查找brick 里面(包括.gluster)里所有links 为 1 的文件
# ll -haR | awk -F ' ' '==1{print }' | grep -Ev "db|health|stub|^l"


# 1,清理硬链接,brick下的 .glusterfs 失效的为 1
# 2,清理软连接,brick中有一些是其他节点上同步过来的,也要删掉。
    # 先删客户端里已经不存在的目录,再清理失效的软连接
# 3,清理空目录




https://www.xamrdz.com/backend/3bh1934777.html

相关文章: