Ceph 集群之三种存储模式的使用

1 块设备 RBD

通常来说 Ceph 的块存储会结合 K8S 提供存储,一般提供给 K8S 中的有状态服务,比如数据库主从,或者 redis 集群等等,给他们提供数据存储服务 ,所以他们的访问方式就是类似于我们的客户端可能是跑在 K8S 中的一个应用程序,然后这些客户端可以访问对象存储、文件存储、块存储,然后下面就连接到 Ceph 中去了,然后再通过 ceph 给他提供底层的数据存储服务

CRUSH Map 就是用来集群映射的,比如数据存放到那个 PG 中,而且这个 PG 的主 osd 也是通过 CRUSH 计算出来的,可能说刚才 osd1 是主,后面 osd1 挂了,这个时候就需要通过 CRUSH 来进行重新计算出新的 OSD 主节点

1.1 RBD 块设备介绍

RBD(RADOS Block Devices)即为块存储的一种,RBD 通过 librbd(ceph 库文件) 库与 OSD 进行交互,RBD 为 KVM 等虚拟化技术和云服务(如 OpenStack 和 CloudStack)提供高性能和无限可扩展性的存储后端,这些系统依赖于 libvirt 和 QEMU 实用程序与 RBD 进行集成,客户端基于 librbd 库即可将 RADOS 存储集群用作块设备。

使用 rbd 的存储池需要事先启用 rbd 功能并进行初始化。例如,下面的命令创建一个名为 myrbd1 的存储池,并在启用 rbd 功能后对其进行初始化,然后再创建镜像才可以使用:

1.1.1 创建 RBD

一般我们在公司中创建一个块存储都是提供给一个项目使用

1.创建存储池:

[16:19:49 ceph@ceph-deploy ceph-cluster]$ceph osd pool create myrbd1 64 64
pool 'myrbd1' created                   # 创建成功

# 创建存储池,指定 pg 和 pgp 的数量,pgp 是对存在于 pg 的数据进行组合存储,pgp 通常等于 pg 的值
# 这里的 pg 和 pgp 都是 64 

2.对存储启动 RBD 功能

如果不启动 rbd 功能的话该块存储没法使用

[16:42:51 ceph@ceph-deploy ceph-cluster]$ceph osd pool application enable myrbd1 rbd
enabled application 'rbd' on pool 'myrbd1'  # 开启功能

3.初始化块存储池

[16:48:23 ceph@ceph-deploy ceph-cluster]$rbd pool init -p myrbd1
# -p myrbd1 指定初始化的块存储为刚才开启 rbd 功能的 myrbd1

但是当我们创建好了块存储之后还不能够直接被使用,因为这个块存储不能直接被挂载,我们的客户端想使用的话肯定需要将 ceph 的块存储挂在过去,还需要对这个块存储创建一个镜像,客户端才能够实现挂载

1.1.2 创建并验证 img:

不过,rbd 存储池并不能直接用于块设备,而是需要事先在其中按需创建映像(image),并把映像文件作为块设备使用,rbd 命令可用于创建、查看及删除块设备在的映像(image),以及克隆映像、创建快照、将映像回滚到快照和查看快照等管理操作,例如,

1.创建 image

下面的命令能够创建一个名为 myimg1 的 image ,并且将它映射到 myrbd1 的块存储使用

[16:48:57 ceph@ceph-deploy ceph-cluster]$rbd create myimg1 --size 5G


# 创建 myimg1 的 image 大小 5G 指定映射到 myrbd1 块存储使用,创建的 image 一般都是根据公司中的需求来实现

其实一个数据库一般也就会分配几十个 G 就差不多了

注意:

创建好了 image 之后还需要内核支持,并不是所有的机器都能被挂载,如上操作在创建 image1 的时候没有指定格式,就会使用 image 默认格式创建,当然我们在创建的时候也可以指定自己想要的 image 格式如下操作:

2.通过自定义格式创建 myimg2,也提供给 myrbd1 块存储

# 后续步骤会使用 myimg2 ,由于 centos 系统内核较低无法挂载使用,因此只开启部分特性。除了 layering 其他特性需要高版本内核支持
[16:56:07 ceph@ceph-deploy ceph-cluster]$rbd --pool myrbd1 --image-format 2 --image-feature layering

