• 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组件:osd

    • OSD 守护进程,至少两个
    • 用于存储数据、处理数据拷贝、恢复、回滚、均衡
    • 通过心跳程序向monitor提供部分监控信息
    • 一个ceph集群中至少需要两个OSD守护进程

    Ceph组件:mon

    • 维护集群的状态映射信息
    • 包括monitor、OSD、placement Group(PG)
    • 还维护了monitor、OSD和PG的状态改变历史信息

    Ceph组件:mgr(新功能)

    • 负责ceph集群管理,如pg map
    • 对外提供集群性能指标(如cpeh -s 下IO信息)
    • 具有web界面的监控系统(dashboard)

    ceph逻辑结构

    数据通过ceph的object存储到PG,PG在存储到osd daemon,osd对应disk

    object只能对应一个pg

    一个raid可以对应一个osd

    一整块硬盘可以对应一个osd

    一个分区可以对应一个osd

    monitor:奇数个 osd : 几十到上万,osd越多性能越好

    pg概念

    • 副本数
    • crush规则(pg怎么找到osd acting set)
    • 用户及权限
    • epoach:单调递增的版本号
    • acting set: osd列表,第一个为primary osd,replicated osd
    • up set :acting set过去的版本
    • pg tmp:临时pg组

    osd状态:默认每2秒汇报自己给mon(同时监控组内osd,如300秒没有给mon汇报状态,则会把这个osd踢出pg组)

    • up 可以提供io
    • down 挂掉了
    • in 有数据
    • out 没数据了

    ceph应用场景:通过tgt支持iscsi挂载

    • 公司内部文件共享
    • 海量文件,大流量,高并发
    • 需要高可用、高性能文件系统
    • 传统单服务器及NAS共享难以满足需求,如存储容量,高可用

    ceph生产环境推荐

    • 存储集群采用全万兆网络
    • 集群网络(不对外)与公共网络分离(使用不同网卡)
    • mon、mds与osd分离部署在不同机器上
    • journal推荐使用PCI SSD,一般企业级IOPS可达40万以上
    • OSD使用SATA亦可
    • 根据容量规划集群
    • 至强E5 2620 V3或以上cpu,64GB或更高内存
    • 最后,集群主机分散部署,避免机柜故障(电源、网络)

    ceph安装环境

    由于机器较少,使用3台机器,充当mon与osd,生产环境不建议,生产环境至少3个mon独立

    主机 IP 角色 配置
    ceph-0

    eth0:192.168.0.150(Public)

    eth1:172.16.1.100(Cluster)

    mon、osd、mgr DISK 0 15G(OS)
    DISK 1 10G(Journal)
    DISK 2 10G(OSD)
    DISK 3 10G(OSD)
    ceph-1

    eth0:192.168.0.151(Public)

    eth1:172.16.1.101(Cluster)

    mon、osd、mgr DISK 0 15G(OS)
    DISK 1 10G(Journal)
    DISK 2 10G(OSD)
    DISK 3 10G(OSD)
    ceph-2

    eth0:192.168.0.152(Public)

    eth1:172.16.1.102(Cluster)

    mon、osd、mgr DISK 0 15G(OS)
    DISK 1 10G(Journal)
    DISK 2 10G(OSD)
    DISK 3 10G(OSD)

    一、系统设置

    1.绑定主机名

     由于后续安装及配置都涉及到主机名,故此需先绑定

    依次在三个节点上执行以下命令完成hosts绑定
    [root@ceph-node0 ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    192.168.0.150 ceph-node0
    192.168.0.151 ceph-node1
    192.168.0.152 ceph-node2

    2.ssh-keygen信任

    3. 每台关闭防火墙

    systemctl stop firewalld

    4.时间同步

    yum install -y ntpdate
    //
    ntpdate cn.pool.ntp.org

    5.安装epel源与ceph-deploy

    本步骤要在每一个节点上执行

    • 安装epel源
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    • 安装ceph-deploy
    rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-luminous/el7/noarch/ceph-release-1-1.el7.noarch.rpm
    • 替换 ceph.repo 服务器
    sed -i 's#htt.*://download.ceph.com#https://mirrors.tuna.tsinghua.edu.cn/ceph#g' /etc/yum.repos.d/ceph.repo

        或直接复制下方文本内容替换 /etc/yum.repos.d/ceph.repo

    [Ceph]
    name=Ceph packages for $basearch
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-luminous/el7/$basearch
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
    
    [Ceph-noarch]
    name=Ceph noarch packages
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-luminous/el7/noarch
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
    
    [ceph-source]
    name=Ceph source packages
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-luminous/el7/SRPMS
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc

    6.安装ceph

    • 使用 yum 安装 ceph-deploy
    [root@ceph-node0 ~]# yum install -y ceph-deploy
    • 创建 ceph-install 目录并进入,安装时产生的文件都将在这个目录
    [root@ceph-node0 ~]# mkdir ceph-install && cd ceph-install
    [root@ceph-node0 ceph-install]#

    二、准备硬盘

    1.Journal磁盘

    本步骤要在每一个节点上执行

    在每个节点上为Journal磁盘分区, 分别为 sdb1, sdb2, 各自对应本机的2个OSD,  journal磁盘对应osd的大小为25%
    • 使用 parted 命令进行创建分区操作
    [root@ceph-node0 ~]# parted /dev/sdb
        mklabel gpt
        mkpart primary xfs  0% 50%
        mkpart primary xfs 50% 100%
        q

    2.OSD磁盘

    • 对于OSD磁盘我们不做处理,交由ceph-deploy进行操作

    三、安装ceph

    1.使用ceph-deploy安装ceph,以下步骤只在ceph-depoly管理节点执行

    • 创建一个ceph集群,也就是Mon,三台都充当mon

    [root@ceph-node0 ceph-install]# ceph-deploy new ceph-node0 ceph-node1 ceph-node2
    • 在全部节点上安装ceph

    [root@ceph-node0 ceph-install]# ceph-deploy install ceph-node0 ceph-node1 ceph-node2
    
    或在每个节点上手动执行 yum install -y ceph
    • 创建和初始化监控节点并收集所有的秘钥

    [root@ceph-node0 ceph-install]# ceph-deploy mon create-initial

           此时可以在osd节点查看mon端口

      

    • 创建OSD存储节点

    [root@ceph-node0 ceph-install]# ceph-deploy osd create ceph-node0 --data /dev/sdc --journal /dev/sdb1
    [root@ceph-node0 ceph-install]# ceph-deploy osd create ceph-node0 --data /dev/sdd --journal /dev/sdb2
    
    
    [root@ceph-node0 ceph-install]# ceph-deploy osd create ceph-node1 --data /dev/sdc --journal /dev/sdb1
    [root@ceph-node0 ceph-install]# ceph-deploy osd create ceph-node1 --data /dev/sdd --journal /dev/sdb2
    
    
    [root@ceph-node0 ceph-install]# ceph-deploy osd create ceph-node2 --data /dev/sdc --journal /dev/sdb1
    [root@ceph-node0 ceph-install]# ceph-deploy osd create ceph-node2 --data /dev/sdd --journal /dev/sdb2
    • 把配置文件和admin 秘钥到管理节点和ceph节点

    [root@ceph-0 ceph-install]# ceph-deploy --overwrite-conf admin ceph-node0 ceph-node1 ceph-node2
    • 使用 ceph -s 命令查看集群状态

    [root@ceph-node0 ceph-install]# ceph -s
      cluster:
        id:     e103fb71-c0a9-488e-ba42-98746a55778a
        health: HEALTH_WARN
                no active mgr
     
      services:
        mon: 3 daemons, quorum ceph-node0,ceph-node1,ceph-node2
        mgr: no daemons active
        osd: 6 osds: 6 up, 6 in
     
      data:
        pools:   0 pools, 0 pgs
        objects: 0 objects, 0B
        usage:   0B used, 0B / 0B avail
        pgs:     

    如集群正常则显示 health HEALTH_OK

    如OSD未全部启动,则使用下方命令重启相应节点, @ 后面为 OSD ID

    systemctl start ceph-osd@0

    2. 部署mgr

    • luminous 版本需要启动 mgr, 否则 ceph -s 会有 no active mgr 提示
    • 官方文档建议在每个 monitor 上都启动一个 mgr
    [root@ceph-node0 ceph-install]# ceph-deploy mgr create ceph-node0:ceph-node0 ceph-node1:ceph-node1 ceph-node2:ceph-node2
    • 再次查看ceph状态
    [root@ceph-node0 ceph-install]# ceph -s
      cluster:
        id:     e103fb71-c0a9-488e-ba42-98746a55778a
        health: HEALTH_OK
     
      services:
        mon: 3 daemons, quorum ceph-node0,ceph-node1,ceph-node2
        mgr: ceph-node0(active), standbys: ceph-node1, ceph-node2
        osd: 6 osds: 6 up, 6 in
     
      data:
        pools:   0 pools, 0 pgs
        objects: 0 objects, 0B
        usage:   6.02GiB used, 54.0GiB / 60.0GiB avail
        pgs:     

    3.清除操作

    • 安装过程中如遇到奇怪的错误,可以通过以下步骤清除操作从头再来
    [root@ceph-node0 ceph-install]# ceph-deploy purge ceph-node0 ceph-node1 ceph-node2
    [root@ceph-node0 ceph-install]# ceph-deploy purgedata ceph-node0 ceph-node1 ceph-node2
    [root@ceph-node0 ceph-install]# ceph-deploy forgetkeys

    四、配置

    1. 为何要分离网络

    • 性能

    OSD 为客户端处理数据复制,复制多份时 OSD 间的网络负载势必会影响到客户端和 ceph 集群 的通讯,包括延时增加、产生性能问题;恢复和重均衡也会显著增加公共网延时。

    • 安全

    很少的一撮人喜欢折腾拒绝服务攻击(DoS)。当 OSD 间的流量瓦解时, 归置组再也不能达到 active+clean 状态,这样用户就不能读写数据了。挫败此类攻击的一种好方法是 维护一个完全独立的集群网,使之不能直连互联网;另外,请考虑用签名防止欺骗攻击。

    2.分离公共网络和集群网络(推荐、可选)

    •  按下方所列修改配置文件 ceph.conf (在目录 ~/ceph-install 下操作,注意替换 fsid )
    [global]
    
    # 注意替换 fsid
    fsid = dca70270-3292-4078-91c3-1fbefcd3bd62
    
    mon_initial_members = ceph-node0, ceph-node1, ceph-node2
    mon_host = 192.168.0.150,192.168.0.151,192.168.0.152
    auth_cluster_required = cephx
    auth_service_required = cephx
    auth_client_required = cephx
    
    public network  = 192.168.0.0/24
    cluster network = 172.16.1.0/24
    
    [mon.a]
    host = ceph-node0
    mon addr = 192.168.0.150:6789
    
    [mon.b]
    host = ceph-node1
    mon addr = 192.168.0.151:6789
    
    [mon.c]
    host = ceph-node2
    mon addr = 192.168.0.152:6789
    
    [osd]
    osd data = /var/lib/ceph/osd/ceph-$id
    osd journal size = 20000
    osd mkfs type = xfs
    osd mkfs options xfs = -f
    
    filestore xattr use omap = true
    filestore min sync interval = 10
    filestore max sync interval = 15
    filestore queue max ops = 25000
    filestore queue max bytes = 10485760
    filestore queue committing max ops = 5000
    filestore queue committing max bytes = 10485760000
    
    journal max write bytes = 1073714824
    journal max write entries = 10000
    journal queue max ops = 50000
    journal queue max bytes = 10485760000
    
    osd max write size = 512
    osd client message size cap = 2147483648
    osd deep scrub stride = 131072
    osd op threads = 8
    osd disk threads = 4
    osd map cache size = 1024
    osd map cache bl size = 128
    osd mount options xfs = "rw,noexec,nodev,noatime,nodiratime,nobarrier"
    osd recovery op priority = 4
    osd recovery max active = 10
    osd max backfills = 4
    
    [client]
    rbd cache = true
    rbd cache size = 268435456
    rbd cache max dirty = 134217728
    rbd cache max dirty age = 5
    • 将配置文件同步到其它节点
    [root@ceph-node0 ceph-install]# ceph-deploy --overwrite-conf admin ceph-node0 ceph-node1 ceph-node2
    • 逐一重启各个节点
    systemctl restart ceph*.service ceph*.target
    • 此时
    ceph-mon 进程应监听在 192.168.0.0 网段IP上
    ceph-osd 应分别监听在 192.168.0.0172.16.1.0 两个网段IP上
    172.16.1.0 网段为集群内部复制数据时使用
    192.168.0.0 网段为客户端连接时使用

    [root@ceph-node2 ~]# netstat -lntp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 0 0 172.16.1.102:6800 0.0.0.0:* LISTEN 55794/ceph-osd
    tcp 0 0 192.168.0.152:6800 0.0.0.0:* LISTEN 55794/ceph-osd
    tcp 0 0 192.168.0.152:6801 0.0.0.0:* LISTEN 55794/ceph-osd
    tcp 0 0 172.16.1.102:6801 0.0.0.0:* LISTEN 55794/ceph-osd
    tcp 0 0 172.16.1.102:6802 0.0.0.0:* LISTEN 55792/ceph-osd
    tcp 0 0 192.168.0.152:6802 0.0.0.0:* LISTEN 55792/ceph-osd
    tcp 0 0 192.168.0.152:6803 0.0.0.0:* LISTEN 55792/ceph-osd
    tcp 0 0 172.16.1.102:6803 0.0.0.0:* LISTEN 55792/ceph-osd
    tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1981/dnsmasq
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1713/sshd
    tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1716/cupsd
    tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1814/master
    tcp 0 0 192.168.0.152:6789 0.0.0.0:* LISTEN 55663/ceph-mon
    tcp6 0 0 :::22 :::* LISTEN 1713/sshd
    tcp6 0 0 ::1:631 :::* LISTEN 1716/cupsd
    tcp6 0 0 ::1:25 :::* LISTEN 1814/master

    • 查看osd与ceph状态
    [root@ceph-node0 ceph-install]# ceph osd tree
    ID CLASS WEIGHT  TYPE NAME           STATUS REWEIGHT PRI-AFF 
    -1       0.05878 root default                                
    -3       0.01959     host ceph-node0                         
     0   hdd 0.00980         osd.0           up  1.00000 1.00000 
     1   hdd 0.00980         osd.1           up  1.00000 1.00000 
    -5       0.01959     host ceph-node1                         
     2   hdd 0.00980         osd.2           up  1.00000 1.00000 
     3   hdd 0.00980         osd.3           up  1.00000 1.00000 
    -7       0.01959     host ceph-node2                         
     4   hdd 0.00980         osd.4           up  1.00000 1.00000 
     5   hdd 0.00980         osd.5           up  1.00000 1.00000 
    
    
    //
    
    [root@ceph-node0 ceph-install]# ceph -s
      cluster:
        id:     e103fb71-c0a9-488e-ba42-98746a55778a
        health: HEALTH_WARN
                1/3 mons down, quorum ceph-node0,ceph-node1
     
      services:
        mon: 3 daemons, quorum ceph-node0,ceph-node1, out of quorum: ceph-node2
        mgr: ceph-node0(active), standbys: ceph-node2, ceph-node1
        osd: 6 osds: 6 up, 6 in
     
      data:
        pools:   0 pools, 0 pgs
        objects: 0 objects, 0B
        usage:   6.03GiB used, 54.0GiB / 60.0GiB avail
        pgs:     

    五、Ceph 存储池与文件系统

    1.创建文件系统ceph-fs

     ceph-fs需要元数据mds服务

    • 创建mds,osd上都创建,高可用性
    [root@ceph-node0 ceph-install]# ceph-deploy mds create ceph-node0 ceph-node1 ceph-node2
    • 上方命令会在 ceph-node0 和 ceph-node1 上启动MDS

    2.pool 存储池

    • 查看存储池
    root@ceph-node0 ceph-install]# ceph osd pool ls
    • 创建存储池
    [root@ceph-node0 ceph-install]# ceph osd pool create data_data 32
    
    pool名称:data_data
    pg数:32

    3.创建ceph-fs文件系统

    • 查看已有的文件系统
    [root@ceph-node0 ceph-install]# ceph fs ls
    • 创建一个名称为data的文件系统
    [root@ceph-node0 ceph-install]# ceph osd pool create data_data 32
    [root@ceph-node0 ceph-install]# ceph osd pool create data_metadata 32
    [root@ceph-node0 ceph-install]# ceph fs new data data_metadata data_data
    • 使用客户端 ceph-fuse 挂载文件系统

    [root@ceph-mon yum.repos.d]# yum install -y ceph-fuse
    • 客户端创建目录挂载文件系统
    // 创建data录目
    [root@ceph-mon ~]# mkdir /data
    
    // 挂载
    root@ceph-mon ~]# ceph-fuse -m 192.168.0.150,192.168.0.151,192.168.0.152:6789 /data

    挂载时出现如下错误:

    说明认证配置找不到,把管理节点上的ceph.conf拷到客户端

    [root@ceph-node0 ceph-install]# scp ceph.conf 192.168.0.153:/etc/ceph/
    
    
    //从Ceph集群复制 ceph.conf 与 ceph.client.admin.keyring 文件到客户端 /etc/ceph 目录下
    [root@ceph-node0 ceph-install]# cat ceph.client.admin.keyring 
    [client.admin]
            key = AQB8wL5bnutGMBAAg5+eadh1fNShOG5d8mERIg==
    
    // 在客户端创建ceph.keyring,为在管理节点创建的用户
    [root@ceph-mon ceph]# cat ceph.keyring 
    [client.admin]
            key = AQB8wL5bnutGMBAAg5+eadh1fNShOG5d8mERIg==


  • 相关阅读:
    Spring校验:@Validated和@Valid区别
    Windows Server创建域控制器
    【后端】SpringMVC Controller(接口定义 & 注解开发)
    【后端】Tomcat安装配置及IDEA添加Tomcat配置(macOS)
    【后端】Tomcat安装配置及IDEA添加Tomcat配置(Windows)
    【Java】注解与反射(一)——注解
    【教程】Windows 10 禁止自动更新
    【深度学习】Windows安装Pycocotools(Microsoft Visual C++ 14.0 or greater is required.报错提示解决方案)
    【后端】Mybatis操作数据库 & Spirng整合Mybatis
    【后端】Spring注解开发
  • 原文地址:https://www.cnblogs.com/zhangzihong/p/9771035.html
Copyright © 2020-2023  润新知