時間:2020-10-29來源:www.farandoo.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 當前沒有數據?,F在重新上傳一個文件進行測試,例如將 /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 |
2022-04-13
蘋果系統安裝雙系統圖文教程 蘋果系統怎么裝雙系統 ?2022-04-13
遠程登錄Linux CentOS系統方法 怎么遠程登錄Linux CentOS系統?2022-03-21
CentOS7安裝MYSQL8.X的詳解教程很多網友對于linux系統比較陌生,更別說linux系統安裝了。有使用筆記本電腦的網友需要用到linux系統,不過卻不知道怎么安裝,所以下面小編要來跟大家說說linux操作系統安裝步驟詳細,大家一起來看看吧。...
2022-03-07
RedFlag紅旗Linux系統怎么安裝?電腦想要安裝雙系統,該怎么安裝RedFlag紅旗系統呢?下面我們就來看看紅旗Red Flag安裝全程圖解,詳細請看下文介紹...
2022-01-23