zoukankan      html  css  js  c++  java
  • ceph分布式存储

    ceph基础介绍

    ceph 是一个可靠地,自动均衡、自动恢复的分布式存储系统,根据使用场景可以划分为对象存储

    块存储和文件系统服务

    ceph的核心组件

    ceph OSDs

    基本功能:

    存储数据、复制数据、平衡数据、恢复数据等,与其他 osd 间进行心跳检查等,并将变化上报给 ceph Monitor ,一般情况一块磁盘对应一个 OSD ,由 OSD 管理磁盘,或者一个分区也可以成为一个 OSD。

    关联概念:Journal盘

    一般写数据到 ceph 集群时,都会先将数据写到 Journal 盘,然后每隔一段时间将 Journal 盘的数据刷新到文件系统中,一般为了读写延迟小,会采用 SSD 硬盘,分配 10G ,ceph 引用 Journa 盘可以让 ceph OSD 功能很快做小的操作;一个随机写入在一个连续类型的 Journal ,然后刷新到文件系统,这样可以给文件系统足够时间来合并写入磁盘。可以很有效的缓冲突发负载。

    ceph Monitor

    基本概念

    全称ceph metadata server,主要保存文件系统服务的元数据,但对象存储和块存储是不需要这个服务的

    ceph基础命令整理

    #查看已经创建的磁盘
     rbd ls -l 
    #查看ceph集群 
     ceph osd tree
    #查看ceph授权信息
    ceph auth get client.admin
    #清除磁盘上的逻辑卷
     /usr/sbin/ceph-volume lvm zap --destroy /dev/vdc
    #手动创建一个rbd磁盘
    rbd create --image-feature layering [rbd-name] -s 10240
    #移除monitor节点
     ceph-deploy mon destroy node4
    #详细列出集群每块磁盘的使用情况
        ceph osd df
    #检查 MDS 状态:
    ceph mds stat

    ceph集群构建

     cat << EOF > /etc/yum.repos.d/ceph.repo
    [ceph]
    name=ceph
    baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/x86_64/
    gpgcheck=0
    [ceph-noarch]
    name=ceph-noarch
    baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch/
    gpgcheck=0 
    EOF
    
    [root@master ~]# cat /etc/hosts
    192.168.33.111 master
    192.168.33.112 node1
    192.168.33.113 node2
    [root@master ~]# ssh-keygen 
    [root@master ~]# ssh-copy-id node1
    [root@master ~]# ssh-copy-id node2
    
    同步时间 时区: 
    /1 * * * /usr/sbin/ntpdate -s time.pool.aliyun.com 
    timedatectl list-timezones # 列出所有时区 
    timedatectl set-timezone Asia/Shanghai # 设置系统时区为上海 
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    #机器初始化设置
    sed -i  's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
    systemctl restart sshd
    yum -y remove firewalld
    setenforce 0
    
    
    #相关下载
    rpm -Uvh https://download.ceph.com/rpm-luminous/el7/noarch/ceph-release-1-1.el7.noarch.rpm
    yum -y install epel-release yum-plugin-priorities yum-utils ntpdate
    yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs
    
    #在每台机器上部署ceph,之前yum,已经安装过了
    ceph-deploy install --release luminous master node1 node2   #同上

    部署

    mkdir ceph-deploy &&  cd ceph-deploy
    
    #初始化ceph集群,配置文件相关
    ceph-deploy new master node1 node2  
    
    #添加到 ceph.conf
    public network = 10.0.4.0/26 #地址相等于node的ip地址段
    
    #初始化mon
    ceph-deploy mon create-initial 
    or
    ceph-deploy mon create master node1 node2
    #赋予各个节点使用命令面用户名权限
    #指定机器为admin权限
    ceph-deploy admin master node1 node2  
    #目的可以执行
    ceph -s
    
    #部署mgr
    ceph-deploy mgr create master node1 node2
    
    #添加osd
    ceph-deploy osd create --data /dev/sdb master 
    ceph-deploy osd create --data /dev/sdb node1 
    ceph-deploy osd create --data /dev/sdb node2
    
    #创建管理域密钥
    ceph auth get-or-create mgr.master mon 'allow profile mgr' osd 'allow *' mds 'allow *'
    #方法2:
    ceph auth get-key client.admin | base64
    
    #开启 ceph-mgr 管理域
    ceph-mgr -i master
    #开启dashboard
    ceph mgr module enable dashboard
    
    #绑定开启 dashboard 模块的 ceph-mgr 节点的 ip 地址
    ceph config-key set mgr/dashboard/master/server_addr 192.168.33.111 
    dashboard 默认运行在7000端口
    
    #创建pool
    #若少于5个OSD, 设置pg_num为128。
    #5~10个OSD,设置pg_num为512。
    #10~50个OSD,设置pg_num为4096。
    #超过50个OSD,可以参考pgcalc计算。
    ceph osd pool create rbd 128 128 
    rbd pool init rbd
    
    #删除pool
    ceph osd pool rm rbd rbd –yes-i-really-really-mean-it 
    ceph.conf 添加 
    mon_allow_pool_delete = true
    
    #推送配置文件:
    ceph-deploy --overwrite-conf config push master 
    ceph-deploy --overwrite-conf config push node1 
    ceph-deploy --overwrite-conf config push node2

    添加删除OSD节点

    #添加osd节点node4:
    #在节点node4上面安装ceph,并复制ceph.conf到其相应的位置,同时在/etc/hosts中添加node4节点
    #确保node1上有充足的空间进行写数据,执行下面的写命令的同时扩展集群
    dd if=/dev/zero of=/mnt/ceph-vol1/file1 count=10240 bs=1M #node1节点
    ceph-deploy disk zap ceph-node4:sdb ceph-node4:sdc ceph-node4:sdd #node4节点
    ceph-deploy osd create ceph-node4:sdb ceph-node4:sdc ceph-node4:sdd  #node4节点
    watch ceph status  #动态打印ceph的状态
    #在node4硬盘添加完成,集群会恢复健康

    删除OSD节点的node4

    #查看节点node4上的所有osd,比如osd.9 osd.10:
    ceph osd tree #查看目前cluster状态
    #把node4上的所欲osd踢出集群:(node1节点上执行)
    ceph osd out osd.9
    ceph osd out osd.10
    #让node4上的所有osd停止工作:(node4上执行)
    service ceph stop osd.9
    service ceph stop osd.10
    #查看node4上osd的状态是否为down,权重为0
    ceph osd tree
    #移除node4上的所有osd:
    ceph osd crush remove osd.9
    ceph osd crush remove osd.10
    #删除节点node4:
    ceph osd crush remove ceph-node4

    替换一个失效的磁盘驱动

    #首先ceph osd tree 查看down掉的osd,将因磁盘问题down掉的osd及相关key删除
    ceph osd out osd.0       #都在node1节点下执行
    ceph osd crush rm osd.0
    ceph auth del osd.0
    ceph osd rm osd.0
    #zap新磁盘 清理新磁盘:
    ceph-deploy disk zap node1:sdb
    #在磁盘上新建一个osd,ceph会把它添加为osd:0:
    ceph-deploy --overwrite-conf osd create node1:sdb

    使用storage class自动获取存储空间

    启动ceph-device

    https://github.com/kubernetes-incubator/external-storage

    启动ceph-rbd

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: prod-sc
      namespace: default
      annotations:
         storageclass.kubernetes.io/is-default-class: "false"
    provisioner: ceph.com/rbd
    reclaimPolicy: Retain
    parameters:
      monitors: node1:6789,node3:6789,node2:6789
      adminId: admin
      adminSecretName: storage-secret
      adminSecretNamespace: default
      pool: rbd
      userId: admin
      userSecretName: storage-secret
      imageFormat: "2"
      imageFeatures: "layering"
    #sercet
    apiVersion: v1
    kind: Secret
    metadata:
      name: storage-secret
      namespace: default
    data:
      key: QVFCU0xqdGI0WXFsQnhBQWtpM1dRTkRxOFRybmh4SWdDUEk5ZUE9PQ==   #base64加密/unbase64 解密的密文,可以 ceph auth get-key client.admin | base64 
    type:
      kubernetes.io/rbd
    #测试:
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: ceph-sc-test
      namespace: default
    spec:
      storageClassName: prod-sc
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
  • 相关阅读:
    Read-Copy Update Implementation For Non-Cache-Coherent Systems
    10 华电内部文档搜索系统 search04
    10 华电内部文档搜索系统 search05
    lucene4
    10 华电内部文档搜索系统 search01
    01 lucene基础 北风网项目培训 Lucene实践课程 索引
    01 lucene基础 北风网项目培训 Lucene实践课程 系统架构
    01 lucene基础 北风网项目培训 Lucene实践课程 Lucene概述
    第五章 大数据平台与技术 第13讲 NoSQL数据库
    第五章 大数据平台与技术 第12讲 大数据处理平台Spark
  • 原文地址:https://www.cnblogs.com/lwl117/p/11267827.html
Copyright © 2011-2022 走看看