Ceph分布式存储(一)
一、概述
Ceph是可靠的、可扩展的、统一的、分布式的存储系统。可以同时提供对象存储RADOSGW(Reliable、Autonomic、Distributed、Object Storage Gateway)、块存储RBD(Rados Block Device)、文件系统存储Ceph FS(Ceph Filesystem)3种功能。
2、Ceph应用场景
Ceph可以提供对象存储、块设备存储和文件系统服务,其对象存储可以对接网盘(owncloud)应用业务等;其块设备存储可以对接(IaaS),当前主流的IaaS运平台软件,如:OpenStack、CloudStack、Zstack、Eucalyptus等以及kvm等。
3、ceph功能组件
4、Ceph核心组件
OSD(Object Storage Device):主要功能包括存储数据、处理数据的复制、恢复、回补、平衡数据分布,并将一些相关数据提供给ceph monitor。例如ceph OSD心跳等。一个ceph存储集群,至少需要两个Ceph OSD来实现active+clean健康状态和有效的保存数据的双副本(默认情况下是双副本,可以调整)。注意:每一个disk、分区都可以成为一个OSD。
Monitor:Ceph的监控器,主要功能是维护整个集群健康状态,提供一致性的决策。
MDS(Metadata Server):主要保存的是Ceph文件系统的元数据。注意:ceph的块存储和ceph对象存储都不需要MDS。MDS为基于POSIX文件系统的用户提供了一些基础命令。
5、Ceph功能特性
RADOSGW功能特性基于LIBRADOS之上,提供当前流行的RESTful协议的网关,并兼容S3和Swift接口,作为对象存储,可以对接网盘类应用以及HLS流媒体应用等。
RBD(Rados Block Device) 功能特性也是基于LIBRADOS之上,通过LIBRBD创建一个块设备,通过QEMU/KVM附加到VM上,做为传统的块设备来用。目前OpenStack、CloudStack都是采用这种方式为VM提供块设备,同时也支持快照、COW等功能。
Ceph FS功能特性是基于RADOS来实现分布式的文件系统,引如了MDS,主要为兼容POSIX文件系统提供元数据,一般都是当作文件系统来挂载。
6、Ceph架构
1)基础存储系统RADOS
RADOS:可靠自主分布式对象存储。它是ceph存储的基础,保证一切都以对象形式存储。
2) 基础库LIBRADOS
LIBADOS:功能是对RADOS进行抽象和封装,并向上层提供API,以便直接基于RADOS进行应用开发。
二、 RHEL/CentOS安装
[Ceph环境准备]
1、 准备6台虚拟机
2、 物理主机上配置域名解析
]#for i in {1..6}
>do
>echo -e “192.168.4.$i\tnode$i\tnode$i.tedu.cn” >> /etc/hosts
>done
3、 提前将服务器的密钥保存,不需要ssh时回答yes]# ssh-keyscan node{1..6} >> /root/.ssh/known_hosts
4、实现免密登陆
]# for i in {1..6}
> do
> ssh-copy-id node$i
> done
5、配置yum源
]# mkdir /var/ftp/ceph/
]# vim /etc/fstab
/ISO/rhcs2.0-rhosp9-20161113-x86_64.iso /var/ftp/ceph iso9660 defaults 0 0
]# mount -a
]# vim /tmp/server.repo
[rhel7.4]
name=rhel7.4
baseurl=ftp://192.168.4.254/rhel7.4
enabled=1
gpgcheck=0
[mon]
name=mon
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/MON
enabled=1
gpgcheck=0
[osd]
name=osd
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/OSD
enabled=1
gpgcheck=0
[tools]
name=tools
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/Tools
enabled=1
gpgcheck=0
]# for vm in node{1..6}
do
scp /tmp/server.repo ${vm}:/etc/yum.repos.d/
done[配置node1节点为管理节点]
1、配置名称解析[root@node1 ~]# for i in {1..6}; do echo -e "192.168.4.$i\tnode$i.tedu.cn\tnode$i" >> /etc/hosts; done
2、配置免密登陆
[root@node1 ~]# ssh-keyscan node{1..6} >> /root/.ssh/known_hosts
[root@node1 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@node1 ~]# for i in {1..6}; do ssh-copy-id node$i; done
[root@node1 ~]# for vm in node{1..6}
> do
> scp /etc/hosts ${vm}:/etc/
> done
3、配置node6为时间服务器
(1)配置
[root@node6 ~]# yum install -y chrony
[root@node6 ~]# vim /etc/chrony.conf
server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
allow 192.168.4.0/24
local stratum 10
启动服务
[root@node6 ~]# systemctl enable chronyd
[root@node6 ~]# systemctl restart chronyd
4、将node1-5配置为NTP的客户端
(1)配置
[root@node1 ~]# vim /etc/chrony.conf
#server 0.rhel.pool.ntp.org iburst
#server 1.rhel.pool.ntp.org iburst
#server 2.rhel.pool.ntp.org iburst
#server 3.rhel.pool.ntp.org iburst
server 192.168.4.6 iburst
[root@node1 ~]# systemctl restart chronyd
测试
[root@node1 ~]# date -s "2018-7-13 12:00:00"
[root@node1 ~]# ntpdate 192.168.4.6
[root@node1 ~]# date
(3)同步其他主机
[root@node1 ~]# for i in {2..5}
> do
> scp /etc/chrony.conf node$i:/etc/
> done
[root@node1 ~]# for vm in node{2..5}
> do
> ssh $vm systemctl restart chronyd
> done
5、为node1-3各添加3块10GB的磁盘
可以在虚拟机不关机的情况下,直接添加硬盘
[安装ceph]
1)在node1上安装部署软件
[root@node1 ~]# yum install -y ceph-deploy
2)创建ceph部署工具的工作目录
[root@node1 ~]# mkdir ceph-clu
3)创建参与集群节点的配置文件
[root@node1 ceph-clu]# ceph-deploy new node{1..3}
[root@node1 ceph-clu]# ls
4)在3个节点上安装软件包
[root@node1 ceph-clu]# ceph-deploy install node{1..3}
5)初始化mon服务,获取密钥key,会在ceph-clu目录下生成几个key
[root@node1 ceph-clu]# ceph-deploy mon create-initial
如果出现以下错误:
[node1][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
解决方案:
[root@node1 ceph-clu]# vim ceph.conf 最下面加入行:
public_network = 192.168.0.0/24
再执行以下命令:
[root@host1 ceoh-clu]# ceph-deploy --overwrite-conf config push node1 node2 node3
6、把node1-3的vdb作为日志盘。Ext/xfs都是日志文件系统,一个分区分成日志区和数据区。为了更好的性能,vdb专门作为vdc和vdd的日志盘。
[root@node1 ceph-clu]# for vm in node{1..3}
> do
> ssh $vm parted /dev/vdb mklabel gpt
> done
[root@node1 ceph-clu]# for vm in node{1..3}; do ssh $vm parted /dev/vdb mkpart primary 1M 50% ; done
[root@node1 ceph-clu]# for vm in node{1..3}; do ssh $vm parted /dev/vdb mkpart primary 50% 100% ; done
[root@node1 ceph-clu]# for vm in node{1..3}; do ssh ${vm} chown ceph.ceph /dev/vdb? ; done
创建OSD设备
[root@node1 ceph-clu]# for i in {1..3}
> do
> ceph-deploy disk zap node$i:vdc node$i:vdd
> done
[root@node1 ceph-clu]# for i in {1..3}
> do
> ceph-deploy osd create node$i:vdc:/dev/vdb1 node$i:vdd:/dev/vdb2
> done
验证
到第7步为止,ceph已经搭建完成。查看ceph状态
[root@node1 ceph-clu]# ceph -s 如果出现health HEALTH_OK表示正常
[root@node1 ceph-clu]# ceph health