Ceph分布式集群在线搭建

Ceph分布式集群在线搭建

在这里插入图片描述

一、ceph简介(摘抄自官方文档翻译)

不管你是想为云平台提供Ceph 对象存储和/或 Ceph 块设备,还是想部署一个 Ceph 文件系统或者把 Ceph 作为他用,所有 Ceph 存储集群的部署都始于部署一个个 Ceph 节点、网络和 Ceph 存储集群。 Ceph 存储集群至少需要一个 Ceph Monitor 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )。
在这里插入图片描述
Ceph OSDs:Ceph OSD 守护进程( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有3个副本,但你可以调整副本数 )。
Monitors: Ceph Monitor维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch )。
MDSs: Ceph 元数据服务器( MDS )为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。
Ceph 把客户端数据保存为存储池内的对象。通过使用 CRUSH 算法, Ceph 可以计算出哪个归置组(PG)应该持有指定的对象(Object),然后进一步计算出哪个 OSD 守护进程持有该归置组。 CRUSH 算法使得 Ceph 存储集群能够动态地伸缩、再均衡和修复。
下面看一下ceph的体系结构图:
在这里插入图片描述

二、部署结构设计

本次部署选取VMware四台虚机进行测试。系统均为centos7.4-minimal(CentOS-7-x86_64-Minimal-1708)。CPU均为4核,内存均为8GB。分布式集群选择使用三台机器作为monitor,一台机器只做osd使用。每台机器均为俩块硬盘,俩个网卡,ens33走公共网络,ens37走集群存储网络。
在这里插入图片描述

三、集群搭建

3.1更新以及安装基本软件(四台机器均执行)

# yum update -y
# yum install ntp net-tools vim ntp –y

3.2关闭防火墙,disable掉selinux(四台机器均执行)

# setenforce 0 
# sed -i s’/SELINUX.*=.*enforcing/SELINUX=disabled’/g /etc/selinux/config

3.3配置ntp时钟同步(四台机器均执行)

# vim /etc/ntp.conf

如下图所示,
在这里插入图片描述

添加ntp时钟主备服务器,“10.109.192.4 10.109.192.42”就是时钟主备服务器。本示例以这俩时钟服务器为准。
在这里插入图片描述

# systemctl enable ntpd.service && systemctl start ntpd.service && systemctl status ntpd.service
# ntpq -p

可以查看到同步的时间主机:
在这里插入图片描述

3.4添加ceph安装源(四台机器均执行)

# yum install -y epel-release
# vim /etc/yum.repos.d/ceph.repo

写入以下内容:

[ceph]
name=Ceph packages for $basearch
baseurl=https://download.ceph.com/rpm-jewel/el7/$basearch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc 

