时间:2020-10-29来源:www.pcxitongcheng.com作者:电脑系统城
主机名 | 角色 | IP地址 |
---|---|---|
ceph-admin | ceph-deploy | 192.168.92.21 |
ceph-node1 | mon、mgr、osd | 192.168.92.22 |
ceph-node2 | mon、mgr、osd | 192.168.92.23 |
ceph-node3 | mon、mgr、osd | 192.168.92.24 |
对所有机器配置 epel 仓库、基础软件包仓库、ceph 软件包仓库,所有的镜像仓库地址可到阿里云开源镜像站中查找,地址:https://developer.aliyun.com/mirror/,配置步骤如下:
Copy
wget http://mirrors.aliyun.com/repo/epel-7.repo -O /etc/yum.repos.d/epel-7.repo
Copy
wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS7-Base-ali.repo |
|
sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-ali.repo |
Copy
cat >> /etc/yum.repos.d/ceph.repo << EOF |
|
[noarch] |
|
name=ceph-noarch |
|
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/ |
|
enable=1 |
|
gpgcheck=0 |
|
[ceph] |
|
name=ceph |
|
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/ |
|
enable=1 |
|
gpgcheck=0 |
|
EOF |
为了保证 ceph 集群 mon 组件通信正常,需要对每个节点的时间进行同步,这里对管理节点和 osd 节点进行时间同步,首先在所有服务器中安装 chrony 用于系统时间同步,步骤如下:
安装 chrony 服务
Copy
yum -y install chrony
设置系统时区
Copy
timedatectl set-timezone Asia/Shanghai
设置系统时钟同步,输出以下内容代表同步正常
Copy
[root@ceph-admin ~]# systemctl enable chronyd && systemctl start chronyd |
|
[root@ceph-admin ~]# timedatectl status |
|
Local time: 一 2020-07-27 14:52:14 CST |
|
Universal time: 一 2020-07-27 06:52:14 UTC |
|
RTC time: 一 2020-07-27 06:52:15 |
|
Time zone: Asia/Shanghai (CST, +0800) |
|
NTP enabled: yes |
|
NTP synchronized: yes |
|
RTC in local TZ: no |
|
DST active: n/a |
将当前的 UTC 时间写入硬件时钟,并重启依赖于系统时间的服务
Copy
timedatectl set-local-rtc 0 |
|
systemctl restart rsyslog && systemctl restart crond |
使用 ceph-deploy 部署集群时,需要通过主机名来查找主机 IP 地址,所以要在本地 hosts 文件中配置地址解析:
Copy
cat >> /etc/hosts << EOF |
|
192.168.92.21 ceph-admin |
|
192.168.92.22 ceph-node1 |
|
192.168.92.23 ceph-node2 |
|
192.168.92.24 ceph-node3 |
|
EOF |
闭系统防火墙并禁止开机启动,清理防火墙规则并设置默认转发策略
Copy
systemctl stop firewalld.service && systemctl disable firewalld.service |
|
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat |
|
iptables -P FORWARD ACCEPT |
永久关闭selinux
Copy
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
在 ceph-admin 节点执行 ceph-deploy 命令时,需要通过 ssh 方式连接到各个 osd 节点中运行指令,所以需要配置 ceph-admin 节点到其他 osd 节点的 ssh 免密认证(以下操作只需要在 ceph-admin 节点中进行),需要注意的是,如果需要非 root 用户部署 ceph 集群,需要针对该用户配置免密认证:
在各个机器上生成密钥对
Copy
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''
将各节点的主机信息(host key)写入control_node的~/.ssh/known_hosts文件
Copy
for host in 192.168.92.{21..24} ceph-admin ceph-node{1..3}; do ssh-keyscan $host >>~/.ssh/known_hosts 2>/dev/null; done
将公钥分发给各个机器(需提前安装 sshpass)
Copy
for host in ceph-admin ceph-node{1..3}; do sshpass -p'123456' ssh-copy-id root@$host &>/dev/null; done
ceph-deploy 工具只需要安装在 ceph-admin 节点中,命令如下:
Copy
yum -y install python-setuptools ceph-deploy ceph
安装 ceph 包的目的是为了以后能在 ceph-admin 节点中查看 ceph 集群的状态
在 ceph-admin 节点中创建集群的工作目录,该目录中会存放 ceph-deploy 执行指令时生成的日志和秘钥信息等:
Copy
mkdir -p /opt/ops-ceph-cluster
在 ceph-admin 节点上进入 /opt/ops-ceph-cluster 目录下,执行 ceph-deploy 命令初始化集群设置,初始化要求指定节点作为 mon,命令如下:
Copy
ceph-deploy new --public-network 192.168.92.0/24 --cluster-network 192.168.92.0/24 ceph-node1
--public-network 代表 ceph 集群对外提供调用的网络,--cluster-network 代表用于集群内部通信的网络。一般情况下 ceph 集群中需要有两个网络,这样可以保证 ceph 集群的安全性。由于此次搭建的环境中只有一个网络,所以此处两个配置项填写同一个网段的地址。
上面的命令执行完成后会将 ceph-node1 节点配置为 mon,并且会在 /opt/ops-ceph-cluster 目录下生成集群的配置文件、key 文件(用于身份验证)、日志文件等:
Copy
[root@ceph-admin ops-ceph-cluster]# ll |
|
总用量 12 |
|
-rw-r--r--. 1 root root 268 7月 27 14:58 ceph.conf |
|
-rw-r--r--. 1 root root 3248 7月 27 14:58 ceph-deploy-ceph.log |
|
-rw-------. 1 root root 73 7月 27 14:58 ceph.mon.keyring |
配置文件 ceph.conf 内容如下:
Copy
[root@ceph-admin ops-ceph-cluster]# cat ceph.conf |
|
[global] |
|
fsid = f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
public_network = 192.168.92.0/24 |
|
cluster_network = 192.168.92.0/24 |
|
mon_initial_members = ceph-node1 |
|
mon_host = 192.168.92.22 |
|
auth_cluster_required = cephx |
|
auth_service_required = cephx |
|
auth_client_required = cephx |
接下来需要在各个 osd 节点安装 ceph 组件包:
Copy
yum -y install ceph ceph-mon ceph-mgr ceph-mds ceph-radosgw
在初始化集群的过程中已经指定了 mon 的节点,现在需要对 mon 进行初始化,在 ceph-admin 节点的 /opt/ops-ceph-cluster 目录下执行如下命令进行初始化:
Copy
ceph-deploy mon create-initial
初始化完成后,会在当前目录下生成各个组件需要的 key 文件:
Copy
[root@ceph-admin ops-ceph-cluster]# ll |
|
总用量 44 |
|
-rw-------. 1 root root 113 7月 27 15:16 ceph.bootstrap-mds.keyring |
|
-rw-------. 1 root root 113 7月 27 15:16 ceph.bootstrap-mgr.keyring |
|
-rw-------. 1 root root 113 7月 27 15:16 ceph.bootstrap-osd.keyring |
|
-rw-------. 1 root root 113 7月 27 15:16 ceph.bootstrap-rgw.keyring |
|
-rw-------. 1 root root 151 7月 27 15:16 ceph.client.admin.keyring |
|
-rw-r--r--. 1 root root 268 7月 27 14:58 ceph.conf |
|
-rw-r--r--. 1 root root 16375 7月 27 15:16 ceph-deploy-ceph.log |
|
-rw-------. 1 root root 73 7月 27 14:58 ceph.mon.keyring |
接下来将 admin用户的 key 文件拷贝给各个 osd 节点,如果为了在 ceph-admin 节点中使用 ceph 命令查看集群状态,那么也需要将 key 文件拷贝给 ceph-admin 节点(ceph-admin节点需要安装 ceph 包)
Copy
ceph-deploy admin ceph-admin ceph-node1 ceph-node2 ceph-node3
拷贝完成后执行 ceph -s
命令可以查看到当前集群的状态:
Copy
[root@ceph-admin ops-ceph-cluster]# ceph -s |
|
cluster: |
|
id: f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
health: HEALTH_OK |
|
services: |
|
mon: 1 daemons, quorum ceph-node1 (age 7m) |
|
mgr: no daemons active |
|
osd: 0 osds: 0 up, 0 in |
|
data: |
|
pools: 0 pools, 0 pgs |
|
objects: 0 objects, 0 B |
|
usage: 0 B used, 0 B / 0 B avail |
|
pgs: |
可以看到当前集群中已经有一个 mon 节点。
配置 ceph-node1 节点作为 mgr,在 ceph-admin 节点的 /opt/ops-ceph-cluster 目录下执行如下命令:
Copy
ceph-deploy mgr create ceph-node1
查看集群状态,可以看到启动了一个 mgr daemon:
Copy
[root@ceph-admin ops-ceph-cluster]# ceph -s |
|
cluster: |
|
id: f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
health: HEALTH_WARN |
|
OSD count 0 < osd_pool_default_size 3 |
|
services: |
|
mon: 1 daemons, quorum ceph-node1 (age 11m) |
|
mgr: ceph-node1(active, since 33s) |
|
osd: 0 osds: 0 up, 0 in |
|
data: |
|
pools: 0 pools, 0 pgs |
|
objects: 0 objects, 0 B |
|
usage: 0 B used, 0 B / 0 B avail |
|
pgs: |
当前环境中,每个 OSD 节点都有两块磁盘 sdb 和 sdc,信息如下:
Copy
[root@ceph-node1 ~]# lsblk |
|
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT |
|
sda 8:0 0 100G 0 disk |
|
├─sda1 8:1 0 200M 0 part /boot |
|
└─sda2 8:2 0 99.8G 0 part |
|
├─centos-root 253:0 0 95.8G 0 lvm / |
|
└─centos-swap 253:1 0 4G 0 lvm [SWAP] |
|
sdb 8:16 0 20G 0 disk |
|
sdc 8:32 0 20G 0 disk |
|
sr0 11:0 1 4.4G 0 rom |
接下来将每个 OSD 节点中的 sdb 磁盘加入到 ceph 集群中,命令如下:
Copy
for host in 1 2 3 |
|
do |
|
ceph-deploy disk zap ceph-node${host} /dev/sdb |
|
ceph-deploy osd create ceph-node${host} --data /dev/sdb |
|
done |
ceph-deploy disk zap 命令用于将目标磁盘的分区表和内容擦除,实际上它是调用 /bin/dd if=/dev/zero of=/dev/sdb bs=1M count=10 conv=fsync 命令来销毁 GPT 和 MBR 。如果目标磁盘是未被分区的,可以不使用该命令
此时查看 ceph 集群的状态,可以看到有三个 OSD 已经被加入到集群中:
Copy
[root@ceph-admin ops-ceph-cluster]# ceph -s |
|
cluster: |
|
id: f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
health: HEALTH_OK |
|
services: |
|
mon: 1 daemons, quorum ceph-node1 (age 21m) |
|
mgr: ceph-node1(active, since 10m) |
|
osd: 3 osds: 3 up (since 2m), 3 in (since 2m) |
|
data: |
|
pools: 0 pools, 0 pgs |
|
objects: 0 objects, 0 B |
|
usage: 3.0 GiB used, 57 GiB / 60 GiB avail |
|
pgs: |
mon 和 mgr 是 ceph 集群中非常重要的组件,其中 mon 作为整个集群的控制中心,里面存放着集群的信息,所以需要确保 mon 和 mgr 处于高可用的状态,为了保证选举正常,节点数要为奇数。
首先将 ceph-node2 和 ceph-node3 扩容为 mon 节点:
Copy
ceph-deploy mon add ceph-node2 |
|
ceph-deploy mon add ceph-node3 |
扩容完成后查看集群状态:
Copy
[root@ceph-admin ops-ceph-cluster]# ceph -s |
|
cluster: |
|
id: f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
health: HEALTH_OK |
|
services: |
|
mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 27s) |
|
mgr: ceph-node1(active, since 15m) |
|
osd: 3 osds: 3 up (since 7m), 3 in (since 7m) |
|
data: |
|
pools: 0 pools, 0 pgs |
|
objects: 0 objects, 0 B |
|
usage: 3.0 GiB used, 57 GiB / 60 GiB avail |
|
pgs: |
集群信息中显示当前的 mon 节点已经为 3 个,使用如下命令查看 mon 节点的选举状态:
Copy
[root@ceph-admin ops-ceph-cluster]# ceph quorum_status --format json-pretty |
|
{ |
|
"election_epoch": 12, |
|
"quorum": [ |
|
0, |
|
1, |
|
2 |
|
], |
|
"quorum_names": [ |
|
"ceph-node1", |
|
"ceph-node2", |
|
"ceph-node3" |
|
], |
|
"quorum_leader_name": "ceph-node1", |
|
"quorum_age": 88, |
可以看到当前已经可以正常选举,leader 为 ceph-node1 节点上的 mon。也可以使用 ceph mon stat 命令查看 mon 的信息:
Copy
[root@ceph-admin ops-ceph-cluster]# ceph mon stat |
|
e3: 3 mons at {ceph-node1=[v2:192.168.92.22:3300/0,v1:192.168.92.22:6789/0],ceph-node2=[v2:192.168.92.23:3300/0,v1:192.168.92.23:6789/0],ceph-node3=[v2:192.168.92.24:3300/0,v1:192.168.92.24:6789/0]}, election epoch 12, leader 0 ceph-node1, quorum 0,1,2 ceph-node1,ceph-node2,ceph-node3 |
或者使用 ceph mon dump 命令查看详细的信息:
Copy
[root@ceph-admin ops-ceph-cluster]# ceph mon dump |
|
dumped monmap epoch 3 |
|
epoch 3 |
|
fsid f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
last_changed 2020-07-27 15:42:02.273752 |
|
created 2020-07-27 15:16:09.870184 |
|
min_mon_release 14 (nautilus) |
|
0: [v2:192.168.92.22:3300/0,v1:192.168.92.22:6789/0] mon.ceph-node1 |
|
1: [v2:192.168.92.23:3300/0,v1:192.168.92.23:6789/0] mon.ceph-node2 |
|
2: [v2:192.168.92.24:3300/0,v1:192.168.92.24:6789/0] mon.ceph-node3 |
接下来扩容 mgr 节点,命令如下:
Copy
ceph-deploy mgr create ceph-node2 ceph-node3
查看集群信息:
Copy
[root@ceph-admin ops-ceph-cluster]# ceph -s |
|
cluster: |
|
id: f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
health: HEALTH_OK |
|
services: |
|
mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 11m) |
|
mgr: ceph-node1(active, since 26m), standbys: ceph-node2, ceph-node3 |
|
osd: 3 osds: 3 up (since 18m), 3 in (since 18m) |
|
data: |
|
pools: 0 pools, 0 pgs |
|
objects: 0 objects, 0 B |
|
usage: 3.0 GiB used, 57 GiB / 60 GiB avail |
|
pgs: |
可以看到 mgr 变为 3 个节点,其中两个节点处于 standby 状态。
在 ceph-admin 节点中执行如下命令创建 pool:
Copy
ceph osd pool create ops-pool 64 64
第一个 64 代表设置的 pg 数量,第二个 64 代表设置的 pgp 数量
使用如下命令查看当前已有的 pool:
Copy
[root@ceph-admin ~]# ceph osd lspools |
|
1 ops-pool |
查看指定 pool 中的 pg 和 pgp 数量:
Copy
[root@ceph-admin ~]# ceph osd pool get ops-pool pg_num |
|
pg_num: 64 |
|
[root@ceph-admin ~]# ceph osd pool get ops-pool pgp_num |
|
pgp_num: 64 |
查看指定 pool 中的副本数(副本数默认为3):
Copy
[root@ceph-admin ~]# ceph osd pool get ops-pool size |
|
size: 3 |
查看指定 pool 的调度算法(默认为replicated_rule):
Copy
[root@ceph-admin ~]# ceph osd pool get ops-pool crush_rule |
|
crush_rule: replicated_rule |
调整指定 pool 的 pg 和 pgp 数量:
Copy
ceph osd pool set ops-pool pg_num 128 |
|
ceph osd pool set ops-pool pgp_num 128 |
调整指定 pool 的副本数:
Copy
ceph osd pool set ops-pool size 2
一般来说,创建 pool 后,需要对这个 pool 进行初始化,例如用于 rbd 块存储的 pool 使用 rbd pool init 命令就可以将指定 pool 初始化为 rbd 类型的 application。如果不进行这个初始化的操作,不会影响存储的使用,但是会在集群信息中显示报警信息。后面会对于该报警信息和解决办法进行说明。
使用如下命令创建一个块存储的 image:
Copy
rbd create -p ops-pool --image ops-rbd.img --size 5G
上面的命令也可以写为如下形式:
Copy
rbd create ops-pool/ops-rbd-1.img --size 5G
查看指定 pool 中的 image:
Copy
[root@ceph-admin ~]# rbd -p ops-pool ls |
|
ops-rbd-1.img |
|
ops-rbd.img |
查看指定 image 的信息:
Copy
[root@ceph-admin ~]# rbd info ops-pool/ops-rbd.img |
|
rbd image 'ops-rbd.img': |
|
size 5 GiB in 1280 objects |
|
order 22 (4 MiB objects) |
|
snapshot_count: 0 |
|
id: 11cd172302e2 |
|
block_name_prefix: rbd_data.11cd172302e2 |
|
format: 2 |
|
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten |
|
op_features: |
|
flags: |
|
create_timestamp: Mon Jul 27 16:36:25 2020 |
|
access_timestamp: Mon Jul 27 16:36:25 2020 |
|
modify_timestamp: Mon Jul 27 16:36:25 2020 |
其中 features 项中代表当前 rbd 中启用的一些内核特性,有些内核不支持启用这些特性,所以在挂载的 rbd 的时候会报错,后面的内容会说明如何禁用已启用的内核特性
删除 pool 中指定的 image:
Copy
rbd rm -p ops-pool --image ops-rbd-1.img
使用如下命令将 image 映射到当前机器上:
Copy
rbd map ops-pool/ops-rbd.img
执行命令后会看到有如下报错:
Copy
rbd: sysfs write failed |
|
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable ops-pool/ops-rbd.img 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 |
报错内容就是上面提到的,由于 rbd 默认启用了一些内核特性,而当前机器中的内核版本不支持这些内核特性,所以需要提前将这些特性给禁用掉,命令如下:
Copy
for i in deep-flatten fast-diff object-map exclusive-lock; do rbd feature disable ops-pool/ops-rbd.img ${i}; done
操作完成后重新执行上面的 map 命令即可完成映射,命令执行完成后可以看到已经将 ops-rbd.img 映射到本地的一个块设备名称:
Copy
[root@ceph-admin ~]# rbd map ops-pool/ops-rbd.img |
|
/dev/rbd0 |
通过如下命令可以查看到设备映射的信息:
Copy
[root@ceph-admin ~]# rbd device list |
|
id pool namespace image snap device |
|
0 ops-pool ops-rbd.img - /dev/rbd0 |
|
[root@ceph-admin ~]# fdisk -l | grep -A3 /dev/rbd0 |
|
磁盘 /dev/rbd0:5368 MB, 5368709120 字节,10485760 个扇区 |
|
Units = 扇区 of 1 * 512 = 512 bytes |
|
扇区大小(逻辑/物理):512 字节 / 512 字节 |
|
I/O 大小(最小/最佳):4194304 字节 / 4194304 字节 |
将 /dev/vdb0 格式化为 ext4,并挂载到 /media 目录下:
Copy
mkfs.ext4 /dev/rbd0 && mount /dev/rbd0 /media
此时就可以向该存储中写入数据:
Copy
[root@ceph-admin media]# echo "message" > testfile |
|
[root@ceph-admin media]# cat testfile |
|
message |
上面已经创建了一个大小为 5G 的块设备,如果需要给块设备进行扩容,例如扩大到 10G,可以使用如下命令:
Copy
rbd resize ops-pool/ops-rbd.img --size 10G
扩容完成后查看块设备的信息:
Copy
[root@ceph-admin ~]# rbd info ops-pool/ops-rbd.img |
|
rbd image 'ops-rbd.img': |
|
size 10 GiB in 2560 objects |
|
order 22 (4 MiB objects) |
|
snapshot_count: 0 |
|
id: 11cd172302e2 |
|
block_name_prefix: rbd_data.11cd172302e2 |
|
format: 2 |
|
features: layering |
|
op_features: |
|
flags: |
|
create_timestamp: Mon Jul 27 16:36:25 2020 |
|
access_timestamp: Mon Jul 27 16:36:25 2020 |
|
modify_timestamp: Mon Jul 27 16:36:25 2020 |
可以看到存储已经调整为 10G,但是查看挂载目录的大小还是 5G:
Copy
[root@ceph-admin ~]# df -Th /media |
|
文件系统 类型 容量 已用 可用 已用% 挂载点 |
|
/dev/rbd0 ext4 4.8G 20M 4.6G 1% /media |
所以需要使文件系统也识别到扩容的空间,这个存储设备使用的 ext4 格式,所以使用 resize2fs 命令即可完成识别:
Copy
resize2fs /dev/rbd0
然后再次查看文件系统大小如下:
Copy
[root@ceph-admin ~]# df -Th /media |
|
文件系统 类型 容量 已用 可用 已用% 挂载点 |
|
/dev/rbd0 ext4 9.8G 23M 9.3G 1% /media |
上面说到了如果没有对 pool 进行初始化,会触发告警信息,通过查看集群信息可以看到相应的告警:
Copy
[root@ceph-admin ~]# ceph -s |
|
cluster: |
|
id: f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
health: HEALTH_WARN |
|
application not enabled on 1 pool(s) |
可以看到在健康检查中告警"未在 pool 中启用 application"。使用如下命令可以查看到告警的详细信息:
Copy
[root@ceph-admin ~]# ceph health detail |
|
HEALTH_WARN application not enabled on 1 pool(s) |
|
POOL_APP_NOT_ENABLED application not enabled on 1 pool(s) |
|
application not enabled on pool 'ops-pool' |
|
use 'ceph osd pool application enable <pool-name> <app-name>', where <app-name> is 'cephfs', 'rbd', 'rgw', or freeform for custom applications. |
接下来使用告警信息中给出的命令来设置这个 pool 启用 application,并将类型设置为 rbd:
Copy
ceph osd pool application enable ops-pool rbd
此时再次查看集群状态信息,可以看到告警已经恢复,健康状态检查正常:
Copy
[root@ceph-admin ~]# ceph -s |
|
cluster: |
|
id: f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
health: HEALTH_OK |
通过如下命令可以查看到 pool 中已启用的 application:
Copy
[root@ceph-admin ~]# ceph osd pool application get ops-pool |
|
{ |
|
"rbd": {} |
|
} |
在 ceph-admin 节点中的 /opt/ops-ceph-cluster 目录下执行如下命令创建 RGW:
Copy
ceph-deploy rgw create ceph-node1
执行完成后查看集群信息,可以看到已经启用了一个 RGW:
Copy
[root@ceph-admin ops-ceph-cluster]# ceph -s |
|
cluster: |
|
id: f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
health: HEALTH_WARN |
|
application not enabled on 1 pool(s) |
|
services: |
|
mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 117m) |
|
mgr: ceph-node1(active, since 2h), standbys: ceph-node2, ceph-node3 |
|
osd: 3 osds: 3 up (since 2h), 3 in (since 2h) |
|
rgw: 1 daemon active (ceph-node1) |
|
task status: |
|
data: |
|
pools: 5 pools, 256 pgs |
|
objects: 240 objects, 143 MiB |
|
usage: 3.3 GiB used, 57 GiB / 60 GiB avail |
|
pgs: 256 active+clean |
在 ceph-node1 节点中查看 RGW 监听的端口(默认为 7480):
Copy
[root@ceph-node1 ~]# netstat -anplut | grep 7480 |
|
tcp 0 0 0.0.0.0:7480 0.0.0.0:* LISTEN 19986/radosgw |
|
tcp6 0 0 :::7480 :::* LISTEN 19986/radosgw |
首先更改 ceph-admin 节点中 /opt/ops-ceph-cluster 目录下 ceph.conf 文件的内容,添加如下配置:
Copy
[client.rgw.ceph-node1] |
|
rgw_frontends = "civetweb port=80" |
注意
[client.rgw.ceph-node1]
中要将 client.rgw. 后面的部分改为部署了 RGW 机器的主机名
文件修改完成后将配置文件 push 到其他 OSD 节点中去:
Copy
ceph-deploy --overwrite-conf config push ceph-admin ceph-node1 ceph-node2 ceph-node3
在 ceph-node1 节点中重启 RGW 服务:
Copy
systemctl restart ceph-radosgw.target
查看 RGW 服务当前监听的端口:
Copy
[root@ceph-node1 ~]# netstat -anplut | grep radosgw | grep LISTEN |
|
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 20929/radosgw |
创建的用户有两种,一种是兼容 S3 风格的,还有一种是 Swift 风格。
使用如下命令创建一个用于访问 S3 的用户:
Copy
radosgw-admin user create --uid ops-s3-user --display-name "Ops S3 User Demo"
命令执行后会输出如下结果:
Copy
{ |
|
"user_id": "ops-s3-user", |
|
"display_name": "Ops S3 User Demo", |
|
"email": "", |
|
"suspended": 0, |
|
"max_buckets": 1000, |
|
"subusers": [], |
|
"keys": [ |
|
{ |
|
"user": "ops-s3-user", |
|
"access_key": "JV54B80DTZ8VQ2P4IYD4", |
|
"secret_key": "GKURUiaXt2cf7B2O5cl7kmCvWWHDnAl7U6CGtPb2" |
|
} |
|
], |
|
"swift_keys": [], |
|
"caps": [], |
|
"op_mask": "read, write, delete", |
|
"default_placement": "", |
|
"default_storage_class": "", |
|
"placement_tags": [], |
|
"bucket_quota": { |
|
"enabled": false, |
|
"check_on_raw": false, |
|
"max_size": -1, |
|
"max_size_kb": 0, |
|
"max_objects": -1 |
|
}, |
|
"user_quota": { |
|
"enabled": false, |
|
"check_on_raw": false, |
|
"max_size": -1, |
|
"max_size_kb": 0, |
|
"max_objects": -1 |
|
}, |
|
"temp_url_keys": [], |
|
"type": "rgw", |
|
"mfa_ids": [] |
|
} |
上面的内容中显示了用户的 key 信息以及一些用户的配额信息。以上的信息也可以通过如下命令再次输出:
Copy
radosgw-admin user info --uid ops-s3-user
需要使用一个 python 程序来测试 s3 接口的访问,首先安装一个 python 包,名称为:python-boto:
Copy
yum -y install python-boto
创建一个名为 s3test.py 的文件,内容如下:
Copy
import boto.s3.connection |
|
access_key = 'JV54B80DTZ8VQ2P4IYD4' |
|
secret_key = 'GKURUiaXt2cf7B2O5cl7kmCvWWHDnAl7U6CGtPb2' |
|
conn = boto.connect_s3( |
|
aws_access_key_id=access_key, |
|
aws_secret_access_key=secret_key, |
|
host='192.168.92.22', port=80, |
|
is_secure=False, calling_format=boto.s3.connection.OrdinaryCallingFormat(), |
|
) |
|
bucket = conn.create_bucket('my-new-bucket') |
|
for bucket in conn.get_all_buckets(): |
|
print "{name} {created}".format( |
|
name=bucket.name, |
|
created=bucket.creation_date, |
|
) |
需要注意的是,要将程序中的 access_key 和 secret_key 修改为前面生成用户的相关信息。host 需要修改为 RGW 服务器的地址,port 修改为相应的端口。
执行这个 python 程序,会输出如下信息:
Copy
[root@ceph-admin ~]# python s3test.py |
|
my-new-bucket 2020-07-27T10:30:40.473Z |
这代表成功创建了一个 bucket。
在命令行中调用 s3 接口来管理对象存储,首先需要安装 s3cmd 软件包:
Copy
yum -y install s3cmd
安装完成后需要对 s3cmd 进行配置,配置过程如下:
Copy
[root@ceph-admin ~]# s3cmd --configure |
|
Enter new values or accept defaults in brackets with Enter. |
|
Refer to user manual for detailed description of all options. |
|
Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables. |
|
Access Key: JV54B80DTZ8VQ2P4IYD4 # 设置访问用户的 Access Key |
|
Secret Key: GKURUiaXt2cf7B2O5cl7kmCvWWHDnAl7U6CGtPb2 # 设置访问用户的 Secret Key |
|
Default Region [US]: |
|
Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3. |
|
S3 Endpoint [s3.amazonaws.com]: 192.168.92.22:80 # 设置 RWG 的地址和端口 |
|
Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used |
|
if the target S3 system supports dns based buckets. |
|
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: 192.168.92.22:80/%(bucket)s # 设置 bucket 的名称(可以将IP地址更换为域名) |
|
Encryption password is used to protect your files from reading |
|
by unauthorized persons while in transfer to S3 |
|
Encryption password: # 不设置密码 |
|
Path to GPG program [/usr/bin/gpg]: # 使用 gpg 加密 |
|
When using secure HTTPS protocol all communication with Amazon S3 |
|
servers is protected from 3rd party eavesdropping. This method is |
|
slower than plain HTTP, and can only be proxied with Python 2.7 or newer |
|
Use HTTPS protocol [Yes]: no # 不使用 HTTPS |
|
On some networks all internet access must go through a HTTP proxy. |
|
Try setting it here if you can't connect to S3 directly |
|
HTTP Proxy server name: # 不设置代理访问 |
|
New settings: |
|
Access Key: JV54B80DTZ8VQ2P4IYD4 |
|
Secret Key: GKURUiaXt2cf7B2O5cl7kmCvWWHDnAl7U6CGtPb2 |
|
Default Region: US |
|
S3 Endpoint: 192.168.92.22:80 |
|
DNS-style bucket+hostname:port template for accessing a bucket: 192.168.92.22:80/%(bucket)s |
|
Encryption password: |
|
Path to GPG program: /usr/bin/gpg |
|
Use HTTPS protocol: False |
|
HTTP Proxy server name: |
|
HTTP Proxy server port: 0 |
|
Test access with supplied credentials? [Y/n] y # 验证访问 |
|
Please wait, attempting to list all buckets... |
|
Success. Your access key and secret key worked fine :-) |
|
Now verifying that encryption works... |
|
Not configured. Never mind. |
|
Save settings? [y/N] y # 保存配置 |
|
Configuration saved to '/root/.s3cfg' |
|
配置完成后,配置文件存储在 /root/.s3cfg 文件中,需要将该文件中的 signature_v2 配置项改为 True,否则在后续执行命令的时候会触发 ERROR: S3 error: 403 (SignatureDoesNotMatch) 报错:
Copy
signature_v2 = True
保存退出后,就可以使用 s3cmd 命令来管理对象存储,首先使用如下命令查看当前的 bucket:
Copy
[root@ceph-admin ~]# s3cmd ls |
|
2020-07-27 10:30 s3://my-new-bucket |
创建一个新的 bucket:
Copy
[root@ceph-admin ~]# s3cmd mb s3://ops-s3-demo |
|
Bucket 's3://ops-s3-demo/' created |
|
[root@ceph-admin ~]# s3cmd ls |
|
2020-07-27 10:30 s3://my-new-bucket |
|
2020-07-28 02:20 s3://ops-s3-demo |
将本地的 /etc/fstab 文件上传到对象存储中,并将存储的名称修改为 fstab-demo:
Copy
[root@ceph-admin ~]# s3cmd put /etc/fstab s3://ops-s3-demo/fstab-demo |
|
upload: '/etc/fstab' -> 's3://ops-s3-demo/fstab-demo' [1 of 1] |
|
465 of 465 100% in 1s 266.57 B/s done |
如果上传文件时出现报错信息:ERROR: S3 error: 416 (InvalidRange)
,可按照如下步骤进行处理:
Copy
rgw_init_ioctx ERROR: librados::Rados::pool_create returned (34) Numerical result out of range (this can be due to a pool or placement group misconfiguration, e.g. pg_num < pgp_num or mon_max_pg_per_osd exceeded)
Copy
[global] |
|
fsid = f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
public_network = 192.168.92.0/24 |
|
cluster_network = 192.168.92.0/24 |
|
mon_initial_members = ceph-node1 |
|
mon_host = 192.168.92.22 |
|
auth_cluster_required = cephx |
|
auth_service_required = cephx |
|
auth_client_required = cephx |
|
mon_max_pg_per_osd = 1000 |
|
[client.rgw.ceph-node1] |
|
rgw_frontends = "civetweb port=80" |
Copy
ceph-deploy --overwrite-conf config push ceph-admin ceph-node1 ceph-node2 ceph-node3
Copy
systemctl restart ceph-mgr@ceph-node1 |
|
systemctl restart ceph-mon@ceph-node1 |
|
systemctl restart ceph-mgr@ceph-node2 |
|
systemctl restart ceph-mon@ceph-node2 |
|
systemctl restart ceph-mgr@ceph-node3 |
|
systemctl restart ceph-mon@ceph-node3 |
配置完成后即可实现文件上传。文件上传后使用如下命令查看 bucket 中的文件:
Copy
[root@ceph-admin ~]# s3cmd ls s3://ops-s3-demo |
|
2020-07-28 02:37 465 s3://ops-s3-demo/fstab-demo |
将本地的 /opt 目录上传到 bucket 中,命令如下:
Copy
s3cmd put /opt/ s3://ops-s3-demo/opt/ --recursive
查看 bucket 中的目录:
Copy
[root@ceph-admin ~]# s3cmd ls s3://ops-s3-demo |
|
DIR s3://ops-s3-demo/opt/ |
|
2020-07-28 02:37 465 s3://ops-s3-demo/fstab-demo |
|
[root@ceph-admin ~]# s3cmd ls s3://ops-s3-demo/opt/ |
|
DIR s3://ops-s3-demo/opt/ops-ceph-cluster/ |
|
[root@ceph-admin ~]# s3cmd ls s3://ops-s3-demo/opt/ops-ceph-cluster/ |
|
2020-07-28 02:49 109928 s3://ops-s3-demo/opt/ops-ceph-cluster/ceph-deploy-ceph.log |
|
2020-07-28 02:49 113 s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.bootstrap-mds.keyring |
|
2020-07-28 02:49 113 s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.bootstrap-mgr.keyring |
|
2020-07-28 02:49 113 s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.bootstrap-osd.keyring |
|
2020-07-28 02:49 113 s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.bootstrap-rgw.keyring |
|
2020-07-28 02:49 151 s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.client.admin.keyring |
|
2020-07-28 02:49 353 s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.conf |
|
2020-07-28 02:49 73 s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.mon.keyring |
将 s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.conf 文件下载到本地,并重命名为 ceph.conf-download,命令如下:
Copy
s3cmd get s3://ops-s3-demo/opt/ops-ceph-cluster/ceph.conf ceph.conf-download
将 s3://ops-s3-demo/fstab-demo 文件删除,命令如下:
Copy
s3cmd rm s3://ops-s3-demo/fstab-demo
将 s3://ops-s3-demo/opt/ 目录删除,命令如下:
Copy
s3cmd rm s3://ops-s3-demo/opt/ --recursive
此时查看资源池信息,会发现资源池中多了几个与 rgw 相关的资源池:
Copy
[root@ceph-admin ~]# ceph osd lspools |
|
1 ops-pool |
|
2 .rgw.root |
|
3 default.rgw.control |
|
4 default.rgw.meta |
|
5 default.rgw.log |
|
6 default.rgw.buckets.index |
|
7 default.rgw.buckets.data |
其中 2 3 4 5 是之前创建 RGW 后就自动生成的,而 6 是在调用 s3 接口创建 bucket 后生成的。7 是在调用接口上传文件后生成的,由于刚才已经将删除的文件删除,所以 default.rgw.buckets.data 当前没有数据。现在重新上传一个文件进行测试,例如将 /etc/fstab 文件上传到 bucket:
Copy
[root@ceph-admin ~]# s3cmd put /etc/fstab s3://ops-s3-demo/fstab |
|
upload: '/etc/fstab' -> 's3://ops-s3-demo/fstab' [1 of 1] |
|
465 of 465 100% in 0s 7.27 KB/s done |
此时查看一下资源池 default.rgw.buckets.data 中的信息:
Copy
[root@ceph-admin ~]# rados -p default.rgw.buckets.data ls |
|
9ad04f74-dd9d-4dac-abdd-77bf20241f53.4818.3_fstab |
可以看到有一个以 index + fstab 的数据,实际上刚才上传的 fstab 文件就是存储在这个资源池里,而这个数据前面的索引信息是存储在 default.rgw.buckets.index 资源池中:
Copy
[root@ceph-admin ~]# rados -p default.rgw.buckets.index ls |
|
.dir.9ad04f74-dd9d-4dac-abdd-77bf20241f53.4818.1 |
|
.dir.9ad04f74-dd9d-4dac-abdd-77bf20241f53.4818.3 |
创建 Swift 风格的用户需要基于已经创建用于访问 S3 接口的用户至上来实现,前面已经创建一个用户 ops-s3-user,所以基于这个用户的创建命令如下:
Copy
radosgw-admin subuser create --uid ops-s3-user --subuser=ops-s3-user:swift --access=full
命令执行完成后会输出以下信息:
Copy
{ |
|
"user_id": "ops-s3-user", |
|
"display_name": "Ops S3 User Demo", |
|
"email": "", |
|
"suspended": 0, |
|
"max_buckets": 1000, |
|
"subusers": [ |
|
{ |
|
"id": "ops-s3-user:swift", |
|
"permissions": "full-control" |
|
} |
|
], |
|
"keys": [ |
|
{ |
|
"user": "ops-s3-user", |
|
"access_key": "JV54B80DTZ8VQ2P4IYD4", |
|
"secret_key": "GKURUiaXt2cf7B2O5cl7kmCvWWHDnAl7U6CGtPb2" |
|
} |
|
], |
|
"swift_keys": [ |
|
{ |
|
"user": "ops-s3-user:swift", |
|
"secret_key": "ZHaXnUFfX0MOjpM925tCEfRRKeandVXDlo1V4bjM" |
|
} |
|
], |
|
"caps": [], |
|
"op_mask": "read, write, delete", |
|
"default_placement": "", |
|
"default_storage_class": "", |
|
"placement_tags": [], |
|
"bucket_quota": { |
|
"enabled": false, |
|
"check_on_raw": false, |
|
"max_size": -1, |
|
"max_size_kb": 0, |
|
"max_objects": -1 |
|
}, |
|
"user_quota": { |
|
"enabled": false, |
|
"check_on_raw": false, |
|
"max_size": -1, |
|
"max_size_kb": 0, |
|
"max_objects": -1 |
|
}, |
|
"temp_url_keys": [], |
|
"type": "rgw", |
|
"mfa_ids": [] |
|
} |
如果在 swift_keys 中没有为 ops-s3-user:swift 用户生成 secret_key,可以手动为其生成一个,命令如下:
Copy
radosgw-admin key create --subuser=ops-s3-user:swift --key-type=swift --gen-secret
使用 swift 方式访问存储,首先需要提前安装好 swift 客户端,命令如下:
Copy
yum -y install python-setuptools python-pip |
|
pip install --upgrade setuptools -i https://mirrors.aliyun.com/pypi/simple/ |
|
pip install --upgrade python-swiftclient -i https://mirrors.aliyun.com/pypi/simple/ |
使用 swift 命令查看 pool 中的 bucket:
Copy
swift -A http://192.168.92.22:80/auth -U ops-s3-user:swift -K ZHaXnUFfX0MOjpM925tCEfRRKeandVXDlo1V4bjM list
输入结果如下:
Copy
my-new-bucket |
|
ops-s3-demo |
查询结果与使用 s3 接口查询一致。但是上面的命令使用起来比较麻烦,swift 也支持使用环境变量的方式:
Copy
[root@ceph-admin ~]# swift list |
|
Auth version 1.0 requires ST_AUTH, ST_USER, and ST_KEY environment variables |
|
to be set or overridden with -A, -U, or -K. |
|
Auth version 2.0 requires OS_AUTH_URL, OS_USERNAME, OS_PASSWORD, and |
|
OS_TENANT_NAME OS_TENANT_ID to be set or overridden with --os-auth-url, |
|
--os-username, --os-password, --os-tenant-name or os-tenant-id. Note: |
|
adding "-V 2" is necessary for this. |
从帮助信息中可以看到,Auth version 1.0 版本可以设置 ST_AUTH, ST_USER, ST_KEY 环境变量来使用:
Copy
export ST_AUTH=http://192.168.92.22:80/auth |
|
export ST_USER=ops-s3-user:swift |
|
export ST_KEY=ZHaXnUFfX0MOjpM925tCEfRRKeandVXDlo1V4bjM |
这样就可以直接使用 swift 指令:
Copy
[root@ceph-admin ~]# swift list |
|
my-new-bucket |
|
ops-s3-demo |
使用 swift 命令在 pool 中创建 bucket,命令如下:
Copy
swift post swift-demo
查看当前有哪些 bucket:
Copy
[root@ceph-admin ~]# swift list |
|
my-new-bucket |
|
ops-s3-demo |
|
swift-demo |
将 /etc/passwd 文件上传到 swift-demo 中,命令如下:
Copy
swift upload swift-demo /etc/passwd
将 /opt 目录上传到 swift-demo 中,命令如下:
Copy
swift upload swift-demo /opt/
Copy
[root@ceph-admin ~]# swift list swift-demo |
|
etc/passwd |
|
opt/ops-ceph-cluster/ceph-deploy-ceph.log |
|
opt/ops-ceph-cluster/ceph.bootstrap-mds.keyring |
|
opt/ops-ceph-cluster/ceph.bootstrap-mgr.keyring |
|
opt/ops-ceph-cluster/ceph.bootstrap-osd.keyring |
|
opt/ops-ceph-cluster/ceph.bootstrap-rgw.keyring |
|
opt/ops-ceph-cluster/ceph.client.admin.keyring |
|
opt/ops-ceph-cluster/ceph.conf |
|
opt/ops-ceph-cluster/ceph.mon.keyring |
将 passwd 文件下载到本地:
Copy
swift download swift-demo etc/passwd
首先在 ceph-admin 节点的 /opt/ops-ceph-cluster 目录中执行如下命令,在 ceph-node1 节点中部署 MDS服务:
Copy
ceph-deploy --overwrite-conf mds create ceph-node1
部署完成后查看集群信息,可以看到有一个 mds 节点是 up 状态:
Copy
[root@ceph-admin ops-ceph-cluster]# ceph -s |
|
cluster: |
|
id: f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
health: HEALTH_OK |
|
services: |
|
mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 4h) |
|
mgr: ceph-node1(active, since 4h), standbys: ceph-node2, ceph-node3 |
|
mds: 1 up:standby |
|
osd: 3 osds: 3 up (since 23h), 3 in (since 23h) |
|
rgw: 1 daemon active (ceph-node1) |
|
task status: |
|
data: |
|
pools: 7 pools, 320 pgs |
|
objects: 295 objects, 143 MiB |
|
usage: 3.3 GiB used, 57 GiB / 60 GiB avail |
|
pgs: 320 active+clean |
在 ceph-admin 节点的 /opt/ops-ceph-cluster 目录中执行如下命令,将另外两个节点服务器中部署 MDS 服务:
Copy
ceph-deploy --overwrite-conf mds create ceph-node2 |
|
ceph-deploy --overwrite-conf mds create ceph-node3 |
再次查看集群状态,可以看到三个节点均为 standby 状态,这是由于当前还未创建文件系统的原因:
Copy
[root@ceph-admin ops-ceph-cluster]# ceph -s |
|
cluster: |
|
id: f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
health: HEALTH_OK |
|
services: |
|
mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 4h) |
|
mgr: ceph-node1(active, since 4h), standbys: ceph-node2, ceph-node3 |
|
mds: 3 up:standby |
|
osd: 3 osds: 3 up (since 23h), 3 in (since 23h) |
|
rgw: 1 daemon active (ceph-node1) |
|
task status: |
|
data: |
|
pools: 7 pools, 320 pgs |
|
objects: 295 objects, 143 MiB |
|
usage: 3.3 GiB used, 57 GiB / 60 GiB avail |
|
pgs: 320 active+clean |
也可以使用如下命令查看 mds 的状态:
Copy
[root@ceph-admin ops-ceph-cluster]# ceph mds stat |
|
3 up:standby |
创建文件系统之前需要创建两个 pool,其中一个用于存放数据,另一个用于存放元数据(pg 和 pgp 数量均设为 16):
Copy
ceph osd pool create cephfs_metadata 16 16 |
|
ceph osd pool create cephfs_data 16 16 |
接下来创建一个文件系统,并制定数据 pool 和元数据 pool,这样可以将两个 pool 与文件系统进行关联:
Copy
ceph fs new cephfs-demo cephfs_metadata cephfs_data
查看当前已有的文件系统:
Copy
[root@ceph-admin ~]# ceph fs ls |
|
name: cephfs-demo, metadata pool: cephfs_metadata, data pools: [cephfs_data ] |
查看当前的集群状态信息,可以看到有一个 mds 为 up 状态,另外两个 mds 为 standby 状态:
Copy
[root@ceph-admin ~]# ceph -s |
|
cluster: |
|
id: f52099ba-cec0-4c77-bd92-3a21ad224be3 |
|
health: HEALTH_OK |
|
services: |
|
mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 4h) |
|
mgr: ceph-node1(active, since 4h), standbys: ceph-node2, ceph-node3 |
|
mds: cephfs-demo:1 {0=ceph-node1=up:active} 2 up:standby |
|
osd: 3 osds: 3 up (since 23h), 3 in (since 23h) |
|
rgw: 1 daemon active (ceph-node1) |
|
task status: |
|
scrub status: |
|
mds.ceph-node1: idle |
|
data: |
|
pools: 9 pools, 352 pgs |
|
objects: 317 objects, 143 MiB |
|
usage: 3.3 GiB used, 57 GiB / 60 GiB avail |
|
pgs: 352 active+clean |
首先在需要挂载文件系统的机器上创建一个挂载点,这里选择挂载到 /media 目录下,挂载的机器中需要安装 ceph-common 软件包。使用如下命令进行挂载:
Copy
mount -t ceph 192.168.92.22:6789,192.168.92.23:6789,192.168.92.24:6789:/ /media -o name=admin
查看挂载信息:
Copy
[root@ceph-admin ~]# df -Th /media |
|
文件系统 类型 容量 已用 可用 已用% 挂载点 |
|
192.168.92.22:6789:/ ceph 18G 0 18G 0% /media |
此时文件系统就可以正常使用了,并且支持多个机器同时挂载,达到数据共享的目的:
Copy
[root@ceph-admin media]# echo "This is a message" > testfile |
|
[root@ceph-admin media]# ll |
|
总用量 1 |
|
-rw-r--r-- 1 root root 18 7月 28 15:08 testfile |
查看当前的内核信息,可以看到文件系统挂载后,是自动将模块加载到内核中:
Copy
[root@ceph-admin ~]# lsmod | grep ceph |
|
ceph 358802 1 |
如果内核版本不支持加载 ceph 模块,可以使用用户空间的挂载方式,首先需要安装 ceph-fuse 软件包:
Copy
yum -y install ceph-fuse
安装完成后,开始进行挂载。在挂载之前首先将已经挂载的文件系统 umount。然后使用如下命令再次挂载到 /media 目录下:
Copy
ceph-fuse -n client.admin -m 192.168.92.22:6789,192.168.92.23:6789,192.168.92.24:6789 /media
命令中指定了三个 mon 的地址,这是为了确保一个 mon 挂掉了,还可以通过另外两个 mon 查询到信息。如果不指定 mon 的话,ceph-fuse 也会默认自动到 /etc/ceph/ceph.conf 配置文件中查找 mon 信息。
查看挂载状态:
Copy
[root@ceph-admin ~]# df -Th /media |
|
文件系统 类型 容量 已用 可用 已用% 挂载点 |
|
ceph-fuse fuse.ceph-fuse 18G 0 18G 0% /media |
在 /media 目录下可以看到之前写入的文件和内容:
Copy
[root@ceph-admin ~]# ll /media/ |
|
总用量 1 |
|
-rw-r--r--. 1 root root 18 7月 28 15:08 testfile |
|
[root@ceph-admin ~]# cat /media/testfile |
|
This is a message |
2024-07-18
Centos 7 二进制安装配置 MariaDB数据库2024-07-18
Centos7默认firewalld防火墙使用命令大全2024-07-07
四种执行python系统命令的方法常用权限linux系统内有档案有三种身份 u:拥有者 g:群组 o:其他人这些身份对于文档常用的有下面权限:r:读权限,用户可以读取文档的内容,如用cat,more查看w:写权限,用户可以编辑文档x...
2024-07-07
然而,如果我们遵循通常的 WordPress 最佳实践,这些安全问题可以避免。在本篇中,我们会向你展示如何使用 WPSeku,一个 Linux 中的 WordPress 漏洞扫描器,它可以被用来找出你安装...
2024-07-03