ceph deploy部署ceph集群 ceph扩容 rbd存储

架构拓扑

节点主机 节点IP 节点角色 OS
ceph-admin 10.0.0.60 admin deploy mds centos7
ceph-node1 10.0.0.61 mon osd mds centos7
ceph-node2 10.0.0.62 mon osd mds centos7
ceph-node3 10.0.0.63 mon osd mds centos7

前期准备工作[所有ceph服务器都执行]

#基础优化
#1. yum源优化
rm -f /etc/yum.repos.d/*
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo


#2. selinux关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

#3. 时间同步
echo '*/5 * * * * /usr/sbin/ntpdate -u ntp.api.bz' >>/var/spool/cron/root
systemctl restart crond.service
crontab -l

#4. 关闭swap分区
sed -ri 's/.*swap.*/#&/' /etc/fstab
swapoff -a

#5. 配置ceph源:
cat >/etc/yum.repos.d/ceph.repo<<eof
[ceph]
name=ceph
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/
gpgcheck=0
enabled=1
[x86_64]
name=x86_64
baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/
gpgcheck=0
enabled=1
eof

yum clean all



#6. 每台服务器多增加一块20G硬盘 磁盘扫描[用于发现新磁盘]
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan



#7. 配置主机名
cat >/etc/hosts <<eof
10.0.0.60 admin  ceph-admin
10.0.0.61 ceph01 ceph-node1
10.0.0.62 ceph02 ceph-node2
10.0.0.63 ceph03 ceph-node3
eof


#8. 设置各自主机名
hostnamectl set-hostname [主机名]
bash


#8. 配置互信:

ssh-keygen -f ~/.ssh/id_rsa -N ''

ssh-copy-id -i ~/.ssh/id_rsa.pub root@ceph-admin
ssh-copy-id -i ~/.ssh/id_rsa.pub root@ceph-node1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@ceph-node2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@ceph-node3


