码迷,mamicode.com
首页 > 其他好文 > 详细

Ceph 存储集群-低级运维

时间:2017-12-01 17:40:46      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:sys   直接   conf   区别   ice   降级   use   检查   cep   

 

低级集群运维包括启动、停止、重启集群内的某个具体守护进程;更改某守护进程或子系统配置;增加或拆除守护进程。低级运维还经常遇到扩展、缩减 Ceph 集群,以及更换老旧、或损坏的硬件。

 

一、增加/删除 OSD

 

如果您的集群已经在运行,你可以在运行时添加或删除 OSD 。

 

 

增加 OSD

你迟早要扩容集群, Ceph 允许在运行时增加 OSD 。在 Ceph 里,一个 OSD 一般是一个 ceph-osd 守护进程,它运行在硬盘之上,如果你有多个硬盘,可以给每个硬盘启动一个 ceph-osd 守护进程。

 

通常,你应该监控集群容量,看是否达到了容量上限,因为达到了它的 near full 比率后,要增加一或多个 OSD 来扩容。

 

注意:不要等空间满了再增加 OSD ,空间使用率达到 near full 比率后, OSD 失败可能导致集群空间占满。

 

部署硬件

 

如果你通过增加主机来增加 OSD ,关于 OSD 服务器硬件的配置请参见硬件推荐。要把一台 OSD 主机加入到集群,首先要安装最新版的 Linux ,而且存储硬盘要做好必要的准备,详情参见文件系统推荐。

 

把 OSD 主机添加到集群机架上,连接好网络、确保网络通畅。详情见网络配置参考。

 

安装必要软件

在手动部署的集群里,你必须手动安装 Ceph 软件包,详情见安装 Ceph (手动)。你应该配置一个无密码登录 SSH 的用户,且他有 root 权限。

 

增加 OSD (手动)

此过程要设置一个 ceph-osd 守护进程,让它使用一个硬盘,且让集群把数据发布到 OSD 。如果一台主机有多个硬盘,可以重复此过程,把每个硬盘配置为一个 OSD 。

 

要添加 OSD ,要依次创建数据目录、把硬盘挂载到目录、把 OSD 加入集群、然后把它加入 CRUSH 图。

往 CRUSH 图里添加 OSD 时建议设置权重,硬盘容量每年增长 40% ,所以较新的 OSD 主机拥有更大的空间(即它们可以有更大的权重)

 

1.创建 OSD 。如果未指定 UUID , OSD 启动时会自动生成一个。下列命令会输出 OSD 号,后续步骤你会用到

ceph osd create [{uuid} [{id}]]

如果指定了可选参数 {id} ,那么它将作为 OSD id 。要注意,如果此数字已使用,此命令会出错。

注意:一般来说,我们不建议指定 {id} 。因为 ID 是按照数组分配的,跳过一些依然会浪费内存;尤其是跳过太多、或者集群很大时,会更明显。若未指定 {id} ,将用最小可用数字。

 

2.在新 OSD 主机上创建默认目录。

ssh {new-osd-host}
sudo mkdir /var/lib/ceph/osd/ceph-{osd-number}

 

3.如果准备用于 OSD 的是单独的而非系统盘,先把它挂载到刚创建的目录下:

ssh {new-osd-host}
sudo mkfs -t {fstype} /dev/{drive}
sudo mount -o user_xattr /dev/{hdd} /var/lib/ceph/osd/ceph-{osd-number}

 

4.初始化 OSD 数据目录

ssh {new-osd-host}
ceph-osd -i {osd-num} --mkfs --mkkey

运行 ceph-osd 时目录必须是空的。

 

5.注册 OSD 认证密钥, ceph-{osd-num} 路径里的 ceph 值应该是 $cluster-$id ,如果你的集群名字不是 ceph ,那就用改过的名字

ceph auth add osd.{osd-num} osd ‘allow *‘ mon ‘allow rwx‘ -i /var/lib/ceph/osd/ceph-{osd-num}/keyring

 

6.把 OSD 加入 CRUSH 图,这样它才开始收数据。用 ceph osd crush add 命令把 OSD 加入 CRUSH 分级结构的合适位置。如果你指定了不止一个桶,此命令会把它加入你所指定的桶中最具体的一个,并且把此桶挪到你指定的其它桶之内。重要:如果你只指定了 root 桶,此命令会把 OSD 直接挂到 root 下面,但是 CRUSH 规则期望它位于主机内。

 

若用的是 v0.48 版,执行下列命令:

ceph osd crush add {id} {name} {weight}  [{bucket-type}={bucket-name} ...]

 

若用的是 v0.56 及更高版,执行下列命令:

ceph osd crush add {id-or-name} {weight}  [{bucket-type}={bucket-name} ...]

 

你也可以反编译 CRUSH 图、把 OSD 加入设备列表、以桶的形式加入主机(如果它没在 CRUSH 图里)、以条目形式把设备加入主机、分配权重、重编译并应用它。详情参见增加/移动 OSD 。

 

Argonaut 0.48 版最佳实践

 

为降低对用户 I/O 性能的影响,加入 CRUSH 图时应该把 OSD 的初始权重设为 0 ,然后每次增大一点、逐步增大 CRUSH 权重。例如每次增加 0.2 :

ceph osd crush reweight {osd-id} .2

迁移完成前,可以依次把权重重置为 0.4 、 0.6 等等,直到达到期望权重。

