手动部署简易ceph Jewel

Tags

  • 配置说明

    1. 硬件配置

      3台相同配置的ceph存储节点物理机,配置如下:

      • CPU:Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
      • 内存:8G
      • 网卡:1G
      • 磁盘3块:
        [1] 500G 安装OS
        [2] 500G 磁盘作如下安排:
        一个50G分区,存储osd journal信息;
        一个20G分区,存储mds元数据信息
        [3] 2T 存储ceph的数据
    2. 软件

      centos 7.4(官方桌面版镜像以minimal方式安装)

    3. 架构图

      • mon节点数量为3,分布在3台服务器上
      • osd节点数量为3,分布在3台服务器上
      • mds节点数量为3,分布在3台服务器上
      • 3台服务器主机名分别是ceph2-osd1,ceph2-osd2,ceph2-osd3
      ceph-infrastructure-Jewel

       

  • 安装ceph

    1. 安装ceph前配置所有物理机器

      注:每台ceph节点机器可按需执行防火墙相关步骤

      1. 在所有节点物理机设定相同的时间同步服务器

        1. 打开文件/etc/chrony.conf,将原来的server相关行屏蔽或删掉,添加如下内容:

          注:可以根据需要修改为其它时间同步服务器

          server time4.aliyun.com iburst

        2. 重启时间同步守护进程

          service chronyd restart

        3. 在所有存储节点物理机上执行下述命令查看同步的时间源是否相同

          注:若未显示任何时间源,查看一下DNS服务器有没有正确配置

          chronyc sources

      2. 打开防火墙端口

        1. 在mon服务所在物理机上执行下述命令获取相关网卡所在区域

          firewall-cmd --get-active-zones

        2. 在mon服务所在物理机上执行下述命令在相关区域为mon服务打开防火墙

          • firewall-cmd --zone=[NIC's zone] --add-service=ceph-mon --permanent
          • firewall-cmd --reload

          示例:

          • firewall-cmd --zone=public --add-service=ceph-mon --permanent
          • firewall-cmd --reload
        3. 在osd 和mds 服务所在物理机执行下述命令获取网卡所在区域

          firewall-cmd --get-active-zones

        4. 在osd 和mds 服务所在物理机执行下述命令在相关区域为osd和mds服务打开防火墙

          • firewall-cmd --zone=[NIC's zone] --add-service=ceph --permanent
          • firewall-cmd --reload

          示例:

          • firewall-cmd --zone=public --add-service=ceph --permanent
          • firewall-cmd --reload
      3. 关闭全部ceph节点物理机的selinux(也可以按需自己配制selinux)

        打开文件/etc/selinux/config,修改相关内容为:

        SELINUX=disabled

      4. 创建文件夹

        mkdir /etc/ceph

      5. 关闭NetworkManager

        systemctl stop NetworkManager;systemctl disable NetworkManager

      6. 编辑文件/etc/resolv.conf,写入下述内容(或其它合适的dns域名)

        nameserver 8.8.8.8

      7. 修改主机名

        1. 使用命令修改主机名(注:NEW_HOSTNAME是新的主机名,每台物理机使用不同的主机名)

          hostnamectl set-hostname [NEW_HOSTNAME]

          示例:

          hostnamectl set-hostname ceph-1

        2. 修改主机名配置文件/etc/hosts,添加如下行

          127.0.0.1 [NEW_HOSTNAME]

          示例:

          127.0.0.1 ceph-1

      8. 重启机器

    2. 配置初始的mon节点服务器(任选一台服务器做为初始节点)

      1. 创建配置文件ceph.conf

        1. 使用vim命令新建文件/etc/ceph/ceph.conf,写入下述内容

          注:HOST_NAME是初始mon节点物理机的主机名,HOST_IP是对应物理机的ip

          [global]
          fsid = 
          mon_initial_members = [HOST_NAME]
          mon_host = [HOST_IP]
          auth_cluster_required = cephx
          auth_service_required = cephx
          auth_client_required = cephx

        2. 执行下述命令获取uuid

          uuidgen

        3. 将产生的uuid填入/etc/ceph/ceph.conf文件中fsid处

          文件/etc/ceph/ceph.conf 内容示例:

          [global]
          fsid = 722d96fc-5cbc-4de2-b707-e72ceb83b7ac
          mon_initial_members = ceph2-osd1
          mon_host = 192.168.122.229
          auth_cluster_required = cephx
          auth_service_required = cephx
          auth_client_required = cephx

      2. 安装ceph相关软件包

        1. 将下述内容保存到/etc/yum.repos.d/ceph.repo

          注:用ceph版本代号替换ceph-release(小写字母),用linux发行版名替换distro,相应ceph版本支持的linux发行版名可以到http://download.ceph.com/rpm-{ceph-release}/寻找

          [ceph]
          name=Ceph packages for $basearch
          baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/$basearch
          enabled=1
          priority=2
          gpgcheck=1
          type=rpm-md
          gpgkey=https://download.ceph.com/keys/release.asc
           
          [ceph-noarch]
          name=Ceph noarch packages
          baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/noarch
          enabled=1
          priority=2
          gpgcheck=1
          type=rpm-md
          gpgkey=https://download.ceph.com/keys/release.asc
           
          [ceph-source]
          name=Ceph source packages
          baseurl=http://download.ceph.com/rpm-{ceph-release}/{distro}/SRPMS
          enabled=0
          priority=2
          gpgcheck=1
          type=rpm-md
          gpgkey=https://download.ceph.com/keys/release.asc

          以ceph版本10.2 jewel示例:

          [ceph]
          name=Ceph packages for $basearch
          baseurl=http://download.ceph.com/rpm-jewel/el7/$basearch
          enabled=1
          priority=2
          gpgcheck=1
          type=rpm-md
          gpgkey=https://download.ceph.com/keys/release.asc

          [ceph-noarch]
          name=Ceph noarch packages
          baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
          enabled=1
          priority=2
          gpgcheck=1
          type=rpm-md
          gpgkey=https://download.ceph.com/keys/release.asc

          [ceph-source]
          name=Ceph source packages
          baseurl=http://download.ceph.com/rpm-jewel/el7/SRPMS
          enabled=0
          priority=2
          gpgcheck=1
          type=rpm-md
          gpgkey=https://download.ceph.com/keys/release.asc

        2. 执行下述命令安装软件

          • yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
          • yum install -y snappy leveldb gdisk python-argparse gperftools-libs
          • yum install -y ceph ceph-common
      3. 搭建初始的mon节点

        1. 执行下述命令创建keyring

          • ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
          • ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
          • ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd'
          • ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
          • ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
          • chown ceph:ceph /tmp/ceph.mon.keyring
        2. 执行下述命令创建monmap

          注:HOST_NAME、HOST_IP及UUID是前述ceph.conf中的对应值

          monmaptool --create --add {HOST_NAME} {HOST_IP} --fsid {UUID} /tmp/monmap

          示例

          monmaptool --create --add ceph2-osd1 192.168.122.229 --fsid 722d96fc-5cbc-4de2-b707-e72ceb83b7ac /tmp/monmap

        3. 生成mon

          注:cluster-name是集群名,HOST_NAME是前述ceph.conf中对应值

          • sudo -u ceph mkdir /var/lib/ceph/mon/{cluster-name}-{HOST_NAME}
          • sudo -u ceph ceph-mon [--cluster {cluster-name}] --mkfs -i {HOST_NAME} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

          示例:

          • sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph2-osd1
          • sudo -u ceph ceph-mon --cluster ceph --mkfs -i ceph2-osd1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
        4. 启动mon节点服务

          注:HOST_NAME是前述ceph.conf中对应值

          • systemctl start ceph-mon@HOST_NAME
          • systemctl enable ceph-mon@HOST_NAME

          示例:

          • systemctl start ceph-mon@ceph2-osd1
          • systemctl enable ceph-mon@ceph2-osd1
        5. 现在,初始的mon节点创建成功了,使用下述命令查看其状态

          注:因为还没添加osd节点,不用理会出现的health error

          ceph -s

    3. 添加其它的mon节点(以后新增mon节点时,重复这一步骤即可)

      1. 新mon节点需先执行前述步骤 《安装ceph前配置所有物理机器》

      2. 配置ceph安装源

        在初始mon节点上执行下述命令将前述初始的mon节点上的文件/etc/yum.repos.d/ceph.repo复制到新mon节点服务器相同位置下

        注:new_mon_host表示新mon节点ip

        scp /etc/yum.repos.d/ceph.repo root@[new_mon_host]:/etc/yum.repos.d/ceph.repo

      3. 配置新的mon节点服务器

        1. 修改初始mon节点上的文件/etc/ceph/ceph.conf,将新mon节点的hostname及ip添加进去。相关修改行如下

          注:hostnameN表示已有的第N个mon节点的主机名,ipN表示第N个已有mon主机的ip,new_hostname和new_ip分别表示新mon节点的主机名及ip

          • mon_initial_members = hostname1,...,hostnameN,new_hostname
          • mon_host = ip1,...,ipN,new_ip
        2. 在初始的mon节点上执行下述命令

          注:mon_host_ip表示已有的或新的mon节点ip,new_mon_host_ip表示新mon节点的ip。ceph.conf文件需复制到已有的mon节点和新mon节点的/etc/ceph/目录下

          • scp /etc/ceph/ceph.client.admin.keyring root@[new_mon_host_ip]:/etc/ceph/
          • scp /etc/ceph/ceph.conf root@[mon_host_ip]:/etc/ceph/

          示例:

          • scp /etc/ceph/ceph.client.admin.keyring root@192.168.122.96:/etc/ceph/
          • scp /etc/ceph/ceph.conf root@192.168.122.96:/etc/ceph/
        3. 在新的mon节点上安装ceph相关软件包

          • yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
          • yum install -y snappy leveldb gdisk python-argparse gperftools-libs
          • yum install -y ceph ceph-common
        4. 在新的mon节点上创建mon节点的文件夹

          注:new-mon-id使用新mon节点主机名即可

          sudo -u ceph mkdir /var/lib/ceph/mon/{cluster-name}-{new-mon-id}

          示例:

          sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph2-osd2

        5. 在新的mon节点上导出key文件及map文件

          • mkdir ~/tmp
          • ceph auth get mon. -o ~/tmp/keyring
          • ceph mon getmap -o ~/tmp/mapfile
        6. 在新的mon节点上创建mon节点

          注:new-mon-id使用新mon节点主机名即可,map-filename和key-filename是上述导出的对应文件,ip是新mon节点主机的ip

          • ceph-mon -i {new-mon-id} --mkfs --monmap {map-filename} --keyring {key-filename}
          • ceph-mon -i {new-mon-id} --public-addr {ip:port}

          示例:

          • ceph-mon -i ceph2-osd2 --mkfs --monmap ~/tmp/mapfile --keyring ~/tmp/keyring
          • ceph-mon -i ceph2-osd2 --public-addr 192.168.122.96:6789
        7. 在新的mon节点上启动mon节点服务

          注:new-mon-id使用主机名即可

          • chown -R ceph:ceph /var/lib/ceph/mon/
          • systemctl enable ceph-mon@{new-mon-id}
          • systemctl start ceph-mon@{new-mon-id}

          示例:

          • chown -R ceph:ceph /var/lib/ceph/mon/
          • systemctl enable ceph-mon@ceph2-osd2
          • systemctl start ceph-mon@ceph2-osd2
        8. 在新的mon节点上查看mon节点状态

          ceph mon stat

    4. 添加osd节点(可以重复这一步骤新增osd节点)

      1. 新osd节点需先执行前述步骤《安装ceph前配置所有物理机器》

      2. 安装ceph相关软件

        1. 将前述初始的mon节点上的文件/etc/yum.repos.d/ceph.repo复制到新osd节点服务器相同位置下。在初始mon节点上执行下述命令

          注:new_osd_host表示新osd节点ip

          scp /etc/yum.repos.d/ceph.repo roo@[new_osd_host]:/etc/yum.repos.d/ceph.repo

        2. 在新osd节点上执行下述命令安装软件

          • yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
          • yum install -y snappy leveldb gdisk python-argparse gperftools-libs
          • yum install -y ceph ceph-common
      3. 配置新的osd节点服务器

        1. 建立新分区并创建文件系统(这一步创建的是数据盘)

          注:vdx是未使用的一块磁盘(这里使用的是2T的磁盘),vdxN是创建出来的分区(使用了整个2T的磁盘)。若执行完fdisk命令后未在主机上看到新的分区,执行命令partprobe

          • fdisk /dev/{vdx}
          • mkfs.xfs /dev/{vdxN}

          示例:

          • fdisk /dev/vdb
          • mkfs.xfs /dev/vdb1
        2. 创建osd

          注:此命令会产生osd-number,记住这一数字,后续会用

          ceph osd create

        3. 创建osd目录并挂载刚刚创建的新分区

          注:osd-number是命令`ceph osd create`生成的数字,vdxN是前述步骤创建出来的分区

          • mkdir /var/lib/ceph/osd/ceph-{osd-number}/
          • mount -o rw,noatime,attr2,inode64,noquota /dev/{vdxN} /var/lib/ceph/osd/ceph-{osd-number}

          示例:

          • mkdir /var/lib/ceph/osd/ceph-0/
          • mount -o rw,noatime,attr2,inode64,noquota /dev/vdb1 /var/lib/ceph/osd/ceph-0
        4. 修改文件/etc/fstab添加下述内容,以便持久化挂载分区

          注:osd-number是命令`ceph osd create`生成的数字,vdxN是前述步骤创建出来的分区

          /dev/{vdxN} /var/lib/ceph/osd/ceph-{osd-number} xfs rw,noatime,attr2,inode64,noquota 0 0

          示例:

          /dev/vdb1 /var/lib/ceph/osd/ceph-0 xfs rw,noatime,attr2,inode64,noquota 0 0

        5. 配置osd

          注:osd-number是命令`ceph osd create`生成的数字;cluster-name是前述配置mon节点时使用的名称;hostname是新osd节点服务器主机名;id-or-name是osd.{osd-number};weight是权重,一般容量为1T时权重为1

          • chown -R ceph:ceph /var/lib/ceph/osd/
          • sudo -u ceph ceph-osd -i {osd-number} --mkfs --mkkey
          • ceph auth add osd.{osd-number} osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-{osd-number}/keyring
          • ceph [--cluster {cluster-name}] osd crush add-bucket {hostname} host
          • ceph osd crush move {hostname} root=default
          • ceph [--cluster {cluster-name}] osd crush add {id-or-name} {weight} host={hostname}

          示例:

          • chown -R ceph:ceph /var/lib/ceph/osd/
          • sudo -u ceph ceph-osd -i 0 --mkfs --mkkey
          • ceph auth add osd.0 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-0/keyring
          • ceph --cluster ceph osd crush add-bucket ceph2-osd1 host
          • ceph osd crush move ceph2-osd1 root=default
          • ceph osd crush add osd.0 1.0 host=ceph2-osd1
        6. 配置osd journal

          注:vdy是未用的一块磁盘(这里使用的是500G的磁盘),vdyN是fdisk命令新创建的分区。按ceph官方说法,osd的journal盘和osd data盘,即和挂载到/var/lib/ceph/osd/ceph-{osd-number}的盘最好分开。journal盘一般设置为10G,具体的可以参考这里。若执行完fdisk命令后未在主机上看到新的分区,执行命令partprobe

          • fdisk /dev/{vdy}
          • ceph-osd -i {osd-number} --osd-journal /dev/{vdyN} --mkjournal
          • rm /var/lib/ceph/osd/ceph-{osd-number}/journal
          • ln -s /dev/{vdyN} /var/lib/ceph/osd/ceph-{osd-number}/journal
          • chown ceph:ceph /dev/{vdyN}
          • chown -R ceph:ceph /var/lib/ceph/osd/

          示例:

          • fdisk /dev/vdc
          • ceph-osd -i 0 --osd-journal /dev/vdc1 --mkjournal
          • rm /var/lib/ceph/osd/ceph-0/journal
          • ln -s /dev/vdc1 /var/lib/ceph/osd/ceph-0/journal
          • chown ceph:ceph /dev/vdc1
          • chown -R ceph:ceph /var/lib/ceph/osd/
        7. 设置开机时修改journal对应磁盘分区的属组为ceph:ceph

          注:vdyN是journal对应的分区

          将下述内存写入文件/lib/udev/rules.d/98-udev-ceph.rules

          SUBSYSTEM=="block", KERNEL=="{vdyN}", NAME="{vdyN}", GROUP="ceph", OWNER="ceph"

          示例:

          SUBSYSTEM=="block", KERNEL=="vdc1", NAME="vdc1", GROUP="ceph", OWNER="ceph"

        8. 启动osd服务

          • systemctl enable ceph-osd@{osd-number}
          • systemctl start ceph-osd@{osd-number}

          示例:

          • systemctl enable ceph-osd@0
          • systemctl start ceph-osd@0
        9. 若启动osd服务后执行命令ceph -s时显示新osd的状态不是up或不是in,重启机器

    5. 添加mds服务(可重复这一步骤添加其它mds服务)

      1. 创建数据文件夹

        注:cluster-name是前述配置mon节点时使用的名称(以“ceph为例”),host_name是新mds节点服务器主机名

        sudo -u ceph mkdir -p /var/lib/ceph/mds/{cluster-name}-{host_name}

        示例:

        sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-ceph2-osd1

      2. 为mds服务创建数据分区

        注:vdy是一块磁盘,这里使用的与前述osd journal使用的是同一块磁盘,vdyN是创建出来的分区。若执行完fdisk命令后未在主机上看到新的分区,执行命令partprobe

        • fdisk /dev/{vdy}
        • mkfs.xfs /dev/{vdyN}

        示例:

        • fdisk /dev/vdc
        • mkfs.xfs /dev/vdc2
      3. 在/etc/fstab文件中添加如下内容:

        注:vdyN是上述步骤为mds服务创建的数据分区,cluster-name是前述配置mon节点时使用的名称(以“ceph为例”),host_name是新mds节点服务器主机名

        /dev/{vdyN} /var/lib/ceph/mds/{cluster-name}-{host_name}/ xfs rw,noatime,attr2,inode64,noquota 0 0

        示例:

        /dev/vdc2 /var/lib/ceph/mds/ceph-ceph2-osd1/ xfs rw,noatime,attr2,inode64,noquota 0 0

      4. 修改权限

        注:cluster-name是前述配置mon节点时使用的名称(以“ceph为例”),host_name是新mds节点服务器主机名

        • mount -a
        • chown ceph:ceph /var/lib/ceph/mds/{cluster-name}-{host_name}/

        示例:

        • mount -a
        • chown ceph:ceph /var/lib/ceph/mds/ceph-ceph2-osd1/
      5. mds授权

        注:cluster-name是前述配置mon节点时使用的名称(以“ceph为例”),id是新mds节点服务器主机名

        • sudo -u ceph ceph-authtool --create-keyring /var/lib/ceph/mds/{cluster-name}-{id}/keyring --gen-key -n mds.{id}
        • ceph auth add mds.{id} osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/{cluster}-{id}/keyring

        示例:

        • sudo -u ceph ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-ceph2-osd1/keyring --gen-key -n mds.ceph2-osd1
        • ceph auth add mds.ceph2-osd1 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-ceph2-osd1/keyring
      6. 启动mds服务

        • systemctl start ceph-mds@{host_name}
        • systemctl enable ceph-mds@{host_name}

        示例:

        • systemctl start ceph-mds@ceph2-osd1
        • systemctl enable ceph-mds@ceph2-osd1
      7. 检查mds状态

        ceph mds stat

    6. 创建基于mds的ceph fs

      1. 创建ceph fs

        1. 创建ceph存储池

          注:cephfs_metadata_pool_name是存储文件系统元数据的池名称,cephfs_data_pool_name是存储文件系统数据的池名称,data_pool_pg和metadata_pool_pg是存储池的pg数。存储池的pg数可参考这里设置

          • ceph osd pool create {cephfs_data_pool_name} {data_pool_pg}
          • ceph osd pool create {cephfs_metadata_pool_name} {metadata_pool_pg}

          示例:

          • ceph osd pool create cephfs_data 32
          • ceph osd pool create cephfs_metadata 32
        2. 创建fs

          注:ceph版本jewel目前只支持一个文件系统;cephfs_name是文件系统名称,cephfs_metadata_pool_name是存储文件系统元数据的池名称,cephfs_data_pool_name是存储文件系统数据的池名称

          ceph fs new {cephfs_name} {cephfs_metadata_pool_name} {cephfs_data_pool_name}

          示例:

          ceph fs new cephfs_name1 cephfs_metadata cephfs_data

      2. 挂载ceph文件系统

        注:mon_node_ip是任一mon节点的ip;mount_point是挂载点;USER是用户名;SECRET是密钥文本(/etc/ceph/ceph.client.admin.keyring文件中的key值是密钥文本)

        mount -t ceph {mon_node_ip}:6789:/ {mount_point} -o name=USER,secret=SECRET

        示例:

        mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs -o name=admin,secret=AQAmuRNbMxu+ERAAe6M1HvTh6PoSTnPakB5B1g==

        若将/etc/ceph/ceph.conf文件中的相关变量设置为如下值

        • auth_cluster_required = none
        • auth_service_required = none
        • auth_client_required = none

        则可以直接挂载ceph文件系统

        mount -t ceph {mon_node_ip}:6789:/ {mount_point}

  • troubleshooting

    如果安装完后执行ceph -s显示ceph的health状态为HEALTH_WARN并且显示active+undersized+degraded,确认一下各个存储池pool的pg数设置的是否合适。存储池的pg数可参考这里设置

如果觉得本文不错,欢迎打赏