GlusterFS-分布式文件系统:概念、案例

news2024/9/23 5:28:58

目录

GlusterFS

简介

概念

文件系统

通信方式

Cluster特点

扩展性和高性能

高可用性

全局统一命名空间

弹性卷管理

基于标准协议

GlusterFS术语

(1)Brick

(2)Volume

(3)FUSE

(4)VFS

(5)Glusterd

运行架构

工作原理

弹性HASH算法

优点

过程

GlusterFS卷类型

分布式卷(dis-volume)

特点

复制卷(rep-volume)

特点

分散卷(stripe-volume)

特点

分布式复制卷(dis-rep)

特点

分布式分散卷(dis-stripe)

案例

案例环境

初步设置

添加硬盘

设置主机名

为新硬盘分区、格式化、挂载

安装GlusterFS

配置GlusterFS

添加节点

查看状态

创建卷

创建分布式卷

创建复制卷

分散卷

创建分布式复制卷

分布式分散卷

部署GFS客户端

安装客户端软件

创建挂载目录

修改hosts文件

挂载Gluster文件系统

修改fstab配置文件

在客户端测试Gluster文件系统

在卷中写入文件

查看文件分布

在node1和node2中查看分布式卷文件分布

在node3和node4中查看复制卷文件分布

在node1、node2、node3、node4中查看分布式复制卷文件分布


GlusterFS

简介

  • 开源的分布式文件系统
  • 由存储服务器、客户端、NFS/Samba存储网关组成
  • 无元数据服务器(去中心化)

元:是对某一种对象的描述信息(属性)

概念

文件系统

是基于操作系统内核的软件形式,管理磁盘上存储的文件

通信方式

  • TCP/IP
    • 客户端和服务端基于网络通信
    • 通信速度会降低
  • InfiniBand
    • 无线带宽,是一种通信技术
    • 实现了低延迟高带宽,也是基于网络连接,但是不采用TCP/IP协议
    • 绕过系统内核,直接在底层的程序(Gluster)让客户端和服务端之间通信

Cluster特点

  • 扩展性和高性能
    • 每个节点都存放数据,访问时并行读取数据,访问的越多,同时读取数据的节点就越多
  • 高可用性
    • 节点之间互相复制数据,不会因为某个节点失效导致整个环境失效
  • 全局统一命名空间
    • 在服务端给卷起的名字,这个名字是全局统一的,不能重名。客户端可以根据卷名使用
  • 弹性卷管理
    • 卷大小可扩展、可收缩,通过弹性哈希算法决定数据放到哪个卷
  • 基于标准协议
    • 可以基于TCP/IP协议连接

GlusterFS术语

(1)Brick

存储块。如果ClusterFS是由多个服务器构成的,每个服务器至少要提供一个该服务器的磁盘分区,然后把分区加入到ClusterFS的分布式存储环境中

所以Brick就是加入到ClusterFS分布式存储环境中的一个分区,服务器可以有多个Brick

(2)Volume

卷,可以把多个磁盘上独立的分区(Brick),合并到一个卷组中,可以从这个卷组调用空间

所调用的空间可能是来自多个不同服务器中的多个不同的磁盘,这就是卷

(3)FUSE

FUSE:Filesystem in Userspace,文件系统用户空间

是内核中的一个模块,创建客户端本地文件系统的,通过FUSE做接口让用户去挂载远程的GlusterFS文件系统

(4)VFS

客户端要通过FUSE的文件系统连接远程服务器上的存储,但远程服务器是分布式的存储环境,这时就需要为用户提供一个接口

VFS是一种让客户端FUSE连接远程服务器时,为磁盘提供的一个接口

(5)Glusterd

GlusterFS程序启动后,进程名就叫Glusterd


运行架构

  • 模块化(每个环节都可以单独存在)、堆栈式的架构(把各个模块以相应的接口或协议连接起来)
  • 通过对模块的组合,实现复杂的功能

  • POSIX:挂载时分区连接内核的接口

