• Ceph集群搭建(nautilus版)


    1 环境和版本

    1.1 操作系统

    干干静静的centos7系统,选取的是mini的iso最小化安装,有且只有一块网卡且开机启动网络服务

    cat /etc/redhat-release
    CentOS Linux release 7.9.2009 (Core)

    1.2 Ceph版本

    本文使用nautilus版本Ceph,官方教程https://docs.ceph.com/en/nautilus/,安装方式采用ceph-deploy安装。

    1.3 集群环境

    IP 主机名 磁盘
    10.10.2.241 ceph241 sda
    10.10.2.242 ceph242 sda
    10.10.2.243 ceph243 sda sdb
    10.10.2.244 ceph244 sda sdb

    2 安装

    2.1 准备

    2.1.1 关闭selinux(在所有节点执行)

    setenforce 0 && sed -i 's|SELINUX=\(.*\)|SELINUX=disabled|g' /etc/selinux/config

    2.1.2 关闭防火墙 (在所有节点执行)

    官方教程是建议开放所需端口,我懒,所以直接关闭了防火墙

    systemctl stop firewalld && systemctl disable firewalld

    2.1.3 设置hosts(在所有节点执行)

    为每个节点设置hosts,使得每个节点可以通过主机名互相访问

    vi /etc/hosts

    10.10.2.241 ceph241
    10.10.2.242 ceph242
    10.10.2.243 ceph243
    10.10.2.244 ceph244

    2.1.4 安装epel源(在所有节点执行)

    yum install -y epel-release

    2.1.5 将CentOS源替换成清华源(在所有节点执行)

    sed -e 's|^mirrorlist=|#mirrorlist=|g' \
     -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://opentuna.cn|g' \
     -i.bak \
     /etc/yum.repos.d/CentOS-*.repo

    2.1.6 将epel源替换成清华源(在所有节点执行)

    sed -e 's!^metalink=!#metalink=!g' \
     -e 's!^#baseurl=!baseurl=!g' \
     -e 's!//download.fedoraproject.org/pub!//opentuna.cn!g' \
     -e 's!//download.example/pub!//opentuna.cn!g' \
     -e 's!http://mirrors!https://mirrors!g' \
     -i /etc/yum.repos.d/epel*.repo

    2.2 安装

    2.2.1 配置Ceph源(在所有节点执行)

    因为我们是要安装nautilus版本,所以相比于官方教程已经做了相应的版本替换,并且改成使用清华源

    vi /etc/yum.repos.d/ceph.repo

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

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

    [ceph-noarch]
    name=Ceph noarch packages
    baseurl=http://opentuna.cn/ceph/rpm-nautilus/el7/noarch
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://opentuna.cn/ceph/keys/release.asc

    vi /etc/yum.repos.d/ceph-iscsi.repo

    [ceph-iscsi]
    name=ceph-iscsi noarch packages
    baseurl=https://opentuna.cn/ceph/ceph-iscsi/latest/rpm/el7/noarch
    enabled=1
    gpgcheck=1
    gpgkey=https://opentuna.cn/ceph/keys/release.asc
    type=rpm-md

    [ceph-iscsi-source]
    name=ceph-iscsi source packages
    baseurl=https://opentuna.cn/ceph/ceph-iscsi/3/rpm/el7/SRPMS
    enabled=0
    gpgcheck=1
    gpgkey=https://opentuna.cn/ceph/keys/release.asc
    type=rpm-md

    vi /etc/yum.repos.d/tcmu-runner.repo

    [tcmu-runner]
    name=tcmu-runner
    baseurl=https://3.chacra.ceph.com/r/tcmu-runner/master/1793db5ea90f15db9277b0aaa32dd5da2e38b1d3/centos/8/flavors/default/x86_64
    priority=1
    gpgcheck=0

    2.2.2 添加cephx用户(在所有节点执行)

    1. 添加cephx用户:useradd -d /home/cephx -m cephx

    2. 为cephx用户设置密码:passwd cephx

    3. 为cephx用户设置sudo权限:

      • echo "cephx ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephx

      • chmod 0440 /etc/sudoers.d/cephx

    2.2.3 安装Ceph所需软件包(在所有节点执行)

    yum -y install ceph ceph-radosgw ceph-iscsi

    2.2.4 安装Ceph-Deploy(在ceph241节点执行)

    1. 安装Ceph-Deploy:yum install -y ceph-deploy

    这个时候我们尝试执行ceph-deploy --help如果报错No module named pkg_resources则执行

    1. 安装pip工具:yum install -y python-pip
    2. 安装distribute模块:pip install distribute

    现在执行ceph-deploy --help就不报错了

    2.2.5 设置免密(在ceph241节点执行)

    要求ceph241可通过cephx用户免密登录其他ceph节点

    1. 切换到cephx用户:su cephx
    2. 为cephx用户生成公钥:ssh-keygen,一路无脑回车
    3. 将公钥拷贝到ceph242、ceph243、ceph243
      • ssh-copy-id cephx@ceph242
      • ssh-copy-id cephx@ceph243
      • ssh-copy-id cephx@ceph244

    2.2.6 安装集群(在ceph241节点执行)

    1. 切换到cephx用户:su cephx
    2. 创建集群路径:cd ~ && mkdir my-cluster && cd my-cluster
    3. 安装pip工具:sudo yum install -y python-pip
    4. 创建集群:ceph-deploy new ceph242,ceph242为mon节点的主机名,注意更换
    5. 设置集群数量为2:echo 'osd pool default size = 2' >> ceph.conf
    6. 安装ceph:ceph-deploy install ceph242 ceph243 ceph244
    7. 部署mon节点:ceph-deploy mon create-initial
    8. 将秘钥分发至其他节点:ceph-deploy admin ceph242 ceph243 ceph244
    9. 部署mgr节点:ceph-deploy mgr create ceph242
    10. 部署osd节点:
      • ceph-deploy osd create --data /dev/sdb ceph243
      • ceph-deploy osd create --data /dev/sdb ceph244

    2.2.7 查看集群状态(在ceph242节点执行)

    sudo ceph healthsudo ceph -s

    2.3 扩展

    2.3.1 部署mds节点(在ceph241节点执行)

    如果需要使用文件存储,则需要部署mds节点

    ceph-deploy mds create ceph242

    2.3.2 调整ceph.conf文件(在ceph241节点执行)

    1. 切换用户:su cephx
    2. 进入集群目录:cd ~/my-cluster
    3. 调整ceph.conf文件:echo "public network = 10.10.2.1/24" >> ceph.conf
    4. 推动ceph.conf文件:ceph-deploy --overwrite-conf config push ceph242 ceph243 ceph244

    2.3.3 配置mon节点高可用(在ceph241节点执行)

    • ceph-deploy mon add ceph243
    • ceph-deploy mon add ceph244

    2.3.4 配置mgr节点高可用(在ceph241节点执行)

    • ceph-deploy mgr create ceph243
    • ceph-deploy mgr create ceph244

    2.3.5 部署rgw节点(在ceph241节点执行)

    如果需要使用对象存储,则需要部署rgw节点

    ceph-deploy rgw create ceph242

    验证部署结果

    curl ceph242:7480curl 10.10.2.242:7480

    2.3.6 配置ISCSI服务

    如果需要将块存储卷提供给其他虚拟机或物理机使用,则需要配置ISCSI服务

    1. 创建名为rbd的存储池(在ceph242节点执行):ceph osd pool create rbd 8

    2. 初始化存储池(在ceph242节点执行):rbd pool init rbd

    3. 配置ISCSI(在ceph242 ceph243 ceph244执行

      vi /etc/ceph/iscsi-gateway.cfg

      [config]
      cluster_name = ceph
      gateway_keyring = ceph.client.admin.keyring
      api_secure = false
      api_user = admin
      api_password = admin
      api_port = 5001

    4. 启动ISCSI服务(在ceph242 ceph243 ceph244执行

      systemctl daemon-reload
      systemctl enable rbd-target-gw
      systemctl start rbd-target-gw
      systemctl enable rbd-target-api
      systemctl start rbd-target-api

    3 使用(在ceph242节点执行)

    3.1 对象存储

    1. 创建存储池:ceph osd pool create object-pool 8,其中block-pool为存储池名称,可自定义
    2. 创建一个文件: echo "This is text content" >> /tmp/test.1,其中test.1为文件名称,可自定义
    3. 将文件存储到ceph:rados put test.object /tmp/test.1 --pool=object-pool,其中test.object为对象名称,可自定义
    4. 查看ceph中存储的对象:rados ls --pool=object-pool
    5. 下载ceph中存储的对象:rados get test.object /tmp/test.2 --pool=object-pool,其中test.2为文件名称,可自定义

    3.2 块存储

    3.2.1 创建存储卷

    1. 创建存储池:ceph osd pool create block-pool 8,其中block-pool为存储池名称,可自定义
    2. 初始化存储池:rbd pool init block-pool
    3. 创建存储卷:rbd create --size 1024 block-pool/block-image,其中block-image为存储卷名称,可自定义
    4. 查询存储卷:rbd list block-pool

    3.2.2 通过ISCSI协议提供块存储服务

    进入ISCSI配置窗口:gwcli,执行如下命令:

    cd /iscsi-targets
    create iqn.2022-06.com.luyanchao.iscsi-target:test
    cd iqn.2022-06.com.luyanchao.iscsi-target:test/gateways
    create ceph242 10.10.2.242
    create ceph243 10.10.2.243
    create ceph244 10.10.2.244
    cd /disks
    create block-pool block-image 1G
    cd /iscsi-targets/iqn.2022-06.com.luyanchao.iscsi-target:test/hosts
    create iqn.2022-06.com.luyanchao.iscsi-host:test
    auth administrator admin@123456
    disk add block-pool/block-image

    命令说明:

    • 第2行的iqn.2022-06.com.luyanchao.iscsi-target:test可以自定义,但需要满足IQN命名规则
    • 第8行的block-pool为上面创建的存储池名称,block-image为上面创建的存储卷名称
    • 第10行的iqn.2022-06.com.luyanchao.iscsi-host:test可以自定义,但需要满足IQN命名规则
    • 第11行的administrator为用户名可自定义,admin@123456为密码可自定义
    • 第12行的block-pool为上面创建的存储池名称,block-image为上面创建的存储卷名称

    继续在gwcli窗口执行ls /,确认结果如下:image

    3.3.3 CentOS客户端连接ISCSI块存储服务

    任选其他CentOS虚拟机或物理机

    1. 安装ISCSI客户端以及多路径映射软件:yum install -y iscsi-initiator-utils device-mapper-multipath

    2. 创建默认的/etc/multipath.conf文件并启动multipathd服务:mpathconf --enable --with_multipathd y

    3. 配置multipathd:

      vi /etc/multipath.conf

      在文件末尾追加如下内容

      devices {
       device {
        vendor "LIO-ORG"
        hardware_handler "1 alua"
        path_grouping_policy "failover"
        path_selector "queue-length 0"
        failback 60
        path_checker tur
        prio alua
        prio_args exclusive_pref_bit
        fast_io_fail_tmo 25
        no_path_retry queue
       }
      }

    4. 重启multipathd服务:systemctl reload multipathd

    5. 编辑/etc/iscsi/iscsid.conf文件vi /etc/iscsi/iscsid.conf

      • 找到node.session.auth.authmethod配置项,去掉前面的#注释
      • 找到node.session.auth.username配置项,去掉前面的#注释,并将值改为administrator
      • 找到node.session.auth.password配置项,去掉前面的#注释,并将值改为admin@123456
    6. 编辑/etc/iscsi/initiatorname.iscsi文件vi /etc/iscsi/initiatorname.iscsi,将内容改为:

      InitiatorName=iqn.2022-06.com.luyanchao.iscsi-host:test

      其中iqn.2022-06.com.luyanchao.iscsi-host:test的来源见上文

    7. 执行ISCSI服务发现:iscsiadm -m discovery -t st -p 10.10.2.242,输出如下:

      10.10.2.242:3260,1 iqn.2022-06.com.luyanchao.iscsi-target:test
      10.10.2.243:3260,2 iqn.2022-06.com.luyanchao.iscsi-target:test
      10.10.2.244:3260,3 iqn.2022-06.com.luyanchao.iscsi-target:test

      可以看到,由于iscsi-targer配置了三个网关,所以这里面出现了三条数据,其中iqn.2022-06.com.luyanchao.iscsi-target:test和上文是一致的

    8. 连接ISCSI服务:iscsiadm -m node -T iqn.2022-06.com.luyanchao.iscsi-target:test -l

    9. 查看磁盘挂载情况:lsblk,输出如下(省略部分内容):

      sdc 8:32 0 1G 0 disk
      └─mpatha 253:2 0 1G 0 mpath
      sdd 8:48 0 1G 0 disk
      └─mpatha 253:2 0 1G 0 mpath
      sde 8:64 0 1G 0 disk
      └─mpatha 253:2 0 1G 0 mpath

      可以看到,由于iscsi-targer配置了三个网关,所以这里出现了三块磁盘,分别是sdcsddsde。多路径(multipathd)服务基于这三个磁盘做了mapper映射

    10. 格式化:mkfs.xfs /dev/mapper/mpatha

    11. 挂载:mount /dev/mapper/mpatha /mnt

    12. 验证挂载情况:df -h

    13. 验证读写性:echo "This is test content" >> /mnt/test && cat /mnt/test

    3.3 文件存储

    3.3.1 创建文件存储相关存储池

    ceph osd pool create cephfs_data 8

    ceph osd pool create cephfs_metadata 8

    注意:存储池名称不能变

    3.3.2 创建文件存储

    ceph fs new test cephfs_metadata cephfs_data,其中,test为文件存储名称

    3.3.3 查看秘钥

    cat /etc/ceph/ceph.client.admin.keyring,有如下类似输出

    [client.admin]
        key = AQDcqqlikZszHRAA37t+Esz49gjJpzCWgYiU0g==
        caps mds = "allow *"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"

    记住上面的用户名和key的值,后面会用到

    3.3.4 任选其他CentOS服务器或虚拟机

    3.3.4.1 挂载

    mount -t ceph 10.10.2.242:6789:/ /mnt -o name=admin,secret=AQDcqqlikZszHRAA37t+Esz49gjJpzCWgYiU0g==,其中secret的取值则为上面的key,name的取值责任上面的用户名

    3.3.4.2 验证读写性

    echo "This is test content" >> /mnt/test && cat /mnt/test

  • 相关阅读:
    "Java:comp/env/"讲解与JNDI
    table的td去边框
    jsp获取所有参数
    spring-mvc设置首页
    jdbc数据库连接方式
    文件上传
    SMBMS
    过滤器和监听器
    解决Maven的JDK版本问题
    MVC
  • 原文地址:https://www.cnblogs.com/LOVE0612/p/16379234.html
Copyright © 2020-2023  润新知