[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc 

[ceph-source]
name=Ceph source packages
baseurl=https://download.ceph.com/rpm-jewel/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

3.5设置hostname以及建立ssh互信

# hostnamectl set-hostname k8s-master01
# hostnamectl set-hostname k8s-master02
# hostnamectl set-hostname k8s-master03
# hostnamectl set-hostname k8s-node01

修改每台机器的hosts文件:

# cat >> /etc/hosts <<EOF \
192.168.224.130 k8s-master01 \
192.168.224.131 k8s-master02 \
192.168.224.132 k8s-master03 \
192.168.224.133 k8s-node01 \
EOF

3.6安装ceph-deploy(仅在k8s-master01机器执行)

# yum install ceph-deploy –y
# mkdir /opt/ceph-cluster  && cd /opt/ceph-cluster

下面将k8s-master01、k8s-master02、k8s-master03部署成monitor分布式集群。

# ceph-deploy new k8s-master01 k8s-master02 k8s-master03

修改ceph.conf文件:

# echo "osd crush chooseleaf type = 0" >> ceph.conf  && 
echo "osd pool default size = 2" >> ceph.conf  && 
echo "osd pool default min_size = 2" >> ceph.conf  &&  
echo "osd journal size = 100" >> ceph.conf

以上中ceph的副本数设置默认为2,实际生产中可以根据需求修改。

3.7配置ceph存储集群走单独网络(k8s-master01上执行)

本示例使用俩个网络运营 Ceph 存储集群:一个公共网(前端)和一个集群网(后端)。为此,各个节点得配备俩个网卡。如图所示:
在这里插入图片描述

运营两个独立网络的考量主要有:
性能: OSD 为客户端处理数据复制,复制多份时 OSD 间的网络负载势必会影响到客户端和 Ceph 集群的通讯,包括延时增加、产生性能问题;恢复和重均衡也会显著增加公共网延时。关于 Ceph 如何复制参见伸缩性和高可用性;关于心跳流量参见监视器与 OSD 的交互。
安全: 大多数人都是良民,很少的一撮人喜欢折腾拒绝服务攻击( DoS )。当 OSD 间的流量失控时,归置组再也不能达到 active + clean 状态,这样用户就不能读写数据了。挫败此类攻击的一种好方法是维护一个完全独立的集群网,使之不能直连互联网;另外,请考虑用消息签名防止欺骗攻击。
具体可以参考官方文档:
http://docs.ceph.org.cn/rados/configuration/network-config-ref/
配置如下:
在ceph.conf文件添加如下内容:

public network = 192.168.224.100/24
cluster network = 192.168.1.0/24

[mon]

[mon.ceph1]
host = k8s-master01
mon addr = 192.168.224.130:6789

[mon.ceph2]
host = k8s-master02
mon addr = 192.168.224.131:6789

[mon.ceph3]
host = k8s-master03
mon addr = 192.168.224.133:6789

[osd]
osd journal size = 500
# osd crush update on start = false

[osd.0]
host = k8s-master01 
public addr = 192.168.224.130
cluster addr = 192.168.1.34

[osd.1]
host = k8s-master02
public addr = 192.168.224.131
cluster addr = 192.168.1.35

[osd.2]
host = k8s-master03
public addr = 192.168.224.132
cluster addr = 192.168.1.36

[osd.3]
host = k8s-node01
public addr = 192.168.224.133
cluster addr = 192.168.1.37

3.8安装ceph

然后在各个节点(本例四台机器)安装ceph,执行下部操作:

# yum install -y ceph ceph-radosgw

然后在k8s-master01执行以下操作:

# ceph-deploy mon create-initial

将ceph.conf配置文件推送到各个节点

# ceph-deploy --overwrite-conf config push k8s-master01  && 
ceph-deploy --overwrite-conf config push k8s-master02  && 
ceph-deploy --overwrite-conf config push k8s-master03  && 
ceph-deploy --overwrite-conf config push k8s-node01

3.9配置osd

Osd的建立有俩种方式,一种使用lvm卷,一种就是空白硬盘模式。

3.9.1使用空白硬盘建立osd

四台机器均使用了第二块硬盘/dev/sdb,这里使用sdb作为osd存储,假如还有别的多余的硬盘,步骤相似。
1)硬盘格式,然后在k8s-master01执行以下操作:

# ceph-deploy disk zap k8s-master01:/dev/sdb  &&   
ceph-deploy disk zap k8s-master02:/dev/sdb  &&       
ceph-deploy disk zap k8s-master03:/dev/sdb  &&  
ceph-deploy   disk   zap k8s-node01:/dev/sdb

2)Osd准备,然后在k8s-master01执行以下操作:

# ceph-deploy osd prepare k8s-master01:/dev/sdb  && 
ceph-deploy osd prepare k8s-master02:/dev/sdb  && 
ceph-deploy osd prepare k8s-master03:/dev/sdb  && 
ceph-deploy   osd  prepare k8s-node01:/dev/sdb

3)Osd激活,然后在k8s-master01执行以下操作:

# ceph-deploy osd activate k8s-master01:/dev/sdb   &&
ceph-deploy osd activate k8s-master02:/dev/sdb   &&
ceph-deploy osd activate k8s-master03:/dev/sdb   &&
ceph-deploy osd activate k8s-node01:/dev/sdb

