Ceph存储部署
一、Ceph介绍
Ceph 是一个开源的分布式存储系统,同时支持对象存储、块设备、文件系统.。
ceph 是一个对象(object)式存储系统,它把每一个待管理的数据流(文件等数据)切分为一到 多个固定大小(默认 4 兆)的对象数据,并以其为原子单元(原子是构成元素的最小单元)完成 数据的读写。
对象数据的底层存储服务是由多个存储主机(host)组成的存储集群,该集群也被称之为 RADOS(reliable automatic distributed object store)存储集群,即可靠的、自动化的、分布 式的对象存储系统。
librados 是 RADOS 存储集群的 API,支持 C/C++/JAVA/python/ruby/php/go 等编程语言客户端。
二、Ceph组件
2.1 Monitor(ceph-mon) ceph 监视器
在一个主机上运行的一个守护进程,用于维护集群状态映射(maintains maps of the cluster state),比如 ceph 集群中有多少存储池、每个存储池有多少 PG 以及存储池和 PG 的映射关系等, monitor map, manager map, the OSD map, the MDS map, and the CRUSH map,这些映射是 Ceph 守护程序相互协调所需的关键群集状态,此外监视器还负 责管理守护程序和客户端之间的身份验证(认证使用 cephX 协议)。通常至少需要三个监视器 才能实现冗余和高可用性。
2.2 Managers(ceph-mgr)的功能
在一个主机上运行的一个守护进程,Ceph Manager 守护程序(ceph-mgr)负责跟踪 运行时指标和 Ceph 集群的当前状态,包括存储利用率,当前性能指标和系统负载。Ceph Manager 守护程序还托管基于 python 的模块来管理和公开 Ceph 集群信息,包括基于 Web 的 Ceph 仪表板和 REST API。高可用性通常至少需要两个管理器。
2.3 Ceph OSDs(对象存储守护程序 ceph-osd)
提供存储数据,操作系统上的一个磁盘就是一个 OSD 守护程序,OSD 用于处理 ceph 集群数据复制,恢复,重新平衡,并通过检查其他 Ceph OSD 守护程序的心跳来向 Ceph 监视器和管理器提供一些监视信息。通常至少需要 3 个 Ceph OSD 才能实现冗余和高可用 性。
2.4 MDS(ceph 元数据服务器 ceph-mds)
代表 ceph 文件系统(NFS/CIFS)存储元数据,(即 Ceph 块设备和 Ceph 对象存储不使用 MDS)
三、ceph 逻辑组织架构
- Pool:存储池、分区,存储池的大小取决于底层的存储空间。
- PG(placement group):一个 pool 内部可以有多个 PG 存在,pool 和 PG 都是抽象的逻辑概 念,一个 pool 中有多少个 PG 可以通过公式计算。
- OSD(Object Storage Daemon,对象存储设备):每一块磁盘都是一个 osd,一个主机由一个或 多个 osd 组成.
ceph 集群部署好之后,要先创建存储池才能向 ceph 写入数据,文件在向 ceph 保存之前要 先进行一致性 hash 计算,计算后会把文件保存在某个对应的 PG 的,此文件一定属于某个 pool 的一个 PG,在通过 PG 保存在 OSD 上。 数据对象在写到主 OSD 之后再同步对从 OSD 以实现数据的高可用。
四、使用ceph-deploy部署ceph存储
准备
这里使用 ceph-deploy 来部署三节点的ceph集群,节点信息如下:
10.200.1.100 ceph-node01
10.200.1.101 ceph-node02
10.200.1.102 ceph-node03
所有操作均在 ceph-node01 节点进行操作。
A.在每台机器上都配置hosts
# cat /etc/hosts
10.200.1.100 ceph-node01
10.200.1.101 ceph-node02
10.200.1.102 ceph-node03
B.配置互信免秘登录
ssh-keygen #生成秘钥,一路回车
ssh-copy-id root@ceph-node01 #将公钥拷贝到3个节点
C.安装ansible
yum -y install ansible
cat /etc/ansible/hosts | grep -v ^# | grep -v ^$
[node]
ceph-node01
ceph-node02
ceph-node03
D.关闭SeLinux和Firewall
# ansible node -m copy -a 'src=/etc/hosts dest=/etc/'
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# ansible node -m copy -a 'src=/etc/selinux/config dest=/etc/selinux/'
# systemctl stop firewalld
# systemctl disable firewalld
# ansible node -a 'systemctl stop firewalld'
# ansible node -a 'systemctl disable firewalld'
E.安装NTP
# yum -y install ntp ntpdate ntp-doc
# systemctl start ntpdate
# systemctl start ntpd
# systemctl enable ntpd ntpdate
# ansible node -a 'yum -y install ntp ntpdate ntp-doc'
# ansible node -a 'systemctl start ntpdate'
# ansible node -a 'systemctl start ntpd'
# ansible node -a 'systemctl enable ntpdate'
# ansible node -a 'systemctl enable ntpd'
F.安装相应源
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo ###安装EPEL源
# ansible node -m copy -a 'src=/etc/yum.repos.d/epel.repo dest=/etc/yum.repos.d/'
# yum -y install yum-plugin-priorities
# yum -y install snappy leveldb gdisk python-argparse gperftools-libs
# rpm --import 'https://mirrors.aliyun.com/ceph/keys/release.asc'
# vim /etc/yum.repos.d/ceph.repo ###安装阿里云的ceph源
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el7/$basearch
enabled=1
gpgcheck=1
priority=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch
enabled=1
gpgcheck=1
priority=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el7/SRPMS
enabled=1
gpgcheck=1
priority=1
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
# yum makecache
五、部署ceph集群
A.安装ceph-deploy
# yum -y install ceph-deploy
B.启动一个新的 ceph 集群(官方建议创建特定用户来部署集群)
# mkdir /etc/ceph && cd /etc/ceph
# ceph-deploy new ceph-node{01,02,03}
# ls
ceph.conf ceph-deploy-ceph.log ceph.log ceph.mon.keyring
# ceph-deploy new --cluster-network 192.168.100.0/24 --public-network 192.168.100.0/24 ceph{01,02,03}
C.部署 octopus 版本的 ceph 集群并查看配置文件
# ceph-deploy install --release octopus ceph{01,02,03}
# ceph --version
ceph version 15.2.14 (79a10589f1f80dfe21e8f9794365ed98143071c4) octopus (stable)
# ls
ceph.conf ceph-deploy-ceph.log ceph.log ceph.mon.keyring rbdmap
# cat ceph.conf
[global]
fsid = afd8b41f-f9fa-41da-85dc-e68a1612eba9
public_network = 10.200.1.0/24
cluster_network = 10.200.2.0/24
mon_initial_members = ceph-node01, ceph-noce02, ceph-node03
mon_host = 10.200.1.100,10.200.1.101,10.200.1.102
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = ceph
注:如果安装失败,请yum安装
# yum -y install ceph ceph-radosgw
D.激活监控节点
# ceph-deploy mon create-initial
# ls
ceph.bootstrap-mds.keyring ceph.bootstrap-osd.keyring ceph.client.admin.keyring ceph-deploy-ceph.log ceph.mon.keyring
ceph.bootstrap-mgr.keyring ceph.bootstrap-rgw.keyring ceph.conf ceph.log rbdmap
E.查看健康状况
[root@ceph-node01 ~]# ceph -s
cluster:
id: 785353d9-521f-4508-affc-fea5f2cc8f18
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-node01,ceph-node02,ceph-node03
mgr: ceph-node01(active), standbys: ceph-node02, ceph- node03
osd: 9 osds: 9 up, 9 in
rgw: 1 daemon active
data:
pools: 6 pools, 168 pgs
objects: 225 objects, 1.9 KiB
usage: 25 GiB used, 875 GiB / 900 GiB avail
pgs: 168 active+clean
F.将管理密钥拷贝到各个节点上
# ceph-deploy admin ceph-node{01,02,03}
# ansible node -a 'ls /etc/ceph/'
10.200.1.101 | SUCCESS | rc=0 >>
ceph.client.admin.keyring
ceph.conf
rbdmap
tmpUxAfBs
10.200.1.102 | SUCCESS | rc=0 >>
ceph.client.admin.keyring
ceph.conf
rbdmap
tmp5Sx_4n
G.创建 ceph 管理进程服务
# ceph-deploy mgr create ceph{01,02,03}
# ceph -s
cluster:
id: afd8b41f-f9fa-41da-85dc-e68a1612eba9
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03
mgr: ceph01(active), standbys: ceph02, ceph03
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:
H.创建 ceph 对象网关实例
# ceph-deploy rgw create ceph-node01
网关运行后,您应该能够7480 通过未认证的请求在端口上访问它,如下所示:
http://client-node:7480
注:如果您在任何时候遇到麻烦并且想要重新开始,请执行以下操作清除配置:
ceph-deploy purge <gateway-node1> [<gateway-node2>]
ceph-deploy purgedata <gateway-node1> [<gateway-node2>]
I.启动 osd 创建数据
# ceph-deploy osd create --data /dev/sdb ceph-node01
# ceph-deploy osd create --data /dev/sdb ceph-node02
# ceph-deploy osd create --data /dev/sdb ceph-node03
# ceph -s
cluster:
id: afd8b41f-f9fa-41da-85dc-e68a1612eba9
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, 57 GiB / 60 GiB avail
pgs:
擦除磁盘脚本
disk=(sdc sdd sde sdf sdg sdh sdi sdj sdk sdl)
for i in `echo ${disk[@]}`;
do
parted -s /dev/$i rm {1,2}
done
for j in `echo ${disk[@]}`;
do
ceph-disk zap /dev/$j;
done