工作原理

当用户使用客户端访问数据时,会向VFS发送请求,VFS接口结合/dev/fuse指向GlusterFS客户端,客户端使用TCP/IP或无线带宽来连接服务器,服务器再通过本地的VFS找到服务器内硬盘本身的分区

弹性HASH算法

解决了数据能够均衡地存放到服务器上的哪一个Brick

  • 通过HASH算法得到一个32位的整数
  • 把哈希值划分为N个连续的子空间(取决于Brick的数量),每个空间对应一个Brick
  • 尽量平均让文件放置到不同的Brick中,以保证相对均衡
优点
  • 让数据尽量平均分布在每一个Brick中
  • 解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
过程
  1. 当GlusterFS文件系统接收到存储请求以后,需要先得到这个文件
  2. 假如这个文件很大的话GlusterFS就要把这个文件分成很多份
  3. 针对每一份数据进行HASH运算生成一个32位的整数(哈希值)
  4. 然后把计算的哈希值和Brick进行匹配,假如有4个Brick,弹性HASH算法会把2的32次方以内的数字分成4份
  5. 匹配到哪个Brick的区间就把文件存储到哪个Brick中

  • 这4个Brick可能在同一个服务器,也可能不在同一个服务器,这些Brick就是服务器最底层存放数据的空间

GlusterFS卷类型

条带卷在GlusterFS 6.0版本之后就不再支持条带卷,不再进行讲解

因为条带卷只要有一个节点故障,那么所有的节点都会受到影响不能使用


分布式卷(dis-volume)

在GlusterFS中,不指定卷的类型,默认创建的就是分布式卷

  • 不对文件进行分块处理,直接存储在服务器节点上使用本地文件系统进行存储
  • 通过扩展文件属性保存HASH值
  • 支持的底层文件系统有EXT3、EXT4、ZFS、XFS等
特点
  • 文件分布在不同的服务器,不具备冗余性
  • 更廉价的扩展卷大小
  • 单点故障会造成数据丢失,如果一个Brick故障了,那么该Brick中的分布式卷就会丢失,但是不会影响其他卷
  • 依赖底层的数据保护

复制卷(rep-volume)
  • 同一文件保存一份或多份副本
  • 因为要保存副本,所以磁盘利用率低
  • 若多个节点上的存储空间不一致,将按照木桶原则取最小节点的容量作为该卷的总容量
特点
  • 卷中所有的Brick均保存一个完整的副本
  • 卷的副本数量可由客户创建的时候决定
  • 创建复制卷最少需要2个Brick
  • 具备冗余性

分散卷(stripe-volume)
  • 基于ErasureCodes(纠错码)校验,存储大文件时性能突出
  • 通过配置Redundancy(冗余)级别提高可靠性,在保证较高的可靠性同时,可以提升物理存储空间的利用率
  • 必须包含3个Brick
特点
  • Redundancy(冗余)级别必须大于0,并且brick的总数必须大于2 * 冗余度
  • 分散卷最少需要3个brick
  • 防止单点故障,提高IO性能

分布式复制卷(dis-rep)
  • 兼顾分布式卷和复制卷的功能
  • 用于需要冗余的情况
特点
  • 配置分布式复制卷时,brick包含的存储服务器数必须是复制数的 >=2的倍数

分布式分散卷(dis-stripe)
  • 在分散的子卷上分发文件
  • 等效于分布式复制卷,但是不是复制子卷而是分散子卷

冗余级别为1的情况下(最少要求):2 * (2 + 1) = 6 ——》2 * (2个存储数据的服务器 + 1个存储纠错码的服务器)


案例

部署GFS分布式文件系统的集群环境,然后把每个卷都创建一遍,然后测试效果是否达到预期

案例环境

操作系统

系统IP

主机名

挂载磁盘

挂载目录

Centos 7

