zoukankan      html  css  js  c++  java
  • 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'

       
         

    参考

  • 相关阅读:
    PyQt5经典案例
    JS实现深拷贝(解决循环引用等问题)
    React/Vue里的key到底有什么用?看完这篇你就知道了!(附demo代码)
    linux盘符操作命令
    Ubuntu20.04下安装opencv for C++
    数字图像处理-python随机噪声、高斯噪声和椒盐噪声实现
    数字图像处理-(1)pyqt页面
    数字图像处理-Python读取BMP文件
    docker笔记
    CentOS7安装GO
  • 原文地址:https://www.cnblogs.com/wwchihiro/p/9232345.html
Copyright © 2011-2022 走看看