# --image-format 2        :镜像格式为 2 
# --image-feature layering:镜像特性为 layering

3.查看 myrbd1 块存储中的 image

[17:04:20 ceph@ceph-deploy ceph-cluster]$rbd ls --pool myrbd1
myimg1
myimg2

# 现在 myrbd1 块存储中有两个 image 分别是 myimg1、myimg2

4.查看 myimg1 镜像详细信息

[17:09:29 ceph@ceph-deploy ceph-cluster]$rbd --image myimg1 --pool myrbd1 info
rbd image 'myimg1':
    size 5 GiB in 1280 objects      # 该镜像总大小 5G 被切分为了 1280 个对象
    order 22 (4 MiB objects)        # 指定每个对象为大小为 4M 也就是默认值,通过 2 的22 次方进行计算
    snapshot_count: 0               # 当前没有快照
    id: 86498b22ad64
    block_name_prefix: rbd_data.86498b22ad64    # 存储的块对象会添加前缀 rbd_data.
    format: 2                       # 镜像格式为 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten # 镜像特性,默认 layering, exclusive-lock, object-map, fast-diff, deep-flatten 这么多
    op_features:
    flags:
    create_timestamp: Thu Aug 26 16:56:03 2021 # 创建时间
    access_timestamp: Thu Aug 26 16:56:03 2021 # 访问时间
    modify_timestamp: Thu Aug 26 16:56:03 2021 # 修改时间

# --image myimg1:指定镜像 myimg1 
# --pool myrbd1 :指定 myimg1 镜像所在的 myrbd1 存储池
# info          : 查看详细信息

5.查看 myimg2 镜像信息

[17:11:49 ceph@ceph-deploy ceph-cluster]$rbd --image myimg2 --pool myrbd1 info
rbd image 'myimg2':
    size 3 GiB in 768 objects           # 总大小 3G 分为 768 对象
    order 22 (4 MiB objects)            # 每个对象默认大小 4M
    snapshot_count: 0                   # 没有快照
    id: d38257e44fdd                    
    block_name_prefix: rbd_data.d38257e44fdd    # 存储对象数据前缀
    format: 2                           # 镜像格式 2 
    features: layering                  # 镜像特征,由于在创建的时候只指定了 layering
    op_features:                        
    flags:
    create_timestamp: Thu Aug 26 17:04:16 2021  # 创建时间
    access_timestamp: Thu Aug 26 17:04:16 2021  # 访问时间
    modify_timestamp: Thu Aug 26 17:04:16 2021  # 修改时间

6.查看当前 ceph 磁盘空间状态

# ceph df 和 服务器上使用的 df 命令类似
[17:18:32 ceph@ceph-deploy ceph-cluster]$ceph df
--- RAW STORAGE ---                     # ceph 原生数据
#磁盘     总空间    可用空间   已使用  总使用
CLASS     SIZE    AVAIL     USED  RAW USED  %RAW USED
hdd    1.6 TiB  1.6 TiB  149 MiB   149 MiB          0
# 总数使用情况
TOTAL  1.6 TiB  1.6 TiB  149 MiB   149 MiB          0

--- POOLS ---                           # pool 存储池的数据
POOL                   ID  PGS  STORED  OBJECTS    USED  %USED  MAX AVAIL
device_health_metrics   1    1     0 B        0     0 B      0    507 GiB
32                      2   32     0 B        0     0 B      0    507 GiB
mypool                  3   32     0 B        0     0 B      0    507 GiB
myrbd1                  4   64   405 B        7  48 KiB      0    507 GiB

1.1.3 客户端使用 rbd 存储

客户端无论是什么操作系统在使用 rbd 存储的时候需要提前安装 ceph-common

1.1.3.1 centos 挂载演示

1.1.3.1.1 客户端安装 ceph-common

客户端服务器配置 yum 源及 ceph 认证文件,在下载 ceph-common 工具

# 安装 epel 
[17:26:47 root@server ~]#yum install epel-release.noarch -y
1.1.3.1.2 客户端授权

拷贝 ceph 服务器同步认证文件,在公司一般都是使用普通用户授权,这里我演示使用 admin 授权

这个认证文件是允许客户端连接至我们的 ceph-mon 服务器,如果没有这个认证文件的话客户端找不到 mon 服务器,数据就写不进去,因为需要在 mon 服务器中进行运算,来请求我们的 pool 中的pg