#验证[远程查看另一台服务器IP测试执行是否需要密码]:
[root@ceph-admin ~]# ssh 10.0.0.61 "ifconfig eth0"
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.61  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::20c:29ff:fe86:4512  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:86:45:12  txqueuelen 1000  (Ethernet)
        RX packets 70680  bytes 98327829 (93.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11931  bytes 1237409 (1.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
     
     
拷贝ceph源到其他服务器
cd /etc/yum.repos.d
scp * root@ceph-node1:/etc/yum.repos.d/
scp * root@ceph-node2:/etc/yum.repos.d/
scp * root@ceph-node3:/etc/yum.repos.d/

        
#9. 时间同步:

ceph-admin 作为时间服务器,其他服务器进行同步
9.1. ceph-admin配置:
yum install -y ntp
systemctl start ntpd
systemctl enable ntpd
timedatectl set-timezone Asia/Shanghai    #时区设置为上海

9.2 设置为阿里云时间同步:
时间服务器配置[ceph-admin服务器作为时间服务器]:
找到:
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

修改为:
server ntp1.aliyun.com iburst

重启ntp:
systemctl restart ntpd

查看时间同步: ntpq -pn
[root@ceph-admin ~]# ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*120.25.115.20   10.137.53.7      2 u    1   64    1   36.838    5.072   0.622


其他服务器配置:
yum install -y ntp
systemctl start ntpd
systemctl enable ntpd
timedatectl set-timezone Asia/Shanghai    #时区设置为上海

#sed修改:
 sed  -i '20,25s/^server.*/# &/' /etc/ntp.conf
 sed  -i "25iserver 10.0.0.60 iburst" /etc/ntp.conf

#重启服务:
systemctl restart ntpd
systemctl enable ntpd
ntpq -pn

#查看时间同步状态,检查是否与时间服务器同步时间:
[root@ceph-node1 ~]# ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*10.0.0.60       120.25.115.20    3 u    6   64  377    0.334    0.582   0.501
#出现 * 号 代表同步时间了

安装ceph [ceph-admin 节点]

[root@ceph-admin ~]# yum install -y python-setuptools ceph-deploy
[root@ceph-admin ~]# ceph-deploy --version
2.0.1         #<-------建议部署2.0版本以上,且只需要在部署节点安装


#创建目录,作为初始化目录
[root@ceph-admin ~]# mkdir /my-cluster
[root@ceph-admin ~]# cd  /my-cluster

#配置monitor节点:
--public-network 10.0.0.0/24     ceph对外的外部网络
--cluster-network 10.0.0.0/24    ceph的内部网络

[root@ceph-admin my-cluster]# ceph-deploy new  --public-network 10.0.0.0/24 --cluster-network 10.0.0.0/24 ceph-admin
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /usr/bin/ceph-deploy new --public-network 10.0.0.0/24 --cluster-network 10.0.0.0/24 ceph-admin
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  func                          : <function new at 0x14a3140>
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x15089e0>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  ssh_copykey                   : True
[ceph_deploy.cli][INFO  ]  mon                           : ['ceph-admin']
[ceph_deploy.cli][INFO  ]  public_network                : 10.0.0.0/24
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  cluster_network               : 10.0.0.0/24
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.cli][INFO  ]  fsid                          : None
[ceph_deploy.new][DEBUG ] Creating new cluster named ceph
[ceph_deploy.new][INFO  ] making sure passwordless SSH succeeds
[ceph-admin][DEBUG ] connected to host: ceph-admin 
[ceph-admin][DEBUG ] detect platform information from remote host
[ceph-admin][DEBUG ] detect machine type
[ceph-admin][DEBUG ] find the location of an executable
[ceph-admin][INFO  ] Running command: /usr/sbin/ip link show
[ceph-admin][INFO  ] Running command: /usr/sbin/ip addr show
[ceph-admin][DEBUG ] IP addresses found: [u'10.0.0.60']
[ceph_deploy.new][DEBUG ] Resolving host ceph-admin
[ceph_deploy.new][DEBUG ] Monitor ceph-admin at 10.0.0.60
[ceph_deploy.new][DEBUG ] Monitor initial members are ['ceph-admin']
[ceph_deploy.new][DEBUG ] Monitor addrs are [u'10.0.0.60']
[ceph_deploy.new][DEBUG ] Creating a random mon key...
[ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring...
[ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf...


配置节点后生成了3个文件:
[root@ceph-admin my-cluster]# ll
total 12
-rw-r--r-- 1 root root  256 Oct 10 00:21 ceph.conf             # 配置文件
-rw-r--r-- 1 root root 3034 Oct 10 00:21 ceph-deploy-ceph.log  # 日志文件
-rw------- 1 root root   73 Oct 10 00:21 ceph.mon.keyring      # 密钥文件,作为身份验证

[root@ceph-admin my-cluster]# cat ceph.conf 
[global]
fsid = ce3bead3-55ca-4b88-9dff-0c7dd4db1880
public_network = 10.0.0.0/24         #外部网络
cluster_network = 10.0.0.0/24        #内部网络
mon_initial_members = ceph-admin
mon_host = 10.0.0.60
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx


#手动安装节点避免更改源到国外导致安装失败:
# 安装必备软件包[每个节点都需要安装]:
 yum install -y ceph ceph-mon ceph-mgr ceph-radosgw ceph-mds
 
 
 #mon节点 初始化:
 [root@ceph-admin my-cluster]# ceph-deploy mon create-initial
 初始化结束后出现下面这些配置文件:
 [root@ceph-admin my-cluster]# ll
total 44
-rw------- 1 root root   113 Oct 10 00:33 ceph.bootstrap-mds.keyring
-rw------- 1 root root   113 Oct 10 00:33 ceph.bootstrap-mgr.keyring
-rw------- 1 root root   113 Oct 10 00:33 ceph.bootstrap-osd.keyring
-rw------- 1 root root   113 Oct 10 00:33 ceph.bootstrap-rgw.keyring
-rw------- 1 root root   151 Oct 10 00:33 ceph.client.admin.keyring
-rw-r--r-- 1 root root   256 Oct 10 00:21 ceph.conf
-rw-r--r-- 1 root root 16135 Oct 10 00:33 ceph-deploy-ceph.log
-rw------- 1 root root    73 Oct 10 00:21 ceph.mon.keyring

配置文件还需要推送到各个节点,所以需要进行推送:
[root@ceph-admin my-cluster]# ceph-deploy admin ceph-admin ceph-node1 ceph-node2 ceph-node3


#此时ceph基本配置完毕,通过ceph-s查看状态:
[root@ceph-admin my-cluster]# ceph -s
  cluster:
    id:     ce3bead3-55ca-4b88-9dff-0c7dd4db1880
    health: HEALTH_OK                  #  cluster 配置完毕
 
  services:
    mon: 1 daemons, quorum ceph-admin (age 4m)    #mon节点有一个
    mgr: no daemons active             #mgr还没有添加
    osd: 0 osds: 0 up, 0 in            #osd资源池暂持还没添加
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:     


#配置manager监控节点[这个节点可以部署到ceph-admin也可以其他节点,这里部署到了node1]:
[root@ceph-admin my-cluster]# ceph-deploy mgr create ceph-node1
...
...
...
ceph-node1][DEBUG ] create path recursively if it doesn't exist
ceph-node1][INFO  ] Running command: ceph --cluster ceph --name client.bootstrap-mgr --keyring /var/lib/cephbootstrap-mgr/ceph.keyring auth get-or-create mgr.ceph-node1 mon allow profile mgr osd allow * mds allow * - /var/lib/ceph/mgr/ceph-ceph-node1/keyring
ceph-node1][INFO  ] Running command: systemctl enable ceph-mgr@ceph-node1
ceph-node1][WARNIN] Created symlink from /etc/systemd/system/ceph-mgr.target.wants/ceph-mgr@ceph-node1.servie to /usr/lib/systemd/system/ceph-mgr@.service.
ceph-node1][INFO  ] Running command: systemctl start ceph-mgr@ceph-node1  #执行日志
ceph-node1][INFO  ] Running command: systemctl enable ceph.target

