Rocky Linux 9 (EL9) 호스트 3대에 cephadm 으로 Ceph Tentacle 20.2.4 클러스터를 올린다. 첫 호스트에서 부트스트랩하고, 나머지 호스트를 붙인 뒤 OSD 를 만들고, RGW 와 CephFS 까지 올린다. 모든 데몬은 Podman 컨테이너로 돈다.
예시 호스트는 아래와 같다. 호스트명은 짧은 이름으로 서로 풀려야 한다.
| 호스트 | IP | 역할 | 데이터 디스크 |
|---|---|---|---|
| ceph01 | 10.0.0.11 | MON · MGR · OSD (부트스트랩) | /dev/sdb, /dev/sdc |
| ceph02 | 10.0.0.12 | MON · MGR · OSD | /dev/sdb, /dev/sdc |
| ceph03 | 10.0.0.13 | MON · OSD | /dev/sdb, /dev/sdc |
firewalld 의 ceph · ceph-mon 서비스를 열면 된다.hostnamectl set-hostname ceph01 # 호스트마다 자기 이름
cat >> /etc/hosts <<'EOT'
10.0.0.11 ceph01
10.0.0.12 ceph02
10.0.0.13 ceph03
EOT
dnf install -y podman lvm2 chrony python3
systemctl enable --now chronyd
chronyc tracking
firewall-cmd --permanent --add-service=ceph --add-service=ceph-mon
firewall-cmd --permanent --add-port=8443/tcp --add-port=9283/tcp --add-port=80/tcp
firewall-cmd --reload
OSD 로 쓸 디스크가 비어 있는지 본다. 이전에 쓰던 디스크면 wipefs -a /dev/sdb 로 지운다.
lsblk
wipefs -n /dev/sdb /dev/sdc
릴리스 번호에 맞는 cephadm 바이너리를 받는다. CEPH_RELEASE 는 현행 20.2.4 로 둔다.
CEPH_RELEASE=20.2.4
curl --silent --remote-name --location https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
chmod +x cephadm
./cephadm add-repo --release tentacle
./cephadm install
which cephadm # /usr/sbin/cephadm
ceph 명령을 컨테이너 밖에서 바로 쓰려면 ceph-common 도 설치한다.
cephadm install ceph-common
첫 MON 이 될 호스트의 IP 를 준다. 클러스터 네트워크를 따로 두면 --cluster-network 10.0.1.0/24 처럼 CIDR 로 지정한다.
cephadm bootstrap --mon-ip 10.0.0.11
부트스트랩이 하는 일은 아래와 같다.
/root/.ssh/authorized_keys 에 넣고 공개키를 /etc/ceph/ceph.pub 에 쓴다./etc/ceph/ceph.conf 와 client.admin 키링 /etc/ceph/ceph.client.admin.keyring 을 쓴다._admin 라벨을 붙인다.끝나면 대시보드 URL 과 admin 초기 비밀번호가 출력된다. 첫 로그인 때 바꿔야 한다.
Ceph Dashboard is now available at:
URL: https://ceph01:8443/
User: admin
Password: <초기 비밀번호>
확인한다.
ceph -v
ceph status
HEALTH_WARN 에 OSD count 0 < osd_pool_default_size 3 이 뜨는 것은 아직 OSD 가 없어서 정상이다.
부트스트랩 호스트의 공개키를 나머지 호스트에 넣고 클러스터에 등록한다. IP 는 명시하는 편이 안전하다.
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph02
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph03
ceph orch host add ceph02 10.0.0.12 --labels _admin
ceph orch host add ceph03 10.0.0.13
ceph orch host ls
_admin 라벨이 붙은 호스트에는 ceph.conf 와 admin 키링이 복사돼 그 호스트에서도 ceph 명령을 쓸 수 있다.
MON 은 기본으로 5개까지 자동 배치된다. 3대로 고정하려면 아래처럼 준다.
ceph orch apply mon --placement="3 ceph01 ceph02 ceph03"
ceph orch apply mgr --placement="2 ceph01 ceph02"
빈 디스크가 보이는지 확인한다.
ceph orch device ls
AVAILABLE 이 Yes 인 디스크를 전부 OSD 로 만든다. 뒤에 꽂는 디스크도 자동으로 잡힌다.
ceph orch apply osd --all-available-devices
디스크를 골라 넣으려면 한 개씩 지정한다.
ceph orch daemon add osd ceph01:/dev/sdb
자동 추가를 막으려면 --unmanaged=true 를 준다. OSD 를 뺄 때는 ceph orch osd rm <id> --zap, 디스크만 지울 때는 ceph orch device zap ceph01 /dev/sdb 다.
ceph osd tree
ceph status
OSD 가 올라오면 HEALTH_OK 가 된다.
foo 라는 서비스 이름으로 호스트 둘에 RGW 를 올린다. 포트를 주지 않으면 80 이다.
ceph orch apply rgw foo --placement="2 ceph01 ceph02" --port=8000
S3 사용자를 만든다. 출력의 access_key · secret_key 를 클라이언트에 쓴다.
radosgw-admin user create --uid=s3user --display-name="S3 User"
ceph fs volume create 가 풀과 MDS 를 함께 만든다.
ceph orch host label add ceph01 mds
ceph orch host label add ceph02 mds
ceph fs volume create cephfs --placement="label:mds"
ceph fs status cephfs
클라이언트 마운트는 커널 드라이버로 한다.
mount -t ceph admin@.cephfs=/ /mnt/cephfs -o secretfile=/etc/ceph/admin.secret
ceph -s
ceph orch ls
ceph orch ps
ceph df
ceph mgr services | jq .dashboard
RBD 로 블록 디바이스를 만들어 본다.
ceph osd pool create rbd
rbd pool init rbd
rbd create test --size 1024
rbd ls
대시보드 비밀번호를 바꾸려면 파일에 새 비밀번호를 적고 넘긴다.
echo -n '${PASSWORD}' > /tmp/pw
ceph dashboard ac-user-set-password admin -i /tmp/pw
rm /tmp/pw
같은 계열 안의 패치 갱신은 cephadm 이 데몬을 하나씩 굴려 올린다.
ceph orch upgrade start --ceph-version 20.2.5
ceph orch upgrade status