# ceph-deploy 节点操作

# 查看 ceph.client.admin.keyring 是让客户端能够使用 admin 用户
[17:56:40 ceph@ceph-deploy ceph-cluster]$cat ceph.client.admin.keyring
[client.admin]
    key = AQC/hB9hmcMEHBAAbRGwWgJQ+OXacHEPvTM6BA==  # 这个是 admin 用户的 key 
    caps mds = "allow *"
    caps mgr = "allow *"
    caps mon = "allow *"
    caps osd = "allow *"
    
# 将认证文件和配置拷贝至客户端/etc/ceph/,告诉客户端到那个节点上进行认证
[17:55:00 ceph@ceph-deploy ceph-cluster]$sudo scp ceph.conf ceph.client.admin.keyring 10.0.0.30:/etc/ceph/

客户端验证授权成功

# 客户端操作

# 在客户端执行 ceph -s 也能够看到 ceph 集群信息
[17:55:24 root@server ~]#ceph -s
  cluster:
    id:     14ce1d1a-3323-4337-963a-f96484ddd363
    health: HEALTH_WARN
            clock skew detected on mon.ceph-mon2, mon.ceph-mon3

  services:
    mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 2h)
    mgr: ceph-mgr2(active, since 8h), standbys: ceph-mgr1
    osd: 16 osds: 16 up (since 8h), 16 in (since 5d)

  data:
    pools:   4 pools, 129 pgs
    objects: 7 objects, 405 B
    usage:   149 MiB used, 1.6 TiB / 1.6 TiB avail
    pgs:     129 active+clean
1.1.3.1.3 客户端映射 img
# 这里我映射的存储池是 myrbd1 ,并且映射当前存储池中的 myimg2 镜像
[17:58:55 root@server ~]#rbd -p myrbd1 map myimg2
/dev/rbd0

假如我这里映射 myimg1 的话就会报错

[18:07:24 root@server ~]#rbd -p myrbd1 map myimg1
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable myrbd1/myimg1 object-map fast-diff deep-flatten".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address

# 报错为功能不匹配,也就是当前 centos7 的内核不支持,当然我们可以关闭对应功能来实现映射
1.1.3.1.4 客户端验证 RBD
# 通过查看 rbd0 已经映射过来了
[18:06:39 root@server ~]#lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  100G  0 disk
├─sda1   8:1    0    2G  0 part /boot
└─sda2   8:2    0   90G  0 part /
sr0     11:0    1  9.6G  0 rom
rbd0   253:0    0    3G  0 disk # 存储为 3G

# 通过 fdisk -l 查看
[18:06:44 root@server ~]#fdisk -l

Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a0538

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     4196351     2097152   83  Linux
/dev/sda2         4196352   192940031    94371840   83  Linux

Disk /dev/rbd0: 3221 MB, 3221225472 bytes, 6291456 sectors  # 映射过来大小为 3G 因为我们在创建的时候这个镜像大小就是 3g
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4194304 bytes / 4194304 bytes
1.1.3.1.5 客户端格式化磁盘并挂载使用

在使用挂载之前我们需要先将该 ceph 提供的映射磁盘格式化

  1. 格式化磁盘

# 这里我格式化为 xfs 格式,ext4 格式也支持
[18:11:08 root@server ~]#mkfs.xfs /dev/rbd0
meta-data=/dev/rbd0              isize=512    agcount=8, agsize=98304 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=786432, imaxpct=25
         =                       sunit=1024   swidth=1024 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
  1. 挂载磁盘

# 挂载至 /mnt/
[18:14:15 root@server ~]#mount /dev/rbd0 /mnt/

# 通过查看实现挂载
[18:15:31 root@server ~]#df | grep rbd0
/dev/rbd0        3135488   33184   3102304   2% /mnt
1.1.3.1.6 客户端验证

挂载完之后我们验证是否能够成功写入数据

# 写入 /mnt/test.txt 写入成功
[18:18:11 root@server ~]#echo "test mount client" >  /mnt/test.txt

2 ceph radosgw(RGW)对象存储

对象存储必须结合开发来进行使用

RGW 提供的是 REST API 接口,客户端通过 http 与其进行交互,客户端既不用挂载也不用格式,完成数据的增删改查等管理操作。