最后一步激活可能会报错,不影响,这是上一步骤准备osd的时候已经激活了,重复会提示错误,不影响。

3.9.2使用lvm建立osd

1)本示例选取一台机器,从当前硬盘划分10G出来作为ceph卷备用:

# dd if=/dev/zero of=ceph-volumes.img bs=1M count=10240  oflag=direct
# sgdisk -g -clear ceph-volumes.img

创建ceph卷:

# sudo vgcreate ceph-volumes $(sudo losetup --show -f ceph-volumes.img)

划分出来的10G,大概有6G~7G可以作为分成俩个ceph使用,这里一个ceph0,一个ceph1:

# sudo lvcreate -L3G -nceph0 ceph-volumes
# sudo lvcreate -L3G -nceph1 ceph-volumes
# sudo mkfs.xfs -f /dev/ceph-volumes/ceph0
# sudo mkfs.xfs -f /dev/ceph-volumes/ceph1

创建俩个目录,作为挂载osd备用:

# mkdir -p /srv/ceph/{osd0,osd1,mon0,mds0}

将俩个ceph卷挂载到目录下:

# sudo mount /dev/ceph-volumes/ceph0 /srv/ceph/osd0
# sudo mount /dev/ceph-volumes/ceph1 /srv/ceph/osd1

以上就是一台机器上使用lvm卷单独创建俩个osd的示例,本实例中有四台机器k8s-master01、k8s-master02、k8s-master03、k8s-node01,每台机器均执行以上操作,即每台有俩个osd。

2)为挂载OSD先准备,然后在k8s-master01执行以下操作:

# ceph-deploy osd prepare k8s-master01:/srv/ceph/osd0 && 
ceph-deploy osd prepare k8s-master01:/srv/ceph/osd1 && 
ceph-deploy osd prepare k8s-master02:/srv/ceph/osd0 && 
ceph-deploy osd prepare k8s-master02:/srv/ceph/osd1 && 
ceph-deploy osd prepare k8s-master03:/srv/ceph/osd0 && 
ceph-deploy osd prepare k8s-master03:/srv/ceph/osd1 && 
ceph-deploy osd prepare k8s-node01:/srv/ceph/osd0 &&   
ceph-deploy osd prepare k8s-node01:/srv/ceph/osd1

3)赋予osd目录ceph权限
四台机器k8s-master01、k8s-master02、k8s-master03、k8s-node01均执行以下操作:

# chown -R ceph:ceph /srv/ceph/osd0
# chown -R ceph:ceph /srv/ceph/osd1

4)激活两个OSD,然后在k8s-master01执行以下操作:

# ceph-deploy osd activate k8s-master01:/srv/ceph/osd0   && 
ceph-deploy osd activate k8s-master01:/srv/ceph/osd1   &&  
ceph-deploy osd activate k8s-master02:/srv/ceph/osd0   && 
ceph-deploy osd activate k8s-master02:/srv/ceph/osd1   && 
ceph-deploy osd activate k8s-master03:/srv/ceph/osd0   && 
ceph-deploy osd activate k8s-master03:/srv/ceph/osd1   && 
ceph-deploy osd activate k8s-node01:/srv/ceph/osd0   && 
ceph-deploy osd activate k8s-node01:/srv/ceph/osd1

3.10查看ceph集群各情况以及ceph的命令

3.10.1查看ceph集群的osd树
# ceph osd tree
3.10.2查看ceph状态
# ceph -s
3.10.3查看ceph集群的pool有哪些
# ceph osd lspools
或:
# ceph osd pool ls

在这里插入图片描述

3.10.4创建rbd

有些ceph创建之初没有rbd默认pool,这时候需要创建,假如已经有了,就不用创建了,这里给了默认大小1G:

# ceph osd pool create 1024 1024

