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

posted @ 2022-06-15 17:30  柚子苹果果  阅读(322)  评论(0编辑  收藏  举报