#部署完成mgr后进行检查:
[root@ceph-admin my-cluster]# ceph -s
  cluster:
    id:     ce3bead3-55ca-4b88-9dff-0c7dd4db1880
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 1 daemons, quorum ceph-admin (age 10m)
    mgr: ceph-node1(active, since 79s)   #<----- 这里可以看到 mgr部署到了 ceph-node1 
    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:     



#添加磁盘:
 每台虚拟机加1块20G磁盘通过下面指令发现磁盘:
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
执行过程:
[root@ceph-admin my-cluster]# echo "- - -" > /sys/class/scsi_host/host0/scan
[root@ceph-admin my-cluster]# echo "- - -" > /sys/class/scsi_host/host1/scan
[root@ceph-admin my-cluster]# echo "- - -" > /sys/class/scsi_host/host2/scan
[root@ceph-admin my-cluster]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0  200M  0 part /boot
└─sda2            8:2    0 19.8G  0 part 
  └─centos-root 253:0    0 19.8G  0 lvm  /
sdb               8:16   0   20G  0 disk      #新增磁盘
sr0              11:0    1  4.2G  0 rom  


ceph-deploy osd create ceph-admin --data /dev/sdb
ceph-deploy osd create ceph-node1 --data /dev/sdb
ceph-deploy osd create ceph-node2 --data /dev/sdb
ceph-deploy osd create ceph-node3 --data /dev/sdb

4块磁盘加入进去后检查状态:
[root@ceph-admin my-cluster]# ceph -s
  cluster:
    id:     ce3bead3-55ca-4b88-9dff-0c7dd4db1880
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph-admin (age 19m)
    mgr: ceph-node1(active, since 10m)
    osd: 4 osds: 4 up (since 4s), 4 in (since 4s)
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   4.0 GiB used, 76 GiB / 80 GiB avail    #刚好组成80G磁盘
    pgs:     

[root@ceph-admin my-cluster]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME           STATUS REWEIGHT PRI-AFF 
-1       0.07794 root default                                
-3       0.01949     host ceph-admin                         
 0   hdd 0.01949         osd.0           up  1.00000 1.00000 
-5       0.01949     host ceph-node1                         
 1   hdd 0.01949         osd.1           up  1.00000 1.00000 
-7       0.01949     host ceph-node2                         
 2   hdd 0.01949         osd.2           up  1.00000 1.00000 
