ceph-分布式存储
- 高性能
- 采用CRUSH算法,分布式存储,数据分布均衡,并行度高
- 支持上千个存储节点,支持TB到PB级的数据
- 高可用
- 副本数可以灵活控制
- 支持故障分离,数据强一致性
- 多种故障场景自动修复
- 没有单点故障,自动管理
- 高扩展
- 去中心化
- 扩展灵活
- 随节点增加而线性增长
- 特性丰富
- 支持三种存储接口:块存储,文件存储,对象存储.
文件存储
典型设备:FTP,NFS服务器
Ceph核心组件
- Monitor
一个ceph集群需要多个Monitor组成的小集群,通过Paxos同步数据,用来保存OSD元数据 - OSD
全称Object Storage Device,负责响应客户端请求返回具体数据的进程,一个ceph集群有多个OSD. - MDS
Metadata Server,是cephfs服务依赖的元数据服务
案例拓扑图
>准备环境
>在节点node1配置ssh密钥,使node1可无密码连接node1,2,3
ssh-keygen -f /root/,ssh/id_rsa -N ''
//生成密钥,-f指定密钥存储路径;-N无密码
for i in 41 42 43
do
ssh-copy-id 192.168.2.$i
done
//for循环拷贝公钥给node1,2,3节点
vim /etc/hosts
192.168.2.41 node1
192.168.2.42 node2
192.168.2.43 node3
//配置静态域名解析
for i in 41 42 43
do
scp /etc/hosts 192.168.2.$i:/etc
done
//分享给三个节点
>为所有ceph节点配置ceph-yum源
vim /etc/yum.repos.d/ceph.repo
[mon]
name=mon
baseurl=ftp://192.168.2.254/ceph/MON //MON软件包的位置
gpgcheck=0
[osd]
name=osd
baseurl=ftp://192.168.2.254/ceph/OSD
gpgcheck=0
[tools]
name=tools
baseurl=ftp://192.168.2.254/ceph/Tools
gpgcheck=0
yum repolist //查看软件源数量
for i in 41 42 43
do
scp /etc/yum.repos.d/ceph.repo 192.168.2.$i:/etc/yum.repos.d/
done
>所有节点与真实主机NTP服务器同步时间
vim /etc/chrony.conf
… …
server 192.168.2.254 iburst
for i in 41 42 43
do
scp /etc/chrony.conf 192.168.2.$i:/etc/
ssh 192.168.2.$i "systemctl restart chronyd"
done
>为每台ceph节点添加3块20G磁盘
###############################
>部署ceph集群
node1主机安装ceph-deploy,创建工作目录,初始化配置文件
yum -y install ceph-deploy
mkdir ceph-cluster
cd ceph-cluster
ceph-deploy new node1 node2 node3 //新建集群
>所有节点安装ceph先关软件包
for i in node1 node2 node3
do
ssh $i "yum -y install ceph-mon ceph-osd ceph-mds"
done
ceph-deploy mon create-intial //初始化
ceph -s //查看结果(3个节点)
>磁盘分区,创建journal盘,并永久修改设备权限
for i in node1 node2 node3
do
ssh $i "parted /dev/vdb mklabel gpt"
ssh $i "parted /dev/vdb mkpart primary 1 50%"
ssh $i "parted /dev/vdb mkpart primary 50% 100%"
done //将vdb分成两个区,作为缓存
>>修改/dev/vdb1 和/dev/vdb2的权属(node1 node2 node3)
临时修改:
chown ceph.ceph /dev/vdb1
chown ceph.ceph /dev/vdb2
永久修改
vim /etc/udev/rules.d/vdb.rules
ENV{DEVNAME}=="/dev/vdb1",OWNER="ceph",GROUP="ceph"
ENV{DEVNAME}=="/dev/vdb2",OWNER="ceph",GROUP="ceph"
>使用ceph-deploy初始化数据磁盘(node1上操作)
ceph-deploy disk zap node1:vdc node1:vdd
ceph-deploy disk zap node2:vdc node2:vdd
ceph-deploy disk zap node3:vdc node3:vdd
>初始化OSD集群
ceph-deploy osd create node1:vdc:/dev/vdb1 node1:vdd:/dev/vdb2
//创建osd存储设备,vdc为集群提供存储空间,vdb1提供JOURNAL缓存,
//一个存储设备对应一个缓存设备,缓存不需要很大
ceph-deploy osd create node2:vdc:/dev/vdb1 node2:vdd:/dev/vdb2
ceph-deploy osd create node3:vdc:/dev/vdb1 node3:vdd:/dev/vdb2
ceph -s //查看集群状态
#################################
部署ceph 文件系统
ceph-deploy mds create node3 //启动mds服务
>创建存储池(文件系统由inode和block组成)
ceph osd pool create cephfs_data 128 //最多文件目录128(必须为2的倍数)
ceph osd pool create cephfs_metadata 128
ceph osd lspools //查看存储池
>创建文件系统:文件系统有两个部分组成,需要两个存储池分别对应inode block
ceph fs noew myfs1 ceph_metadata cephfs_data
ceph fs ls //查看新建的文件系统
##############################
服务器永久挂载ceph 文件系统
在ceph任意节点,查看ceph账户与密码
cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==
>/etc/ec.local是开机启动脚本,任何命令放在该文件都是开机自启
mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==
echo 'mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ \
-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==' >> /etc/rc.local
chmod +x /etc/rc.local
###################################
>另一种通过fstab永久挂载,需下载libcephfs1软件包
yum -y install libcphfs1
vim /etc/fstab
192.168.4.11:/ /usr/local/nginx/html/ ceph defaults,_netdev,name=admin,
secret=AQCVcu9cWXkgKhAAWSa7qCFnFVbNCTB2DwGIOA== 0 0
块存储简称RBD(RADOS Block Device)
提供快照,克隆,备份等功能.可扩展,条带化方式存储到集群多个OSD中.两种方式KRBD和librbd
KRBD方式(Kernel RBD)3.1版本内核Kernel模块中集成RBD模块,基于内核驱动
常用命令
SERVER 端操作
modeprobe rdb //加载RBD内核模块
modinfo rbd //查看rbd内核模块信息
rbd create image --szie 10G //创建一个10G大小的名为image的块设备
rbd list //列出存储池中的所有块设备,若没有指定存储池,默认rbd存储池,-p可用来指定存储池
rbd resize --szie 7G image --allow-shrink //调整块设备image的大小
rbd resize --size 20G image //默认允许放大,需设置allow-shrink才可缩小
rbd info image //显示image块设备的信息
........................
>创建镜像快照
rbd snap ls image //查看镜像image的快照
rbd snap create image --sanp image-snap1 //给镜像image创建快照image-snap1
rbd snap rolbak image --sanp image-snap1 //将镜像恢复到快照image-snap1时
rbd snap protect image --sanp image-snap1 //保护快照,不可删除
rbd snap rm image --snap image-snap1 //会显示删除失败
rbd clone image --snap image-snap1 image-clone
//使用image的快照image-snap1克隆一个名为image-clone的镜像
rbd info image-clone //查看克隆镜像与父镜像快照的关系
rbd flatten image-clone //将父快照中的数据全部拷贝一份
rbd info image-clone //父快照信息消失,克隆镜像可独立工作
rbd snap unprotect image --snap image-snap1 #取消快照保护
rbd snap rm image --snap image-snap1 #可以删除快照
############################
>CLIENT 端操作
rbd map image //将image块设备映射到系统中
rbd showmapped //查看 系统中已经映射的快设备
rbd unmap /dev/xxx //取消快设备的映射
mkfs.xfs /dev/rbd0 //格式化分区
mount /dev/rbd0 /mnt/ //挂载分区