本文配套视频和笔记:
Ceph分布式存储实战(Ceph快速上手)
B站视频在线观看链接:【千锋教育】Ceph分布式存储技术教程(进阶到实战)百度网盘链接:全新_Ceph分布式存储技术-进阶到实战 笔记+资料+视频.zip 提取码: xry9
文章目录
1. 分布式存储系统理论1.1. 认识分布式存储1.2. 分布式存储的特性1.2.1. 可扩展1.2.2. 低成本1.2.3. 高性能1.2.4. 易用1.2.5. 易管理1.3. 分布式存储的挑战和所涉及的技术1.4. 存储分类1.4.1. 本地存储1.4.2. 网络存储2. Ceph介绍2.1. Ceph简介2.2. Ceph优势2.3. Ceph架构2.4. Ceph的基本组件3. 安装Ceph集群3.1. 准备环境3.2. 配置ssh免密登录3.3. 添加下载源3.4. 安装Ceph-deploy3.5. 部署Ceph集群3.6. 配置DashBoard3.7. 配置客户端使用3.8. 升级CentOS 7的内核为最新版本3.9. 客户端安装Ceph3.10. 将块设备镜像映射到CentOS 7系统上3.11. 客户端重启之后需重新映射1. 分布式存储系统理论
1.1. 认识分布式存储
分布式存储系统,是通过网络将数据分散存储在多台独立的设备上。
1.2. 分布式存储的特性
1.2.1. 可扩展
分布式存储系统可以扩展到几百台甚至几千台的集群规模,而且随着集群规模的增长,系统整体性能表现为线性增长。分布式存储的水平扩展有以下几个特性:
节点扩展后,旧数据会自动迁移到新节点,实现负载均衡,避免单点过热的情况出现。水平扩展只需要将新节点和原有的集群连接到同一网络,整个过程不会对业务造成影响。当节点被添加到集群,集群系统的整体容量和性能也随之线性扩展,此后新节点的资源就会被管理平台接管,被用于分配或回收。
1.2.2. 低成本
分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通的PC机之上。另外,线性扩展能力也使得增加、减少机器非常方便,可以实现自动化运维。
1.2.3. 高性能
无论是针对整个集群还是单台机器,都要求分布式存储系统具备高性能。
1.2.4. 易用
分布式存储系统需要能够提供易用的对外接口,另外,也要求具备完善的监控、运维工具,并且能够与其他系统集成。
1.2.5. 易管理
通过一个简单的WEB界面就能够对整个系统进行分配管理,运维简便,极低的管理成本。
1.3. 分布式存储的挑战和所涉及的技术
分布式存储的挑战主要在于数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性。分布式存储涉及的技术主要来自两个领域:分布式系统以及数据库。
1.4. 存储分类
1.4.1. 本地存储
本地存储本地的文件系统,不能在网络上使用。
Ext3、Ext4、XFS、NTFS
1.4.2. 网络存储
网络文件系统,共享的都是文件系统:
NFS:网络文件系统HDFS:分布式网络文件系统GlusterFS:分布式网络文件系统
共享的都是裸设备(块存储、磁盘):
cinder(块存储)ceph(块存储、对象存储、网络文件系统-分布式)SAN(存储区域网)
2. Ceph介绍
2.1. Ceph简介
Ceph使用C++语言开发,遵循LGPL协议开源。Sage Weil(Ceph论文发表者)于创立了以Inktank公司主导Ceph的开发和社区维护。Redhat收购Inktank公司,并发布Inktank Ceph企业版(ICE)软件,业务场景聚焦云、备份和归档,支持对象存储和块存储以及文件系统存储应用。出现Ceph开源社区版本和Redhat企业版。
Ceph的主要设计初衷是变成一个可避免单节点故障的分布式文件系统,PB级别的扩展能力,而且是一种开源自由软件,许多超融合的分布式文件系统都是基于Ceph开发的。
Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。
Ceph官网:Ceph文档:Ceph代码:/ceph/ceph
2.2. Ceph优势
高扩展性:使用普通的x86服务器,支持10~1000台服务器,支持TB~EB级的扩展。高可靠性:没有单点故障,多数据副本,自动管理,自动修复。高性能:数据分布均衡。功能全面:可用于对象存储,块设备存储和文件系统存储。2.3. Ceph架构
基础存储系统RADOS:基础存储系统RADOS(Reliable, Autonomous, Distributed Object Store,即可靠的、自动化的、分布式的对象存储)。所有存储在Ceph系统中的用户数据事实上最终都是由这一层来存储的。Ceph的高可靠、高可扩展、高性能、高自动化等等特性本质上也是由这一层所提供的。基础库LibRADOS:
LibRADOS这一层的功能是对RADOS进行抽象和封装,并向上层提供API,以便直接基于RADOS(而不是整个Ceph)进行应用开发。特别要注意的是,RADOS是一个对象存储系统,因此,LibRADOS实现的API也只是针对对象存储功能的。高层应用接口
RADOSGw:对象网关接口(对象存储),其作用是在LibRADOS的基础上提供抽象层次更高、更便于应用使用的上层接口。
RBD:块存储其作用是在LibRADOS的基础上提供抽象层次更高、更便于主机或虚拟机使用的上层接口。
CephFS:文件存储系统,其作用是在RADOS的基础上提供抽象层次更高、更便于客户端使用的上层接口。
2.4. Ceph的基本组件
Ceph OSD(必装)全称是Object Storage Device,用于集群中所有数据与对象的存储。处理集群数据的复制、恢复、回填、再均衡。并向其他OSD守护进程发送心跳,然后向Mon提供一些监控信息。
当Ceph存储集群设定数据有两个副本时(一共存两份),则至少需要两个OSD守护进程即两个OSD节点,集群才能达到active+clean状态。Ceph Monitor(必装)
Ceph的监控器,主要功能是维护整个集群健康状态,提供一致性的决策,包含了Monitor map,即集群map,monitor本身不存储任何集群数据Managers(必装)
用于收集Ceph集群状态、运行指标,比如存储利用率、当前性能指标和系统负载。对外提供 Ceph Dashboard(Ceph UI)和RESTful API。高可用性通常至少需要两个管理器。Ceph MDS(可选)
全称是Ceph Metadata Server,是为Ceph文件系统提供元数据(metadata)计算、缓存与同步(也就是说,Ceph块设备和Ceph对象存储不使用MDS)。在Ceph中,元数据也是存储在OSD节点中的,MDS类似于元数据的代理缓存服务器。MDS进程并不是必须的进程,只有需要使用Ceph FS时,才需要配置MDS节点。
3. 安装Ceph集群
3.1. 准备环境
系统版本:CentOS 7.9.(需要CentOS 7.5以上)
硬件配置:5台VM,1核1G,每台Node角色的机器至少挂载1块不低于5个G的空闲盘为OSD存储
给3台Node节点添加一块大小5G以上的磁盘
lsblk
所有节点修改主机名并相互解析
修改主机名可以参考:https://coco56./article/details/123407421
vim /etc/hosts
以下是解析内容:
10.1.1.73 admin10.1.1.74 node110.1.1.75 node210.1.1.76 node310.1.1.77 ceph-client
关闭所有机器的防火墙和selinux
关闭防火墙可以参考:https://coco56./article/details/123409975,下面是关闭selinux的步骤:
先修改配置文件
vim /etc/sysconfig/selinux
%s/SELINUX=enforcing/SELINUX=disabled/gc
关闭selinux
setenforce 0
所有机器都创建一个普通用户cephu
并设置密码(密码这里设置为1
)
useradd cephu
passwd cephu
3.2. 配置ssh免密登录
确保各机器上新创建的用户都有sudo权限
visudo
转到第100行,然后在下面添加:
cephuALL=(root)NOPASSWD:ALL
注意上面的是缩进(Tab),而不是空格
实现ssh无密码登录(admin节点操作)
先切换到cephu
用户
su - cephu
输入如下指令之后,再连续输三个回车,以生成密钥
ssh-keygen
将admin节点cephu用户生成的密钥拷贝到各Ceph节点
在admin节点执行如下命令
ssh-copy-id cephu@node1
执行完之后要输入yes
,然后输入我们刚才设置的密码1
ssh-copy-id cephu@node2
ssh-copy-id cephu@node3
ssh-copy-id cephu@ceph-client
测试连接:
使用ssh连接
ssh cephu@node1
查看当前主机
hostname
退出
exit
在admin节点用root用户创建~/.ssh/config配置文件
mkdir ~/.sshtouch ~/.ssh/config
将~/.ssh/config配置文件设置为如下内容,这样ceph-deploy就能用你所建的用户名登录Ceph节点了
host node1hostname node1user cepuhhost node2hostname node2user cepuhhost node3hostname node3user cepuh
3.3. 添加下载源
添加下载源,安装ceph-deploy(admin节点,root用户)touch /etc/yum.repos.d/ceph.repovim /etc/yum.repos.d/ceph.repo
[ceph-noarch]name=Ceph noarch packagesbaseurl=/rpm-luminous/el7/noarchenabled=1priority=2gpgcheck=1gpgkey=/keys/release.asc
/en/pacific/install/get-packages/#rhel建立缓存
yum makecache
更新yum源
yum update -y
开启yum缓存
vim /etc/yum.conf
keepcache=1
3.4. 安装Ceph-deploy
安装Ceph-deployyum install ceph-deploy -y
安装ntp(所有机器)
选择任意一台机器当ntp时间服务器,其他节点当时间服务器的客户端,跟时间服务器同步时间。
这里选择admin节点为ntp时间服务器
yum install -y ntp # [root@admin ~]
修改时间服务器的配置
vim /etc/ntp.conf
有4行server的位置,把那4行server行注释掉,填写以下两行:
server 127.127.1.0 # local clockfudge 127.127.1.0 stratum 10
启动ntp服务,并设置开机自启
systemctl start ntpd # 启动ntp服务systemctl enable ntpd # 将ntp服务设为开机自启systemctl status ntpd # 查看ntp服务当前的状态
5. 其他所有节点安装ntpdate
yum install ntpdate -y
同步时间
ntpdate 10.1.1.73 # 注意改成自己时间服务器的IP
3.5. 部署Ceph集群
注意:没有特殊说明,以下所有操作均是在admin节点,cephu用户下执行
创建cephu用户操作的目录
su - cephu # 先切换到cephu用户mkdir my-cluster # 创建my-cluster目录
注意:之后所有ceph-deploy命令操作必须在该目录下执行为Python2.7安装pip
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py # 下载安装脚本
sudo python get-pip.py # 运行安装脚本
pip -V
使用pip
安装distribute
pip install distribute
创建集群
cd my-cluster
ceph-deploy new node1
查看当前目录下的文件:
ls
创建成功会有三个文件:ceph.conf
、ceph-deploy-ceph.log
、ceph.mon.keyring
安装luminous
目标:在node1、node2、node3三个节点上安装ceph和ceph-radosgw主包
方法1:利用官方脚本全自动安装,脚本会帮助node1、node2、node3创建epel源和ceph源,并且自动安装ceph和ceph-radosgw主包
ceph-deploy install --release luminous node1 node2 node3# 这一步时间很长,容易超时,可以利用手动安装或者分批安装# 比如我第一次为node1和node2成功安装了# 后面再次安装时只需要把node1和node2去掉,只为node3安装就行了
如果一直提示Another app is currently holding the yum lock; waiting for it to exit...
,那么重启下出问题的机器再次安装就行了。
如果ceph和ceph-radosgw安装不上,则采用方法2
测试安装是否完成:分别在node1、node2、node3中确认安装版本为12.2.13
ceph --version
正常情况下应该会显示:ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)
方法2:手动部署安装,三台机器分别创建(三台node节点相同操作) 安装epel源
yum install -y epel*
创建Ceph源
touch /etc/yum.repos.d/ceph.repovim /etc/yum.repos.d/ceph.repo
以下是官方Ceph源的配置(服务器位于加拿大,比较慢):
[ceph]name=Ceph packages for $basearchbaseurl=/rpm-luminous/el7/$basearchenabled=1priority=2gpgcheck=1gpgkey=/keys/release.asc[ceph-noarch]name=Ceph noarch packagesbaseurl=/rpm-luminous/el7/noarchenabled=1priority=2gpgcheck=1gpgkey=/keys/release.asc[ceph-source]name=Ceph source packagesbaseurl=/rpm-luminous/el7/SRPMSenabled=0priority=2gpgcheck=1gpgkey=/keys/release.asc
以下是阿里云Ceph源的配置(服务器位于国内,有CDN加速,我河南这边儿用的是郑州的服务器):
[ceph]name=Ceph packages for $basearchbaseurl=/ceph/rpm-luminous/el7/$basearchenabled=1priority=2gpgcheck=1gpgkey=/ceph/keys/release.asc[ceph-noarch]name=Ceph noarch packagesbaseurl=/ceph/rpm-luminous/el7/noarchenabled=1priority=2gpgcheck=1gpgkey=/ceph/keys/release.asc[ceph-source]name=Ceph source packagesbaseurl=/ceph/rpm-luminous/el7/SRPMSenabled=0priority=2gpgcheck=1gpgkey=/ceph/keys/release.asc
分别在node1、node2、node3节点执行下面的命令安装软件,可以完全手动安装,但需要yum的Ceph缓存目录结构
sudo yum install ceph ceph-radosgw -y
如果因为速度慢导致安装失败可以按ctrl+c,利用它创建的yum缓存目录,手动把安装包下载下来保存到缓存目录/var/cache/yum/x86_64/Ceph/packages
目录下
再次执行安装命令:
sudo yum install ceph ceph-radosgw -y
测试安装是否完成,分别在node1、node2、node3中确认安装版本为12.2.13
ceph --version
正常情况下会提示:ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)
初始化Monitor(admin节点,cephu用户在my-cluster目录下执行)
ceph-deploy mon create-initial
赋予各个节点使用命令,免用户名权限
ceph-deploy admin node1 node2 node3
安装ceph-mgr:只有luminous才有,为使用dashboard做准备。
ceph-deploy mgr create node1
添加osd
注意:各个节点上提供的磁盘容量不能太小,最好5GB以上,另外还要留意一下你的磁盘名称
ceph-deploy osd create --data /dev/sdb node1 # [cephu@admin my-cluster]ceph-deploy osd create --data /dev/sdb node2 # [cephu@admin my-cluster]ceph-deploy osd create --data /dev/sdb node3 # [cephu@admin my-cluster]
命令中的/dev/sdb是在各个节点上为osd准备的空闲磁盘(无需分区格式化,如果有分区则要指定具体分区),通过如下命令查看:
最后通过如下命令查看集群状态:
ssh node1 sudo ceph -s
如果显示HEALTH_OK osd: 3 osds: 3 up, 3 in
就成功了
3.6. 配置DashBoard
在node1节点上操作,把ceph-mgr和ceph-mon安装在了同一台主机上,最好只有一个ceph-mgr
切换用户
su - cephu
创建管理域密钥
sudo ceph auth get-or-create mgr.node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
开启ceph-mgr
管理域
sudo ceph-mgr -i node1
查看ceph的状态,确认mgr的状态为active
sudo ceph status
打开dashboard模板
sudo ceph mgr module enable dashboard
绑定开启dashboard模板的ceph-mgr节点的IP地址
sudo ceph config-key set mgr/dashboard/node1/server_addr 10.1.1.74 #IP地址为mgr节点的IP地址,也就是mode1的IP地址
查看端口占用情况
netstat -lntp
Web登录,浏览器输入:mgr地址:7000(如:http://10.1.1.74:7000/)
3.7. 配置客户端使用
配置客户端使用rbd:创建块设备之前需要创建存储池,存储池相关命令需要在mon节点执行,也就是规划好的node1节点创建存储池sudo ceph osd pool create rbd 128 128
128 128
为PG的数量,少于5个OSD,PG数量应为128,创建好了会提示:pool 'rbd' created
初始化存储池
sudo rbd pool init rbd
3.8. 升级CentOS 7的内核为最新版本
打开之前准备好的客户端ceph-client:主机名为ceph-client
,IP为10.1.1.77
查看内核版本uname -r
内核版本为:3.10.0-1160.el7.x86_64
导入ELRepo仓库的公共密钥:
rpm --import /RPM-GPG-KEY-
安装ELRepo仓库的yum源
rpm -Uvh /elrepo-release-7.0-3.el7.elrepo.noarch.rpm
查看可用的系统内核包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
安装最新版的内核
yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y
查看系统上的所有可用内核:
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
更改新内核的启动顺序
grub2-set-default 0
其中0
是上面查询出来的可用内核重启(重启的时候可以看到CentOS Linux (5.16.14-1.el7.elrepo.x86_64) 7 (Core)
是最先启动)
reboot
验证
uname -r
查看系统中全部的内核
rpm -qa | grep kernel
删除旧的内核
yum remove kernel -y
再次查看系统中全部的内核
rpm -qa | grep kernel
会发现少了一个kernel-3.10.0-1160.el7.x86_64
如果需要把其他的删除,可以执行:
yum remove kernel-devel-3.10.0-1160.el7.x86_64 \kernel-tools-libs-3.10.0-1160.el7.x86_64 \kernel-headers-3.10.0-1160.el7.x86_64 \kernel-tools-3.10.0-1160.el7.x86_64 -y
再次查看系统中全部的内核
rpm -qa | grep kernel
会发现内核版本为3.10.0的相关rpm包都没了
3.9. 客户端安装Ceph
安装epel源
yum install -y epel*
创建Ceph源
touch /etc/yum.repos.d/ceph.repovim /etc/yum.repos.d/ceph.repo
以下是官方Ceph源的配置(服务器位于加拿大,比较慢):
[ceph]name=Ceph packages for $basearchbaseurl=/rpm-luminous/el7/$basearchenabled=1priority=2gpgcheck=1gpgkey=/keys/release.asc[ceph-noarch]name=Ceph noarch packagesbaseurl=/rpm-luminous/el7/noarchenabled=1priority=2gpgcheck=1gpgkey=/keys/release.asc[ceph-source]name=Ceph source packagesbaseurl=/rpm-luminous/el7/SRPMSenabled=0priority=2gpgcheck=1gpgkey=/keys/release.asc
以下是阿里云Ceph源的配置(服务器位于国内,有CDN加速,我河南这边儿用的是郑州的服务器):
[ceph]name=Ceph packages for $basearchbaseurl=/ceph/rpm-luminous/el7/$basearchenabled=1priority=2gpgcheck=1gpgkey=/ceph/keys/release.asc[ceph-noarch]name=Ceph noarch packagesbaseurl=/ceph/rpm-luminous/el7/noarchenabled=1priority=2gpgcheck=1gpgkey=/ceph/keys/release.asc[ceph-source]name=Ceph source packagesbaseurl=/ceph/rpm-luminous/el7/SRPMSenabled=0priority=2gpgcheck=1gpgkey=/ceph/keys/release.asc
开启yum缓存
vim /etc/yum.conf
修改成:
keepcache=1
清理缓存
yum clean all
切换为普通用户
su - cephu
安装ceph
和ceph-radosgw
sudo yum install ceph ceph-radosgw -y
查看ceph
版本
ceph --version
在admin节点赋予client使用命令免用户名权限:
打开admin节点
切换为普通用户
su - cephu
进入my-cluster
目录
cd my-cluster
最后执行:
ceph-deploy admin ceph-client
修改client下该文件的读权限:
sudo chmod +r /etc/ceph/ceph.client.admin.keyring
修改client下的ceph配置文件(这一步是为了解决映射镜像时出错问题)
sudo vim /etc/ceph/ceph.conf
在最后一行追加:
rbd_default_features = 1
client节点创建块设备镜像:单位是M,这里是4个G
rbd create foo --size 4096
3.10. 将块设备镜像映射到CentOS 7系统上
client节点映射镜像到主机sudo rbd map foo --name client.admin
执行完之后会提示:/dev/rbd0
client节点格式化块设备
sudo mkfs.ext4 -m 0 /dev/rbd/rbd/foo
client节点mount块设备
sudo mkdir /mnt/ceph-block-device #创建挂载点
sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device #挂载
挂载完成之后,可以查看一下
df -Th
正常情况下应该会显示:/dev/rbd0 ext4 3.9G 16M 3.8G 1% /mnt/ceph-block-device
进入刚才挂载的目录
cd /mnt/ceph-block-device
新建一个文件
sudo touch a.txt
查看结果
ls
3.11. 客户端重启之后需重新映射
客户端重起之后,设备需要重新作映射,不然可能会卡死或者之前的映射消失不见
client节点映射镜像到主机
sudo rbd map foo --name client.admin
执行完之后会提示:/dev/rbd0
client节点mount块设备
sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device #挂载
挂载完成之后,可以查看一下
df -Th
正常情况下应该会显示:/dev/rbd0 ext4 3.9G 16M 3.8G 1% /mnt/ceph-block-device
进入刚才挂载的目录
cd /mnt/ceph-block-device
查看结果
ls
可以看到我们之前创建的文件还都在