www.colben.cn/content/post/ceph-install.md
2021-11-14 14:32:08 +08:00

536 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "RockyLinux 安装 Ceph"
date: 2019-10-30T11:09:30+08:00
lastmod: 2021-09-29T12:25:00+08:00
keywords: []
tags: ["ceph"]
categories: ["storage"]
---
# 环境
操作系统 | 主机名 | 公用地址 | 集群地址 | 数据裸盘 | ceph 版本
---- | ---- | ---- | ---- | ---- | ----
Rocky Linux 8.4 | ceph41 | 10.0.4.41 | 192.168.4.41 | /dev/sdb, /dev/sdc | 15.2.14
Rocky Linux 8.4 | ceph42 | 10.0.4.42 | 192.168.4.42 | /dev/sdb, /dev/sdc | 15.2.14
Rocky Linux 8.4 | ceph43 | 10.0.4.43 | 192.168.4.43 | /dev/sdb, /dev/sdc | 15.2.14
# 关闭防火墙,配置 host
- 在全部节点上执行如下操作
- 关闭 firewalld 和 SELinux
```bash
systemctl stop firewalld
systemctl disable firewalld
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config # 重启操作系统生效
```
- 配置各节点主机名解析
```bash
echo "10.0.4.41 ceph41" >> /etc/hosts
echo "10.0.4.42 ceph42" >> /etc/hosts
echo "10.0.4.43 ceph43" >> /etc/hosts
```
# 配置 yum 源
- 在全部节点上执行如下操作
- 移动系统默认的 repo 文件到备份目录
```bash
cd /etc/yum.repos.d
mkdir bak
mv Rocky-*.repo bak/
```
- 创建新的系统 yum 源文件 /etc/yum.repos.d/rocky-nju.repo使用南京大学镜像站内容如下
```
[appstream]
name=Rocky Linux $releasever - AppStream
baseurl=https://mirrors.nju.edu.cn/$contentdir/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
[baseos]
name=Rocky Linux $releasever - BaseOS
baseurl=https://mirrors.nju.edu.cn/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
```
- 创建 epel yum 源文件 /etc/yum.repos.d/epel-tsinghua.repo使用清华大学镜像站内容如下
```
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/Everything/$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
```
- 下载 RPM-GPG-KEY-EPEL-8
```bash
cd /etc/pki/rpm-gpg/
curl -LO https://mirrors.nju.edu.cn/epel/RPM-GPG-KEY-EPEL-8
```
- 创建 ceph yum 源文件 /etc/yum.repos.d/ceph-tsinghua.repo使用清华大学镜像站内容如下
```
[ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-15.2.14/el8/$basearch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-15.2.14/el8/noarch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc
```
- 导入 release.asc
```bash
rpm --import 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc'
```
- 更新 yum 缓存
```bash
dnf clean all
dnf makecache
```
# 配置时间同步
- 在全部节点上执行如下操作
- 安装 chrony
```bash
dnf install chrony
```
- 如果内网没有时间服务器,可以在 ceph41 上启动一个时间同步服务,修改 /etc/chrony.conf
```
...
pool ntp.aliyun.com iburst
...
allow 10.0.4.0/24
...
local stratum 10
...
```
- 设置 ceph42 和 ceph43 从 ceph41 上同步时间,修改 /etc/chrony.conf
```
...
pool ceph41 iburst
...
```
- 在全部服务器上启动 chronyd 服务,并设置开机自动启动
```bash
systemctl start chronyd
systemctl enable chronyd
```
# 安装 ceph
- 在全部节点上执行如下操作
```bash
dnf install leveldb gdisk gperftools-libs python3-ceph-argparse nvme-cli
dnf install ceph
```
- 创建 ceph 配置文件 /etc/ceph/ceph.conf内容如下
```
[global]
fsid = aaaa0000-bbbb-1111-cccc-2222dddd3333
mon_initial_members = ceph41, ceph42, ceph43
mon_host = 10.0.4.41, 10.0.4.42, 10.0.4.43
public_network = 10.0.4.0/24
cluster_network = 192.168.4.0/24
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2 # 推荐使用官方默认的 3
osd_pool_default_min_size = 2
```
# 部署 mon
- 在 ceph41 上执行如下操作
- 这里创建了一堆傻逼密钥文件,没看懂啥意思,照搬官网
```bash
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 --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' --cap mgr 'allow r'
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
monmaptool --create --add ceph41 10.0.4.41 --add ceph42 10.0.4.42 --add ceph43 10.0.4.43 --fsid aaaa0000-bbbb-1111-cccc-2222dddd3333 /tmp/monmap
```
- 初始化 mon 数据目录
```bash
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph41
sudo -u ceph ceph-mon --mkfs -i ceph41 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
```
- 启动 mon 服务,并设置开机自动启动
```bash
systemctl start ceph-mon@ceph41
systemctl enable ceph-mon@ceph41
```
- 复制密钥文件到 ceph42 和 ceph43 上
```bash
scp /tmp/{ceph.mon.keyring,monmap} ceph42:/tmp/
scp /etc/ceph/ceph.client.admin.keyring ceph42:/etc/ceph/
scp /var/lib/ceph/bootstrap-osd/ceph.keyring ceph42:/var/lib/ceph/bootstrap-osd/
scp /tmp/{ceph.mon.keyring,monmap} ceph43:/tmp/
scp /etc/ceph/ceph.client.admin.keyring ceph43:/etc/ceph/
scp /var/lib/ceph/bootstrap-osd/ceph.keyring ceph43:/var/lib/ceph/bootstrap-osd/
```
- 在 **ceph42** 上执行如下操作
- 初始化 mon 数据目录
```bash
chown ceph:ceph /tmp/ceph.mon.keyring
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph42
sudo -u ceph ceph-mon --mkfs -i ceph42 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
```
- 启动 mon 服务,并设置开机自动启动
```bash
systemctl start ceph-mon@ceph42
systemctl enable ceph-mon@ceph42
```
- 在 **ceph43** 上执行如下操作
- 初始化 mon 数据目录
```bash
chown ceph:ceph /tmp/ceph.mon.keyring
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph43
sudo -u ceph ceph-mon --mkfs -i ceph43 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
```
- 启动 mon 服务,并设置开机自动启动
```bash
systemctl start ceph-mon@ceph43
systemctl enable ceph-mon@ceph43
```
- 在任一节点上执行如下操作
- mon 额外配置
```bash
# 开启 msgr2监听 tcp 3300 端口
ceph mon enable-msgr2
# 禁用 auth_allow_insecure_global_id_reclaim
ceph config set mon auth_allow_insecure_global_id_reclaim false
```
## 查看集群状态
- 在任一节点上执行如下操作
```bash
ceph -s
```
- 集群状态如下
```
cluster:
id: aaaa0000-bbbb-1111-cccc-2222dddd3333
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph41,ceph42,ceph43 (age ...)
mgr: no daemons active
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
```
# 部署 mgr
- 在 ceph41 上执行如下操作
- 又是创建密钥文件,没看懂啥意思,照搬官网
```bash
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-ceph41
ceph auth get-or-create mgr.ceph41 mon 'allow profile mgr' osd 'allow *' mds 'allow *' -o /var/lib/ceph/mgr/ceph-ceph41/keyring
chown ceph.ceph /var/lib/ceph/mgr/ceph-ceph41/keyring
```
- 启动 mgr 服务,并配置开机自动启动
```bash
systemctl start ceph-mgr@ceph41
systemctl enable ceph-mgr@ceph41
```
- 在 ceph42 上执行如下操作
- 创建密钥文件
```bash
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-ceph42
ceph auth get-or-create mgr.ceph42 mon 'allow profile mgr' osd 'allow *' mds 'allow *' -o /var/lib/ceph/mgr/ceph-ceph42/keyring
chown ceph.ceph /var/lib/ceph/mgr/ceph-ceph42/keyring
```
- 启动 mgr 服务,并配置开机自动启动
```bash
systemctl start ceph-mgr@ceph42
systemctl enable ceph-mgr@ceph42
```
- 在 ceph43 上执行如下操作
- 创建密钥文件
```bash
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-ceph43
ceph auth get-or-create mgr.ceph43 mon 'allow profile mgr' osd 'allow *' mds 'allow *' -o /var/lib/ceph/mgr/ceph-ceph43/keyring
chown ceph.ceph /var/lib/ceph/mgr/ceph-ceph43/keyring
```
- 启动 mgr 服务,并配置开机自动启动
```bash
systemctl start ceph-mgr@ceph43
systemctl enable ceph-mgr@ceph43
```
## 查看集群状态
- 在任一节点上执行如下操作
```bash
ceph -s
```
- 集群状态如下
```
cluster:
id: aaaa0000-bbbb-1111-cccc-2222dddd3333
health: HEALTH_WARN
OSD count 0 < osd_pool_default_size 2
services:
mon: 3 daemons, quorum ceph41,ceph42,ceph43 (age ...)
mgr: ceph41(active, since ...), standbys: ceph42, ceph43
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
```
# 部署 osd
## 逻辑卷 osd
- 操作简单,推荐
- 直接创建并启动逻辑卷 osd
```bash
ceph-volume lvm create --bluestore --data /dev/sdb
ceph-volume lvm create --bluestore --data /dev/sdc
```
- 上一步执行成功后,每个 ceph-osd 服务都已启动,且开机自动启动
## 裸设备 osd
- 操作麻烦,不推荐
- 在全部节点上执行如下操作
- 准备 osd
```bash
ceph-volume raw prepare --bluestore --data /dev/sdb
ceph-volume raw prepare --bluestore --data /dev/sdc
```
- 查看 osd 的 id
```bash
ceph-volume raw list
```
- 激活 osd**使用裸设备创建 osd 时不支持 systemd需要单独配置开机自动启动**
```bash
ceph-volume raw activate --device /dev/sdb --no-systemd
ceph-volume raw activate --device /dev/sdc --no-systemd
```
- 在 ceph41 上启动 osd 服务
```bash
systemctl start ceph-osd@0
systemctl start ceph-osd@1
```
- 配置开机自动启动
```bash
chmod 0755 /etc/rc.d/rc.local
echo 'ceph-volume raw activate --device /dev/sdb --no-systemd
ceph-volume raw activate --device /dev/sdc --no-systemd
systemctl start ceph-osd@0
systemctl start ceph-osd@1
' >> /etc/rc.d/rc.local
```
- 在 ceph42 上启动 osd 服务
```bash
systemctl start ceph-osd@2
systemctl start ceph-osd@3
```
- 配置开机自动启动
```bash
chmod 0755 /etc/rc.d/rc.local
echo 'ceph-volume raw activate --device /dev/sdb --no-systemd
ceph-volume raw activate --device /dev/sdc --no-systemd
systemctl start ceph-osd@2
systemctl start ceph-osd@3
' >> /etc/rc.d/rc.local
```
- 在 ceph43 上启动 osd 服务
```bash
systemctl start ceph-osd@4
systemctl start ceph-osd@5
```
- 配置开机自动启动
```bash
chmod 0755 /etc/rc.d/rc.local
echo 'ceph-volume raw activate --device /dev/sdb --no-systemd
ceph-volume raw activate --device /dev/sdc --no-systemd
systemctl start ceph-osd@4
systemctl start ceph-osd@5
' >> /etc/rc.d/rc.local
```
## 查看集群状态
- 在任一节点执行如下操作
```bash
ceph -s
```
- 集群状态如下
```
cluster:
id: aaaa0000-bbbb-1111-cccc-2222dddd3333
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph41,ceph42,ceph43 (age ...)
mgr: ceph41(active, since ...), standbys: ceph42, ceph43
osd: 6 osds: 6 up (since ...), 6 in (since ...)
data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: ... GiB used, ... GiB / ... GiB avail
pgs: 1 active+clean
```
# 部署 mds
- 只有 cephfs 会用到 mds
- 在 ceph41 上执行如下操作
- 创建密钥文件 ...... 照搬官网
```bash
sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-ceph41
sudo -u ceph ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-ceph41/keyring --gen-key -n mds.ceph41
ceph auth add mds.ceph41 osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-ceph41/keyring
```
- 启动 mds 服务,并配置开机自动启动
```bash
systemctl start ceph-mds@ceph41
systemctl enable ceph-mds@ceph41
```
- 在 ceph42 上执行如下操作
- 创建密钥文件 ...... 照搬官网
```bash
sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-ceph42
sudo -u ceph ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-ceph42/keyring --gen-key -n mds.ceph42
ceph auth add mds.ceph42 osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-ceph42/keyring
```
- 启动 mds 服务,并配置开机自动启动
```bash
systemctl start ceph-mds@ceph42
systemctl enable ceph-mds@ceph42
```
- 在 ceph43 上执行如下操作
- 创建密钥文件 ...... 照搬官网
```bash
sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-ceph43
sudo -u ceph ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-ceph43/keyring --gen-key -n mds.ceph43
ceph auth add mds.ceph43 osd "allow rwx" mds "allow *" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-ceph43/keyring
```
- 启动 mds 服务,并配置开机自动启动
```bash
systemctl start ceph-mds@ceph43
systemctl enable ceph-mds@ceph43
```
## 查看集群状态
- 在任一节点上执行如下操作
```bash
ceph -s
```
- 集群状态如下
```
cluster:
id: aaaa0000-bbbb-1111-cccc-2222dddd3333
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph41,ceph42,ceph43 (age ...)
mgr: ceph41(active, since ...), standbys: ceph42, ceph43
mds: cephfs:1 {0=ceph43=up:active} 2 up:standby
osd: 3 osds: 3 up, 3 in
data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: ... GiB used, ... GiB / ... GiB avail
pgs: 1 active+clean
```
# 简单使用
## rbd
- 创建 rbd 池
```bash
ceph osd pool create rbd 128 128
ceph osd pool application enable rbd rbd
```
## cephfs
- 创建 cephfs 池
```bash
# 创建 cephfs 元数据池pg 不用太大,设置 3 个副本
ceph osd pool create cephfs_metadata 8 8
ceph osd pool set cephfs_metadata size 3
# 创建 cephfs 数据池,根据数据量配置相应 pg
ceph osd pool create cephfs_data 128 128
```
- 创建 cephfs 文件系统
```bash
ceph fs new cephfs cephfs_metadata cephfs_data
```
- 查看 mds 状态
```bash
ceph mds stat
```
- 在任一 ceph 节点服务器上查看 admin 用户的 key
```bash
cat /etc/ceph/ceph.client.admin.keyring | grep key | awk '{print $2}'
```
- 在其他服务器上挂载 cephfs
```bash
mount -t ceph 10.0.4.41:6789,10.0.4.42:6789,10.0.4.43:6789:/ /mnt -o name=admin,secret={admin 的 key}
```