-9       0.01949     host ceph-node3                         
 3   hdd 0.01949         osd.3           up  1.00000 1.00000 
 
 
 
 #到这里一个基础得ceph集群已经部署完毕了,它包含了 1个管理节点  一个 mgr节点  4个osd节点
 
 
 
 #mon节点扩容
 注意:mon节点扩容以奇数为准进行扩容  1 3 5这样,所以要扩容则需要扩容两台,可以弄 node1 node2 配置为mon节点
 [root@ceph-admin my-cluster]# ceph-deploy mon add ceph-node1 --address 10.0.0.61
 [root@ceph-admin my-cluster]# ceph-deploy mon add ceph-node2 --address 10.0.0.62
 [root@ceph-admin my-cluster]# ceph-deploy mon add ceph-node3 --address 10.0.0.63
 检查:
 [root@ceph-admin my-cluster]# ceph -s 
  cluster:
    id:     ce3bead3-55ca-4b88-9dff-0c7dd4db1880
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-admin,ceph-node1,ceph-node2 (age 2s)    #可以看到添加2个mon节点后,mon节点数量到达3
    mgr: ceph-node1(active, since 21m)      #mgr 只有一个,下面进行mgr扩容
    osd: 4 osds: 4 up (since 10m), 4 in (since 10m)
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   4.0 GiB used, 76 GiB / 80 GiB avail
    pgs:     
 检查:
[root@ceph-admin my-cluster]# ceph mon stat
e4: 4 mons at {ceph-admin=[v2:10.0.0.60:3300/0,v1:10.0.0.60:6789/0],ceph-node1=[v2:10.0.0.61:3300/0,v1:10.0.0.61:6789/0],ceph-node2=[v2:10.0.0.62:3300/0,v1:10.0.0.62:6789/0],ceph-node3=[v2:10.0.0.63:3300/0,v1:10.0.0.63:6789/0]}, election epoch 16, leader 0 ceph-admin, quorum 0,1,2,3 ceph-admin,ceph-node1,ceph-node2,ceph-node3

 检查:
[root@ceph-admin my-cluster]# ceph mon dump
dumped monmap epoch 4
epoch 4
fsid ce3bead3-55ca-4b88-9dff-0c7dd4db1880
last_changed 2020-10-10 01:10:00.536702
created 2020-10-10 00:33:06.013571
min_mon_release 14 (nautilus)
0: [v2:10.0.0.60:3300/0,v1:10.0.0.60:6789/0] mon.ceph-admin
1: [v2:10.0.0.61:3300/0,v1:10.0.0.61:6789/0] mon.ceph-node1
2: [v2:10.0.0.62:3300/0,v1:10.0.0.62:6789/0] mon.ceph-node2
3: [v2:10.0.0.63:3300/0,v1:10.0.0.63:6789/0] mon.ceph-node3



节点扩容会有仲裁阶段可以通过命令查看:
ceph quorum_status --format json-pretty
ceph quorum_status --format json-pretty|grep quorum_leader_name



 #mgr节点扩容:
[root@ceph-admin my-cluster]# ceph-deploy mgr create ceph-node1 ceph-node2 ceph-node3
[root@ceph-admin my-cluster]# ceph -s
  cluster:
    id:     ce3bead3-55ca-4b88-9dff-0c7dd4db1880
    health: HEALTH_OK
 
  services:
    mon: 4 daemons, quorum ceph-admin,ceph-node1,ceph-node2,ceph-node3 (age 8m)
    mgr: ceph-node1(active, since 36m), standbys: ceph-node2, ceph-node3   # 看到主从节点,node1是主节点,在node1异常,其他会顶替
    osd: 4 osds: 4 up (since 25m), 4 in (since 25m)
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   4.0 GiB used, 76 GiB / 80 GiB avail
    pgs:     

此时已经部署完毕了一套高可用集群
主要有 4个mon节点  3个mgr节点

ceph三大存储方式

块存储 [使用较多]:

#创建和使用块存储


#创建pool

通常在创建pool之前,需要覆盖默认的pg_num,官方推荐:
若少于5个OSD, 设置pg_num为128
5~10个OSD,设置pg_num为512
10~50个OSD,设置pg_num为4096

[为了演示扩容缩容num,这里设置为64,后续扩容改为128]
[root@ceph-admin my-cluster]# ceph osd pool create ceph-pool 64 64
pool 'ceph-pool' created


#查看:
[root@ceph-admin my-cluster]# ceph osd lspools                     #查看资源池
1 ceph-pool
[root@ceph-admin my-cluster]# ceph osd pool get ceph-pool pg_num   #查看PG
pg_num: 64
[root@ceph-admin my-cluster]# ceph osd pool get ceph-pool pgp_num  #查看PGP
pgp_num: 64
[root@ceph-admin my-cluster]# ceph osd pool get ceph-pool size     #查看副本数
size: 3
[root@ceph-admin my-cluster]# ceph osd pool get ceph-pool crush_rule   #查看股则
crush_rule: replicated_rule


