• 云途科技成立于2010年 - 专注全球跨境电商服务器租赁托管!
  • 帮助中心

    您可以通过下方搜索框快速查找您想知道的问题

    CentOS 7.1 安装分布式存储系统 Ceph

      in  独立服务器      Tags:  Ceph  

    关于 Ceph 的介绍网上一大堆,这里就不重复了。SAGE WEIL 读博士的时候开发了这套牛逼的分布式存储系统,最初是奔着高性能分布式文件系统去的,结果云计算风口一来,Ceph 重心转向了分布式块存储(BLOCK STORAGE)和分布式对象存储(OBJECT STORAGE),现在分布式文件系统 CephFS 还停在 BETA 阶段。Ceph 现在是云计算、虚拟机部署的最火开源存储解决方案,据说有20%的 OPENSTACK 部署存储用的都是 CEPH 的 BLOCK STORAGE.

    CEPH 提供3种存储方式:对象存储,块存储和文件系统,下图很好的展示了 CEPH 存储集群的架构:

    ceph

     

    我们主要关心的是块存储,将在下半年慢慢把虚拟机后端存储从 SAN 过渡到 CEPH. 虽然还是 0.94 版本,CEPH 现在已经比较成熟了,有个同事已经在生产环境里运行 CEPH 了两年多,他曾遇到很多问题,但最终还是解决了,可见 CEPH 还是非常稳定和可靠的。

    硬件环境准备

    准备了6台机器,其中3台物理服务器做监控节点(MON: CEPH-MON1, CEPH-MON2, CEPH-MON3),2台物理服务器做存储节点(OSD: CEPH-OSD1, CEPH-OSD2),1台虚拟机做管理节点(ADM: CEPH-ADM)。

    CEPH 要求必须是奇数个监控节点,而且最少3个(自己玩玩的话,1个也是可以的),CEPH-ADM 是可选的,可以把 CEPH-ADM 放在 MONITOR 上,只不过把 CEPH-ADM 单独拿出来架构上看更清晰一些。当然也可以把 MON 放在 OSD 上,生产环境下是不推荐这样做的。

    • ADM 服务器硬件配置比较随意,用1台低配置的虚拟机就可以了,只是用来操作和管理 CEPH;

    • MON 服务器2块硬盘做成 RAID1,用来安装操作系统;

    • OSD 服务器上用10块 4TB 硬盘做 CEPH 存储,每个 OSD 对应1块硬盘,每个 OSD 需要1个 JOURNAL,所以10块硬盘需要10个 JOURNAL,我们用2块大容量 SSD 硬盘做 JOURNAL,每个 SSD 等分成5个区,这样每个区分别对应一个 OSD 硬盘的 JOURNAL,剩下的2块小容量 SSD 装操作系统,采用 RAID1.

    配置列表如下:

    | HOSTNAME  | IP ADDRESS    | ROLE  |                                           HARDWARE INFO |
    |-----------+---------------+-------|---------------------------------------------------------|
    | CEPH-ADM  | 192.168.2.100 | ADM   |                             2 CORES, 4GB RAM, 20GB DISK |
    | CEPH-MON1 | 192.168.2.101 | MON   |                         24 CORES,64GB RAM, 2X750GB SAS |
    | CEPH-MON2 | 192.168.2.102 | MON   |                         24 CORES,64GB RAM, 2X750GB SAS |
    | CEPH-MON3 | 192.168.2.103 | MON   |                         24 CORES,64GB RAM, 2X750GB SAS |
    | CEPH-OSD1 | 192.168.2.121 | OSD   | 12 CORES,64GB RAM, 10X4TB SAS,2X400GB SSD,2X80GB SSD |
    | CEPH-OSD2 | 192.168.2.122 | OSD   | 12 CORES,64GB RAM, 10X4TB SAS,2X400GB SSD,2X80GB SSD |

    软件环境准备

    所有 CEPH 集群节点采用 CentOS 7.1 版本(CentOS-7-X86_64-MINIMAL-1503-01.ISO),所有文件系统采用 CEPH 官方推荐的 XFS,所有节点的操作系统都装在 RAID1 上,其他的硬盘单独用,不做任何 RAID.

    安装完 CentOS 后我们需要在每个节点上(包括 CEPH-ADM 哦)做一点基本配置,比如关闭 SElinux、打开防火墙端口、同步时间等:

    关闭 SElinux
    # SED -I 'S/SElinux=ENFORCING/SElinux=DISABLED/G' /ETC/SELinux/CONFIG
    # SETENFORCE 0
    
    打开 CEPH 需要的端口
    # firewall-CMD --ZONE=PUBLIC --ADD-PORT=6789/TCP --PERMANENT
    # firewall-CMD --ZONE=PUBLIC --ADD-PORT=6800-7100/TCP --PERMANENT
    # firewall-CMD --RELOAD
    
    安装 EPEL 软件源:
    # RPM -UVH HTTPS://DL.FEDORAPROJECT.ORG/PUB/EPEL/7/X86_64/E/EPEL-RELEASE-7-5.NOARCH.RPM
    # YUM -Y UPDATE
    # YUM -Y UPGRADE
    
    安装 ntp 同步时间
    # YUM -Y INSTALL ntp ntpDATE ntp-DOC
    
    # NTPDATE 0.US.POOL.NTP.ORG
    # HWCLOCK --SYSTOHC
    # SYSTEMCTL ENABLE NTPD.SERVICE
    # SYSTEMCTL START NTPD.SERVICE

    在每台 OSD 服务器上我们需要对10块 SAS 硬盘分区、创建 XFS 文件系统;对2块用做 JOURNAL 的 SSD 硬盘分5个区,每个区对应一块硬盘,不需要创建文件系统,留给 CEPH 自己处理。

    # PARTED /DEV/SDA
    GNU PARTED 3.1
    USING /DEV/SDA
    WELCOME TO GNU PARTED! TYPE 'HELP' TO VIEW A LIST OF COMMANDS.
    (PARTED) MKLABEL GPT
    (PARTED) MKPART PRIMARY XFS 0% 100%
    (PARTED) QUIT
    
    # MKFS.XFS /DEV/SDA1
    META-DATA=/DEV/SDA1              ISIZE=256    AGCOUNT=4, AGSIZE=244188544 BLKS
             =                       SECTSZ=4096  ATTR=2, PROJID32BIT=1
             =                       CRC=0        FINOBT=0
    DATA     =                       BSIZE=4096   BLOCKS=976754176, IMAXPCT=5
             =                       SUNIT=0      SWIDTH=0 BLKS
    NAMING   =VERSION 2              BSIZE=4096   ASCII-CI=0 FTYPE=0
    LOG      =INTERNAL LOG           BSIZE=4096   BLOCKS=476930, VERSION=2
             =                       SECTSZ=4096  SUNIT=1 BLKS, LAZY-COUNT=1
    REALTIME =NONE                   EXTSZ=4096   BLOCKS=0, RTEXTENTS=0
    ...

    上面的命令行要对10个硬盘处理,重复的操作太多,以后还会陆续增加服务器,写成脚本 PARTED.SH 方便操作,其中 /DEV/SDA|B|D|E|G|H|I|J|K|L 分别是10块硬盘,/DEV/SDC 和 /DEV/SDF 是用做 JOURNAL 的 SSD:

    # VI PARTED.SH
    #!/BIN/BASH
    
    SET -E
    IF [ ! -X "/SBIN/PARTED" ]; THEN
        ECHO "THIS SCRIPT REQUIRES /SBIN/PARTED TO RUN!" >&2
        EXIT 1
    FI
    
    DISKS="A B D E G H I J K L"
    FOR I IN ${DISKS}; DO
        ECHO "CREATING PARTITIONS ON /DEV/SD${I} ..."
        PARTED -A OPTIMAL --SCRIPT /DEV/SD${I} -- MKTABLE GPT
        PARTED -A OPTIMAL --SCRIPT /DEV/SD${I} -- MKPART PRIMARY XFS 0% 100%
        SLEEP 1
        #ECHO "FORMATTING /DEV/SD${I}1 ..."
        MKFS.XFS -F /DEV/SD${I}1 &
    DONE
    
    SSDS="C F"
    FOR I IN ${SSDS}; DO
        PARTED -S /DEV/SD${I} MKLABEL GPT
        PARTED -S /DEV/SD${I} MKPART PRIMARY 0% 20%
        PARTED -S /DEV/SD${I} MKPART PRIMARY 21% 40%
        PARTED -S /DEV/SD${I} MKPART PRIMARY 41% 60%
        PARTED -S /DEV/SD${I} MKPART PRIMARY 61% 80%
        PARTED -S /DEV/SD${I} MKPART PRIMARY 81% 100%
    DONE
    
    # SH PARTED.SH

    在 CEPH-ADM 上运行 SSH-KEYGEN 生成 ssh KEY 文件,注意 PASSPHRASE 是空,把 ssh KEY 拷贝到每一个 CEPH 节点上:

    SSH-KEYGEN -T RSA
    GENERATING PUBLIC/PRIVATE RSA KEY PAIR.
    ENTER FILE IN WHICH TO SAVE THE KEY (/root/.ssh/ID_RSA):
    ENTER PASSPHRASE (EMPTY FOR NO PASSPHRASE):
    ENTER SAME PASSPHRASE AGAIN:
    
    # ssh-COPY-ID root@CEPH-MON1
    # SSH-COPY-ID root@CEPH-MON2
    # SSH-COPY-ID root@CEPH-MON3
    # SSH-COPY-ID ROOT@CEPH-OSD1
    # SSH-COPY-ID ROOT@CEPH-OSD2

    在 CEPH-ADM 上登陆到每台节点上确认是否都能无密码 SSH 了,确保那个烦人的连接确认不会再出现:

    # SSH ROOT@CEPH-MON1
    THE AUTHENTICITY OF HOST 'CEPH-MON1 (192.168.2.101)' CAN'T BE ESTABLISHED.
    ECDSA KEY FINGERPRINT IS D7:DB:D6:70:EF:2E:56:7C:0D:9C:62:75:B2:47:34:DF.
    ARE YOU SURE YOU WANT TO CONTINUE CONNECTING (YES/NO)? YES
    
    # SSH ROOT@CEPH-MON2
    # SSH ROOT@CEPH-MON3
    # SSH ROOT@CEPH-OSD1
    # SSH ROOT@CEPH-OSD2

    CEPH 部署

    比起在每个 CEPH 节点上手动安装 CEPH,用 CEPH-DEPLOY 工具统一安装要方便得多:

    # RPM -UVH HTTP://CEPH.COM/RPM-HAMMER/EL7/NOARCH/CEPH-RELEASE-1-1.EL7.NOARCH.RPM
    # YUM UPDATE -Y
    # YUM INSTALL CEPH-DEPLOY -Y

    创建一个 CEPH 工作目录,以后的操作都在这个目录下面进行:

    # MKDIR ~/CEPH-CLUSTER
    # CD ~/CEPH-CLUSTER

    初始化集群,告诉 CEPH-DEPLOY 哪些节点是监控节点,命令成功执行后会在 CEPH-CLUSTER 目录下生成 CEPH.CONF, CEPH.LOG, CEPH.MON.KEYRING 等相关文件:

    # CEPH-DEPLOY NEW CEPH-MON1 CEPH-MON2 CEPH-MON3

    在每个 CEPH 节点上都安装 CEPH:

    # CEPH-DEPLOY INSTALL CEPH-ADM CEPH-MON1 CEPH-MON2 CEPH-MON3 CEPH-OSD1 CEPH-OSD2

    初始化监控节点:

    # CEPH-DEPLOY MON CREATE-INITIAL

    查看一下 CEPH 存储节点的硬盘情况:

    # CEPH-DEPLOY DISK LIST CEPH-OSD1
    # CEPH-DEPLOY DISK LIST CEPH-OSD2

    初始化 CEPH 硬盘,然后创建 OSD 存储节点,存储节点:单个硬盘:对应的 JOURNAL 分区,一一对应:

    创建 CEPH-OSD1 存储节点
    # CEPH-DEPLOY DISK ZAP CEPH-OSD1:SDA CEPH-OSD1:SDB CEPH-OSD1:SDD CEPH-OSD1:SDE CEPH-OSD1:SDG CEPH-OSD1:SDH CEPH-OSD1:SDI CEPH-OSD1:SDJ CEPH-OSD1:SDK CEPH-OSD1:SDL
    
    # CEPH-DEPLOY OSD CREATE CEPH-OSD1:SDA:/DEV/SDC1 CEPH-OSD1:SDB:/DEV/SDC2 CEPH-OSD1:SDD:/DEV/SDC3 CEPH-OSD1:SDE:/DEV/SDC4 CEPH-OSD1:SDG:/DEV/SDC5 CEPH-OSD1:SDH:/DEV/SDF1 CEPH-OSD1:SDI:/DEV/SDF2 CEPH-OSD1:SDJ:/DEV/SDF3 CEPH-OSD1:SDK:/DEV/SDF4 CEPH-OSD1:SDL:/DEV/SDF5
    
    创建 CEPH-OSD2 存储节点
    # CEPH-DEPLOY DISK ZAP CEPH-OSD2:SDA CEPH-OSD2:SDB CEPH-OSD2:SDD CEPH-OSD2:SDE CEPH-OSD2:SDG CEPH-OSD2:SDH CEPH-OSD2:SDI CEPH-OSD2:SDJ CEPH-OSD2:SDK CEPH-OSD2:SDL
    
    # CEPH-DEPLOY OSD CREATE CEPH-OSD2:SDA:/DEV/SDC1 CEPH-OSD2:SDB:/DEV/SDC2 CEPH-OSD2:SDD:/DEV/SDC3 CEPH-OSD2:SDE:/DEV/SDC4 CEPH-OSD2:SDG:/DEV/SDC5 CEPH-OSD2:SDH:/DEV/SDF1 CEPH-OSD2:SDI:/DEV/SDF2 CEPH-OSD2:SDJ:/DEV/SDF3 CEPH-OSD2:SDK:/DEV/SDF4 CEPH-OSD2:SDL:/DEV/SDF5

    最后,我们把生成的配置文件从 CEPH-ADM 同步部署到其他几个节点,使得每个节点的 CEPH 配置一致:

    # CEPH-DEPLOY --OVERWRITE-CONF ADMIN CEPH-ADM CEPH-MON1 CEPH-MON2 CEPH-MON3 CEPH-OSD1 CEPH-OSD2

    测试

    看一下配置成功了没?

    # CEPH HEALTH
    HEALTH_WARN TOO FEW PGS PER OSD (10 < MIN 30)

    增加 PG 数目,根据 TOTAL PGS = (#OSDS * 100) / POOL SIZE 公式来决定 PG_NUM(PGP_NUM 应该设成和 PG_NUM 一样),所以 20*100/2=1000,CEPH 官方推荐取最接近2的指数倍,所以选择 1024。如果顺利的话,就应该可以看到 HEALTH_OK 了:

    # CEPH OSD POOL SET RBD SIZE 2
    SET POOL 0 SIZE TO 2
    
    # CEPH OSD POOL SET RBD MIN_SIZE 2
    SET POOL 0 MIN_SIZE TO 2
    
    # CEPH OSD POOL SET RBD PG_NUM 1024
    SET POOL 0 PG_NUM TO 1024
    
    # CEPH OSD POOL SET RBD PGP_NUM 1024
    SET POOL 0 PGP_NUM TO 1024
    
    # CEPH HEALTH
    HEALTH_OK

    更详细一点:

    # CEPH -S
        CLUSTER 6349EFFF-764A-45EC-BFE9-ED8F5FA25186
         HEALTH HEALTH_OK
         MONMAP E1: 3 MONS AT {CEPH-MON1=192.168.2.101:6789/0,CEPH-MON2=192.168.2.102:6789/0,CEPH-MON3=192.168.2.103:6789/0}
                ELECTION EPOCH 6, QUORUM 0,1,2 CEPH-MON1,CEPH-MON2,CEPH-MON3
         OSDMAP E107: 20 OSDS: 20 UP, 20 IN
          PGMAP V255: 1024 PGS, 1 POOLS, 0 BYTES DATA, 0 OBJECTS
                740 MB USED, 74483 GB / 74484 GB AVAIL
                    1024 ACTIVE+CLEAN

    如果操作没有问题的话记得把上面操作写到 CEPH.CONF 文件里,并同步部署的各节点:

    # VI CEPH.CONF
    [GLOBAL]
    FSID = 6349EFFF-764A-45EC-BFE9-ED8F5FA25186
    MON_INITIAL_MEMBERS = CEPH-MON1, CEPH-MON2, CEPH-MON3
    MON_HOST = 192.168.2.101,192.168.2.102,192.168.2.103
    AUTH_CLUSTER_REQUIRED = CEPHX
    AUTH_SERVICE_REQUIRED = CEPHX
    AUTH_CLIENT_REQUIRED = CEPHX
    FILESTORE_XATTR_USE_OMAP = TRUE
    OSD POOL DEFAULT SIZE = 2
    OSD POOL DEFAULT MIN SIZE = 2
    OSD POOL DEFAULT PG NUM = 1024
    OSD POOL DEFAULT PGP NUM = 1024
    
    # CEPH-DEPLOY ADMIN CEPH-ADM CEPH-MON1 CEPH-MON2 CEPH-MON3 CEPH-OSD1 CEPH-OSD2

    如果一切可以从来

    部署过程中如果出现任何奇怪的问题无法解决,可以简单的删除一切从头再来:

    # CEPH-DEPLOY PURGE CEPH-MON1 CEPH-MON2 CEPH-MON3 CEPH-OSD1 CEPH-OSD2
    # CEPH-DEPLOY PURGEDATA CEPH-MON1 CEPH-MON2 CEPH-MON3 CEPH-OSD1 CEPH-OSD2
    # CEPH-DEPLOY FORGETKEYS

    TROUBLESHOOTING

    如果出现任何网络问题,首先确认节点可以互相无密码 SSH,各个节点的防火墙已关闭或加入规则:

    # CEPH HEALTH
    2015-07-31 14:31:10.545138 7FCE64377700  0 -- :/1024052 >> 192.168.2.101:6789/0 PIPE(0X7FCE60027050 SD=3 :0 S=1 PGS=0 CS=0 L=1 C=0X7FCE60023E00).FAULT
    HEALTH_OK
    
    # SSH CEPH-MON1
    # firewall-CMD --ZONE=PUBLIC --ADD-PORT=6789/TCP --PERMANENT
    # FIREWALL-CMD --ZONE=PUBLIC --ADD-PORT=6800-7100/TCP --PERMANENT
    # FIREWALL-CMD --RELOAD
    
    # CEPH HEALTH
    HEALTH_OK

    初次安装 CEPH 会遇到各种各样的问题,总体来说排错还算顺利,随着经验的积累,今年下半年将会逐步把 CEPH 加入到生产环境。


    • 外贸虚拟主机

      1GB硬盘

      2个独立站点

      1000M带宽

      不限制流量

      美国外贸专用虚拟主机,cPanel面板,每天远程备份.
      服务器配置:2*E5 32核,96GB 内存,4*2TB 硬盘 RAID10 阵列.

      ¥180/年

    • 美国/荷兰外贸VPS

      2核CPU

      1G内存

      30硬盘

      10M带宽

      美国/荷兰外贸云服务器,专注外贸服务器行业12年.
      服务器配置:2*E5 32核,96GB 内存,4*2TB 硬盘 RAID10 阵列.

      ¥99/月

    • 全球外贸服务器

      8核CPU

      32G内存

      1TB硬盘

      1000M带宽

      已部署数据中心:美国洛杉矶/亚特兰大、荷兰、加拿大、英国伦敦、德国、拉脱维亚、瑞典、爱沙尼亚
      自有机柜(全球九大数据中心),稳定在线率:99.9%

      ¥999/月 原价1380

    7*24小时 在线提交工单

    如果您的问题没有得到解决,推荐您在线提交工单,我们的客服人员会第一时间为您解决问题

    展开