ceph集群搭建
ceph组件介绍
- MON(monitor)
Monitor
在Ceph
集群中扮演者管理者的角色,保护了整个集群的状态,是Ceph
集群中最重要的组件。Mon
保障集群的相干组件在同一时刻可能达成统一,相当于集群的领导层,负责收集、更新和公布集群信息。为了躲避单点故障,在理论的Ceph
部署环境中会部署多个Mon
,同样会引来多个Mon
之前如何协同工作的问题。在一个规范的Ceph
环境中。 - OSD
理论存储数据的过程。通常一个OSD daemon
绑定一个物理磁盘。Client write/read
数据最终都会走到OSD
去执行write/read
操作。 - RADOS(Reliable Autonomic Distributed Object Store, RADOS)
RADOS
是Ceph
存储集群的根底。Ceph
中的所有都以对象的模式存储,而RADOS
就负责存储这些对象,而不思考它们的数据类型。RADOS
层确保数据一致性和可靠性。对于数据一致性,它执行数据复制、故障检测和复原。还包含数据在集群节点间的recovery
。 - Librados
简化拜访RADOS
的一种办法,目前反对PHP、Ruby、Java、Python、C
和C++
语言。它提供了Ceph
存储集群的一个本地接口RADOS
,并且是其余服务(如RBD 、RGW
) 的根底,以及为CephFS
提供POSIX
接口。librados API
反对间接拜访RADOS
,使得开发者可能创立本人的接口来拜访Ceph
集群存储。 - RBD
Ceph
块设施。对外提供块存储。能够像磁盘一样被映射、格式化曾经挂载到服务器上。反对snapshot
(快照)及增量备份。 - RGW
Ceph
对象网关,提供了一个兼容S3
和Swift
的restful API
接口。RGW
还反对多租户和Openstack
的keyston
身份验证服务。 - MDS
Ceph
元数据服务器,跟踪文件层次结构并存储只供CephFS
应用的元数据。Ceph
块设施和RADOS
网关不须要元数据。MDS
不间接给client
提供数据服务。
ceph写入数据流程
如下图所示一个File
首先被切割为多个objects
,每个objects
默认4M
大小,也就是100M
的数据会被切割为25个object
,并且每个object
都有本人的objectid
,通过hash而后进行掩码的运算,确认object
是应该散布那个pg
中,而后pg
通过crush
算法,将数据落在不同的osd
.默认的crush
算法基于host
的.
部署ceph集群
应用三台服务器
服务器 | 用处 |
---|---|
192.168.21.101 | node-1 |
192.168.21.101 | node-2 |
192.168.21.102 | node-3 |
批改三台服务器hostname
hostnamectl set-hostname node-1hostnamectl set-hostname node-2hostnamectl set-hostname node-3
开启ssh免密登录
ssh-keygenssh-copy-id -i /root/.ssh/id_rsa.pub node-2ssh-copy-id -i /root/.ssh/id_rsa.pub node-3
敞开所有节点selinux和firewalld
setenforce 0sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/configsystemctl stop firewalld
所有节点装置ntp
yum install ntp ntpdate ntp-docsystemctl start ntpd && systemctl enable ntpdntpq -np
所有节点增加yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repowget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repocat >/etc/yum.repos.d/ceph.repo <<EOF[norch]name=norchbaseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/enabled=1gpgcheck=0[x86_64]name=x86_64baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/enabled=1gpgcheck=0EOF
装置ceph初始化mon
yum clean all && yum makecacheyum install python-setuptools ceph-deploy -ymkdir ceph-deploy && cd ceph-deployceph-deploy new --public-network 192.168.21.0/0 --cluster-network 192.168.21.0/0 node-1yum install ceph ceph-mon ceph-mgr ceph-radosgw cepht-mds -y #所有节点装置ceph-deploy mon create-initial #初始化monceph-deploy admin node-1 node-2 node-3 #推送配置文件到各个节点ceph-deploy mgr create node-1 #初始化mgr作为监控ceph -s # 查看集群状态
扩大mon增加osd
#集群增加osdceph-deploy osd create node-1 --data /dev/sdbceph-deploy osd create node-2 --data /dev/sdbceph-deploy osd create node-3 --data /dev/sdb#增加mon节点使其高可用ceph-deploy --overwrite mon add node-2ceph-deploy --overwrite mon add node-3#查看osd状态ceph osd tree#查看Ceph monitor仲裁状态ceph quorum_status --format json-pretty