扩容缩容:
[root@ceph-admin my-cluster]# ceph osd pool set ceph-pool size 2   #修改副本数为2个
set pool 1 size to 2  
[root@ceph-admin my-cluster]# ceph osd pool get ceph-pool size     #检查副本数
size: 2

[root@ceph-admin my-cluster]# ceph osd pool get ceph-pool pg_num    #查看pg数
pg_num: 64 
[root@ceph-admin my-cluster]# ceph osd pool set ceph-pool pg_num 128    #修改pg数  #修改了pg,同时也需要需改pgp,使得他们保持一致
set pool 1 pg_num to 128
[root@ceph-admin my-cluster]# ceph osd pool set ceph-pool pgp_num 128   #修改pgp数
set pool 1 pgp_num to 128



#设置pool大小 :
方式1:
[root@ceph-admin my-cluster]# rbd create -p ceph-pool --image rbd_test.img --size 10G    #10G的pool

方式2:
rbd create ceph-pool/rbd_test1.img --size 10G

查看:
[root@ceph-admin my-cluster]# rbd -p ceph-pool ls
rbd_test.img
rbd_test1.img

[root@ceph-admin my-cluster]# rbd info ceph-pool/rbd_test.img    #查看这个块设备得详细信息
rbd image 'rbd_test.img':
	size 10 GiB in 2560 objects
	order 22 (4 MiB objects)
	snapshot_count: 0
	id: 12c09e1a0dcd
	block_name_prefix: rbd_data.12c09e1a0dcd
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
	op_features: 
	flags: 
	create_timestamp: Sat Oct 10 01:41:24 2020
	access_timestamp: Sat Oct 10 01:41:24 2020
	modify_timestamp: Sat Oct 10 01:41:24 2020
	
[root@ceph-admin my-cluster]# rbd info ceph-pool/rbd_test1.img   #查看这个块设备得详细信息
rbd image 'rbd_test1.img': 
	size 10 GiB in 2560 objects
	order 22 (4 MiB objects)
	snapshot_count: 0
	id: 12d0a7da2dfa
	block_name_prefix: rbd_data.12d0a7da2dfa
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff, deep-flatten  #这些信息可以去除
	op_features: 
	flags: 
	create_timestamp: Sat Oct 10 01:43:40 2020
	access_timestamp: Sat Oct 10 01:43:40 2020
	modify_timestamp: Sat Oct 10 01:43:40 2020


#去除features 信息:
rbd feature disable ceph-pool/rbd_test1.img  deep-flatten
rbd feature disable ceph-pool/rbd_test1.img  fast-diff
rbd feature disable ceph-pool/rbd_test1.img exclusive-lock

[root@ceph-admin my-cluster]# rbd info ceph-pool/rbd_test1.img
rbd image 'rbd_test1.img':
	size 10 GiB in 2560 objects
	order 22 (4 MiB objects)
	snapshot_count: 0
	id: 119d1e259330
	block_name_prefix: rbd_data.119d1e259330
	format: 2
	features: layering   #这里的信息已经清除了
	op_features: 
	flags: 
	create_timestamp: Sun Oct 11 00:27:40 2020
	access_timestamp: Sun Oct 11 00:27:40 2020
	modify_timestamp: Sun Oct 11 00:27:40 2020


重点:
#### 注意 只有把features信息改为 layering 才可以去挂载这个设备
#挂载为块设备命令:
[root@ceph-admin my-cluster]# rbd map ceph-pool/rbd_test1.img
/dev/rbd0
[root@ceph-admin my-cluster]# rbd device list
id pool       namespace image           snap   device    
0  ceph-pool            rbd_test1.img   -      /dev/rbd0 

这样就已经将rbd_test1.img映射为了一个块设备,这个块设备是: /dev/rbd0 




#有2个块设备,删除一个的方法:
[root@ceph-admin my-cluster]# rbd rm -p ceph-pool --image rbd_test1.img
Removing image: 100% complete...done.

检查:
[root@ceph-admin my-cluster]# rbd -p ceph-pool ls 
rbd_test.img


# 如果在其他服务器映射过,可以在那台服务器执行取消;
rbd unmap /dev/rbd0


