CentOS7部署Ceph分布式存储

Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。

Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储

2099201-db0fd6e3e3f49f68.png

ceph有以下几点特性

高性能

a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
c. 能够支持上千个存储节点的规模,支持TB到PB级的数据。

高可用性

a. 副本数可以灵活控制。
b. 支持故障域分隔,数据强一致性。
c. 多种故障场景自动进行修复自愈。
d. 没有单点故障,自动管理。

高可扩展性

a. 去中心化。
b. 扩展灵活。
c. 随着节点增加而线性增长。

特性丰富

a. 支持三种存储接口:块存储、文件存储、对象存储。
b. 支持自定义接口,支持多种语言驱动。

Ceph架构支持三种接口

Object:有原生的API,而且也兼容Swift和S3的API。
Block:支持精简配置、快照、克隆。
File:Posix接口,支持快照。

Ceph核心组件及概念介绍

Monitor
一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。
OSD
OSD全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。
MDS
MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。
Object
Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。
PG
PG全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。
RADOS
RADOS全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,用户实现数据分配、Failover等集群操作。
Libradio
Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。
CRUSH
CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。
RBD
RBD全称RADOS block device,是Ceph对外提供的块设备服务。
RGW
RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。
CephFS
CephFS全称Ceph File System,是Ceph对外提供的文件系统服务。

上面就介绍到这里,我们主要还是部署实践下,我本地环境是

ceph-admin192.168.16.220
ceph-node1,ceph-mon192.168.16.221
ceph-node2,ceph-mon192.168.16.222
ceph-node3,ceph-mon192.168.16.223

以上服务器均为centos7操作系统,下面我们开始部署ceph

配置ssh密钥访问

ssh-keygen -f ~/.ssh/id_rsa; 
ssh-copy-id -i root@192.168.16.221-223

添加hosts,配置主机名

cat /etc/hosts
192.168.16.220 ceph-admin
192.168.16.221 ceph-node1 ceph-mon
192.168.16.222 ceph-node2 ceph-mon
192.168.16.223 ceph-node3 ceph-mon
for n in `seq 3`;do \
scp /etc/hosts 192.168.16.22$n:/etc/hosts; \
ssh 192.168.16.22$n "hostnamectl  set-hostname ceph-node$n;" \
done

关闭firewalld、selinux

for n in `seq 3`;do \
ssh 192.168.16.22$n "systemctl stop firewalld; \
systemctl disable firewalld; \
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config; \
setenforce 0 "; \
done

时间更新同步

for n in `seq 3`;do \
ssh 192.168.16.22$n  "yum install ntpdate -y; \
ntpdate asia.pool.ntp.org" \
done

替换repo

export CEPH_DEPLOY_REPO_URL=http://172.18.210.253/repo/ceph-el7/jewel
export CEPH_DEPLOY_GPG_URL=http://172.18.210.253/repo/ceph-el7/jewel/release.asc

注:如果本地源有问题或不在本地时,使用国内的源即可

export CEPH_DEPLOY_REPO_URL=http://mirrors.163.com/ceph/rpm-jewel/el7
export CEPH_DEPLOY_GPG_URL=http://mirrors.163.com/ceph/keys/release.asc

安装ceph管理工具ceph-deploy

yum install -y ceph-deploy

创建工作目录

mkdir /ceph ; cd /ceph

安装ceph客户端

yum install -y ceph

或者 在管理节点上之行

ceph-deploy install ceph-admin ceph-node1 ceph-node2 ceph-node3

创建ceph集群

ceph-deploy new ceph-node1 ceph-node2 ceph-node3  #建议是奇数
# cat ceph.conf 
fsid = 7e1daeea-417e-43e3-a2fe-56d9444f2fbf
mon_initial_members = ceph-node1, ceph-node2, ceph-node3
mon_host = 192.168.16.221,192.168.16.222,192.168.16.223
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
rbd_default_features = 1
mon clock drift allowed = 2
mon clock drift warn backoff = 30

注意:
1、部分操作系统kernel只支持layering,所以最好直接在配置文件指明创建rbd时默认支持的特性

rbd_default_features = 1

2、由于ceph分布式对时钟的同步要求很高,可以将同步误差范围调大;

    mon clock drift allowed = 2
    mon clock drift warn backoff = 30
ceph-deploy mon create-initial

创建osd有两种方式
1、使用系统裸盘,作为存储空间;
2、使用现有文件系统,以目录或分区作为存储空间,官方建议为 OSD 及其日志使用独立硬盘或分区作为存储空间
使用分区

ceph-deploy disk zap ceph-node1:/dev/sdb1 ceph-node2:/dev/sdb1 ceph-node3:/dev/sdb1
ceph-deploy osd prepare  ceph-node1:/dev/sdb1 ceph-node2:/dev/sdb1 ceph-node3:/dev/sdb1
ceph-deploy osd activate ceph-node1:/dev/sdb1 ceph-node2:/dev/sdb1 ceph-node3:/dev/sdb1

使用目录

ssh ceph-node1 “mkdir /datal/osd0;chown -R ceph:ceph /data/osd0"
ssh ceph-node2 “mkdir /datal/osd1;chown -R ceph:ceph /data/osd1"
ssh ceph-node3 “mkdir /datal/osd2;chown -R ceph:ceph /data/osd2"
ceph-deploy osd prepare ceph-node1:/data/osd0 ceph-node2:/data/osd1 ceph-node3:/data/osd2
ceph-deploy osd acivate ceph-node1:/data/osd0 ceph-node2:/data/osd1 ceph-node3:/data/osd2

赋予管理员权限

ceph-deploy admin ceph-admin
# ceph -s
cluster 7e1daeea-417e-43e3-a2fe-56d9444f2fbf
health HEALTH_OK
monmap e1: 3 mons at {ceph-node1=192.168.16.221:6789/0,ceph-node2=192.168.16.222:6789/0,ceph-node3=192.168.16.223:6789/0}
      election epoch 4, quorum 0,1,2 ceph-node1,ceph-node2,ceph-node3
osdmap e14: 3 osds: 3 up, 3 in
      flags sortbitwise,require_jewel_osds
pgmap v24: 64 pgs, 1 pools, 0 bytes data, 0 objects
      15460 MB used, 2742 GB / 2757 GB avail
            64 active+clean
# ceph health
HEALTH_OK

创建pool

ceph osd pool create image 64 
ceph osd pool delete rbd rbd --yes-i-really-really-mean-it

ceph建好后默认有个rbd池,可以考虑删除

rbd create test --size 1024 -p image

注:创建一个镜像,-p参数指定池的名称,-size单位为M
常用操作ceph reset

ceph-deploy purge 节点1 节点2 ....
ceph-deploy purgedata 节点1 节点2 ....
ceph-deploy forgetkeys

常用命令

rados lspools 查看池子
ceph -s 或 ceph status 查看集群状态
ceph -w 观察集群健康状态
ceph quorum_status --format json-pretty 检查ceph monitor仲裁状态
ceph df 检查集群使用情况
ceph mon stat 检查monitor状态
ceph osd stat 检查osd状态
ceph pg stat 检查pg配置组状态
ceph pg dump 列出PG
ceph osd lspools 列出存储池
ceph osd tree 检查osd的crush map
ceph auth list 列出集群的认证密钥
ceph 获取每个osd上pg的数量



内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/710.html