CEPH集群安装、扩容、OSD故障恢复

CEPH简介

CEPH是一个开源的项目,它是软件定义的、同一的存储解决方案。CEPH是一个可大规模扩展、高性能并且无单点故障的分布式存储系统。从一开始它就运行在通用的商用的硬件上,具有高度的可伸缩性,容量可扩展至EB界别,甚至更大

CEPH架构

在这里插入图片描述
1、相关名词解释

  • RADOS:Reliable Autonomic Distributed Object Store(可靠的,自主的,分布式的对象存储)。在 ceph 中这个名词经常出现,有时会以 R 表示 RADOS。实际上这个词仅仅是对 ceph 的一个修饰词,并不代表 ceph 的组件什么的。粗暴的认为, RADOS = ceph 对象存储集群即可
  • RGW:对象存储网关,也就是对象存储接口
  • RBD:块设备,也就是块存储接口
  • CEPH FS:ceph 文件系统,也就是文件级存储接口

2、CEPH基础架构

  • CEPH组件主要分分为两部分:
    Ceph Node:构成Ceph集群的基础组件
    Ceph Client:对外提供多种方式使用Ceph存储的组件

3、CEPH基础组件

  • OSD(ceph-osd):object storage daemon,对象存储进程。ceph 管理物理硬盘时,引入了OSD概念,每一块盘都会针对的运行一个OSD进程。换句话说,ceph 集群通过管理 OSD 来管理物理硬盘。OSD 一般功能为:存储数据、维护数据副本、数据恢复、数据再平衡以及对ceph monitor组件提供相关监控信息
  • Manager(ceph-mgr):用于收集ceph集群状态、运行指标,比如存储利用率、当前性能指标和系统负载。对外提供 ceph dashboard(ceph ui)和 resetful api。Manager组件开启高可用时,至少2个
  • MDS(ceph-mds):Metadata server,元数据服务。为ceph 文件系统提供元数据服务(ceph 对象存储和块存储不需要MDS)。为 posix 文件系统用户提供性能良好的基础命令(ls,find等)
  • Monitor(ceph-mon):维护集群的状态,包含monitor组件信息,manger 组件信息,osd组件信息,mds组件信息,crush 算法信息。还负责ceph集群的身份验证功能,client在连接ceph集群时通过此组件进行验证。Monitor组件开启高可用时,至少3个

4、Ceph Clients
此部分介绍 ceph 对外提供各种功能的组件。其中包含:Block Device、Object Storage、Filesystem

  • Block Device:块存储设备,RBD
  • Object Storage: 对象存储,RGW,对外可提供 swift 、s3 接口类型restful api
  • Filesystem:文件系统,CephFS。提供一个兼容POSIX的文件系统

5、Ceph存储过程
前面介绍Ceph的一些组件及对外提供的功能,这部分主要介绍Ceph的逻辑存储,这部分主要介绍Ceph的存储逻辑。在对象存储中,一切都是扁平化的,并且存储的最小单元为对象(OBJ)
在这里插入图片描述

ceph 在对象存储的基础上提供了更加高级的思想。当对象数量达到了百万级以上,原生的对象存储在索引对象时消耗的性能非常大。ceph因此引入了 placement group (pg)的概念。一个PG就是一组对象的集合
在这里插入图片描述
obj和pg之间的映射由ceph client计算得出
讨论 pg 时,不得不提的另外一个名词:pgp,pgp决定了pg和osd 之间的映射关系。一般将 pgp_num 设置成和 pg_num 一样大小。这里还有一个名词需要提一下,在ceph中会经常见到crush算法。简单来说,crush 算法就是指 ceph 中数据如何存储、读取的过程。由于ceph集群面对许多的独立项目,因此ceph还引入了ceph pool的概念用于划分不同的项目
ceph pool 是对 ceph 对象的逻辑划分,并不是物理划分
pg和ceph pool的区别:

  • pg对于用户来说是透明的,只是底层的一种优化方案
  • ceph pool对于用户来说,就像mysql中的database

像大多数集群软件一样,ceph 也提供了缓存的概念。称之为 Cache Tier(缓存层,在具体使用时有时会称之为缓存池)。缓存池对用户来说是透明的,因此不会改变用户的原有使用逻辑
以上缓存池的介绍,均为底层逻辑。在没有缓存池时,ceph client 直接指向存储池,在添加缓存池后,ceph client 指向缓存池,缓存池再指向存储池

