创建4台虚拟机,配置好ip及yum,关闭selinux,firewalld,node[1..3]分别配置2块20G的硬盘
主机名 IP地址
node1 192.168.4.11/24
node2 192.168.4.12/24
node3 192.168.4.13/24
client1 192.168.4.10/24
一、ceph为我们提供了一个ceph-deploy工具,可以在某一节点上统一操作全部节点
将Node1作为部署节点,将来的操作都在node1上进行,node1配置免密登录及所有主机配置域名解析:
[root@node1 ~]# ssh-keygen # 生成密钥对
[root@node1 ~]# for i in {10..13}
> do
> ssh-copy-id 192.168.4.$i
> done
# 在所有的主机上配置名称解析。注意,解析的名字必须是该机器的主机名
[root@node1 ~]# vim /etc/hosts # 增加4行
... ...
192.168.4.10 client1
192.168.4.11 node1
192.168.4.12 node2
192.168.4.13 node3
[root@node1 ~]# for i in 10 12 13
> do
> scp /etc/hosts 192.168.4.$i:/etc/
> done
二、配置ceph集群所需安装包
# 在3个节点上安装软件包
[root@node1 ~]# for i in node{1..3}
> do
> ssh $i yum install -y ceph-mon ceph-osd ceph-mds ceph-radosgw
> done
安装结束后,最好再在三台虚拟机上再次 yum install -y ceph-mon ceph-osd ceph-mds ceph-radosgw确保已经安装,防止后续报错
三、配置client1为ntp服务器、node1-3成为client1的NTP客户端
(1)client1搭建ntp服务器:
root@client1 ~]# yum install -y chrony
[root@client1 ~]# vim /etc/chrony.conf
29 allow 192.168.4.0/24 # 授权192.168.4.0/24可以时钟同步
33 local stratum 10 # 即使没有从一个源同步时钟,也为其他主机提供时间
[root@client1 ~]# systemctl restart chronyd
(2)node1-3成为客户端
[root@node1 ~]# for i in node{1..3}
> do
> ssh $i yum install -y chrony
> done
[root@node1 ~]# vim /etc/chrony.conf # 只改第7行
7 server 192.168.4.10 iburst # 替换gateway
[root@node1 ~]# for i in node{2..3}
> do
> scp /etc/chrony.conf $i:/etc/
> done
[root@node1 ~]# for i in node{1..3}
> do
> ssh $i systemctl restart chronyd
> done 验证时间是否同步 client1前面有^*表示同步成功
[root@node1 ~]# chronyc sources -v
四、在node1上安装ceph-deploy部署工具,同时创建ceph工作目录ceph-deploy
yum install -y ceph-deploy
[root@node1 ~]# yum install -y ceph-deploy
[root@node1 ~]# mkdir ceph-cluster
[root@node1 ~]# cd ceph-cluster
五、创建一个新的集群,包含(node1-node3),并修改配置文件
[root@node1 ceph-cluster]# ceph-deploy new node{1..3}
[root@node1 ceph-cluster]# ls
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
[root@node1 ceph-cluster]# tree .
.
├── ceph.conf # 集群配置文件
├── ceph-deploy-ceph.log # 日志文件
└── ceph.mon.keyring # 共享密钥
修改配置文件,开启块存储快照功能,此步非常之重要!!!
root@node1 ceph-cluster]# vim ceph.conf # 尾部追加一行如下
rbd_default_features = 1
六、初始化monitor及查看集群状态(三台机器已成为1个ceph)
[node1 ceph-cluster]# ceph-deploy mon create-initial查看集群状态ceph -s
health HEALTH_ERR # 因为还没有硬盘
常见错误:装包不全、虚拟机内存不够,如果安装过程中出现keyring...这种报错,可执行命令 ceph-deploy gatherkeys node{1..3},执行该命令后,所有ceph相关安装包必须重新安装!
七、创建OSD(分区表及分区)
(1)初始化各主机硬盘(做成gpt分区表)
# 初始化各主机的硬盘。vmware应该是sdb和sdc,硬盘根据实际情况名称,可lsblk命令查看
[root@node1 ceph-cluster]# ceph-deploy disk zap node1:vdb node1:vdc
[root@node1 ceph-cluster]# ceph-deploy disk zap node2:vdb node2:vdc
[root@node1 ceph-cluster]# ceph-deploy disk zap node3:vdb node3:vdc
(2)创建存储空间(分区)
ceph会硬盘分为两个分区,一个分区大小为5GB,用于保存ceph的内部资源;另一个分区是剩余全部空间
[root@node1 ceph-cluster]# ceph-deploy osd create node1:vd{b,c}
[root@node1 ceph-cluster]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 30G 0 disk
└─vda1 253:1 0 30G 0 part /
vdb 253:16 0 20G 0 disk
├─vdb1 253:17 0 15G 0 part /var/lib/ceph/osd/ceph-0
└─vdb2 253:18 0 5G 0 part
vdc 253:32 0 20G 0 disk
├─vdc1 253:33 0 15G 0 part /var/lib/ceph/osd/ceph-1
└─vdc2 253:34 0 5G 0 part
# 将会出现2个osd进程,因为有两块硬盘用于ceph
[root@node1 ceph-cluster]# systemctl status ceph-osd*
# 继续初始化其他节点的OSD
[root@node1 ceph-cluster]# ceph-deploy osd create node2:vd{b,c}
[root@node1 ceph-cluster]# ceph-deploy osd create node3:vd{b,c}
(3)查看集群状态 ceph -s
health HEALTH_OK ,一切正常
行文至此,一个ceph集群已搭建完毕,接下来浅谈其运用
前文已经提到ceph可以实现的存储方式:
–块存储:提供像普通硬盘一样的存储,为使用者提供“硬盘”
–文件系统存储:类似于NFS的共享方式,为使用者提供共享文件夹
–对象存储:像百度云盘一样,需要使用单独的客户端
1.1块存储介绍:
块存储,就是可以提供像硬盘一样的设备。使用块存储的节点,第一次连接块设备,需要对块设备进行分区、格式化,然后挂载使用。ceph提供存储时,需要使用存储池。为了给客户端提供存储资源,需要创建名为存储池的容器。存储池类似于逻辑卷管理中的卷组。卷组中包含很多硬盘和分区;存储池中包含各节点上的硬盘。
1.2快存储使用
存储池查看ceph osd lspools ,默认有一个名为rbd的存储池,其编号为0,可通过ceph df,查看存储池大小。此时虽然有90G,但是一个数据有3个副本。所以可用为30G,保存的副本数量可通过ceph osd pool get rbd size查看,通过ceph osd pool set rbd size 4进行副本数量修改
正课:
1.2.1在默认存储池中,创建一个名为demo-image大小为10G的镜像,提供给客户端使用
[root@node1 ceph-cluster]# rbd create demo-image --size 10G
# 查看默认存储池中的镜像
[root@node1 ceph-cluster]# rbd list
demo-image
# 查看demo-image的详细信息
[root@node1 ceph-cluster]# rbd info demo-image
rbd image 'demo-image':
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.1035238e1f29
format: 2
features: layering
flags:
1.2.2客户端使用块存储,以下操作均在客户端client,除了(2)
思路:
•怎么用?装软件
•ceph集群在哪?通过配置文件说明集群地址
•权限。keyring文件
(1)安装ceph客户端软件yum install -y ceph-common
(2)将配置文件和密钥keyring文件拷贝给客户端(指定ceph地址)
[root@node1 ceph-cluster]# scp /etc/ceph/ceph.conf 192.168.4.10:/etc/ceph/
[root@node1 ceph-cluster]# scp /etc/ceph/ceph.client.admin.keyring 192.168.4.10:/etc/ceph/
(3)客户端查看镜像rbd list,并进行映射到本地
rbd map demo-image;将demo-image镜像映射;rbd showmapped 查看映射;
(4)客户端挂载格式化使用
root@client1 ~]# mkfs.xfs /dev/rbd0
[root@client1 ~]# mount /dev/rbd0 /mnt/
[root@client1 ~]# df -h /mnt/
2.1ceph文件系统介绍
文件系统:相当于是组织数据存储的方式#就是共享文件夹
•格式化时,就是在为存储创建文件系统。
•Linux对ceph有很好的支持,可以把ceph文件系统直接挂载到本地。
•要想实现文件系统的数据存储方式,需要有MDS组件
•安装并启用mds
2.2实现
(1)在node3节点上安装MDS ,ssh node3 yum install -y ceph-mds
(2)node1配置让node3有MDS服务。可以部署多个,防止单点故障,如node2
[root@node1 ~]# cd ceph-cluster/
[root@node1 ceph-cluster]# ceph-deploy mds create node3
注:MDS(元数据)介绍
元数据就是描述数据的属性。如属主、属组、权限等。
•ceph文件系统中,数据和元数据是分开存储的
•新建存储池
–归置组PG:存储池包含PG。PG是一个容器,用于存储数据。
–为了管理方便,将数量众多的数据放到不同的PG中管理,而不是直接把所有的数据扁平化存放。
–通常一个存储池中创建100个PG。
(3)新建一个名为data1的存储池,目的是存储数据,有100个PG:ceph osd pool create data1 100
(4)新建一个名为metadata1的存储池,目的是存储元数据ceph osd pool create metadata1 100
(5)创建名为myfs1的cephfs,数据保存到data1中,元数据保存到metadata1中:ceph fs new myfs1 metadata1 data1#先写就先存元数据
(6)客户端使用cephfs
挂载文件系统需要密码。查看密码
cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQBmhINh1IZjHBAAvgk8m/FhyLiH4DCC
客户端挂载使用,三个存储ip任选其一:
# -t 指定文件系统类型。-o是选项,提供用户名和密码
# cephfs的端口号默认是6789
[root@client1 ~]# mkdir /mydata
[root@client1 ~]# mount -t ceph -o name=admin,secret=AQBmhINh1IZjHBAAvgk8m/FhyLiH4DCCrnrdPQ== 192.168.4.13:6789:/ /mydata
[root@client1 ~]# df -h /mydata
文件系统 容量 已用 可用 已用% 挂载点
192.168.4.13:6789:/ 90G 520M 90G 1% /mydata