radosgw 用在需要使用 RESTful API 接口访问 ceph 数据的场合,因此在使用 RBD 即块存储得场景或者使用 cephFS 的场合可以不用启用 radosgw 功能。

也就是说我们在使用什么存储类型需要结合当前场景来进行选择

2.1 部署 radosgw 服务

如果是在使用 radosgw 的场合,则以下命令将 ceph-mgr1 服务器部署为 RGW 主机:

  1. 在 mgr1 节点上安装 radosgw

    root@ceph-mgr1:~# apt install radosgw -y

  1. 在 deploy 节点启用 radosgw

    [18:30:32 ceph@ceph-deploy ceph-cluster]$ceph-deploy --overwrite-conf rgw create ceph-mgr1
    
    # --overwrite-conf :覆盖配置文件 
    # rgw              :开启 rgw 服务
    # create ceph-mgr1 :开启 rgw 服务器为 create ceph-mgr1

 

2.2 验证 radosgw 服务

启动 radosgw 服务之后默认会在 mgr 服务上监听 7480 端口

# 查看是否开启 radosgw 进程
root@ceph-mgr1:~# ps aux | grep radosgw
ceph       3097  0.4  2.8 6277240 57668 ?       Ssl  18:43   0:01 /usr/bin/radosgw -f --cluster ceph --name client.rgw.ceph-mgr1 --setuser ceph --setgroup ceph

# 查看 7480 已被 ceph 监听
root@ceph-mgr1:~# lsof -i:7480
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
radosgw 3097 ceph   74u  IPv4  84788      0t0  TCP *:7480 (LISTEN)
radosgw 3097 ceph   75u  IPv6  84790      0t0  TCP *:7480 (LISTEN)

通过浏览器访问,我们会发现他并不是直接显示数据,而是需要开发编写一个第三方程序进行访问,其实就和 阿里云的 oss 存储差不多一个意思

2.3 验证 radosgw 存储池

初始化完成 radosgw 之后,会初始化默认的存储池如下

[21:51:43 ceph@ceph-deploy ~]$ ceph osd pool ls
device_health_metrics
32
mypool
myrbd1
.rgw.root                   # rgw 默认存储
default.rgw.log             # rgw 默认存储
default.rgw.control         # rgw 默认存储
default.rgw.meta            # rgw 默认存储

3 ceph-FS 文件存储

https://docs.ceph.com/en/latest/cephfs/

Ceph FS 即 ceph filesystem,可以实现文件系统共享功能,客户端通过 ceph 协议挂载并使用 ceph 集群作为数据存储服务器。这个 Ceph 协议挂载需要内核版本大于 2.6.34

一个 ceph-FS 可以同时被多个客户端挂载,而且多个客户端对共享数据进行变更会立即在其他的节点上进行同步,所以特别适合这种多 web 服务之间的数据共享

3.1 Ceph-FS 使用场景

Ceph-FS 在公司中使用较多,其使用效果如 NFS 类似,主要用于做多服务之间的数据共享,比如动静分离的场景如 NGINX ,写的话一般都是由动态服务进行写入,如 php、java、go 这些程序将数据写入到 ceph 中,读取的话再交给 nginx 读取,所以这时候就会出现同一个存储会被多个服务同时挂载,而且任何节点对数据产生的变更又得需要 Ceph 实时的将变更数据进行同步。这种情况下我们就会使用 Ceph-FS,就类似于 NFS 来做数据共享一样。

3.2 Ceph-FS 介绍

Ceph-FS 运行的话需要两个运行存储池:

  1. Meta Data Services(MDS) 元数据服务:

    • 其守护进程为 Ceph-MDS

    • 用于存储客户端读写数据时需要使用到的元数据,包括文件属性,文件大小等信息

    • Ceph-mds 进程管理与 Ceph-FS 上存储的文件相关元数据,并协调对 Ceph 存储集群的访问

    • ceph-mds 需要一个单独存储池,所以我们还需要单独给他创建 mate data pool

    • MDS 在生产中使用一定要采用高可用的模式,如果有一个 mds 挂掉了,整个 Ceph-FS 就不能使用

  2. Ceph-Data 数据池:

    • 用来上传、保存客户端往 Ceph-FS 上写入的数据

