美文网首页运维相关ceph存储
centos7简单搭建ceph集群

centos7简单搭建ceph集群

作者: 小手冰冰凉啊 | 来源:发表于2018-11-30 16:37 被阅读0次

    一、ceph介绍

    1、Ceph基础介绍

      Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储,比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘。

      Ceph相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。

    2、Ceph的核心组件

      Ceph的核心组件包括Ceph OSD、Ceph Monitor和Ceph MDS。

      Ceph OSD:OSD的英文全称是Object Storage Device,它的主要功能是存储数据、复制数据、平衡数据、恢复数据等,与其它OSD间进行心跳检查等,并将一些变化情况上报给Ceph Monitor。一般情况下一块硬盘对应一个OSD,由OSD来对硬盘存储进行管理,当然一个分区也可以成为一个OSD。

      Ceph OSD的架构实现由物理磁盘驱动器、Linux文件系统和Ceph OSD服务组成,对于Ceph OSD Deamon而言,Linux文件系统显性的支持了其拓展性,一般Linux文件系统有好几种,比如有BTRFS、XFS、Ext4等,BTRFS虽然有很多优点特性,但现在还没达到生产环境所需的稳定性,一般比较推荐使用XFS。

      伴随OSD的还有一个概念叫做Journal盘,一般写数据到Ceph集群时,都是先将数据写入到Journal盘中,然后每隔一段时间比如5秒再将Journal盘中的数据刷新到文件系统中。一般为了使读写时延更小,Journal盘都是采用SSD,一般分配10G以上,当然分配多点那是更好,Ceph中引入Journal盘的概念是因为Journal允许Ceph OSD功能很快做小的写操作;一个随机写入首先写入在上一个连续类型的journal,然后刷新到文件系统,这给了文件系统足够的时间来合并写入磁盘,一般情况下使用SSD作为OSD的journal可以有效缓冲突发负载。

      Ceph Monitor:由该英文名字我们可以知道它是一个监视器,负责监视Ceph集群,维护Ceph集群的健康状态,同时维护着Ceph集群中的各种Map图,比如OSD Map、Monitor Map、PG Map和CRUSH Map,这些Map统称为Cluster Map,Cluster Map是RADOS的关键数据结构,管理集群中的所有成员、关系、属性等信息以及数据的分发,比如当用户需要存储数据到Ceph集群时,OSD需要先通过Monitor获取最新的Map图,然后根据Map图和object id等计算出数据最终存储的位置。

      Ceph MDS:全称是Ceph MetaData Server,主要保存的文件系统服务的元数据,但对象存储和块存储设备是不需要使用该服务的。

      查看各种Map的信息可以通过如下命令:ceph osd(mon、pg) dump

    二、环境:

    Centos7
    192.168.20.148 ceph01
    192.168.20.149 ceph02
    ceph01将作为admin、osd1、 mon (主节点、OSd节点、监控节点)
    ceph02将作为osd2
    关闭防火墙、Selinux
    修改两台主机的hosts文件

    [root@ceph01 ~]# cat /etc/hosts
    192.168.20.148 ceph01
    192.168.20.149 ceph02
    [root@ceph02 ~]# cat /etc/hosts
    192.168.20.148 ceph01
    192.168.20.149 ceph02
    

    节点ceph01额外添加了两块硬盘,ceph02额外添加了一块。且磁盘不必挂载。

    三、设置主机免密ssh访问

    1、在ceoh01上面执行

    [root@ceph01 ~]# ssh-keygen        //一直按回车即可,产生公钥私钥对
    

    2、将ceph01产生的公钥复制到ceph01和ceph02上,这样可以使用ceph01无密码登录ceph01和ceph02

    [root@ceph01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub ceph01
    [root@ceph01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub ceph02
    

    测试:
    ssh ceph01
    ssh ceph02
    发现登录时不用输入密码就算设置成功。

    四、设置镜像源(所有节点都需要)

    1、备份默认源

    [root@ceph01 ~]# cat /etc/hosts mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
    

    2、下载阿里云的base源和epel源

    [root@ceph01 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo [http://mirrors.aliyun.com/repo/Centos-7.repo](http://mirrors.aliyun.com/repo/Centos-7.repo)
    
    [root@ceph01 ~]# wget -O /etc/yum.repos.d/epel.repo [http://mirrors.aliyun.com/repo/epel-7.repo](http://mirrors.aliyun.com/repo/epel-7.repo)
    

    3、添加ceph源,创建文件并将内容拷贝到其中,此处采用的是阿里的镜像

    [root@ceph01 ~]# vim /etc/yum.repos.d/ceph.repo
    [Ceph]
    name=Ceph packages for $basearch
    baseurl=[http://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch]
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=[https://download.ceph.com/keys/release.asc]
    [Ceph-noarch]
    name=Ceph noarch packages
    baseurl=[http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch]
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=[https://download.ceph.com/keys/release.asc]
    [ceph-source]
    name=Ceph source packages
    baseurl=[http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS]
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=[https://download.ceph.com/keys/release.asc]
    

    4、安装配置ntp服务

    [root@ceph01 ~]# yum -y install ntp ntpdate ntp-doc
    [root@ceph01 ~]# ntpdate [0.us.pool.ntp.org](http://0.us.pool.ntp.org)
    [root@ceph01 ~]# hwclock --systohc
    [root@ceph01 ~]# systemctl enable ntpd.service
    [root@ceph01 ~]# systemctl start ntpd.service
    

    五、ceph软件及存储集群安装
    1、安装ceph-deploy 在管理节点上(ceph01)安装

    [root@ceph01 ~]# yum install ceph-deploy –y
    

    2、集群初始化及指定监控节点(mon)
    创建运行文件夹/etc/ceph,后续安装命令均在此文件夹下执行(后续新增节点时也要创建该目录)如创建的目录不是/etc/ceph,软件安装会自动生成该文件夹,且集群运行使用的会是etc下的配置,同时修改本地配置需进行推送配置到/etc/ceph

    [root@ceph01 ~]# mkdir /etc/ceph 
    [root@ceph01 ~]# cd /etc/ceph
    

    创建集群,在ceph01执行以下命令,ceph01相当于监控节点

    [root@ceph01 ceph]# ceph-deploy new ceph01  
    

    3、修改ceph.conf文件

    [root@ceph01 ceph]# vim ceph.conf
    

    追加以下内容

    # 存储集群副本个数
    
    osd_pool_default_size = 2
    

    以下内容根据需求追加

    # 非必须,多网卡需配置
    
    #public_network = 172.16.30.0/24
    
    #cluster_network = 172.16.31.0/24
    
    # 允许在degraded状态下只写两次对象
    
    osd_pool_default_min_size = 1
    
    # 池的pg数量,具体计算公式请参见附录
    
    osd_pool_default_pg_num = 128
    
    # pgp数量需要与pg数量相同
    
    osd_pool_default_pgp_num = 128
    
    # CRUSH规则用到chooseleaf时的bucket的类型,默认值1
    
    osd_crush_chooseleaf_type = 0
    
    objecter_inflight_ops = 10240 // 客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限 默认值 1024
    
    objecter_inflight_op_bytes = 1048576000    // 客户端流控,允许的最大未发送脏数据,超过阀值会堵塞应用io,为0表示不受限  默认值 100M
    
    [mon]
    
    # 时间偏移
    
    mon_clock_drift_allowed = 0.5
    
    [osd]
    
    osd op threads = 8 # 处理peering等请求的线程数
    
    osd disk threads = 4 # 处理snap trim,replica trim及scrub等的线程数
    
    osd_max_write_size = 1024 //一次写入最大的MB数(默认90)
    
    max_open_files = 655350 # 如果这个参数被设置,那么Ceph集群启动时,就会在操作系统层面设置最大打开文件描述符。这就避免OSD进程出现与文件描述符不足的情况。参数的缺省值为0
    
    mon_pg_warn_max_per_osd = 1000 //每个osd 多对应的最大 pg 数量,超过该值会报警:too many PGs per OSD
    
    mon_osd_backfillfull_ratio = 0.85 // pg 迁移时当某个osd 空间使用率抄过在这个值,就会拒绝pg 的迁移请求 ,这个值可以适当调大 0.85
    
    mon_osd_full_ratio = 0.95 // 被认为集群已满的最大使用百分比(默认.95)
    
    mon_osd_nearfull_ratio = 0.85 // osd full 设置,当osd 空间使用率超过该值时就会报警  可以适当调大 0.85
    
    mon_osd_down_out_interval = 300 //默认值 300 seconds ceph标记一个osd为down and out的最大时间间隔
    
    mon_osd_min_down_reporters = 2 // mon标记一个osd为down的最小reporters个数(其他osd报告该osd为down的个数称为一个reporter) 默认值 2
    
    mon_osd_report_timeout = 900 // mon标记一个osd为down的最长等待时间  默认值 900
    
    objecter_inflight_ops = 10240 // 客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限 默认值 1024
    
    objecter_inflight_op_bytes = 1048576000    // 客户端流控,允许的最大未发送脏数据,超过阀值会堵塞应用io,为0表示不受限  默认值 100M
    

    4、安装ceph

    [root@ceph01 ceph]# 11ceph-deploy install --no-adjust-repos ceph01 ceph02
    

    注意:此处执行安装的时候一定要加上--no-adjust-repos(除非想要安装最新的版本)
    原因:如果不加上这个参数ceph会自动的修改 /etc/yum.repos.d/ceph.repo 文件,把源改成官方的源。
    5、初始化集群监控

    [root@ceph01 ceph]# ceph-deploy mon create-initial
    

    6、创建osd
    删除磁盘数据

    [root@ceph01 ceph]# ceph-deploy disk zap ceph01 /dev/vdb
    [root@ceph01 ceph]# ceph-deploy disk zap ceph01 /dev/vdc
    [root@ceph01 ceph]# ceph-deploy disk zap ceph02 /dev/vdb
    

    创建osd(一共三个)

    [root@ceph01 ceph]# ceph-deploy osd create ceph01 --data /dev/vdb
    [root@ceph01 ceph]# ceph-deploy osd create ceph01 --data /dev/vdc 
    [root@ceph01 ceph]# ceph-deploy osd create ceph02 --data /dev/vdb
    

    7、ceph秘钥拷贝(主节点执行)及修改密钥权限
    用 ceph-deploy 把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点,这样你每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了

    [root@ceph01 ceph]# ceph-deploy admin ceph01 ceph02
    

    修改密钥权限(所有节点上执行)

    [root@ceph01 ceph] # chmod +r /etc/ceph/ceph.client.admin.keyring
    [root@ceph02] # chmod +r /etc/ceph/ceph.client.admin.keyring
    

    8、创建mgr守护进程
    建议在每个 mon 中都创建独立的 ceph-mgr,只会active一个,其他的standby

    [root@ceph01 ceph]# ceph-deploy mgr create ceph01
    

    9、查看集群状态

    [root@ceph01 ceph]# ceph health
    HEALTH_OK
    
    [root@ceph01 ceph]# ceph -s
      cluster:
        id:     3c2f5702-3531-4180-be4e-df406040c5cc
        health: HEALTH_OK
     
      services:
        mon: 1 daemons, quorum ceph01
        mgr: ceph01(active)
        osd: 3 osds: 3 up, 3 in     //3个
     
      data:
        pools:   0 pools, 0 pgs
        objects: 0 objects, 0B
        usage:   3.01GiB used, 117GiB / 120GiB avail
        pgs:     
    [root@ceph01 ceph]# ceph df
    GLOBAL:
        SIZE       AVAIL      RAW USED     %RAW USED 
        120GiB     117GiB      3.01GiB          2.50 
    POOLS:
    NAME     ID     USED     %USED     MAX AVAIL     OBJECTS
    

    六、dashboard配置(ceph01节点上操作)
    1、dashboard其实就是一个web管理后台
    修改/etc/ceph/ceph.conf,增加如下配置

    [root@ceph01 ceph]# vim ceph.conf
    [mgr]
    mgr modules = dashboard
    

    2、将主节点上的配置文件推送到从节点(ceph01上执行)

    [root@ceph01 ceph]# ceph-deploy --overwrite-conf config push ceph01 ceph02
    

    3、查看当前集群在使用哪几个模块

    [root@ceph01 ceph]# ceph mgr dump
    {
        "epoch": 27,
        "active_gid": 4118,
        "active_name": "ceph01",
        "active_addr": "192.168.20.148:6804/12748",
        "available": true,
        "standbys": [],
        "modules": [
            "balancer",
            "restful",
            "status"
        ],
        "available_modules": [
            "balancer",
            "dashboard",
            "influx",
            "localpool",
            "prometheus",
            "restful",
            "selftest",
            "status",
            "zabbix"
        ],
        "services": {}
    }
    

    4、使dashboard可用

    [root@ceph01 ceph]# ceph mgr module enable dashboard
    

    5、查看是否支持dashboard

    [root@ceph01 ceph]# ceph mgr module ls
    {
        "enabled_modules": [
            "balancer",
            "dashboard",
            "restful",
            "status"
        ],
        "disabled_modules": [
            "influx",
            "localpool",
            "prometheus",
            "selftest",
            "zabbix"
        ]
    }
    

    6、置dashboard web网页监控的ip及端口(根据需求配置)10.27.0.130为此主机外网ip

    [root@ceph01 ceph]# ceph config-key put mgr/dashboard/server_addr 10.27.0.130     
    set mgr/dashboard/server_addr
    [root@ceph01 ceph]# ceph config-key put mgr/dashboard/server_port 7000
    set mgr/dashboard/server_port
    

    可以使用此命令查看当前设置的值

    [root@ceph01 ceph]# ceph config-key dump
    {
        "mgr/dashboard/server_addr": "10.27.0.130",
        "mgr/dashboard/server_port": "7000"
    }
    

    现在就可以访问了


    image.png

    相关文章

      网友评论

        本文标题:centos7简单搭建ceph集群

        本文链接:https://www.haomeiwen.com/subject/rmmhcqtx.html