为降低 OSD 失败的影响,你可以设置:

mon osd down out interval = 0

它防止挂了的 OSD 自动被标记为 out ,然后逐步降低其权重:

ceph osd reweight {osd-num} .8

还是等着集群完成数据迁移,然后再次调整权重,直到权重为 0 。注意,这会阻止集群在发生故障时自动重复制数据,所以要确保监控的及时性,以便管理员迅速介入。

注意,以上经验在 Bobtail 及后续版本已不再必要。

 

启动 OSD

把 OSD 加入 Ceph 后, OSD 就在配置里了。然而它还没运行,它现在的状态为 down 且 out 。你必须先启动 OSD 它才能收数据。可以用管理主机上的 service ceph 、或从 OSD 所在主机启动。

在 CentOS/RHEL 上用 sysvinit 。

 

sudo /etc/init.d/ceph start osd.{osd-num}

 

一旦你启动了 OSD ,其状态就变成了 up 且 in 。

 

 

观察数据迁移

把新 OSD 加入 CRUSH 图后, Ceph 会重新均衡服务器,一些归置组会迁移到新 OSD 里,你可以用 ceph 命令观察此过程。

ceph -w

 

你会看到归置组状态从 active+clean 变为 active, some degraded objects (有降级的对象)、且迁移完成后回到 active+clean 状态。( Ctrl-c 退出)

 

 

删除 OSD (手动)

要想缩减集群尺寸或替换硬件,可在运行时删除 OSD 。在 Ceph 里,一个 OSD 通常是一台主机上的一个 ceph-osd 守护进程、它运行在一个硬盘之上。如果一台主机上有多个数据盘,你得挨个删除其对应 ceph-osd 。通常,操作前应该检查集群容量,看是否快达到上限了,确保删除 OSD 后不会使集群达到 near full 比率。

注意:删除 OSD 时不要让集群达到 full ratio 值,删除 OSD 可能导致集群达到或超过 full ratio 值。

 

把 OSD 踢出集群

删除 OSD 前,它通常是 up 且 in 的,要先把它踢出集群,以使 Ceph 启动重新均衡、把数据拷贝到其他 OSD 。

ceph osd out {osd-num}

 

观察数据迁移

一旦把 OSD 踢出( out )集群, Ceph 就会开始重新均衡集群、把归置组迁出将删除的 OSD 。你可以用 ceph 工具观察此过程。

 

ceph -w

你会看到归置组状态从 active+clean 变为 active, some degraded objects 、迁移完成后最终回到 active+clean 状态。( Ctrl-c 中止)。

 

有时候,(通常是只有几台主机的“小”集群,比如小型测试集群)拿出( out )某个 OSD 可能会使 CRUSH 进入临界状态,这时某些 PG 一直卡在 active+remapped 状态。如果遇到了这种情况,你应该把此 OSD 标记为 in ,用这个命令:

 

ceph osd in {osd-num}

 

等回到最初的状态后,把它的权重设置为 0 ,而不是标记为 out ,用此命令:

 

ceph osd crush reweight osd.{osd-num} 0

执行后,你可以观察数据迁移过程,应该可以正常结束。把某一 OSD 标记为 out 和权重改为 0 的区别在于,前者,包含此 OSD 的桶、其权重没变;而后一种情况下,桶的权重变了(降低了此 OSD 的权重)。某些情况下, reweight 命令更适合“小”集群。

 

停止 OSD

把 OSD 踢出集群后,它可能仍在运行,就是说其状态为 up 且 out 。删除前要先停止 OSD 进程。

 

ssh {osd-host}
sudo /etc/init.d/ceph stop osd.{osd-num}

停止 OSD 后,状态变为 down 。

 

 

删除 OSD

 

此步骤依次把一个 OSD 移出集群 CRUSH 图、删除认证密钥、删除 OSD 图条目、删除 ceph.conf 条目。如果主机有多个硬盘,每个硬盘对应的 OSD 都得重复此步骤。

1.删除 CRUSH 图的对应 OSD 条目,它就不再接收数据了。你也可以反编译 CRUSH 图、删除 device 列表条目、删除对应的 host 桶条目或删除 host 桶(如果它在 CRUSH 图里,而且你想删除主机),重编译 CRUSH 图并应用它。详情参见删除 OSD 。

 

ceph osd crush remove {name}

 

2.删除 OSD 认证密钥:

ceph auth del osd.{osd-num}

 

ceph-{osd-num} 路径里的 ceph 值是 $cluster-$id ,如果集群名字不是 ceph ,这里要更改。

 

3.删除 OSD 。

 

ceph osd rm {osd-num}
#for example
ceph osd rm 1

 

4.登录到保存 ceph.conf 主拷贝的主机。

ssh {admin-host}
cd /etc/ceph
vim ceph.conf

 

5.从 ceph.conf 配置文件里删除对应条目。

[osd.1]
        host = {hostname}

 

6.从保存 ceph.conf 主拷贝的主机,把更新过的 ceph.conf 拷贝到集群其他主机的 /etc/ceph 目录下。

 

 

 

 

备案:技术分享图片http://210.14.131.179:8877/ 

 
账号:admin
密码:kuaiyun8877c

Ceph 存储集群-低级运维

标签:sys   直接   conf   区别   ice   降级   use   检查   cep   

原文地址:http://www.cnblogs.com/zhongguiyao/p/7943580.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!