192.168.10.101

node1

/dev/sdb(3G)

/dev/sdc(4G)

/dev/sdd(5G)

/dev/sde(6G)

/dev/sdf(7G)

/b3

/c4

/d5

/e6

/f7

Centos 7

192.168.10.102

node2

/dev/sdb(3G)

/dev/sdc(4G)

/dev/sdd(5G)

/dev/sde(6G)

/dev/sdf(7G)

/b3

/c4

/d5

/e6

/f7

Centos 7

192.168.10.103

node3

/dev/sdb(3G)

/dev/sdc(4G)

/dev/sdd(5G)

/dev/sde(6G)

/dev/sdf(7G)

/b3

/c4

/d5

/e6

/f7

Centos 7

192.168.10.104

node4

/dev/sdb(3G)

/dev/sdc(4G)

/dev/sdd(5G)

/dev/sde(6G)

/dev/sdf(7G)

/b3

/c4

/d5

/e6

/f7

Centos 7

192.168.10.105

node5

/dev/sdb(3G)

/dev/sdc(4G)

/dev/sdd(5G)

/dev/sde(6G)

/dev/sdf(7G)

/b3

/c4

/d5

/e6

/f7

Centos 7

192.168.10.106

node6

/dev/sdb(3G)

/dev/sdc(4G)

/dev/sdd(5G)

/dev/sde(6G)

/dev/sdf(7G)

/b3

/c4

/d5

/e6

/f7

Centos 7

192.168.10.107

客户端

初步设置

添加硬盘

给每个节点(101 ~ 106)添加5块硬盘,分别是3G、4G、5G、6G、7G大小的硬盘

启动101 ~ 106的6台主机,并连接上XShell

设置主机名

依次为所有节点修改主机名