当然底层数据还是存储分为 3 副本,所以我们需要现在一个服务器上启用 Ceph-MDS

3.3 ceph-fs 安装

3.3.1 部署 MDS 服务

这里我将 mds 服务安装在 mgr1 节点上,mgr 和 mon 节点可复用当然你也可以单独安装

1.在 mgr1 节点安装 mds

# 查看 mds 版本,安装和 ceph-deploy 一样的版本
root@ceph-mgr1:~# apt-cache madison ceph-mds
  ceph-mds | 16.2.5-1bionic | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic/main amd64 Packages

# 这里指定安装 16.2.5-1bionic 版本
root@ceph-mgr1:~# apt install ceph-mds=16.2.5-1bionic -y

2.在 deploy 节点将 mds 添加至集群中

# 进入 /home/ceph/ceph-cluster/
[21:52:25 ceph@ceph-deploy ~]$cd /home/ceph/ceph-cluster/

# 添加至集群
[22:24:11 ceph@ceph-deploy ceph-cluster]$ceph-deploy mds create ceph-mgr1

3.3.2 验证 MDS 服务

将 mds 服务添加至集群中还不能使用,需要创建 mds 存储池,用于保存 mds 的数据信息

# 通过 ceph mds stat 验证 mds 状态
[22:26:26 ceph@ceph-deploy ceph-cluster]$ceph mds stat
 1 up:standby                           # 当前为备用状态,需要分配 pool 才可以使用。

3.3.3 创建 CephFS metadata data 存储池

使用 CephFS 之前需要事先于集群中创建一个文件系统,并为其分别指定元数据和数据相关的存储池,如下命令将创建名为 mycephfs 的文件系统,它使用 cephfs-metadata 作为元数据存储池,使用 cephfs-data 为数据存储池:(这里的元数据存储池名称和数据存储池名称都是为了方便理解才这么写的,当然在工作都是对应到项目名称来创建)

注意:

元数据的存储池 pg 不用太多,一般数据要是有几个 T 的话这个元数据可能只有几个 G 就够了,元数据存储池只存放写入数据的信息、权限、文件大小的而非数据本身

1.创建元数据存储池

 # 这里给 cephfs-metadata 这个元数据存储池分配 16 个 pg 和 pgp
 [22:26:51 ceph@ceph-deploy ceph-cluster]$ceph osd pool create cephfs-metadata 16 16
pool 'cephfs-metadata' created

# ceph osd pool create:创建存储池
# cephfs-metadata     :存储池名称
# 16 16               : 使用的 pg 和 pgp 数量

2.创建数据存储池

# cephfs-data 给数据存储分配 pg 和 pgp 64 个
[22:34:36 ceph@ceph-deploy ceph-cluster]$ceph osd pool create cephfs-data 64 64
pool 'cephfs-data' created

但是现在这两个存储池并没有使用上,这个时候就需要创建 Ceph-fs

3.3.4 创建 Ceph-fs 并验证

创建 Ceph-fs 命令如下:

ceph fs new <fs_name> <metadata> <data> [--force] [--allow-dangerous-metadata-overlay]            make new filesystem using named pools <metadata> and <data>

# <fs_name>     :创建 ceph-fs 名称
# <metadata>    :元数据存储池
# <data>        :数据存储池
# [--force]     :是否强制创建
# [--allow-dangerous-metadata-overlay]  :创建之后元数据存储池后期是否对数据进行校验

1.创建 Ceph-fs

[22:36:37 ceph@ceph-deploy ceph-cluster]$ceph fs new mycephfs cephfs-metadata cephfs-data
new fs with metadata pool 9 and data pool 10

# mycephfs          :我们创建的 ceph-fs 名称
# cephfs-metadata   :使用的元数据存储池
# cephfs-data       :使用的本身数据存储池

2.创建完了之后通过ceph -s 查看