CEPH集群安装部署

1、环境规划

主机名 操作系统 IP地址 内存 硬盘/G
ceph01 centos7.7 ens33:192.168.100.101 ; ens34:192.168.7.159 4 20+1024
ceph02 centos7.7 ens33:192.168.100.102 ; ens34:192.168.7.160 4 20+1024
ceph03 centos7.7 ens33:192.168.100.103 ; ens34:192.168.7.158 4 20+1024
ceph04 centos7.7 ens33:192.168.100.104 ; ens34:192.168.7.161 4 20+1024
  • 使用ceph01、ceph02、ceph03来搭建集群
  • ceph04作为扩容部署

2、环境部署(所有节点)
(1)安装环境包

[root@localhost ~]# yum -y install wget curl net-tools bash-completion vim

(2)关闭防火墙

扫描二维码关注公众号,回复: 11137863 查看本文章
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld

(3)关闭核心功能

[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=disabled

(4)更改主机名

[root@localhost ~]# hostnamectl set-hostname ceph01
[root@localhost ~]# hostnamectl set-hostname ceph02
[root@localhost ~]# hostnamectl set-hostname ceph03
[root@localhost ~]# hostnamectl set-hostname ceph04

(5)配置hosts文件

[root@ceph01 ~]# vim /etc/hosts
192.168.100.101	ceph01
192.168.100.102	ceph02
192.168.100.103	ceph03
192.168.100.104	ceph04

(6)配置各节点免交互登陆

[root@ceph01 ~]# ssh-keygen
[root@ceph01 ~]# ssh-copy-id root@ceph01
[root@ceph01 ~]# ssh-copy-id root@ceph02
[root@ceph01 ~]# ssh-copy-id root@ceph03
[root@ceph01 ~]# ssh-copy-id root@ceph04

(7)配置YUM源

[root@ceph01 ~]# cd /etc/yum.repos.d
[root@ceph01 yum.repos.d]# mkdir bak
[root@ceph01 yum.repos.d]# mv C* bak/
[root@ceph01 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@ceph01 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@ceph01 yum.repos.d]# vimceph.repo
[ceph]
name=Ceph packages for
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

[ceph-noarch]
name=Ceph noarch packages 
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

[ceph-source]
name=Ceph source packages 
baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

[root@ceph01 yum.repos.d]# ll
总用量 12
drwxr-xr-x. 2 root root  187 3月  30 17:55 bak
-rw-r--r--  1 root root 2523 6月  16 2018 CentOS-Base.repo
-rw-r--r--  1 root root  602 3月  30 18:01 ceph.repo
-rw-r--r--  1 root root  664 5月  11 2018 epel.repo

[root@ceph01 ~]# yum update -y

3、配置时间同步
(1)在ceph01配置时间服务器

[root@ceph01 ~]# yum -y install ntpdate ntp
[root@ceph01 ~]# ntpdate ntp1.aliyun.com
#把当前系统时间写入到CMOS中
[root@ceph01 ~]# clock -w	
[root@ceph01 ~]# vim /etc/ntp.conf
driftfile /var/lib/ntp/drift
restrict default nomodify
restrict 127.0.0.1
restrict ::1
restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap fudge 127.127.1.0 stra
tum 10
server 127.127.1.0
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor

[root@ceph01 ~]# systemctl start ntpd

(2)在ceph02、ceph03、ceph04上同步时间源

[root@ceph02 ~]# yum -y install ntpdate
[root@ceph02 ~]# ntpdate ceph01
[root@ceph02 ~]# crontab -e 
*/30 * * * * /usr/bin/ntpdate ceph01 >> /var/log/ntpdate.log

[root@ceph02 ~]# systemctl restart crond

4、ceph集群搭建
(1)在所有节点创建ceph配置文件目录

[root@ceph01 ~]# mkdir /etc/ceph

(2)在ceph01上安装工具包

[root@ceph01 ~]# yum -y install python-setuptools
[root@ceph01 ~]# yum -y install ceph-deploy

(3)在所有节点上安装ceph软件包

[root@ceph01 ~]# yum -y install ceph

(4)登陆ceph01创建mon

[root@ceph01 ~]# cd /etc/ceph/
[root@ceph01 ceph]# ceph-deploy new ceph01 ceph02 ceph03
#初始化mon并收集密钥
[root@ceph01 ceph]# ceph-deploy mon create-initial
[root@ceph01 ceph]# ceph -s
  cluster:
    id:     e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph01,ceph02,ceph03		//此处显示mon创建成功
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:     

(5)登陆ceph01创建osd

[root@ceph01 ceph]# ceph-deploy osd create --data /dev/sdb ceph01
[root@ceph01 ceph]# ceph-deploy osd create --data /dev/sdb ceph02
[root@ceph01 ceph]#  ceph-deploy osd create --data /dev/sdb ceph03
[root@ceph01 ceph]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME       STATUS REWEIGHT PRI-AFF 
-1       2.99698 root default                            
-3       0.99899     host ceph01                         
 0   hdd 0.99899         osd.0       up  1.00000 1.00000 
-5       0.99899     host ceph02                         
 1   hdd 0.99899         osd.1       up  1.00000 1.00000 
-7       0.99899     host ceph03                         
 2   hdd 0.99899         osd.2       up  1.00000 1.00000 
[root@ceph01 ceph]# ceph osd stat
3 osds: 3 up, 3 in; epoch: e13
#下发密钥到节点ceph02、ceph03
[root@ceph01 ceph]# ceph-deploy admin ceph02 ceph03
#在各节点给密钥增加权限
[root@ceph01 ceph]# chmod +x /etc/ceph/ceph.client.admin.keyring
[root@ceph02 ceph]# chmod +x /etc/ceph/ceph.client.admin.keyring
[root@ceph03 ceph]# chmod +x /etc/ceph/ceph.client.admin.keyring
[root@ceph01 ceph]# ceph -s
  cluster:
    id:     e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
    health: HEALTH_WARN
            no active mgr
 
  services:
    mon: 3 daemons, quorum ceph01,ceph02,ceph03
    mgr: no daemons active
    osd: 3 osds: 3 up, 3 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:     

(6)创建mgr管理服务

[root@ceph01 ceph]# ceph-deploy mgr create ceph01 ceph02 ceph03
[root@ceph01 ceph]# ceph -s
  cluster:
    id:     e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph01,ceph02,ceph03
    mgr: ceph01(active), standbys: ceph02, ceph03
    osd: 3 osds: 3 up, 3 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   3.0 GiB used, 3.0 TiB / 3.0 TiB avail
    pgs:     
    

(7)创建ceph集群管理页面

#在创建之前要确认集群的状态,不能有错误
#启用dashboard模块
[root@ceph01 ceph]# ceph mgr module enable dashboard
#创建https证书
[root@ceph01 ceph]# ceph dashboard create-self-signed-cert
Self-signed certificate created
#查看mgr服务
[root@ceph01 ceph]# ceph mgr services
{
    "dashboard": "https://ceph01:8443/"
}
#设置账号密码
[root@ceph01 ceph]# ceph dashboard set-login-credentials admin 123
Username and password updated

使用浏览器打开https://192.168.100.101:8443即可登录查看
在这里插入图片描述在这里插入图片描述
5、ceph扩容
(1)扩容osd(在ceph01上操作)

[root@ceph01 ceph]# ceph-deploy osd create --data /dev/sdb ceph04^C
[root@ceph01 ceph]# ceph osd stat
4 osds: 4 up, 4 in; epoch: e17

(2)扩容mon(在ceph01上操作)

[root@ceph01 ceph]# vim ceph.conf 
将ceph04主机名、IP地址新增到配置文件中
mon_initial_members = ceph01, ceph02, ceph03, ceph04
mon_host = 192.168.100.101,192.168.100.102,192.168.100.103,192.168.7.104
#配置ceph内部通信网段
public network = 192.168.100.0/24
#重新下发密钥到各个节点
[root@ceph01 ceph]# ceph-deploy --overwrite-conf config push ceph01 ceph02 ceph03 ceph04
#在ceph04给下发的密钥增加权限
[root@ceph04 ceph]# chmod +x ceph.client.admin.keyring
#在ceph01添加ceph04到mon
[root@ceph01 ceph]# ceph-deploy mon add ceph04
[root@ceph01 ceph]# systemctl restart ceph-mon.target
[root@ceph01 ceph]# ceph -s
  cluster:
    id:     e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
    health: HEALTH_OK
 
  services:
    mon: 4 daemons, quorum ceph01,ceph02,ceph03,ceph04		//此处显示添加成功
    mgr: ceph01(active), standbys: ceph03, ceph02
    osd: 4 osds: 4 up, 4 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   4.0 GiB used, 4.0 TiB / 4.0 TiB avail
    pgs:     
 

(3)mgr添加节点ceph04

[root@ceph01 ceph]# ceph-deploy mgr create ceph04^C
[root@ceph01 ceph]# ceph -s
  cluster:
    id:     e161159f-1ac7-4c77-a7d8-e54ff0ee4ff1
    health: HEALTH_WARN
            clock skew detected on mon.ceph02
 
  services:
    mon: 4 daemons, quorum ceph01,ceph02,ceph03,ceph04
    mgr: ceph01(active), standbys: ceph03, ceph02, ceph04
    osd: 4 osds: 4 up, 4 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   4.0 GiB used, 4.0 TiB / 4.0 TiB avail
    pgs:     
 

6、osd数据恢复
(1)故障模拟(ceph01上操作)

[root@ceph01 ceph]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME       STATUS REWEIGHT PRI-AFF 
-1       3.99597 root default                            
-3       0.99899     host ceph01                         
 0   hdd 0.99899         osd.0       up  1.00000 1.00000 
-5       0.99899     host ceph02                         
 1   hdd 0.99899         osd.1       up  1.00000 1.00000 
-7       0.99899     host ceph03                         
 2   hdd 0.99899         osd.2       up  1.00000 1.00000 
-9       0.99899     host ceph04                         
 3   hdd 0.99899         osd.3       up  1.00000 1.00000 
#移除osd.2
[root@ceph01 ceph]# ceph osd out osd.2
#删除osd.2
[root@ceph01 ceph]# ceph osd crush remove osd.2
#删除osd.2的认证
[root@ceph01 ceph]# ceph auth del osd.2
#彻底删除osd.2
[root@ceph01 ceph]# ceph osd rm osd.2
#在ceph03重启osd服务
[root@ceph03 ~]# systemctl restart ceph-osd.target
#查看osd状态,osd.2的状态变成了down
[root@ceph01 ceph]# ceph osd tree
......
-7       0.99899     host ceph03                         
 2                       osd.2       down   1.00000 
......

(2)恢复osd到集群(在ceph03上操作)

#查看ceph信息
[root@ceph03 ~]# df -Th		
文件系统       类型      容量  已用  可用 已用% 挂载点
......
tmpfs          tmpfs     1.9G   52K  1.9G    1% /var/lib/ceph/osd/ceph-2

[root@ceph03 ~]# cd /var/lib/ceph/osd/ceph-2
#查看fsid
[root@ceph03 ceph-2]# more fsid		
e99fd891-a32b-4e33-8934-b7a6c3158e8f

#ceph创建uuid
[root@ceph03 ceph-2]# ceph osd create e99fd891-a32b-4e33-8934-b7a6c3158e8f
#增加权限
[root@ceph03 ceph-2]# ceph auth add osd.2 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-2/keyring
#0.99899是权重,host=主机名
[root@ceph03 ceph-2]# ceph osd crush add 2 0.99899 host=ceph03 
[root@ceph03 ceph-2]# ceph osd in osd.2
[root@ceph03 ceph-2]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME       STATUS REWEIGHT PRI-AFF 
-1       3.99597 root default                            
-3       0.99899     host ceph01                         
 0   hdd 0.99899         osd.0       up  1.00000 1.00000 
-5       0.99899     host ceph02                         
 1   hdd 0.99899         osd.1       up  1.00000 1.00000 
-7       0.99899     host ceph03                         
 2   hdd 0.99899         osd.2       up  1.00000 1.00000 
-9       0.99899     host ceph04                         
 3   hdd 0.99899         osd.3       up  1.00000 1.00000 
[root@ceph03 ceph-2]# systemctl restart ceph-osd.target
发布了106 篇原创文章 · 获赞 223 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45682995/article/details/105234780