101主机
[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# bash

102主机
[root@localhost ~]# hostnamectl set-hostname node2
[root@localhost ~]# bash

103主机
[root@localhost ~]# hostnamectl set-hostname node3
[root@localhost ~]# bash

104主机
[root@localhost ~]# hostnamectl set-hostname node4
[root@localhost ~]# bash

105主机
[root@localhost ~]# hostnamectl set-hostname node5
[root@localhost ~]# bash

106主机
[root@localhost ~]# hostnamectl set-hostname node6
[root@localhost ~]# bash

开启会话同步

为了方便实验,防火墙和内核安全机制。修改hosts文件,末尾追加以下内容

[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# setenforce 0
[root@node1 ~]# vim /etc/hosts
192.168.10.101 node1
192.168.10.102 node2
192.168.10.103 node3
192.168.10.104 node4
192.168.10.105 node5
192.168.10.106 node6

为新硬盘分区、格式化、挂载

使用fdisk 磁盘路径依次为每个新加硬盘分区

输入"n"一直回车直到分区结束,最后输入"w"保存退出

[root@node1 ~]# fdisk /dev/sdb
[root@node1 ~]# fdisk /dev/sdc
[root@node1 ~]# fdisk /dev/sdd
[root@node1 ~]# fdisk /dev/sde
[root@node1 ~]# fdisk /dev/sdf

使用mkfs命令格式化这5个分区

[root@node1 ~]# mkfs -t  ext4 /dev/sdb1
[root@node1 ~]# mkfs -t  ext4 /dev/sdc1
[root@node1 ~]# mkfs -t  ext4 /dev/sdd1
[root@node1 ~]# mkfs -t  ext4 /dev/sde1
[root@node1 ~]# mkfs -t  ext4 /dev/sdf1

创建挂载目录

[root@node1 ~]# mkdir /b3
[root@node1 ~]# mkdir /c4
[root@node1 ~]# mkdir /d5
[root@node1 ~]# mkdir /e6
[root@node1 ~]# mkdir /f7

挂载

[root@node1 ~]# mount /dev/sdb1 /b3
[root@node1 ~]# mount /dev/sdc1 /c4
[root@node1 ~]# mount /dev/sdd1 /d5
[root@node1 ~]# mount /dev/sde1 /e6
[root@node1 ~]# mount /dev/sdf1 /f7

永久挂载,修改fstab文件,末尾追加以下内容,然后保存退出

[root@node1 ~]# vim /etc/fstab
/dev/sdb1       /b3     ext4     defaults  0 0
/dev/sdc1       /c4     ext4     defaults  0 0
/dev/sdd1       /d5     ext4     defaults  0 0
/dev/sde1       /e6     ext4     defaults  0 0
/dev/sde1       /f7     ext4     defaults  0 0

安装GlusterFS

修改yum仓库源为阿里云的yum仓库

直接把下方命令复制进XShell终端回车即可

rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all

安装生成GlusterFS的仓库软件包

[root@node1 ~]# yum -y install centos-release-gluster

生成的GlusterFS仓库位置在/etc/yum.repo.d/目录下,然而生成的仓库文件指定的URL不可用,为了能够继续使用yum安装后续软件包,需要修改GlusterFS生成的仓库文件

[root@node1 ~]# vim /etc/yum.repos.d/CentOS-Gluster-9.repo
[centos-gluster9]
name=CentOS-$releasever - Gluster 9
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=$releasever&repo=storage-gluster-9
baseurl=http://mirrors.aliyun.com/$contentdir/$releasever/storage/$basearch/gluster-9/
gpgcheck=1s
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage

[centos-gluster9-test]
name=CentOS-$releasever - Gluster 9 Testing
baseurl=http://buildlogs.centos.org/centos/$releasever/storage/$basearch/gluster-9/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Storage

[root@node1 ~]# yum clean all
[root@node1 ~]# yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
源标识                        源名称                                              状态
base/7/x86_64                 CentOS-7 - Base - mirrors.aliyun.com                10,072
centos-gluster9/7/x86_64      CentOS-7 - Gluster 9                                   181
epel/x86_64                   Extra Packages for Enterprise Linux 7 - x86_64      13,791
extras/7/x86_64               CentOS-7 - Extras - mirrors.aliyun.com                 526
updates/7/x86_64              CentOS-7 - Updates - mirrors.aliyun.com              6,173
repolist: 30,743

安装GlusterFS相关软件包

[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
  • glusterfs:gluster客户端主程序
  • glusterfs-server:gluster服务端主程序
  • glusterfs-fuse:fuse是一个可加载的内核模块,其支持非特权用户创建自己的文件系统而不需要修改内核代码。通过在用户空间运行文件系统的代码通过FUSE代码与内核进行桥接。
  • glusterfs-rdma:为gluster提供远程直接内存访问,支持不通过双方的OS进行直接内存访问。

启动GlusterFS

[root@node1 ~]# systemctl start glusterd
[root@node1 ~]# systemctl enable glusterd

配置GlusterFS

添加节点

关闭会话同步

在101(node1)主机操作

可以在任意一个节点添加,如果在node1添加就添加除了node1自己的其他所有节点

  • gluster peer probe 节点主机名
[root@node1 ~]# gluster peer probe node2
[root@node1 ~]# gluster peer probe node3
[root@node1 ~]# gluster peer probe node4
[root@node1 ~]# gluster peer probe node5
[root@node1 ~]# gluster peer probe node6

查看状态

添加完在其他任意节点查看状态,在查看状态时,是不会显示当前节点的信息,只会显示其他节点的信息

下方就是在node2节点查询状态,但是结果就是除了node2都显示了

[root@node2 ~]# gluster peer status
Number of Peers: 5

Hostname: node1
Uuid: 4531d86a-cd66-4cc0-abbf-85bd0361ffc8
State: Peer in Cluster (Connected)

Hostname: node3
Uuid: 43f272b5-5ef4-41ce-a1ad-2530ab94659c
State: Peer in Cluster (Connected)

Hostname: node4
Uuid: 12fb7f0d-0b53-4a4e-8cad-23b00014b1b5
State: Peer in Cluster (Connected)

Hostname: node5
Uuid: 5cb65298-a630-44e1-bd35-b2995550e810
State: Peer in Cluster (Connected)

Hostname: node6
Uuid: d74f536a-bba5-4b1a-b7a3-6c1d8ab4f64e
State: Peer in Cluster (Connected)

创建卷

创建分布式卷

在101(node1)主机操作

默认创建的就是分布式卷

使用gluster命令创建一个分布式卷,指定卷名为dist-volume,指定为node1节点上的/e6目录,node2节点上的/e6目录,加force参数来强制创建

然后使用info选项查看信息,然后启动该卷

[root@node1 ~]# gluster volume create dist-volume node1:/e6 node2:/e6 force
[root@node1 ~]# gluster volume info dist-volume
Volume Name: dist-volume
Type: Distribute
Volume ID: 40946bd8-cc79-406a-be3c-5c03dd2a207e
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/e6
Brick2: node2:/e6
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

[root@localhost ~]# gluster volume start dist-volume
  • force:强制
创建复制卷

复制卷要求复制的数量和Brick Server的数量(node的数量)相同

在创建分布式卷以外类型的卷时,要指定卷的类型,,然后启动该卷

[root@node1 ~]# gluster volume create rep-volume replica 2 node3:/d5 node4:/d5 force
[root@node1 ~]# gluster volume info rep-volume
Volume Name: rep-volume
Type: Replicate
Volume ID: b5d1afda-ab03-47a7-82b9-2786648a9b3a
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/d5
Brick2: node4:/d5
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

[root@localhost ~]# gluster volume start rep-volume
分散卷
  • disperse:指定构建分散卷的节点数
  • redundancy:冗余度,允许几个节点出故障
[root@node1 ~]# gluster volume create disp-volume disperse 3 redundancy 1 node1:/b3 node2:/b3 node3:/b3 force
[root@node1 ~]# gluster volume info disp-volume
[root@node1 ~]# gluster volume start disp-volume

分散卷中每三个brick允许有一个失效(3*1或6*2)

创建分布式复制卷

分布式复制卷要求Brick Server的数量必须是复制数的倍数(两倍或更高的倍数)

如果replica指定的是2,后面跟了4个brick,那就是两两复制,分开2组存储

[root@node1 ~]# gluster volume create dist-rep replica 2 node1:/c4 node2:/c4 node3:/c4 node4:/c4 force
[root@node1 ~]# gluster volume info dist-rep
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: 197055f7-37d8-419f-bb22-9f05c7e1a032
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/c4
Brick2: node2:/c4
Brick3: node3:/c4
Brick4: node4:/c4
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume start dist-rep
分布式分散卷

分布式分散卷需要用六个节点,每三个节点做一个分散卷,两组分散卷做成复制卷

[root@node1 ~]# gluster volume create dist-disp disperse 3 redundancy 1 node1:/f7 node2:/f7 node3:/f7 node4:/f7 node5:/f7 node6:/f7 force
[root@node1 ~]# gluster volume start dist-disp

部署GFS客户端

再打开107主机,连接上XShell。作为客户端来测试

安装客户端软件

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install glusterfs glusterfs-fuse

如果用的是带桌面的CentOS 7系统,上面两个包是已经自动安装过了

创建挂载目录

[root@localhost ~]# mkdir -p /test/{dist,rep,disp,dist_and_rep,dist_and_disp}
[root@localhost ~]# ls /test

修改hosts文件

在hosts文件末尾追加下方内容

[root@localhost ~]# vim /etc/hosts
192.168.10.101  node1
192.168.10.102  node2
192.168.10.103  node3
192.168.10.104  node4
192.168.10.105  node5
192.168.10.106  node6

挂载Gluster文件系统

使用mount命令,指定文件系统为glusterfs,然后指定任意一个主机名:卷名,最后指定挂载目录

因为GlusterFS是去中心化的环境,所以挂载时可以指定任意一个主机名来挂载

[root@localhost ~]# mount -t glusterfs node1:dist-volume /test/dist
[root@localhost ~]# mount -t glusterfs node1:rep-volume /test/rep
[root@localhost ~]# mount -t glusterfs node1:disp-volume /test/disp
[root@localhost ~]# mount -t glusterfs node1:dist-rep /test/dist_and_rep
[root@localhost ~]# mount -t glusterfs node1:dist-disp /test/dist_and_disp
[root@localhost ~]# df -h

修改fstab配置文件

在fstab末尾添加以下内容

[root@localhost ~]# vim /etc/fstab
node1:dist-volume     /test/dist             glusterfs  defaules,_netdev  0 0
node1:rep-volume     /test/rep             glusterfs  defaules,_netdev  0 0
node1:dist-rep        /test/dist_and_rep     glusterfs  defaules,_netdev  0 0
node1:disp-volume     /test/disp             glusterfs  defaules,_netdev  0 0
node1:disp-rep        /test/disp_and_rep     glusterfs  defaules,_netdev  0 0

在客户端测试Gluster文件系统

在卷中写入文件

创建测试文件

[root@localhost ~]# dd if=/dev/zero of=/root/demo1.log bs=1M count=43
[root@localhost ~]# dd if=/dev/zero of=/root/demo2.log bs=1M count=43
[root@localhost ~]# dd if=/dev/zero of=/root/demo3.log bs=1M count=43
[root@localhost ~]# dd if=/dev/zero of=/root/demo4.log bs=1M count=43
[root@localhost ~]# dd if=/dev/zero of=/root/demo5.log bs=1M count=43
[root@localhost ~]# dd if=/dev/zero of=/root/demo6.log bs=1M count=43
[root@localhost ~]# dd if=/dev/zero of=/root/demo7.log bs=1M count=43

把每个卷中写入文件

[root@localhost ~]# cp demo* /test/dist
[root@localhost ~]# cp demo* /test/rep
[root@localhost ~]# cp demo* /test/dist_and_rep
[root@localhost ~]# cp demo* /test/disp
[root@localhost ~]# cp demo* /test/dist_and_disp

查看文件分布

在node1和node2中查看分布式卷文件分布

这些文件存放的位置就是通过弹性HASH算法决定的

在101(node1)主机操作

[root@node1 ~]# ll -h /e6
总用量 173M
-rw-r--r--. 2 root root 43M 4月  17 22:06 demo1.log
-rw-r--r--. 2 root root 43M 4月  17 22:06 demo2.log
-rw-r--r--. 2 root root 43M 4月  17 22:06 demo3.log
-rw-r--r--. 2 root root 43M 4月  17 22:06 demo4.log

在102(node2)主机操作

[root@node2 ~]# ll -h /e6
总用量 216M
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo1
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo3
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo4
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo5
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo6
drwx------. 2 root root 16K 8月  19 15:24 lost+found
在node3和node4中查看复制卷文件分布

在103(node3)主机操作

[root@node3 ~]# ll /d5/
总用量 352332
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo1
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo2
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo3
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo4
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo5
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo6
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo7
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo8
drwx------. 2 root root    16384 8月  19 15:24 lost+found

在104(node4)主机操作

[root@node4 d5]# ll /d5
总用量 352336
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo1
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo2
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo3
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo4
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo5
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo6
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo7
-rw-r--r--. 2 root root 45088768 8月  19 17:00 demo8
drwx------. 2 root root    16384 8月  19 15:24 lost+found
在node1、node2、node3、node4中查看分布式复制卷文件分布

在101(node1)主机操作

[root@node1 e6]# ll -h /c4
总用量 130M
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo2
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo7
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo8
drwx------. 2 root root 16K 8月  19 15:24 lost+found

在102(node2)主机操作

[root@node2 ~]# ll -h /c4
总用量 130M
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo2
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo7
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo8
drwx------. 2 root root 16K 8月  19 15:24 lost+found

在103(node3)主机操作

[root@node3 ~]# ll -h /c4
总用量 216M
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo1
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo3
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo4
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo5
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo6
drwx------. 2 root root 16K 8月  19 15:24 lost+found

在104(node4)主机操作

[root@node4 d5]# ll -h /c4
总用量 216M
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo1
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo3
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo4
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo5
-rw-r--r--. 2 root root 43M 8月  19 17:00 demo6
drwx------. 2 root root 16K 8月  19 15:24 lost+found

数据都被创建了副本,案例完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2071581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

因http连接问题产生的生产事故

早上7点接到报警(有机器oom报警,且负载很高,运维看阿里云监控上的tcp链接),研发和运维小伙伴一起分析,因为怕影响线上客户,直接选择了服务回退(昨天)。 服务回退后&…

2024/08(二) 近期关于AI的阅读和理解[笔记]

## Multi Agent/Flow 最近团队在实验 flowise 的 Agentflows 设计,顺带看了现在市面多加解决方案,这两天偶尔看到蚂蚁CodeFuse团队开发的Mulit Agent框架开发思想, 所以将他们一起总结归纳下。 Agent Base:构建了四种基本的Agent…

【计算机三级-数据库技术】操作题大题(第1套)

46题 1 设要为某工厂设计一个数据库,需要记录如下信息(有下划线的信息可作为唯一标识): •产品有产品名、规格; •每种产品拥有多道加工工序,每道加工工序只适用于一种产品; •每道工序需要记…

【CAN总线测试】——CAN交互层测试

从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者,时光不负有心人。 目录 1.应用报文发送检查 2.周期型报文测试 3.信号使用位与未使用位默认值检查 4.突增负载测试 5.CheckSum测试 6.RollongCounter测试 1.应用报文发送检查 用例编…

四种常见的云攻击及其应对措施

随着云应用的快速发展,也吸引了众多潜在恶意人士的觊觎。企业用户往往习惯于使用联盟或VPN进行直接连接或通过合作伙伴进行连接。 现在,另一个能够攻击者提供访问级别的攻击媒介竟然是云服务供应商(CSP),这在以往是前所未有的。违规CSP有可能…

秒懂C++之set、map的封装

目录 红黑树的泛型编程 改变比较方式:仿函数 迭代器模拟实现 运算符重载 begin/end !/运算符重载 测试 const Find [ ] 运算符重载 全部代码 RBTree.h Mymap.h Myset.h test.cpp 红黑树的泛型编程 既然我们要实现set,map的封装那肯定要用到我们前面所学…

LLaMa系列模型详解(原理介绍、代码解读):LLaMa_llama模型

LLaMA详解 LLaMA(Large Language Model Meta AI)是由Meta(前身为Facebook)开发的一种大规模语言模型,旨在提高自然语言处理(NLP)任务的性能。LLaMA基于变换器(Transformer&#xff…

只需5分钟!手把手教你安装StableDiffusion,开启AI图像生成新纪元

在这个数字化时代,人工智能(AI)技术已经深入到我们生活的每一个角落。 特别是在图像生成领域,AI技术的应用不仅极大地提高了创作效率,更开启了艺术创作的新纪元。 今天,我们将聚焦于StableDiffusion这一先…

【数据结构】关于二叉搜索树,你知道如何实现增删模拟吗???(超详解)

前言: 🌟🌟Hello家人们,这期讲解二叉搜索树内部实现基础功能模拟,希望能帮到屏幕前的你。 🌈上期博客在这里:http://t.csdnimg.cn/rfYFW 🌈感兴趣的小伙伴看一看小编主页&#xff1a…

从需求到交付:动态敏捷如何确保每一行代码都物超所值

动态敏捷方法论在软件开发中的应用 在当今快速变化的商业环境中,软件开发团队面临着不断变化的需求和市场挑战。传统的瀑布式开发模型已无法满足现代软件开发的灵活性和响应速度需求。动态敏捷(Dynamic Agility)作为一种新兴的开发方法论&…

introsort的快排跑排序OJ代码

introsort的快排跑排序OJ代码 introsort是introspective sort采⽤了缩写,他的名字其实表达了他的实现思路,他的思路就是进⾏⾃ 我侦测和反省,快排递归深度太深(sgi stl中使⽤的是深度为2倍排序元素数量的对数值)那就说…

《黑神话:悟空》在未来市场的应用与代码案例分析

作者主页: 知孤云出岫 目录 作者主页:**《黑神话:悟空》在未来市场的应用与代码案例分析****一、引言****二、市场应用场景分析****1. 数据驱动的市场决策****2. 游戏内经济系统的智能优化****3. 个性化推荐系统与用户体验提升** **三、市场推广与用户扩展策略***…

十一:C语言-操作符详解

1.了解二进制 其实二进制;八进制;十进制和十六进制都是数值的不同表示形式而已 二进制:基数为2,由0和1两个数字组成,逢2进1。八进制:基数为8,由0~7八个数字组成,逢8进1。十进制&am…

猫头虎 分享:Python库 SymPy 的简介、安装、用法详解入门教程 ‍

猫头虎 分享:Python库 SymPy 的简介、安装、用法详解入门教程 🐱‍👤 今天猫头虎带您 深入了解 Python库 SymPy,这是一个强大且广泛应用于符号数学计算的库。最近有粉丝问猫哥:如何利用 SymPy 进行数学公式的符号化处…

【Maps JavaScript API】基础地图的创建与实现详解

文章目录 一、概述1. Google Maps JavaScript API 简介2. Simple Map 示例概述 二、创建一个基础地图1. 引入 Google Maps JavaScript API2. 初始化地图(1) 定义地图的 HTML 容器(2) 编写 JavaScript 代码初始化地图 3. 将地图集成到网页中 三、代码分析与关键点1. 地图中心点的…

32 增加系统调用(1)

系统调用在 数据手册中的描述 这是在 GDT 中的描述符 这个系统调用 segment selector 指向的时 内核的代码段。因为系统调用需要的权限比较高。 offset 指的时 在内核代码中的具体的函数的地址。

SQL Server 查询语句中,对索引列做CONVERT的影响

通常,在做SQL Server查询语句优化的时候,如果发现语句对索引列做了函数计算,都会建议改写,将计算的逻辑转移到筛选条件列上。但这种对索引列的计算,有时却会带来一些额外的好处。请看以下的例子: --测试数…

【Linux开发板pip安装库时报错解决】Error 28:No space left on device报错需要更换库的安装路径

之前在Linux开发板上尝试运行pytorch框架,但是需要安装torch和torchvision的库,很奇怪的是我按照之前pip3 install torch -i http://pypi.douban.com/simple --trusted-host pypi.douban.com的安装方式却出现了以下的报错: 系统报错提示说No …

R 语言学习教程,从入门到精通,R 绘图饼图(23)

1、R 绘图 条形图 条形图,也称为柱状图条形图,是一种以长方形的长度为变量的统计图表。 条形图可以是水平或垂直的,每个长方形可以有不同的颜色。 R 语言使用 barplot() 函数来创建条形图,格式如下: barplot(H,xlab,…

FastAPI+React18开发通用后台管理系统用户功能实战

最近开发了一个React18的后台管理系统,登录界面如下: 如果登录成功了则提示并跳转到首页: 点击注销按钮则提示退出系统成功: 没有登录就访问首页则提示请先登录。 这些功能是怎么实现的呢? 先看看登录功能使用…