只有创建了这个默认的rbd池,rbd命令才好使用。

3.10.5查看某一个pool里面有哪些实例
# rbd ls poolname

在这里插入图片描述

3.10.6查看pool池子里面的某一个实例的具体信息
# rbd info <poolname>/<name>

在这里插入图片描述

3.10.7查看某pool池子中的具体某个实例的map信息

这里主要查看其副本信息,有几个副本,副本在哪几个osd上,哪个osd是正在使用的。

# ceph osd map <poolname> <name>

在这里插入图片描述
如上第一个示例中:
osdmap e171 # e171为map的版本号
’vms’ (6) # 存储池及其ID
object ‘e7b9655e-be05-4a98-b292-d2b21ed3bcbc_disk’ # 对象名称
pg 6.7ba9f9d5 (6.1d5) # pg名称为6.1d5
up ([29,28], p29) # 存储了2副本,所有的每个pg都会放在2个osd上,osd.29是primary主副本

3.10.8查看ceph存储中的某个实例的具体在osd的哪个位置

以上一步为准的实例一为例子演示:
上述osd.29是primary主副本,现在查看osd.29上该副本的信息,通过(# ceph osd tree )命令查询知道osd.29在computer-3上。登录上此台机器。

# cd /var/lib/ceph/osd/ceph-29/current
# ls -l | grep -i 6.1d5

在这里插入图片描述

3.10.9 ceph修改副本数大小
# ceph osd pool set <poolname> size <num>
# ceph osd pool set <poolname> min_size <num>

在这里插入图片描述

四、ceph集群存储的虚机迁移方法

这里分容器化的ceph集群和未容器化的ceph集群。

4.1未容器化的ceph集群存储的虚机迁移方法

首先查看ceph集群里面有哪些pool池

# ceph osd pool ls

在这里插入图片描述

虚机都存储在compute这个pool里面,查看compute的pool里面虚机:

# rbd ls compute

在这里插入图片描述

如上图所示,每个虚机对应俩个文件( _disk和_disk.config),有的虚机还有额外的交换分区,所有有交换分区文件*********_disk.swap。针对虚机迁移时候,只用到*********_disk文件,别的不需要,以此镜像建立的虚机,规格要一致,或是高于此规格。
导出镜像:

# rbd export -p compute --image *********_disk /root/test.raw

时间较长,导出完成之后,得到raw生肉格式的镜像文件,有的需求需要转换成qcow2格式:

# qemu-img convert -f raw -O qcow2  test.raw test.qcow2

将该镜像,上传到需要迁移到的openstack环境中,就可使用openstack命令上传该镜像:

# source admin-openrc.sh

1)上传raw格式的镜像:

# openstack image create <name> --file <filename> --disk-format raw --container-format  bare  --public

2)上传qcow2格式的镜像

# openstack image create <name> --file <filename> --disk-format qcow2 --container-format  bare  --public

4.2容器化的ceph集群存储的虚机迁移方法

容器化的操作,主要就是加上docker命令,操作如下:
查看ceph集群的状态:

# docker exec ceph_mon ceph -s

ceph_mon:ceph容器化的监控容器名称
在这里插入图片描述
查看有哪些pool:

# docker exec ceph_mon ceph osd pool ls

在这里插入图片描述

如上,虚机都存在vms这个pool里面,镜像模板都存在images这个pool里面。

# docker exec ceph_mon rbd ls vms

在这里插入图片描述

导出镜像到ceph_mon容器里面:
注意:有些镜像很大,100G,500G,这个时候,容器挂载的本机root目录也要很大,所以系统安装时候,需要把sda盘基本上全给root,home目录就不需要了,直接删除。

# docker exec ceph_mon rbd export -p vms  ********_disk /root/test.raw

如上的目录在容器里面的root目录下,这时候需要将其拷贝出来到本机:

# docker cp ceph_mon:/root/test.raw  ./

以上命令将ceph_mon容器的root目录下的test.raw拷贝出到当前目录。

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值