随着OpenStack日渐成为开源云计算的标准软件栈,Ceph也已经成为OpenStack的首选后端存储。相关介绍网上有很多,这里就不做过多介绍了,自己尝试在自己的测试机搭建了一下。
Ceph的架构
Ceph是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等。
支持接口
1、对象存储:即radosgw,兼容S3接口。通过rest api上传、下载文件。
2、文件系统:posix接口。可以将ceph集群看做一个共享文件系统挂载到本地。
3、块存储:即rbd。有kernel rbd和librbd两种使用方式。支持快照、克隆。相当于一块硬盘挂到本地,用法和用途和硬盘一样。
Ceph相比其它分布式存储有哪些优点?
1、统一存储
虽然ceph底层是一个分布式文件系统,但由于在上层开发了支持对象和块的接口。所以在开源存储软件中,能够一统江湖。至于能不能千秋万代,就不知了。
2、高扩展性
扩容方便、容量大。能够管理上千台服务器、EB级的容量。
3、可靠性强
支持多份强一致性副本,EC。副本能够垮主机、机架、机房、数据中心存放。所以安全可靠。存储节点可以自管理、自动修复。无单点故障,容错性强。
4、高性能
因为是多个副本,因此在读写操作时候能够做到高度并行化。理论上,节点越多,整个集群的IOPS和吞吐量越高。另外一点ceph客户端读写数据直接与存储设备(osd) 交互。在块存储和对象存储中无需元数据服务器。
集群部署
主机准备
IP地址 主机名
172.16.10.167 admin-node #管理端,后续的ceph-deploy工具都在该主机上进行操作,并且也充当监控和osd.0节点
172.16.10.162 node1 #监控和osd.1节点
172.16.10.142 node2 #监控和osd.2节点
每台主机三块盘,sda系统盘、sdb存储盘(osd)、sdc日志盘(journal),日志盘最好选用ssd
修改admin-node的/etc/hosts文件
172.16.10.162 node1
172.16.10.142 node2
配置admin-node与其它节点的ssh无密码root权限访问,为了方便使用的是root用户,为了安全应该创建一个普通用户
# ssh-keygen
# cat /root/.ssh/id_rsa.pub
修改每个节点的hostname
# hostnamectl set-hostname "新的名字"
每个osd节点开放防火墙
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6789:7100 -j ACCEPT
配置ceph的yum源,安装ceph-deploy工具
此处的源太慢,在我安装的时候总是失败
国内的一些Ceph源:Ceph国内源
# yum install --nogpgcheck -y epel-release
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
# vim /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-jewel/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-jewel/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
安装ceph-deploy工具
# yum update -y
# yum install ceph-deploy -y
# yuminstall ntp ntpdate ntp-doc openssh-server yum-plugin-priorities -y
创建管理目录
# mkdir my-cluster
# cd my-cluster
创建监控节点,这里可以同时创建多个节点,为了测试后期增加mon节点,这里就只添加一个
# ceph-deploy new node1
修改配置文件,执行上述命令之后,会在当前目录产生ceph.conf文件,打开文件增加配置
osd pool default size = 3 #创建3个副本
public_network = 172.16.10.0/24 #公用网络
cluster_network = 172.16.10.0/24 #集群网络
使用ceph-deploy为节点安装ceph,这一步在我安装时经常出问题,出现执行ceph --version命令失败,还有一些其它错误,然后各种在网上查资料,最后自己无意中发现,再次执行命令,或者在失败节点把ceph和ceph-release卸载,然后单个节点再次安装,重复操作,就可以安装成功,究其原因,还是因为ceph源在国外。然后找了一下国内的ceph源,在ceph中国社区找到了一篇文档,在开头已有介绍。
# ceph-deploy install admin-node node1 node2
初始化监控节点并收集keyring,如果是双网卡,需要修改配置文件ceph.conf将mon的内网地址改为公网地址,执行时需要在ceph-deploy后加--overwrite-conf
# ceph-deploy mon create-initial
把admin-node节点的配置文件与keyring同步至其它节点
# ceph-deploy admin admin-node node1 node2
# chmod +r /etc/ceph/ceph.client.admin.keyring #如果是root用户,这步不需要
初始化各节点的osd分区
# ceph-deploy disk zap admin-node:/dev/sdb node1:/dev/sdb node2:/dev/sdb
挂载日志盘
# ceph-deploy osd prepare admin-node:sdb:/dev/sdc node1:sdb:/dev/sdc node2:sdb:/dev/sdc
查看挂载情况
# ceph-deploy disk list node1
现在初步集群搭建完成
查看ceph集群健康状态
# ceph health
如果成功将提示:HEALTH_OK
增加监控节点
打开ceph.conf文件,增加mon配置,新增admin-node和node2节点为mon节点
# cd my-cluster && vim ceph.conf
mon_initial_members = node1,admin-node,node2
mon_host= 172.16.10.162,172.16.10.167,172.16.10.142
将配置文件同步至所有节点
# ceph-deploy --overwrite-conf admin admin-node node1 node2
查看配置是否生效
# ceph --show-config |grep mon_initial_members
创建新的mon
# ceph-deploy mon create admin-node
# ceph-deploymon create node2
查看mon状态
# ceph mon stat
查看整个集群状态,验证是否成功
# ceph -s
不出意外,现在应该是显示集群成功的,也可能会有时间不同步或者pg问题,在网上都有解决方法,个人测试了几遍都可以成功安装。
启动命令
启动或停止一个节点的所有osd或者mon
# systemctl start ceph-osd.target
# systemctl start ceph-mon.target
启动单个osd或者mon
# systemctl start ceph-osd@0
# systemctl start ceph-mon@node1
添加开机启动
# systemctl enable ceph-mon.target
# systemctl enable ceph-osd.target
检测是否加入开机启动
# systemctl is-enabled ceph-osd.target
# systemctlis-enabled ceph-mon.target
验证
使用块存储验证集群存储是否可用
再找一台机器做为:client-node,并且需要执行上面的基础流程
在admin-node上面
# cd my-cluster
# ceph-deploy install client-node
# ceph-deployadmin client-node
在client-node创建块设备映像
# rbd create test --size 4096 --image-format 2 --image-feature layering
查看创建的映像
# rbd ls
将ceph提供的块设备映射到client-node
# rbd map test --pool rbd --name client.admin
创建文件系统
# mkfs.xfs /dev/rbd/rbd/test
挂载文件系统
# mkdir /test
# mount /dev/rbd/rbd/test /test
使用dd测试
# cd /test
# dd if=/dev/zero of=ceshi bs=1M count=10
在随便一台osd节点上,查看是否有数据写入
# ceph -w
监控
在监控方面,calamari在安装起来比较复杂,没有仔细研究,在网上看到可以使用zabbix对ceph进行监控,然后看了一下。
监控流程
在ceph的一台monitor上,比如:admin-node