Ceph RBD 存储服务集群部署

894 views次阅读
一条评论

最近在学习 kubernetes 过程中,想实现 pod 数据的持久化。在调研的过程中,发现 ceph 在最近几年发展火热,也有很多案例落地企业。在选型方面,个人更加倾向于社区火热的项目,GlusterFS、Ceph 都在考虑的范围之内,但是由于 GlusterFS 只提供对象存储和文件系统存储,而 Ceph 则提供对象存储、块存储以及文件系统存储。怀着对新事物的向往,果断选择 Ceph 来实现 Ceph 块存储对接 kubernetes 来实现 pod 的数据持久化。

1、ceph基础介绍

Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储,比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘。

Ceph相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。

2、Ceph的核心组件

Ceph的核心组件包括Ceph OSD、Ceph Monitor和Ceph MDS。

Ceph是一个分布式存储,可以提供对象存储、块存储和文件存储,其中对象存储和块存储可以很好地和各大云平台集成。一个Ceph集群中有Monitor节点、MDS节点(可选,用于文件存储)、至少两个OSD守护进程。

Ceph OSD:OSD守护进程,用于存储数据、处理数据拷贝、恢复、回滚、均衡,并通过心跳程序向Monitor提供部分监控信息。一个Ceph集群中至少需要两个OSD守护进程。

Monitor:维护集群的状态映射信息,包括monitor、OSD、Placement Group(PG)。还维护了Monitor、OSD和PG的状态改变历史信息。

MDS:存储Ceph文件系统的元数据。

3、Ceph 常用命令

命令 功能
rbd create 创建块设备映像
rbd ls 列出 rbd 存储池中的块设备
rbd info 查看块设备信息
rbd diff 可以统计 rbd 使用量
rbd feature disable 禁止掉块设备的某些特性
rbd map 映射块设备
rbd remove 删除块设备
rbd resize 更改块设备的大小

4、集群环境

主机名 IP地址 角色
ceph-1 172.20.2.10 admin,osd,mon
ceph-2 172.20.2.11 osd,mon
ceph-3 172.20.2.12 osd,mon

5、集群部署

5.1 挂载磁盘

root@ceph-1 ~]# mkfs.xfs /dev/vdb
meta-data=/dev/vdb               isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@ceph-1 ~]# mkdir /var/local/osd0
[root@ceph-1 ~]# mount /dev/vdb /var/local/osd0/

[root@ceph-2 ~]# mkfs.xfs /dev/vdb
meta-data=/dev/vdb               isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@ceph-2 ~]# mkdir /var/local/osd1
[root@ceph-2 ~]# mount /dev/vdb /var/local/osd1/

[root@ceph-3 ~]# mkfs.xfs /dev/vdb
meta-data=/dev/vdb               isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@ceph-3 ~]# mkdir /var/local/osd2
[root@ceph-3 ~]# mount /dev/vdb /var/local/osd2/

5.2 配置hosts

