3.5. Red Hat Ceph Storage 배포
3.5.1. 노드 사전 배포 단계
Red Hat Ceph Storage Ceph 클러스터를 설치하기 전에 다음 단계를 수행하여 필요한 모든 요구 사항을 충족해야 합니다.
모든 노드를 Red Hat Network 또는 Red Hat Satellite에 등록하고 유효한 풀에 등록합니다.
subscription-manager register subscription-manager subscribe --pool=8a8XXXXXX9e0
다음 리포지토리에 대해 Ceph 클러스터의 모든 노드에 대해 액세스를 활성화합니다.
-
rhel-8-for-x86_64-baseos-rpms
rhel-8-for-x86_64-appstream-rpms
subscription-manager repos --disable="*" --enable="rhel-8-for-x86_64-baseos-rpms" --enable="rhel-8-for-x86_64-appstream-rpms"
-
운영 체제 RPM을 최신 버전으로 업데이트하고 필요한 경우 재부팅합니다.
dnf update -y reboot
클러스터에서 부트스트랩 노드가 될 노드를 선택합니다.
ceph1
은 이 예제의 부트스트랩 노드입니다.부트스트랩 노드
ceph1
에서만ansible-2.9-for-rhel-8-x86_64-rpms
및rhceph-5-tools-for-rhel-8-x86_64-rpms
리포지토리를 활성화합니다.subscription-manager repos --enable="ansible-2.9-for-rhel-8-x86_64-rpms" --enable="rhceph-5-tools-for-rhel-8-x86_64-rpms"
모든 호스트에서 베어/짧은 호스트 이름을 사용하여 호스트 이름을 구성합니다.
hostnamectl set-hostname <short_name>
cephadm을 사용하여 Red Hat Ceph Storage를 배포할 호스트 이름 구성을 확인합니다.
$ hostname
출력 예:
ceph1
/etc/hosts 파일을 수정하고 DNS 도메인 이름으로 DOMAIN 변수를 설정하여 127.0.0.1 IP에 fqdn 항목을 추가합니다.
DOMAIN="example.domain.com" cat <<EOF >/etc/hosts 127.0.0.1 $(hostname).${DOMAIN} $(hostname) localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 $(hostname).${DOMAIN} $(hostname) localhost6 localhost6.localdomain6 EOF
hostname -f
옵션을 사용하여fqdn
;으로 긴 호스트 이름을 확인합니다.$ hostname -f
출력 예:
ceph1.example.domain.com
참고: 이러한 변경 사항이 필요한 이유에 대해 자세히 알아보려면 정규화된 도메인 이름과 베어 호스트 이름을 참조하십시오.
부트 스트랩 노드에서 다음 단계를 실행합니다. 이 예에서 부트스트랩 노드는
ceph1
입니다.cephadm-ansible
RPM 패키지를 설치합니다.$ sudo dnf install -y cephadm-ansible
중요ansible Playbook을 실행하려면 Red Hat Ceph Storage 클러스터에 구성된 모든 노드에 대해
ssh
암호 없는 액세스 권한이 있어야 합니다. 구성된 사용자(예:deployment-user
)에 암호 없이sudo
명령을 호출할 수 있는 루트 권한이 있는지 확인합니다.사용자 지정 키를 사용하려면 선택한 사용자(예:
deployment-user
) ssh 구성 파일을 구성하여 ssh를 통해 노드 연결에 사용할 id/key를 지정합니다.cat <<EOF > ~/.ssh/config Host ceph* User deployment-user IdentityFile ~/.ssh/ceph.pem EOF
ansible 인벤토리 빌드
cat <<EOF > /usr/share/cephadm-ansible/inventory ceph1 ceph2 ceph3 ceph4 ceph5 ceph6 ceph7 [admin] ceph1 ceph4 EOF
참고여기에서 두 개의 다른 데이터 센터에 속하는 Hosts(
Ceph1
및Ceph4
)는 인벤토리 파일에서 [admin] 그룹의 일부로 구성되며cephadm
에서_admin
으로 태그됩니다. 이러한 각 관리 노드는 부트스트랩 프로세스 중에 admin ceph 키링을 수신하므로 한 데이터 센터가 다운되면 다른 사용 가능한 관리 노드를 사용하여 확인할 수 있습니다.ansible
이 pre-flight 플레이북을 실행하기 전에 ping 모듈을 사용하여 모든 노드에 액세스할 수 있는지 확인합니다.$ ansible -i /usr/share/cephadm-ansible/inventory -m ping all -b
출력 예:
ceph6 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph4 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph3 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph5 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph7 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" }
-
/usr/share/cephadm-ansible
디렉터리로 이동합니다. 상대 파일 경로를 사용하여 ansible-playbook을 실행합니다.
$ ansible-playbook -i /usr/share/cephadm-ansible/inventory /usr/share/cephadm-ansible/cephadm-preflight.yml --extra-vars "ceph_origin=rhcs"
사전 플레이북 Ansible 플레이북은 RHCS
dnf
리포지토리를 구성하고 부트스트랩을 위해 스토리지 클러스터를 준비합니다. podman, lvm2, chronyd 및 cephadm도 설치합니다.cephadm-ansible
및cephadm-preflight.yml
의 기본 위치는/usr/share/cephadm-ansible
입니다. 자세한 내용은 Running the preflight Playbook을참조하십시오.
3.5.2. Cephadm을 사용한 클러스터 부트스트랩 및 서비스 배포
cephadm 유틸리티는 cephadm bootstrap 명령이 실행되는 로컬 노드에 새로운 Red Hat Ceph Storage 클러스터에 대한 단일 Ceph Monitor 데몬과 Ceph Manager 데몬을 설치하고 시작합니다.
이 가이드에서는 클러스터를 부트스트랩하고 클러스터 사양 yaml 파일을 사용하여 한 단계에서 필요한 모든 Red Hat Ceph Storage 서비스를 배포합니다.
배포 중에 문제가 발견되면 배포를 두 단계로 분할하여 오류 문제를 더 쉽게 해결할 수 있습니다.
- 부트스트랩
- 서비스 배포
부트스트랩 프로세스에 대한 자세한 내용은 새 스토리지 클러스터 부팅을 참조하십시오.
절차
다음과 같이 json 파일을 생성하여 컨테이너 레지스트리에 대해 인증합니다.
$ cat <<EOF > /root/registry.json { "url":"registry.redhat.io", "username":"User", "password":"Pass" } EOF
Red Hat Ceph Storage 클러스터에 노드를 추가하고 다음 표 3.1을 실행해야 하는 특정 라벨을 설정하는
cluster-spec.yaml
을 생성합니다.cat <<EOF > /root/cluster-spec.yaml service_type: host addr: 10.0.40.78 ## <XXX.XXX.XXX.XXX> hostname: ceph1 ## <ceph-hostname-1> location: root: default datacenter: DC1 labels: - osd - mon - mgr --- service_type: host addr: 10.0.40.35 hostname: ceph2 location: datacenter: DC1 labels: - osd - mon --- service_type: host addr: 10.0.40.24 hostname: ceph3 location: datacenter: DC1 labels: - osd - mds - rgw --- service_type: host addr: 10.0.40.185 hostname: ceph4 location: root: default datacenter: DC2 labels: - osd - mon - mgr --- service_type: host addr: 10.0.40.88 hostname: ceph5 location: datacenter: DC2 labels: - osd - mon --- service_type: host addr: 10.0.40.66 hostname: ceph6 location: datacenter: DC2 labels: - osd - mds - rgw --- service_type: host addr: 10.0.40.221 hostname: ceph7 labels: - mon --- service_type: mon placement: label: "mon" --- service_type: mds service_id: cephfs placement: label: "mds" --- service_type: mgr service_name: mgr placement: label: "mgr" --- service_type: osd service_id: all-available-devices service_name: osd.all-available-devices placement: label: "osd" spec: data_devices: all: true --- service_type: rgw service_id: objectgw service_name: rgw.objectgw placement: count: 2 label: "rgw" spec: rgw_frontend_port: 8080 EOF
부트스트랩 노드에서 구성된 Red Hat Ceph Storage 공용 네트워크를 사용하여 NIC의 IP를 검색합니다. ceph 공용 네트워크에 정의된 서브넷으로
10.0.40.0
을 대체한 후 다음 명령을 실행합니다.$ ip a | grep 10.0.40
출력 예:
10.0.40.78
클러스터의 초기 모니터 노드가 될 노드에서
Cephadm
bootstrap 명령을 root 사용자로 실행합니다.IP_ADDRESS
옵션은cephadm 부트스트랩
명령을 실행하는 데 사용하는 노드의 IP 주소입니다.참고암호 없는 SSH 액세스를 위해
root
대신 다른 사용자를 구성한 경우cepadm bootstrap
명령과 함께--ssh-user=
플래그를 사용합니다.default/id_rsa ssh 키 이름을 사용하는 경우
cephadm
명령과 함께--ssh-private-key
및--ssh-public-key
옵션을 사용합니다.$ cephadm bootstrap --ssh-user=deployment-user --mon-ip 10.0.40.78 --apply-spec /root/cluster-spec.yaml --registry-json /root/registry.json
중요로컬 노드에서 FQDN(정규화된 도메인 이름)을 사용하는 경우 명령줄에서
--allow-fqdn-hostname
옵션을cephadm bootstrap
에 추가합니다.부트스트랩이 완료되면 이전 cephadm 부트스트랩 명령의 다음 출력이 표시됩니다.
You can access the Ceph CLI with: sudo /usr/sbin/cephadm shell --fsid dd77f050-9afe-11ec-a56c-029f8148ea14 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring Please consider enabling telemetry to help improve Ceph: ceph telemetry on For more information see: https://docs.ceph.com/docs/pacific/mgr/telemetry/
ceph1에서 Ceph CLI 클라이언트를 사용하여 Red Hat Ceph Storage 클러스터 배포 상태를 확인합니다.
$ ceph -s
출력 예:
cluster: id: 3a801754-e01f-11ec-b7ab-005056838602 health: HEALTH_OK services: mon: 5 daemons, quorum ceph1,ceph2,ceph4,ceph5,ceph7 (age 4m) mgr: ceph1.khuuot(active, since 5m), standbys: ceph4.zotfsp osd: 12 osds: 12 up (since 3m), 12 in (since 4m) rgw: 2 daemons active (2 hosts, 1 zones) data: pools: 5 pools, 107 pgs objects: 191 objects, 5.3 KiB usage: 105 MiB used, 600 GiB / 600 GiB avail 105 active+clean
참고모든 서비스를 시작하는 데 몇 분이 걸릴 수 있습니다.
osds가 구성되어 있지 않은 경우 글로벌 복구 이벤트를 가져오는 것이 일반적입니다.
ceph orch ps
및ceph orch ls
를 사용하여 서비스 상태를 추가로 확인할 수 있습니다.모든 노드가
cephadm
클러스터에 속하는지 확인합니다.$ ceph orch host ls
출력 예:
HOST ADDR LABELS STATUS ceph1 10.0.40.78 _admin osd mon mgr ceph2 10.0.40.35 osd mon ceph3 10.0.40.24 osd mds rgw ceph4 10.0.40.185 osd mon mgr ceph5 10.0.40.88 osd mon ceph6 10.0.40.66 osd mds rgw ceph7 10.0.40.221 mon
참고ceph1
이cephadm-ansible
인벤토리에서 [admin] 그룹의 일부로 구성되어 있으므로 호스트에서 직접 Ceph 명령을 실행할 수 있습니다.cephadm 부트스트랩
프로세스 중에 Ceph 관리자 키가 호스트에 복사되었습니다.데이터센터에서 Ceph 모니터 서비스의 현재 배치를 확인합니다.
$ ceph orch ps | grep mon | awk '{print $1 " " $2}'
출력 예:
mon.ceph1 ceph1 mon.ceph2 ceph2 mon.ceph4 ceph4 mon.ceph5 ceph5 mon.ceph7 ceph7
데이터센터에서 Ceph 관리자 서비스의 현재 배치를 확인합니다.
$ ceph orch ps | grep mgr | awk '{print $1 " " $2}'
출력 예:
mgr.ceph2.ycgwyz ceph2 mgr.ceph5.kremtt ceph5
ceph osd crush 맵 레이아웃을 확인하여 각 호스트에 하나의 OSD가 구성되어 있고 상태가
UP
인지 확인합니다. 또한 각 노드가 표 3.1에 지정된 대로 올바른 데이터 센터 버킷에 있는지 두 번 확인하십시오.$ ceph osd tree
출력 예:
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.87900 root default -16 0.43950 datacenter DC1 -11 0.14650 host ceph1 2 ssd 0.14650 osd.2 up 1.00000 1.00000 -3 0.14650 host ceph2 3 ssd 0.14650 osd.3 up 1.00000 1.00000 -13 0.14650 host ceph3 4 ssd 0.14650 osd.4 up 1.00000 1.00000 -17 0.43950 datacenter DC2 -5 0.14650 host ceph4 0 ssd 0.14650 osd.0 up 1.00000 1.00000 -9 0.14650 host ceph5 1 ssd 0.14650 osd.1 up 1.00000 1.00000 -7 0.14650 host ceph6 5 ssd 0.14650 osd.5 up 1.00000 1.00000
새 RDB 블록 풀을 생성하고 활성화합니다.
$ ceph osd pool create rbdpool 32 32 $ ceph osd pool application enable rbdpool rbd
참고명령 끝에 있는 32개의 숫자는 이 풀에 할당된 PG 수입니다. PG의 수는 클러스터의 OSD 수, 풀 사용 예상 %와 같은 몇 가지 요인에 따라 다를 수 있습니다. 다음 계산기를 사용하여 풀 계산기당 PG(배치 그룹)당 PG(배치 그룹) 수를 확인할 수 있습니다.
RBD 풀이 생성되었는지 확인합니다.
$ ceph osd lspools | grep rbdpool
출력 예:
3 rbdpool
MDS 서비스가 활성화되어 있고 각 데이터 센터에 하나의 서비스가 있는지 확인합니다.
$ ceph orch ps | grep mds
출력 예:
mds.cephfs.ceph3.cjpbqo ceph3 running (17m) 117s ago 17m 16.1M - 16.2.9 mds.cephfs.ceph6.lqmgqt ceph6 running (17m) 117s ago 17m 16.1M - 16.2.9
CephFS 볼륨을 생성합니다.
$ ceph fs volume create cephfs
참고ceph fs volume create
명령은 필요한 데이터 및 메타 CephFS 풀도 생성합니다. 자세한 내용은 Ceph 파일 시스템 구성 및 마운트 를 참조하십시오.Ceph
상태를 확인하여 MDS 데몬이 어떻게 배포되었는지 확인합니다. 상태가 활성화되었는지 확인합니다.ceph6
이 이 파일 시스템의 기본 MDS이고ceph3
가 보조 MDS인지 확인합니다.$ ceph fs status
출력 예:
cephfs - 0 clients ====== RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS 0 active cephfs.ceph6.ggjywj Reqs: 0 /s 10 13 12 0 POOL TYPE USED AVAIL cephfs.cephfs.meta metadata 96.0k 284G cephfs.cephfs.data data 0 284G STANDBY MDS cephfs.ceph3.ogcqkl
RGW 서비스가 활성화되어 있는지 확인합니다.
$ ceph orch ps | grep rgw
출력 예:
rgw.objectgw.ceph3.kkmxgb ceph3 *:8080 running (7m) 3m ago 7m 52.7M - 16.2.9 rgw.objectgw.ceph6.xmnpah ceph6 *:8080 running (7m) 3m ago 7m 53.3M - 16.2.9
3.5.3. Red Hat Ceph Storage 확장 모드 구성
cephadm
을 사용하여 Red Hat Ceph Storage 클러스터가 완전히 배포되면 다음 절차를 사용하여 확장 클러스터 모드를 구성합니다. 새로운 스트레치 모드는 2 사이트 케이스를 처리하도록 설계되었습니다.
절차
ceph mon dump 명령을 사용하여 모니터에서 사용하는 현재 선택 전략을 확인합니다. 기본적으로 ceph 클러스터에서 연결은 클래식으로 설정됩니다.
ceph mon dump | grep election_strategy
출력 예:
dumped monmap epoch 9 election_strategy: 1
모니터 선택을 connectivity로 변경합니다.
ceph mon set election_strategy connectivity
이전 ceph mon dump 명령을 다시 실행하여 election_strategy 값을 확인합니다.
$ ceph mon dump | grep election_strategy
출력 예:
dumped monmap epoch 10 election_strategy: 3
다양한 선택 전략에 대한 자세한 내용은 모니터 선택 전략 구성을 참조하십시오.
모든 Ceph 모니터의 위치를 설정합니다.
ceph mon set_location ceph1 datacenter=DC1 ceph mon set_location ceph2 datacenter=DC1 ceph mon set_location ceph4 datacenter=DC2 ceph mon set_location ceph5 datacenter=DC2 ceph mon set_location ceph7 datacenter=DC3
각 모니터에 적절한 위치가 있는지 확인합니다.
$ ceph mon dump
출력 예:
epoch 17 fsid dd77f050-9afe-11ec-a56c-029f8148ea14 last_changed 2022-03-04T07:17:26.913330+0000 created 2022-03-03T14:33:22.957190+0000 min_mon_release 16 (pacific) election_strategy: 3 0: [v2:10.0.143.78:3300/0,v1:10.0.143.78:6789/0] mon.ceph1; crush_location {datacenter=DC1} 1: [v2:10.0.155.185:3300/0,v1:10.0.155.185:6789/0] mon.ceph4; crush_location {datacenter=DC2} 2: [v2:10.0.139.88:3300/0,v1:10.0.139.88:6789/0] mon.ceph5; crush_location {datacenter=DC2} 3: [v2:10.0.150.221:3300/0,v1:10.0.150.221:6789/0] mon.ceph7; crush_location {datacenter=DC3} 4: [v2:10.0.155.35:3300/0,v1:10.0.155.35:6789/0] mon.ceph2; crush_location {datacenter=DC1}
crushtool
명령을 사용하기 위해ceph-base
RPM 패키지를 설치하여 이 OSD crush 토폴로지를 사용하는ECDHE 규칙을 생성합니다.$ dnf -y install ceph-base
ECDHE 규칙 세트에 대한 자세한 내용은 CephECDHE 규칙 세트를 참조하십시오.
클러스터에서 컴파일된ECDHE 맵을 가져옵니다.
$ ceph osd getcrushmap > /etc/ceph/crushmap.bin
이를 편집하기 위해ECDHE 맵을 컴파일하고 텍스트 파일로 변환합니다.
$ crushtool -d /etc/ceph/crushmap.bin -o /etc/ceph/crushmap.txt
파일 끝에 텍스트 파일
/etc/ceph/crushmap.txt
를 편집하여 다음 규칙을ECDHE 맵에 추가합니다.$ vim /etc/ceph/crushmap.txt
rule stretch_rule { id 1 type replicated min_size 1 max_size 10 step take default step choose firstn 0 type datacenter step chooseleaf firstn 2 type host step emit } # end crush map
이 예는 OpenShift Container Platform 클러스터의 활성 애플리케이션에 적용됩니다.
참고규칙 ID
는
고유해야 합니다. 이 예제에서는 id 0인 하나 이상의 crush 규칙만 있으므로 1을 사용합니다. 배포에 더 많은 규칙이 생성되면 다음 무료 ID를 사용하십시오.선언 된 rule에는 다음 정보가 포함되어 있습니다.
규칙 이름
- 설명: 규칙을 식별하는 고유한 전체 이름입니다.
-
값:
stretch_rule
id
- 설명: 규칙을 식별하는 고유한 정수 번호입니다.
-
값:
1
type
- 설명: 스토리지 드라이브 복제 또는 dissure-coded에 대한 규칙을 설명합니다.
-
value:
replicated
min_size
- 설명: 풀이 이 수보다 복제본 수를 줄이는 경우ECDHE은 이 규칙을 선택하지 않습니다.
- 값: 1
max_size
- 설명: 풀이 이 수보다 더 많은 복제본을 만드는 경우ECDHE은 이 규칙을 선택하지 않습니다.
- 값: 10
Step take default
-
Description:
default
라는 루트 버킷을 가져와서 트리를 종료하기 시작합니다.
-
Description:
Step choose firstn 0 type datacenter
- 설명: 데이터 센터 버킷을 선택하고 하위 트리로 이동합니다.
Step chooseleaf firstn 2 유형 host
- 설명: 지정된 유형의 버킷 수를 선택합니다. 이 경우 이전 수준에서 입력한 데이터 센터에 있는 두 개의 서로 다른 호스트입니다.
출력 단계
- description: 현재 값을 출력하고 스택을 제거합니다. 일반적으로 규칙 마지막에 사용되지만 동일한 규칙에서 다른 플레이버에서 선택하는 데 사용할 수도 있습니다.
/etc/ceph/crushmap.txt
파일에서 새ECDHE 맵을 컴파일하고/etc/ceph/crushmap2.bin
이라는 바이너리 파일로 변환합니다.$ crushtool -c /etc/ceph/crushmap.txt -o /etc/ceph/crushmap2.bin
클러스터로 다시 생성한 새 crushmap을 삽입합니다.
$ ceph osd setcrushmap -i /etc/ceph/crushmap2.bin
출력 예:
17
참고숫자 17은 카운터이며 분쇄 맵에 대한 변경 사항에 따라 증가합니다(18,19).
생성된 확장 규칙을 이제 사용할 수 있는지 확인합니다.
ceph osd crush rule ls
출력 예:
replicated_rule stretch_rule
확장 클러스터 모드를 활성화합니다.
$ ceph mon enable_stretch_mode ceph7 stretch_rule datacenter
이 예에서
ceph7
은 중재자 노드이며,stretch_rule
은 이전 단계에서 생성한 crush 규칙이며데이터 센터는
버킷 분할입니다.모든 풀이 Ceph 클러스터에서 생성된
stretch_rule
ECDHE 규칙을 사용하고 있는지 확인합니다.$ for pool in $(rados lspools);do echo -n "Pool: ${pool}; ";ceph osd pool get ${pool} crush_rule;done
출력 예:
Pool: device_health_metrics; crush_rule: stretch_rule Pool: cephfs.cephfs.meta; crush_rule: stretch_rule Pool: cephfs.cephfs.data; crush_rule: stretch_rule Pool: .rgw.root; crush_rule: stretch_rule Pool: default.rgw.log; crush_rule: stretch_rule Pool: default.rgw.control; crush_rule: stretch_rule Pool: default.rgw.meta; crush_rule: stretch_rule Pool: rbdpool; crush_rule: stretch_rule
이는 중재 모드가 있는 Red Hat Ceph Storage 확장 클러스터를 사용할 수 있음을 나타냅니다.