Ceph特点:
1.高性能,采用CRUCH算法,数据分布均衡,并行度高,能够存储上千个存储结点的规模。
2.高可用性,副本数可以灵活控制,支持故障域分割,数据强一致性,没有单点故障。
3.高可扩展性,去中心化,扩展灵活,随着节点增加而线性增长。
4.特性丰富,支持3种存储方式,块存储,对象存储,文件存储。
技术要点:
1.准备 ceph 集群环境,为所有存储节点配置网络yum,配置ssh免密码登录,并设置NTP时间同步。
2.在部署节点上安装 ceph-deploy,创建工作目录,为所有存储节点安装集群软件, 并初始化 mon 服务。
3.初始化清空所有存储节点磁盘数据,创建OSD对象存储空间,指定数据分区和日志分区。
4.查看集群状态,创建镜像,客户端通过krbd访问镜像并挂载使用。
1.配置无密码连接(包括自己远程自己也不需要密码),在node1操作。
[root@node1 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
#-f后面跟密钥的文件名称(希望创建密钥到哪个文件)
#-N ''代表不给密钥配置密钥(不能给密钥配置密码)
[root@node1 ~]# for i in 10 11 12 13
do
ssh-copy-id 192.168.4.$i
done
#通过ssh-copy-id将密钥传递给192.168.4.10、192.168.4.11、192.168.4.12、192.168.4.13
2.修改/etc/hosts并同步到所有主机。注意:/etc/hosts解析的域名要与本机主机名一致
[root@node1 ~]# vim /etc/hosts #修改文件,手动添加如下内容(不要删除文件原有内容)
... ...
192.168.4.10 client
192.168.4.11 node1
192.168.4.12 node2
192.168.4.13 node3
[root@node1 ~]# for i in client node1 node2 node3
do
scp /etc/hosts $i:/etc/
done
3.修改所有节点都需要配置YUM源,并同步到所有主机
[root@node1 ~]# vim /etc/yum.repos.d/ceph.repo #新建YUM源配置文件,内容如下
[mon]
name=mon
baseurl=ftp://192.168.4.254/ceph/MON
gpgcheck=0
[osd]
name=osd
baseurl=ftp://192.168.4.254/ceph/OSD
gpgcheck=0
[tools]
name=tools
baseurl=ftp://192.168.4.254/ceph/Tools
gpgcheck=0
[root@node1 ~]# yum clean all #清空缓存
[root@node1 ~]# yum repolist #验证YUM源软件数量
[root@node1 ~]# for i in client node1 node2 node3
do
scp /etc/yum.repos.d/ceph.repo $i:/etc/yum.repos.d/
done
4.给所有节点安装ceph相关软件包。
[root@node1 ceph-cluster]# for i in node1 node2 node3
do
ssh $i "yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw"
done
5.Client主机配置NTP服务器。
[root@client ~]# yum -y install chrony
[root@client ~]# vim /etc/chrony.conf
allow 192.168.4.0/24 #大约26行
local stratum 10 #大约29行(去注释即可)
[root@client ~]# systemctl restart chronyd
6.node1,node2,node3修改NTP客户端配置。
[root@node1 ~]# yum -y install chrony
[root@node1 ~]# vim /etc/chrony.conf
server 192.168.4.10 iburst #配置文件第二行,手动添加一行新内容
[root@node1 ~]# systemctl restart chronyd
[root@node1 ~]# chronyc sources -v #查看同步结果,应该是^*
[root@node2 ~]# yum -y install chrony
[root@node2 ~]# vim /etc/chrony.conf
server 192.168.4.10 iburst #配置文件第二行,手动添加一行新内容
[root@node2 ~]# systemctl restart chronyd
[root@node2 ~]# chronyc sources -v #查看同步结果,应该是^*
[root@node3 ~]# yum -y install chrony
[root@node3 ~]# vim /etc/chrony.conf
server 192.168.4.10 iburst #配置文件第二行,手动添加一行新内容
[root@node3 ~]# systemctl restart chronyd
[root@node3 ~]# chronyc sources -v #查看同步结果,应该是^*
7.在node1安装部署工具,创建目录
[root@node1 ~]# yum -y install ceph-deploy
[root@node1 ~]# mkdir ceph-cluster
[root@node1 ~]# cd ceph-cluster/
8.创建Ceph集群配置,在ceph-cluster目录下生成Ceph配置文件(ceph.conf),在ceph.conf配置文件中定义monitor主机是谁。
[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
[root@node1 ceph-cluster]# vim ceph.conf #不要修改原始内容,在文件末尾添加一行
rbd_default_features = 1
#默认开启COW分层快照的功能
9.初始化所有节点的mon服务,也就是启动mon服务。拷贝当前目录的配置文件到所有节点的/etc/ceph/目录并启动mon服务。
[root@node1 ceph-cluster]# ceph-deploy mon create-initial
#配置文件ceph.conf中有三个mon的IP,ceph-deploy脚本知道自己应该远程谁
[root@node1 ceph-cluster]# systemctl status ceph-mon@node1
[root@node2 ~]# systemctl status ceph-mon@node2
[root@node3 ~]# systemctl status ceph-mon@node3
#备注:管理员可以自己启动(start)、重启(restart)、关闭(stop),查看状态(status).
#提醒:这些服务在30分钟只能启动3次,超过就报错.
#StartLimitInterval=30min
#StartLimitBurst=3
#在这个文件中有定义/usr/lib/systemd/system/ceph-mon@.service
#如果修改该文件,需要执行命令# systemctl daemon-reload重新加载配置
10.初始化清空磁盘数据(仅node1操作即可)。初始化磁盘,将所有磁盘分区格式设置为GPT格式(根据实际情况填写磁盘名称)。
[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
#相当于ssh 远程node1,在node1执行parted /dev/vdb mktable gpt
#其他主机都是一样的操作
#ceph-deploy是个脚本,这个脚本会自动ssh远程自动创建gpt分区
11.创建OSD存储空间(仅node1操作即可)
[root@node1 ceph-cluster]# ceph-deploy osd create node1:vdb node1:vdc
#每个磁盘都会被自动分成两个分区;一个固定5G大小;一个为剩余所有容量
#5G分区为Journal日志缓存;剩余所有空间为数据盘。
[root@node1 ceph-cluster]# ceph-deploy osd create node2:vdb node2:vdc
[root@node1 ceph-cluster]# ceph-deploy osd create node3:vdb node3:vdc
12.创建Ceph块存储。创建镜像、查看镜像。
[root@node1 ~]# rbd create demo-image --size 10G
#创建demo-image镜像,这里的demo-image创建的镜像名称,名称可以为任意字符。
#size可以指定镜像大小
[root@node1 ~]# rbd create rbd/jacob --size 10G
#在rbd池中创建名称为jacob的镜像(rbd/jacob),镜像名称可以任意
[root@node1 ~]# rbd list #列出所有镜像
[root@node1 ~]# rbd info demo-image #查看demo-image这个镜像的详细信息
rbd image 'demo-image':
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.d3aa2ae8944a
format: 2
features: layering
13.客户端通过KRBD访问
#客户端需要安装ceph-common软件包
#拷贝配置文件(否则不知道集群在哪)
#拷贝连接密钥(否则无连接权限)
[root@client ~]# yum -y install ceph-common
[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.conf /etc/ceph/
[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.client.admin.keyring \
/etc/ceph/
[root@client ~]# rbd map jacob #客户端访问映射服务器的jacob共享镜像
[root@client ~]# lsblk #查看结果(会多一块磁盘)
[root@client ~]# rbd showmapped #查看磁盘名和共享镜像名称的对应关系
id pool image snap device
0 rbd jacob - /dev/rbd0
14.客户端格式化、挂载分区
[root@client ~]# mkfs.xfs /dev/rbd0 #格式化,格式为xfs
[root@client ~]# mount /dev/rbd0 /mnt/ #挂载(可以挂载到任意目录)
[root@client ~]# echo "test" > /mnt/test.txt #写入数据
15.客户端撤销磁盘映射
[root@client ~]# umount /mnt #卸载
[root@client ~]# rbd showmapped #查看磁盘名和共享镜像名称的对应关系
id pool image snap device
0 rbd jacob - /dev/rbd0
[root@client ~]# rbd unmap /dev/rbd0 #撤销磁盘映射
附加信息:Ceph操作思路(知识总结)
一、准备工作:
IP,主机名,hosts解析,ssh密钥,时间同步,yum源,防火墙,selinux
二、部署ceph:
安装软件,修改配置启动服务mon,启动osd服务共享硬盘。
三、使用Ceph的思路:
1.块共享
- 服务器: rbd create 创建一个共享镜像
- 客户端: 安装cpeh-common; cp 配置文件和密钥
- rbd map | rbd unmap