[root@ceph-1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.20.2.10 ceph-1
172.20.2.11 ceph-2
172.20.2.12 ceph-3

5.3 配置免密登陆

[root@ceph-1 ~]# ssh-keygen
[root@ceph-1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.20.2.11
[root@ceph-1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.20.2.12

5.4 Master安装ceph-deploy工具

配置YUM源(所有节点)

[root@ceph-1 ~]# cat /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority =1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority =1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS
gpgcheck=0
priority=1

安装(所有节点)

[root@ceph-1 ~]# yum install ceph-deploy -y

5.5 创建Monitor服务

创建monitor服务,指定master节点的hostname

[root@ceph-1 ~]# mkdir /etc/ceph && cd /etc/ceph
[root@ceph-1 ceph]# ceph-deploy new ceph-1
[root@ceph-1 ceph]# cat ceph.conf
[global]
fsid = dd2ddec6-dd1f-497b-b21c-a143ba0e721e
mon_initial_members = ceph-1
mon_host = 172.20.2.10
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2

5.6 所有节点安装

[root@ceph-1 ceph]# yum install yum-plugin-priorities epel-release -y
# master节点利用ceph-deply 部署ceph
[root@ceph-1 ceph]# ceph-deploy install ceph-1 ceph-2 ceph-3

# 安装ceph monitor
[root@ceph-1 ceph]# ceph-deploy mon create ceph-1
# 收集节点的keyring文件
[root@ceph-1 ceph]# ceph-deploy gatherkeys ceph-1
# 创建osd
[root@ceph-1 ceph]# ceph-deploy osd prepare ceph-1:/var/local/osd0 ceph-2:/var/local/osd1 ceph-3:/var/local/osd2
# 修改权限
[root@ceph-1 ceph]# chmod 777 /var/local/osd0/ -R
# 激活osd
[root@ceph-1 ceph]# ceph-deploy osd activate ceph-1:/var/local/osd0 ceph-2:/var/local/osd1 ceph-3:/var/local/osd2

查看状态

[root@ceph-1 ceph]# ceph-deploy osd list ceph-1 ceph-2 ceph-3

5.7 统一配置

用ceph-deploy把配置文件和admin密钥拷贝到所有节点,这样每次执行Ceph命令行时就无需指定monitor地址和ceph.client.admin.keyring了

[root@ceph-1 ceph]# ceph-deploy admin ceph-1 ceph-2 ceph-3
[root@ceph-1 ceph]# chmod +r /etc/ceph/ceph.client.admin.keyring
[root@ceph-1 ceph]# ceph -s
    cluster dd2ddec6-dd1f-497b-b21c-a143ba0e721e
     health HEALTH_OK
     monmap e1: 1 mons at {ceph-1=172.20.2.10:6789/0}
            election epoch 3, quorum 0 ceph-1
     osdmap e15: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v24: 64 pgs, 1 pools, 0 bytes data, 0 objects
            15681 MB used, 15008 MB / 30690 MB avail
                  64 active+clean

5.8 部署MDS服务

[root@ceph-1 ceph]# ceph-deploy mds create ceph-2 ceph-3
[root@ceph-1 ceph]# ceph mds stat
e3:, 2 up:standby

至此,Ceph集群搭建完成

6、创建ceph文件系统

6.1 创建存储池

[root@ceph-1 ceph]# ceph osd pool create tetspool 128
pool 'tetspool' created
[root@ceph-1 ceph]# ceph osd pool ls
rbd
testpool

6.2 创建客户端密钥

ceph auth get-or-create client.testpool mon 'allow r' osd 'allow rwx pool=testpool' -o /etc/ceph/ceph.client.testpool.keyring

将密钥拷贝至ceph-2,ceph-3

[root@ceph-1 ceph]# scp ceph.client.testpool.keyring root@ceph-2:/etc/ceph/
ceph.client.testpool.keyring                                                                          100%   66     0.1KB/s   00:00
[root@ceph-1 ceph]# scp ceph.client.testpool.keyring root@ceph-3:/etc/ceph/
ceph.client.testpool.keyring                                                                          100%   66     0.1KB/s   00:00
[root@ceph-1 ceph]#

6.3 查看证书

[root@ceph-1 ceph]# ceph auth list
installed auth entries:

mds.ceph-2
	key: AQAo4jheSokOOxAA3zRIy3oES3Kt64ZUzN5v0Q==
	caps: [mds] allow
	caps: [mon] allow profile mds
	caps: [osd] allow rwx
mds.ceph-3
	key: AQAq4jheEDviBxAA0/xhVBc5VIj7urM4V+Qq4A==
	caps: [mds] allow
	caps: [mon] allow profile mds
	caps: [osd] allow rwx
osd.0
	key: AQDe4DheeOABOhAAH4+s20CMgvahy35Xwi8vyg==
	caps: [mon] allow profile osd
	caps: [osd] allow *
osd.1
	key: AQDp4DheYBnuHxAA6PyM9ox++gGJntbs92xvIg==
	caps: [mon] allow profile osd
	caps: [osd] allow *
osd.2
	key: AQDy4DhevjTkGhAA1vYCG2OLlznIHpFcrZHEig==
	caps: [mon] allow profile osd
	caps: [osd] allow *
client.admin
	key: AQAU4DhegBKDCBAAC7beTiFEV56OAOzgJ0KxZA==
	caps: [mds] allow *
	caps: [mon] allow *
	caps: [osd] allow *
client.bootstrap-mds
	key: AQAV4Dhe/lxHDRAAH63aFkcLRDQE2tqyoPYgVg==
	caps: [mon] allow profile bootstrap-mds
client.bootstrap-mgr
	key: AQA64Dhew+s6KRAAldXaOhKxpOxp3XBQEgYSkQ==
	caps: [mon] allow profile bootstrap-mgr
client.bootstrap-osd
	key: AQAU4DhelcsFHhAAntxMoug3fIogDUGHWrlTKA==
	caps: [mon] allow profile bootstrap-osd
client.bootstrap-rgw
	key: AQAU4Dhe2lZeMxAAwLj1hOiLDN/pIUAFtaEFyA==
	caps: [mon] allow profile bootstrap-rgw
client.testpool
	key: AQCT4zhetdpmNhAA/jJYMuiXYStRotbTFiK4qw==
	caps: [mon] allow r
	caps: [osd] allow rwx pool=testpool

 

 

Honest1y
版权声明:本站原创文章,由Honest1y于2020年02月04日发表,共计11924字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(一条评论)
头像
一致 评论达人LV.1
2020-04-06 19:03:32 回复

学习了啊