zoukankan      html  css  js  c++  java
  • CentOS7安装OpenStack-11.部署Ceph分布式存储架构

    11.0、概述

    • 随着OpenStack日渐成为开源云计算的标准软件栈,Ceph也已经成为OpenStack的首选后端存储。Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。

    • ceph官方文档:http://docs.ceph.org.cn/

    • ceph中文开源社区:http://ceph.org.cn/

    • Ceph是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等。

    1)ceph支持

    1. 对象存储:即radosgw,兼容S3接口。通过rest api上传、下载文件。

    2. 文件系统:posix接口。可以将ceph集群看做一个共享文件系统挂载到本地。

    3. 块存储:即rbd。有kernel rbd和librbd两种使用方式。支持快照、克隆。相当于一块硬盘挂到本地,用法和用途和硬盘一样。比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的后端存储

    2)Ceph相比其它分布式存储有哪些优点?

    1. 统一存储:虽然ceph底层是一个分布式文件系统,但由于在上层开发了支持对象和块的接口。所以在开源存储软件中,能够一统江湖。至于能不能千秋万代,就不知了。

    2. 高扩展性:扩容方便、容量大。能够管理上千台服务器、EB级的容量。

    3. 可靠性强:支持多份强一致性副本,EC。副本能够垮主机、机架、机房、数据中心存放。所以安全可靠。存储节点可以自管理、自动修复。无单点故障,容错性强。

    4. 高性能:因为是多个副本,因此在读写操作时候能够做到高度并行化。理论上,节点越多,整个集群的IOPS和吞吐量越高。另外一点ceph客户端读写数据直接与存储设备(osd) 交互。

     3)Ceph各组件介绍

    • 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 等基本命令。

    11.1、Ceph实验集群部署

    1) 禁用selinux, 关闭防火墙

    # 关闭SELinux
    setenforce  0
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    
    systemctl stop firewalld.service
    systemctl disable firewalld.service

    2)主机准备(编辑hosts文件)

    controller   192.168.182.143  admin,mon   # 作为管理节点和监控节点
    compute1    192.168.182.142  osd,mds
    compute2    192.168.182.128  osd,mds

    # controller作管理. osd. mon节点

    3)2台服务器都增加一块硬盘实验(compute1,compute2)

    如果看不到新增的磁盘设备,则重启虚拟机;或者执行下面命令重新扫描一下磁盘,注意查看/sys/class/scsi_host/目录下有几个host文件
    重新扫描SCSI总线添加设备

    echo "- - -" > /sys/class/scsi_host/host0/scan
    echo "- - -" > /sys/class/scsi_host/host1/scan
    echo "- - -" > /sys/class/scsi_host/host2/scan

    注意,如果扫描这三个文件不成,就全部扫描一遍

    cat /usr/local/src/test.sh
    
    #!/usr/bin/bash
    
    scsisum=`ll /sys/class/scsi_host/host*|wc -l`
    
    for ((i=0;i<${scsisum};i++))
    do
        echo "- - -" > /sys/class/scsi_host/host${i}/scan
    done
    
    #echo "- - -" > /sys/class/scsi_host/host0/scan 这三个值代表通道,SCSI目标ID和LUN。破折号充当通配符,意思是“重新扫描一切”

    4)SSH免密码登录

    # 在管理节点使用ssh-keygen 生成ssh keys 发布到各节点

    # controller
    ssh-keygen ssh-copy-id controller ssh-copy-id compute1 ssh-copy-id compute2

    5)配置时间同步

    # 所有节点安装
    yum install chrony -y
    
    # 编辑配置文件vim /etc/chrony.conf
    # ========controller========
    # 去掉原有的server
    server  ntp6.aliyun.com iburst
    allow 192.168.182.0/24
    
    # 重启
    systemctl restart chronyd.service
    systemctl status chronyd.service
    systemctl enable chronyd.service
    # 设置时区,同步时间
    timedatectl set-timezone Asia/Shanghai
    chronyc sources
    timedatectl status
    
    # ========compute1========
    # 去掉原有的server
    server  192.168.182.143 iburst
    
    # 重启
    systemctl restart chronyd.service
    systemctl status chronyd.service
    systemctl enable chronyd.service
    # 设置时区,同步时间
    timedatectl set-timezone Asia/Shanghai
    chronyc sources
    timedatectl status
    
    # ========compute2========
    # 去掉原有的server
    server  192.168.182.143 iburst
    
    # 重启
    systemctl restart chronyd.service
    systemctl status chronyd.service
    systemctl enable chronyd.service
    # 设置时区,同步时间
    timedatectl set-timezone Asia/Shanghai
    chronyc sources
    timedatectl status

    5)管理节点安装ceph-deploy工具

    # 增加 yum配置文件(各个节点都需要增加yum源

    wget -O /etc/yum.repos.d/ceph.repo https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/ceph.repo

    或者

    cat << EOF > /etc/yum.repos.d/ceph.repo
    [ceph]
    name=ceph
    baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
    gpgcheck=0
    priority=1
    
    [ceph-noarch]
    name=cephnoarch
    baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
    gpgcheck=0
    priority=1
    
    [ceph-source]
    name=Ceph source packages
    baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
    enabled=0
    gpgcheck=1
    type=rpm-md
    gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc
    priority=1
    EOF

    # 更新软件源并安装ceph-deploy 管理工具

    yum clean all && yum makecache
    yum -y install ceph-deploy

    6)创建monitor服务

    # controller
    mkdir /etc/ceph && cd /etc/ceph

    # 创建监控节点

    ceph-deploy new controller

    # Ceph配置文件、一个monitor密钥环和一个日志文件

    7)修改副本数

    # 配置文件的默认副本数从3改成2,这样只有两个osd也能达到active+clean状态,把下面这行加入到[global]段(可选配置

    $ vim /etc/ceph/ceph.conf
    [global]
    fsid = 92f5581d-79d2-4c9f-a523-4965eedc846b
    mon_initial_members = controller
    mon_host = 192.168.182.143
    auth_cluster_required = cephx
    auth_service_required = cephx
    auth_client_required = cephx
    osd_pool_default_size = 2

    # 在所有节点安装ceph

    ceph-deploy install --release mimic controller compute1 compute2

    #  创建monitor、配置admin key到各个节点

    # 完成后,在当前目录下会生成密钥 
    ceph-deploy mon create-initial 
    ls
    # 配置admin key 到各个节点
    ceph-deploy admin compute1 compute2

    8)部署osd服务

    # 创建osd

    # controller
    ceph-deploy osd create compute1 --data /dev/sdb
    ceph-deploy osd create compute2 --data /dev/sdb

    # 查看状态

    ceph-deploy osd list compute1 compute2

    9)统一配置

    # 配置admin key 到各个节点

    ceph-deploy admin controller compute1 compute2

    # monitor上安装mgr

    ceph-deploy mgr create controller

    # 查看osd状态

    ceph status
    ceph health
    ceph -s

    10)部署mds服务

    ceph-deploy mds create compute1 compute2

    # 查看状态

    ceph mds stat

    # 集群状态

    ceph -s

    11)创建ceph文件系统

    # 查看

    ceph fs ls

    # 创建存储池

    ceph osd pool create cephfs_data <pg_num> 
    ceph osd pool create cephfs_metadata <pg_num>

    # 删除存储池

    ceph osd pool delete  cephfs_data  cephfs_data  --yes-i-really-really-mean-it
    ceph osd pool delete  cephfs_metadata   cephfs_metadata   --yes-i-really-really-mean-it

    其中:<pg_num> = 128 ,
    关于创建存储池
    确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:
      *少于 5 个 OSD 时可把 pg_num 设置为 128
      *OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
      *OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
      *OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值
      *自己计算 pg_num 取值时可借助 pgcalc 工具
    随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。 

    # 常见操作

    # 设置存储池副本数
    ceph osd pool get data size
    ceph osd pool set data size 3
     
    # 打印存储池列表
    ceph osd lspools
     
    # 创建 删除 存储池
    # 创建pool
    ceph osd pool create testPool 64
     
    # 重命名pool
    ceph osd pool rename testPool amizPool
     
    # 获取pool 副本数
    ceph osd pool get amizPool size
    # 设置pool 副本数
    ceph osd pool set amizPool size 3
     
    # 获取pool pg_num/pgp_num
    ceph osd pool get amizPool pg_num
    ceph osd pool get amizPool pgp_num
    # 设置pool pg_num/pgp_num
    ceph osd pool set amizPool pg_num 128
    ceph osd pool set amizPool pgp_num 128
     
    # 删除存储池
    ceph osd pool delete  amizPool  amizPool --yes-i-really-really-mean-it  
     
    # 删除池提示错误
    # Error EBUSY: pool 'testpool' is in use by CephFS 
    ceph mds remove_data_pool testpool
    ceph osd pool delete testpool testpool  --yes-i-really-really-mean-it

    # 查看存储池pool 配额 ceph osd pool
    get-quota poolroom1

    11.1、创建文件系统

    # 创建好存储池后,你就可以用 fs new 命令创建文件系统了,其中:<fs_name> = cephfs  可自定义

    ceph fs new <fs_name> cephfs_metadata cephfs_data 

    # 查看创建后的cephfs

    ceph fs ls

    # 查看mds节点状态,active是活跃的,另1个是处于热备份的状态

    ceph mds stat

    # 删除Cephfs和mds

    # 机器上停止ceph mds服务
    systemctl stop ceph-mds.target
    
    # 删除Cephfs,有mds daemons的Cephfs删除会报错,然后去mds daemon机器上停止mds服务即可
    ceph fs rm tstfs
    Error EINVAL: all MDS daemons must be inactive before removing filesystem
    ceph fs rm tstfs2
    Error EPERM: this is a DESTRUCTIVE operation and will make data in your filesystem permanentlyinaccessible.  Add --yes-i-really-mean-it if you are sure you wish to continue.
    ceph fs rm tstfs2 --yes-i-really-mean-it
    ceph fs rm tstfs --yes-i-really-mean-it
    
    # 删除ceph nonactive mds,mds的id默认从0开始,指定不存在的id并不会报错
    ceph mds rm 0
      mds gid 0 dne
    ceph mds rm 1
      mds gid 1 dne
    ceph mds rm 2
      mds gid 2 dne
    
    # 删除Cephfs使用的pool
    ceph osd pool delete Cephfs_metadata Cephfs_metadata --yes-i-really-really-mean-it
    # Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
    # 添加如下内容
    $ vim /etc/ceph/ceph.conf
    [mon]
    mon_allow_pool_delete = true
    # 重新启动服务
    systemctl restart ceph-mds.target

    A:内核驱动挂载Ceph文件系统

    # 创建挂载点

    mkdir /opt
    • # 存储密钥(如果没有在管理节点使用ceph-deploy拷贝ceph配置文件)
    • # cat /etc/ceph/ceph.client.admin.keyring
    • # 将key对应的值复制下来保存到文件:/etc/ceph/admin.secret中。
    # 挂载
    mount -t ceph 192.168.182.143:6789:/ /opt -o name=admin,secretfile=/etc/ceph/admin.secret

    # 取消挂载

    umount /opt

    B:用户控件挂载Ceph文件系统

    # 安装ceph-fuse

    yum install -y ceph-fuse

    # 挂载

    ceph-fuse -m 192.168.182.143:6789 /opt

    # 取消挂载

    fusermount -u /opt

    ceph在开源社区还是比较热门的,但是更多的是应用于云计算的后端存储。所以大多数在生产环境中使用ceph的公司都会有专门的团队对ceph进行二次开发,ceph的运维难度也比较大。但是经过合理的优化之后,ceph的性能和稳定性都是值得期待的。

    12)关于其他

    清理机器上的ceph相关配置:

    • 停止所有进程: stop ceph-all

    • 卸载所有ceph程序:ceph-deploy uninstall [{ceph-node}]

    • 删除ceph相关的安装包:ceph-deploy purge {ceph-node} [{ceph-data}]

    • 删除ceph相关的配置:ceph-deploy purgedata {ceph-node} [{ceph-data}]

    • 删除key:ceph-deploy forgetkeys

    • 卸载ceph-deploy管理:yum -y remove ceph-deploy

    ~~~部署Ceph分布式存储完成~~~

  • 相关阅读:
    简单探讨spring整合mybatis时sqlSession不需要释放关闭的问题
    男人常做俯卧撑,谁还敢说不行!
    五大穴位
    实战c++中的vector系列--vector的一些异常
    [Canvas画图] 藏图阁(16) 人体穴位
    算法题:剔除字符串(非常有意思)
    怎样在win8系统下建立wifi热点
    【code】flex_进度条样式
    使用bbed改动数据
    Go语言核心之美 3.2-slice切片
  • 原文地址:https://www.cnblogs.com/liugp/p/12513702.html
Copyright © 2011-2022 走看看