[22:44:24 ceph@ceph-deploy ceph-cluster]$ceph -s
  cluster:
    id:     14ce1d1a-3323-4337-963a-f96484ddd363
    health: HEALTH_WARN
            clock skew detected on mon.ceph-mon2

  services:
    mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 58m)
    mgr: ceph-mgr1(active, since 58m), standbys: ceph-mgr2
    mds: 1/1 daemons up             # 提示有一个 mds 服务状态为 up
    osd: 16 osds: 16 up (since 58m), 16 in (since 5d)
    rgw: 1 daemon active (1 hosts, 1 zones)

  data:
    volumes: 1/1 healthy
    pools:   10 pools, 313 pgs
    objects: 230 objects, 14 MiB
    usage:   287 MiB used, 1.6 TiB / 1.6 TiB avail
    pgs:     313 active+clean

3.查看 mds 状态

[22:44:42 ceph@ceph-deploy ceph-cluster]$ceph mds stat
mycephfs:1 {0=ceph-mgr1=up:active}

# mycephfs:1 {0=ceph-mgr1=up:active} 当提示有 active 状态,那么这个时候后端就可以实现挂载

4.查看创建好之后的 ceph-fs 状态信息

# ceph fs status mycephfs 指定查看 mycephfs 信息
[22:46:11 ceph@ceph-deploy ceph-cluster]$ceph fs status mycephfs
mycephfs - 0 clients
========
RANK  STATE      MDS        ACTIVITY     DNS    INOS   DIRS   CAPS
 0    active  ceph-mgr1  Reqs:    0 /s    10     13     12      0
      POOL         TYPE     USED  AVAIL
cephfs-metadata  metadata  96.0k   506G
  cephfs-data      data       0    506G
MDS version: ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)

3.4 客户端挂载 CephFS

挂载时首先需要在客户端拿到我们的 ceph 集群权限,这里我演示使用 admin,后期会演示普通用户,而且需要指定 mon 节点的 6789 端口,因为 mon 节点是用来认证的,这个 6789 端口就是对外提供的一个挂载点

1.在客户端创建 /data/nginx ,用来共享 nginx 的静态数据

[23:00:33 root@server ~]#mkdir /data/nginx  -p

2.客户端挂载

#ubuntu 及 centos client 挂载(内核版本 2.6.34 在 3.6.34 及以上):

[23:00:38 root@server ~]#mount -t ceph 10.0.0.102:6789:/ /data/nginx -o name=admin,secret=AQC/hB9hmcMEHBAAbRGwWgJQ+OXacHEPvTM6BA==

# -t ceph 挂载类型为 ceph
# 10.0.0.102:6789 这个 ip 必须写 mon 节点中的任何一个 ip 即可,挂载端口为 6789
# /data/nginx   :挂载至客户端的 /data/nginx  目录
# -o name=admin :指定挂载用户为 admin
# secret=AQC/hB9hmcMEHBAAbRGwWgJQ+OXacHEPvTM6BA==   :admin 用户的 secret

3.通过 df 命令验证已经挂载

[23:04:31 root@server ~]#df -Th | grep /data
10.0.0.102:6789:/ ceph      507G     0  507G   0% /data/nginx

3.4.1 客户端验证挂载数据是否同步

挂载好了之后可以安装一个 nginx 来实现对数据的共享,这里我演示的是在两个客户端之间实现共享

1.在 server 客户端上安装 nginx 并修改 nginx 配置 rootdir 目录

[23:09:33 root@server ~]#yum install epel-release.noarch -y
[23:06:22 root@server ~]#yum install nginx -y

# 修改 nginx 配置
[23:12:24 root@server ~]#vim /etc/nginx/nginx.conf
    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /data/nginx/;      # 修改默认的 rootdir 文件路径
        
[23:13:38 root@server ~]#systemctl start nginx

2.再将 ceph-fs 挂载至 go 客户端

[23:11:17 root@go ~]#mkdir /data/nginx  -p

[23:11:23 root@go ~]#mount -t ceph 10.0.0.102:6789:/ /data/nginx -o name=admin,secret=AQC/hB9hmcMEHBAAbRGwWgJQ+OXacHEPvTM6BA==

[23:11:28 root@go ~]#df -Th| grep data
10.0.0.102:6789:/ ceph      507G     0  507G   0% /data/nginx

3.在 go 客户端上对 /data/nginx 目录中写入数据

[23:15:18 root@go ~]#echo "i am  go go go" > /data/nginx/index.html

4.浏览器访问 10.0.0.30

从而实现了数据的共享,如果这时候前端有多个 nginx 或者其他的 web 服务,我们就可以通过这种共享数据的方式,将数据进行共享

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