# 挂载块设备:
# 做了 映射为块设备这个步骤后,ceph就会在服务器上创建一个块设备硬盘:
# 它可以被当作一块普通硬盘来格式化使用
[root@ceph-admin my-cluster]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 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: 0x000aef55

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648    41943039    20765696   8e  Linux LVM

Disk /dev/mapper/centos-root: 21.3 GB, 21260926976 bytes, 41525248 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 /dev/rbd0: 10.7 GB, 10737418240 bytes, 20971520 sectors    ### 块设备硬盘,通过lsblk也能看到
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. 格式化:
[root@ceph-admin my-cluster]# mkfs.ext4 /dev/rbd0      #格式化
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done                            
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1024 blocks, Stripe width=1024 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

#生产环境建议: resize2fs  /dev/rbd0   进行格式化,这样不会格式化原有磁盘数据。


2. 挂载:
[root@ceph-admin my-cluster]# mkdir /rbd-demo                  #创建一个目录
[root@ceph-admin my-cluster]# mount /dev/rbd0 /rbd-demo        #挂载到这个目录
[root@ceph-admin my-cluster]# df -h                            #检查
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   20G  1.8G   19G  10% /
devtmpfs                 2.0G     0  2.0G   0% /dev
tmpfs                    2.0G     0  2.0G   0% /dev/shm
tmpfs                    2.0G  8.7M  2.0G   1% /run
tmpfs                    2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/sda1                197M  103M   95M  53% /boot
tmpfs                    394M     0  394M   0% /run/user/0
/dev/rbd0                9.8G   37M  9.2G   1% /rbd-demo

3. 写入开机自动挂载:
3.1 找到UUID
[root@ceph-admin my-cluster]# blkid 
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sda1: UUID="cb322c86-f37a-49e8-86a0-924d9b0c719e" TYPE="xfs" 
/dev/sda2: UUID="4YLVja-jT6q-FphK-3E60-5Qde-Z3gw-zLpcYT" TYPE="LVM2_member" 
/dev/mapper/centos-root: UUID="e3508edd-30c0-4e7d-9d8f-622c8dbd174e" TYPE="xfs" 
/dev/rbd0: UUID="f7abce4f-6a51-4c65-bf89-99eec90869ec" TYPE="ext4" 

3.2 写入fstab:
echo "UUID="f7abce4f-6a51-4c65-bf89-99eec90869ec"  /rbd-demo  xfs defaults 0 0" >>/etc/fstab




远程挂载:
如: ceph-client 需要挂载这个磁盘:

服务器操作:
 rbd create ceph-pool/rbd_test2.img --size 5G
 rbd pool init ceph-pool
 ceph-deploy admin [ceph-client name]        #ceph-client name指的客户端主机名,这里的主机名和IP需要在admin节点hosts文件中,否则会报错]
                                             #执行后会生成一个 ceph.client.admin.keyring 文件,用于作为挂载服务器RBD凭据
 
客户端操作:
1. 安装ceph工具
yum install -y ceph-common

2. 获取ceph密钥
 将服务器的 ceph.client.admin.keyring内容写入到客户机的该文件中,或者新建文件,将内容写入到文件中.
 
3, 执行映射块设备
rbd map ceph-pool/rbd_test1.img
取消这个映射可以执行: rbd unmap /dev/rbd0  [rbd0是相对于映射的设备而言,可能名称不一样]

4. 挂载到目录:
   mkdir /root/rdb0 -p
   resize2fs  /dev/rbd0 
   mount  /dev/rbd0 /root/rdb0




#扩容:
[root@ceph-client ~]# rbd resize ceph-pool/rbd_test1.img --size 15G
Resizing image: 100% complete...done.

检查大小变化:
[root@ceph-client ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/rbd0               ext4      9.8G   37M  9.2G   1% /root/rdb0    #大小10G 还没改变

执行格式化:
[root@ceph-client ~]# resize2fs  /dev/rbd0     #不损耗数据的格式化
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/rbd0 is mounted on /root/rdb0; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/rbd0 is now 3932160 blocks long.

再次查看:
[root@ceph-client ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/rbd0               ext4       15G   41M   14G   1% /root/rdb0    # 已经增加了大小
上一篇:ceph+docker方式实现搭建owncloud实现私网云盘


下一篇:WSL2 使用Docker运行.NET Core