ceph

 

该布署基于 Jewel(2016年)版本的 ceph

mimic(2018年)的 ceph 默认 osd 使用 bluestore,在创建 OSD 的时候步骤有些不一样,而且该版本自带 UI 控制台,是以前版本所没有的。

准备工作

  • 需要大于等于3台机器,每台机器大于等于2块数据盘
  • 最新的 CentOS 7 操作系统,安装时使用 Basic Server 配置,对系统盘大小没有特殊要求,网络要用静态 IP 配好
  • 集群里的所有机器装好 NTP 时间同步服务,如果连不了网,请找一台机器作时间服务器(因为 ceph 集群对时间一致性有依赖)
  • 将所有数据盘使用 xfs 格式化(不需要分区),然后挂载到 /data/disk1、/data/disk2…,并通过 uuid 的方式写入到 /etc/fstab
  • 关掉所有的防火墙(为了简单起见,否则需要单独开 6700~7300、80、443、22 端口)
  • 关掉 SELinux
  • 找其中一台机器作为操作机,通过 ssh-copy-id 让操作机可以免密码 SSH 登录集群里的所有机器(因为 ceph-deploy 依赖 ssh 来进行批量布署)

  • 将 mon 节点的三台机器配置 hostname,并要求在操作机上可以通过 hostname 来访问
  • 在所有机器上配置 ceph 的 yum 源和 epel 源(该布署基于线上的 163 yum源,如果纯内网环境布署,需要另想办法)
    ceph-deploy 安装过程中会调用如下命令:
    yum install -y https://download.ceph.com/rpm-jewel/el7/noarch/ceph-release-1-0.el7.noarch.rpm
    yum install -y epel-release yum-plugin-priorities ceph ceph-radosgw

     /etc/yum.repos.d/ceph.repo

安装

在所有机器上安装 ceph 软件包

在操作机上运行 ceph-deploy 在所有节点上安装 ceph 包

ceph-deploy install 192.168.1.120 192.168.1.121 192.168.1.122

在这个过程中 ceph-deploy 会调用如下命令:

yum install -y epel-release

yum install -y yum-plugin-priorities

yum install -y https://download.ceph.com/rpm-jewel/el7/noarch/ceph-release-1-0.el7.noarch.rpm

yum install -y ceph ceph-radosgw

所以,也可以这个环节,也可能不用 ceph-deploy,而是手工在所有机器上安装 ceph,ceph-radosgw

yum install -y ceph ceph-radosgw

配置

在操作机上创建个工作目录,用来存放集群配置等文件

cd

mkdir my-cluster

cd my-cluster

在这个工作目录中创建一个集群配置
ceph-deploy new node0 node1 node2

其中 node0 node1 node2 是 mon 节点的 hostname,要求在操作机的 /etc/hosts 里配置这些 hostname 对 IP 的映射,以可以正常访问

ceph-deploy new 命令会通过 hostname 通过 ssh 连接这些节点,只是作验证是否能连接且验证 IP 是否与本地解析的一致,然后生成 ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring 这三个集群配置文件

修改 ceph.conf 中的参数,加入以下配置

# 使用 2 副本
osd pool default size = 2 

# 降低时钟敏感性
mon clock drift allowed = 2 
mon clock drift warn backoff = 30

启动 mon 服务

ceph-deploy mon create-initial

ceph-deploy 会跟据 ~/my-cluster/ceph.conf 的配置,登录所有的 mon 节点,启动 ceph-mon 服务

运行完成后,会在 ~/my-cluster/ 目录下生成几点个 .keyring 文件

初始化 osd 目录

mkdir /data/disk1/osd0

chown ceph.ceph /data/disk1/osd0

# 对所有数据盘都重复这样的操作,osd0 命名不是必须的

然后填入 ceph osd 初始化数据

ceph-deploy osd prepare 192.168.1.120:/data/disk1/osd0 192.168.1.120:/data/disk2/osd1 192.168.1.121:/data/disk1/osd2 192.168.1.121:/data/disk2/osd3 192.168.1.122:/data/disk1/osd4 192.168.1.122:/data/disk2/osd5

启动 osd 服务

ceph-deploy osd activate  192.168.1.120:/data/disk1/osd0 192.168.1.120:/data/disk2/osd1 192.168.1.121:/data/disk1/osd2 192.168.1.121:/data/disk2/osd3 192.168.1.122:/data/disk1/osd4 192.168.1.122:/data/disk2/osd5

这个时候,可以在任意一个节点查看集群状态

ceph status

创建 pool

ceph osd pool create data 64 # 创建名称为 data 的 pool,PG数据为 64 个

ceph osd lspools # 查看有哪些 pool

读写Obj

echo "Hello, World." > /tmp/hello-world.txt

rados -p data put hello-world.txt ./hello-world.txt # 上传

rados -p data ls # 枚举

ceph osd map data hello-world.txt # 查看这个对象的物理副本位置

rados -p data get hello-world.txt /tmp/hello-world.txt.1 # 下载

rados -p data rm hello-world.txt # 删除

