网站建设seo推广,小门户网站模板,Wordpress内存占用高,新乡营销型网站文章目录 理论知识具体操作搭建ceph本地源yum源及ceph的安装配置NTP#xff08;解决时间同步问题#xff09;部署ceph自定义crush 理论知识
Ceph是一个分布式存储系统#xff0c;并且提供了文件、对象、块存储功能。
Ceph集群中重要的守护进程有#xff1a;Ceph OSD、Cep… 文章目录 理论知识具体操作搭建ceph本地源yum源及ceph的安装配置NTP解决时间同步问题部署ceph自定义crush 理论知识
Ceph是一个分布式存储系统并且提供了文件、对象、块存储功能。
Ceph集群中重要的守护进程有Ceph OSD、Ceph Monitor。Ceph OSD(Object Storage Device): OSD是数据存储的地方该守护进程处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD守护进程的心跳来向Ceph Monitors提供一些监控信息。 。Ceph Monitor: 是一个监视器,监视Ceph集群状态和维护集群中的各种关系。是集群的控制中心。同时ceph monitor还负责集群的指挥工作将集群的状态同步给客户端。当集群状态有变化比如OSD增加或故障时monitor会负责更新集群的状态并反馈给客户端。为了保证高可用monitor节点需要部署多个。比如3个5个。。。Ceph存储集群至少需要一个Ceph Monitor和两个 OSD 守护进程。
集群的状态
Monitor Maps集群Ceph Monitor集群的节点状态通过ceph mon dump可以获取OSD Maps集群数据存储节点的状态表记录集群中OSD状态变化通过ceph osd dump可以获取PGs MapsPGs即placement group表示在OSD中的分布式方式通过ceph pg dump可以获取Crush MapsCrush包含资源池pool在存储中的映射路径方式即数据是如何分布的MDS MapsCephFS依赖的MDS管理组件可通过ceph mds dump获取用于追踪MDS状态。
ceph集群把从客户端接收的数据不管是ceph块设备、ceph对象存储还是ceph文件系统切割成多个对象object然后将对象存储在osd设备上由osd守护进程处理读写操作。
至于这些对象是如何选择对应的OSD设备呢这就需要使用调度算法CRUSH。不管是客户端还是OSD守护进程都使用crush算法来计算对象在集群中OSD设备的位置信息。
以一个100G的文件为例每个对象默认是4M那么就会切割成25600个对象。如果一个文件或者OSD出现了异常那么集群就需要对每个对象都进行调度那么在一个大规模集群中crush算法调度任务就会变得非常繁重。因此ceph集群引入了PGPlace Group放置组的概念。可以理解为放置对象的容器。 因此可以将对象映射到PG再通过crush算法将PG调度到某个osd。由于PG的数量相对是固定的因此调度任务没有那么繁重。同时当某个OSD异常时只需要将对应的PG调度到其他OSD上。 具体流程为
一个文件将会切割为多个object如1G文件每个object为4M将切割为256个每个object会由一个由innode(ino)和object编号(ono)组成oid即object idoid唯一标识object对象针对object id做hash并做取模运算从而获取到pgid即place group id通过hashmask获取到PGs IDPG是存储object的容器Ceph通过CRUSH算法将pgid进行运算找到当前集群最适合存储PG的OSD节点如osd1和osd2假设为2个副本PG的数据最终写入到OSD节点完成数据的写入过程当然这里会涉及到多副本一份数据写多副本
其中还有pool的概念存储池是用于存储对象的逻辑分区可以实现不同数据的逻辑隔离。可以简单记作文件分割成了一个个对象若干对象则是存储在不同的PG里而多个PG 构成了Pool。
上述只总结了ceph的基础知识更全面的集群架构信息可以参考https://www.cnblogs.com/hukey/p/12588436.html#%E5%89%8D%E8%A8%80 https://docs.ceph.com/en/pacific/architecture/
具体操作
Ceph集群搭建参考链接https://cloud.tencent.com/developer/article/1006084 实验所用虚拟机均为Centos 7.6系统8G内存16核CPU Ceph-admin: 用作ntp server和ceph本地源 Ceph-1: 3个2T硬盘和一个800G硬盘deploy、mon1、osd3 Ceph-2: 3个2T硬盘和一个800G硬盘mon1、osd3 Ceph-3: 3个2T硬盘和一个800G硬盘mon1、osd3
需要在每台主机上配置好域名解析
搭建ceph本地源
下面操作均是在ceph-admin节点上
1、安装httpd和createrepo
yum install httpd createrepo -y2、创建ceph源目录
mkdir -p /var/www/html/ceph/10.2.23、下载所有文件【选择并下载你需要安装的ceph版本这里选择的是/rpm-jewel/el7/x86_64/然后把所有的包含10.2.2的rpm包都下下来除了那个ceph-debuginfo1G多太大了可以不下。最后再加上ceph-deploy的rpm链接】
cd /var/www/html/ceph/10.2.2
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ceph-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ceph-base-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ceph-common-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ceph-devel-compat-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ceph-fuse-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ceph-libs-compat-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ceph-mds-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ceph-mon-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ceph-osd-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ceph-radosgw-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ceph-selinux-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ceph-test-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/cephfs-java-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/libcephfs1-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/libcephfs1-devel-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/libcephfs_jni1-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/libcephfs_jni1-devel-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/librados2-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/librados2-devel-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/libradosstriper1-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/libradosstriper1-devel-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/librbd1-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/librbd1-devel-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/librgw2-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/librgw2-devel-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/python-ceph-compat-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/python-cephfs-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/python-rados-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/python-rbd-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/rbd-fuse-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/rbd-mirror-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/rbd-nbd-10.2.2-0.el7.x86_64.rpm
wget http://mirrors.aliyun.com/ceph/rpm-hammer/el7/noarch/ceph-deploy-1.5.36-0.noarch.rpm4、创建源
createrepo /var/www/html/ceph/10.2.25、开启httpd服务
systemctl start httpdyum源及ceph的安装
在ceph-1节点、ceph-2节点、ceph-3节点上执行
yum clean all
rm -fr /etc/yum.repos.d/*.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
sed -i /aliyuncs/d /etc/yum.repos.d/CentOS-Base.repo
sed -i s/$releasever/7/g /etc/yum.repos.d/CentOS-Base.repo
sed -i /aliyuncs/d /etc/yum.repos.d/epel.repo增加ceph的源:
scp ceph-admin:/etc/yum.repos.d/ceph.repo /etc/yum.repos.d/安装ceph客户端和ntp
yum makecache
yum install ceph ceph-radosgw ntp -y关闭火墙
sed -i s/SELINUX.*/SELINUXdisabled/ /etc/selinux/config
setenforce 0
systemctl stop firewalld
systemctl disable firewalld配置NTP解决时间同步问题
ceph-admin 节点、ntp-1节点、ntp-2 节点、ntp-3节点都需要安装 ntp
yum install ntp -y将 ceph-admin 节点作为 NTP server 将ntp-1节点、ntp-2 节点、ntp-3节点作为 NTP client
下述操作在ceph-admin 节点上
vim /etc/ntp.confvim /etc/ntp/step-tickers开启服务
systemctl enable ntpd
systemctl start ntpd 只有当命令的下一行是 * 时才是正常的。 至此NTP server端已经配置完毕下面开始配置client端。
在ceph-1、ceph-2、ceph-3三个节点上: 修改/etc/ntp.conf注释掉四行server添加一行server指向ceph-admin:
vim /etc/ntp.conf 开启服务
systemctl enable ntpd
systemctl start ntpd观察client 已经正确连接到server端同样正确连接的标准是ntpq -p的最下面一行以*号开头。 如果还没显示 * 号就等一会估计5分钟就好了。
一定要确定server和所有的client端的NTP都正确连接才能继续搭建ceph 。
部署ceph
在 ceph-1 节点部署节点上执行如下 安装 ceph-deploy
yum install ceph-deploy -y在部署节点上创建部署目录开始部署
cd
mkdir cluster
cd cluser
ceph-deploy new ceph-1 ceph-2 ceph-3在部署节点ssh-copy-id到各个其他节点。
ssh-copy-id ceph-2
ssh-copy-id ceph-3此时在 cluster 目录下有文件 ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
vim ceph.conf : 其中osd_crush_update_on_startfalse 表示启动 osd 时不自动更新 crush后续将自定义 crush 。 osd_journal_size20480 表示设置日志盘为20G
开始部署 monitor
ceph-deploy mon create-initial下面开始部署OSD 先需要理清楚各个主机磁盘 ceph-1主机
/dev/vdc2T 【假设为sata硬盘】/dev/vdd800G 【ssd硬盘】/dev/vde2T 【假设为sata硬盘】/dev/vdf2T 【假设为sata硬盘】
ceph-2以及ceph-3 主机
/dev/vdc800G【ssd硬盘】/dev/vdd2T 【假设为sata硬盘】/dev/vde2T 【假设为sata硬盘】/dev/vdf2T 【假设为sata硬盘】
先从SATA硬盘开始部署OSD
[rootceph-1 cluster]# ceph-deploy --overwrite-conf osd prepare ceph-1:/dev/vdc ceph-1:/dev/vde ceph-1:/dev/vdf ceph-2:/dev/vdd ceph-2:/dev/vde ceph-2:/dev/vdf ceph-3:/dev/vdd ceph-3:/dev/vde ceph-3:/dev/vdf
然后激活创建的OSD
注意这里osd activate后面的参数格式为:HOSTNAME:data-disk1,需要注意的是刚刚的/dev/vdc这里需要写成/dev/vdc1因为分了区。
[rootceph-1 ~]# ceph-deploy --overwrite-conf osd activate ceph-1:/dev/vdc1 ceph-1:/dev/vde1 ceph-1:/dev/vdf1 ceph-2:/dev/vdd1 ceph-2:/dev/vde1 ceph-2:/dev/vdf1 ceph-3:/dev/vdd1 ceph-3:/dev/vde1 ceph-3:/dev/vdf1
然后可以使用 ceph -s 查看集群状态能看到osd的状态为 9 up, 9 in。
再部署3个ssd
[rootceph-1 ~]# ceph-deploy --overwrite-conf osd prepare ceph-1:/dev/vdd ceph-2:/dev/vdc ceph-3:/dev/vdc
[rootceph-1 ~]# ceph-deploy --overwrite-conf osd activate ceph-1:/dev/vdd1 ceph-2:/dev/vdc1 ceph-3:/dev/vdc1
然后 ceph -s 查看集群状态能看到有12个 osd 是 up 的。
自定义crush 创建对应的Bucket
在 ceph-1 节点执行如下命令
ceph osd crush add-bucket root-sata root
ceph osd crush add-bucket root-ssd root
ceph osd crush add-bucket ceph-1-sata host
ceph osd crush add-bucket ceph-2-sata host
ceph osd crush add-bucket ceph-3-sata host
ceph osd crush add-bucket ceph-1-ssd host
ceph osd crush add-bucket ceph-2-ssd host
ceph osd crush add-bucket ceph-3-ssd host再将对应的host移到root下然后把OSD移到对应的host下面注意添加OSD时的weight是该OSD的实际大小(2T为2 800G为0.8)
ceph osd crush move ceph-1-sata rootroot-sata
ceph osd crush move ceph-2-sata rootroot-sata
ceph osd crush move ceph-3-sata rootroot-sata
ceph osd crush move ceph-1-ssd rootroot-ssd
ceph osd crush move ceph-2-ssd rootroot-ssd
ceph osd crush move ceph-3-ssd rootroot-ssd
ceph osd crush add osd.0 2 hostceph-1-sata
ceph osd crush add osd.1 2 hostceph-1-sata
ceph osd crush add osd.2 2 hostceph-1-sata
ceph osd crush add osd.3 2 hostceph-2-sata
ceph osd crush add osd.4 2 hostceph-2-sata
ceph osd crush add osd.5 2 hostceph-2-sata
ceph osd crush add osd.6 2 hostceph-3-sata
ceph osd crush add osd.7 2 hostceph-3-sata
ceph osd crush add osd.8 2 hostceph-3-sata
ceph osd crush add osd.9 0.8 hostceph-1-ssd
ceph osd crush add osd.10 0.8 hostceph-2-ssd
ceph osd crush add osd.11 0.8 hostceph-3-ssd查看 ceph osd tree: 导出 crushmap并添加rule
cephosd getcrushmap -o /tmp/crush
crushtool -d /tmp/crush -o /tmp/crush.txt
# -d 的意思是decompile导出的crush是二进制格式的。vim /tmp/crush.txt
# rules
rule rule-sata {ruleset 0 #rule的编号type replicatedmin_size 1max_size 10step take root-sata #设置sata的root名称step chooseleaf firstn 0 type hoststep emit
}
rule rule-ssd {ruleset 1type replicatedmin_size 1max_size 10step take root-ssd #设置ssd的root名称step chooseleaf firstn 0 type hoststep emit
}编译 /tmp/crush.txt并注入集群中
[rootceph-1 cluster]# crushtool -c /tmp/crush.txt -o /tmp/crush.bin
[rootceph-1 cluster]# ceph osd setcrushmap -i /tmp/crush.bin查看 ceph -s
如果health HEALTH_WARN那么增加rdb的pg数即可。
cephosd pool set rbd pg_num 256
ceph osd pool set rbd pgp_num 256然后就能看到状态变成HEALTH_OK 了。
一些用法
查看rbd池的情况 [rootceph-1cluster]# ceph osd pool ls detail 将rbd池是ruleset设置为1即由osd.9-osd.11组成的结构rbd池的所有数据将会保存在这三个SSD上 [rootceph-1cluster]# ceph osd pool set rbd crush_ruleset 1
创建不同的pool
[rootceph-1cluster]# ceph osd pool create sata-pool 256 rule-sata pool sata-pool created [rootceph-1 cluster]# ceph osd pool create ssd-pool 256 rule-ssd pool ssd-pool created 模拟了将同一台主机上的SATA和SSD分开使用在一批次同样结构的主机上构建出两种不同速度的poolCRUSH的自定义性给ceph提供了极大的可塑性。