块设备操作

rbd -p rbd create rbd1 --size 10240 # 在名为 rbd 的 pool 里创建一个 10GB 的块

rbd -p rbd ls # 枚举一下所有块

rbd -p rbd --image rbd1 info  # 查看该块属性和feature

rbd -p rbd feature disable rbd1 exclusive-lock object-map fast-diff deep-flatten # 关掉一些在 3.10 kernel 上不支持的 feature

rbd -p rbd map --image rbd1 # 挂载该块设备

rbd showmapped # 查看已载载的块设备

mkfs.xfs /dev/rbd0 # 可以开始使用了

# 以上操作要求安装 ceph 环境(即 yum install -y ceph ceph-radosgw 和 /etc/ceph/* 配置)

CephFS

建议使用 mimic 版本以上的 cephfs,这样更加稳定。

客户端没有特殊情况,建议使用 ceph-fuse,代价就只是一些小小的性能损失,功能完备。

如果使用 kernel ceph,要求内核需要非常高的版本才能与 2018 年的 mimic 服务端相匹配。

ceph osd pool create cephfs_data 64

ceph osd pool create cephfs_metadata 64

为 cephfs 创建两个 pool,一个用来放 mds 元数据,一个用来放文件数据块数据

ceph-deploy mds create node0

ceph-deploy mds create node1

ceph-deploy mds create node2

布署并启动 mds

ceph fs new awesomefs cephfs_metadata cephfs_data # 创建一个名为 awesomefs 的 cephfs

挂载

mkdir /mnt/cfs

ceph-fuse /mnt/cfs # ceph-fsue 会跟据 /etc/ceph/ceph.conf 去寻找 mon 节点,然后从 /etc/ceph/ 目录下寻找 key 去连接 ceph 服务端

ceph-fuse 的版本需要与 ceph 服务端集群的版本一致,否则有可能无法 mount(甚至 core dump crash)

增加 OSD 节点

本质上,没有增加 OSD 节点的说法,增加 OSD 节点,即是增加 OSD

1. 在新的 OSD 节点机器上安装 ceph 包

yum install -y ceph ceph-radosgw

2. 初始化 OSD 目录(ceph-deploy prepare 同以上操作方法)。ceph-deploy 同时会初始化新节点的 /etc/ceph 目录。

3. 启动 OSD(ceph-deploy active 同以上操作方法)

完成后,使用 ceph -w 观察集群状况

集群重启

关闭集群

  1. 关闭所有的客户端
  2. 整个集群需要是健康状态
  3. 设置 noout, norecover, norebalance, nobackfill, nodown and pause flags

    ceph osd set noout
    ceph osd set norecover
    ceph osd set norebalance
    ceph osd set nobackfill
    ceph osd set nodown
    ceph osd set pause

  4. 一台一台关闭 osd 
    systemctl stop ceph-osd.target
  5. 一台一台关闭 mon
    systemctl stop ceph-mon.target
  6. 一台一台关闭 mgr(如果有的话)
    systemctl stop ceph-mgr.target

启动集群

  1. 一台一台启动 mon
    systemctl start ceph-mon.target
  2. 一台一台启动 mgr
    systemctl start ceph-mgr.target
  3. 一台一台启动 osd
    systemctl start ceph-osd.target
  4. 清除 noout, norecover, norebalance, nobackfill, nodown and pause flags
    ceph osd unset noout
    ceph osd unset norecover
    ceph osd unset norebalance
    ceph osd unset nobackfill
    ceph osd unset nodown
    ceph osd unset pause

升级

从 Jewel(2016年) 升级到 luminous(2017年):

  1. 将 /etc/yum.repos.d/ceph.repo 改成 luminous 的地址
  2. 在操作机上更新包 yum update ceph-deploy,在所有 ceph 节点上更新 ceph 包 yum update ceph ceph-radosgw
  3. 然后重启所有的 mon,再重启所有的 osd,请严格依照此文档执行:https://ceph.com/releases/v12-2-0-luminous-released/#upgrading
  4. ceph-mgr 是一个luminous的新东西,需要安装一个:ceph-deploy mgr create node0(在第一个 mon 节点上装一个即可)
  5. 最后可能需要将一些 pool 设置一下 tag,然后 ceph -w 会报节点不健康:https://ceph.com/community/new-luminous-pool-tags/

从 luminous(2017年)升级到 mimic(2018年):

(warning) 有问题,更新后 mon 无法启动,说是 ceph osd require-osd-release luminous 未执行。该问题未解决。

常用操作

类型命令作用
集群 ceph df 查看空间使用情况
ceph status 集群状态概览
ceph -w 持续输出集群状态
MON    
   
PG ceph pg dump 输出每个 PG 的信息和状态
   
OSD ceph osd tree 查看线上的所有 osd
   
POOL

ceph osd pool delete {pool-name}

删除一个 pool

ceph tell mon.\* injectargs '--mon-allow-pool-delete=true'

   
     

参考

posted @ 2018-06-27 09:36  wwchihiro  阅读(799)  评论(0编辑  收藏  举报