B.2. Red Hat Ceph Storage 수동 설치
Red Hat은 수동으로 배포된 클러스터를 지원하거나 테스트하지 않습니다. 따라서 Red Hat은 Red Hat Ceph Storage 4를 사용하여 새 클러스터를 배포하는 데 Ansible을 사용하는 것이 좋습니다. 자세한 내용은 5장. Ansible을 사용하여 Red Hat Ceph Storage 설치 을 참조하십시오.
YUM과 같은 명령줄 유틸리티를 사용하여 수동으로 배포된 클러스터를 업그레이드할 수 있지만 Red Hat은 이 방법을 지원하거나 테스트하지 않습니다.
모든 Ceph 클러스터에는 모니터가 한 개 이상 필요하며 클러스터에 저장된 오브젝트의 복사본만큼 적어도 많은 OSD가 필요합니다. Red Hat은 프로덕션 환경에 세 개의 모니터를 사용하고 최소 3개의 OSD(오브젝트 스토리지 장치)를 사용하는 것이 좋습니다.
초기 모니터를 부트 스트랩하는 것은 Ceph 스토리지 클러스터를 배포의 첫 번째 단계입니다. Ceph 모니터 배포는 다음과 같은 전체 클러스터에 대한 중요한 기준도 설정합니다.
- 풀의 복제본 수
- OSD당 배치 그룹 수
- 하트비트 간격
- 모든 인증 요구 사항
이러한 값은 기본적으로 설정되므로 프로덕션에 맞게 클러스터를 설정할 때 이를 아는 것이 유용합니다.
명령줄 인터페이스를 사용하여 Ceph 스토리지 클러스터를 설치하려면 다음 단계를 수행해야 합니다.
- 초기 모니터 노드부트스트랩
- OSD(오브젝트 스토리지 장치) 노드추가
Bootstrapping 모니터링
모니터를 부트 스트랩하려면 Ceph 스토리지 클러스터를 확장하여 다음과 같은 데이터가 필요합니다.
- 고유 식별자
-
파일 시스템 식별자(
fsid)는 클러스터의 고유 식별자입니다.fsid는 Ceph 스토리지 클러스터가 Ceph 파일 시스템에 기본적으로 사용될 때 원래 사용되었습니다. 이제 Ceph에서 기본 인터페이스, 블록 장치 및 오브젝트 스토리지 게이트웨이 인터페이스도 지원하므로fsid는 약간의 잘못된 사용자입니다. - 모니터 이름
-
클러스터 내의 각 모니터 인스턴스에는 고유한 이름이 있습니다. 일반적으로 Ceph Monitor 이름은 노드 이름입니다. Red Hat은 노드당 하나의 Ceph Monitor를 권장하며 Ceph Monitor 데몬을 사용하여 Ceph OSD 데몬을 함께 배치하지 않습니다. 짧은 노드 이름을 검색하려면
hostname -s명령을 사용합니다. - 모니터 맵
초기 모니터를 부트 스트랩하려면 모니터 맵을 생성해야 합니다. 모니터 맵에는 다음이 필요합니다.
-
파일 시스템 식별자(
fsid) -
클러스터 이름 또는
ceph의 기본 클러스터 이름이 사용됩니다. - 호스트 이름과 해당 IP 주소가 한 개 이상 있어야 합니다.
-
파일 시스템 식별자(
- 키 삭제 모니터링
- 모니터는 시크릿 키를 사용하여 서로 통신합니다. 모니터 보안 키를 사용하여 인증 키를 생성하고 초기 모니터를 부트스트래핑할 때 제공해야 합니다.
- 관리자 키링
-
ceph명령줄 인터페이스 유틸리티를 사용하려면client.admin사용자를 생성하고 해당 인증 키를 생성합니다. 또한 Monitor 인증 키에client.admin사용자를 추가해야 합니다.
관련 요구 사항은 Ceph 구성 파일을 생성하는 것을 의미하지 않습니다. 그러나 Red Hat은 Ceph 구성 파일을 생성하고 fsid, mon initial members 및 mon 호스트 설정으로 채우는 것이 좋습니다.
런타임 시 모든 모니터 설정을 가져오고 설정할 수 있습니다. 그러나 Ceph 구성 파일에는 기본값을 재정의하는 설정만 포함될 수 있습니다. Ceph 구성 파일에 설정을 추가하면 이러한 설정이 기본 설정을 덮어씁니다. Ceph 구성 파일에서 이러한 설정을 유지 관리하면 클러스터를 보다 쉽게 유지 관리할 수 있습니다.
초기 모니터를 부트스트랩하려면 다음 단계를 수행합니다.
Red Hat Ceph Storage 4 Monitor 리포지토리를 활성화합니다.
[root@monitor ~]# subscription-manager repos --enable=rhceph-4-mon-for-rhel-8-x86_64-rpms초기 모니터 노드에서
ceph-mon패키지를root로 설치합니다.# yum install ceph-mon루트로서/etc/ceph/디렉터리에 Ceph 구성 파일을 만듭니다.# touch /etc/ceph/ceph.conf루트로서 클러스터의 고유 식별자를 생성하고 Ceph 구성 파일의[global]섹션에 고유 식별자를 추가합니다.# echo "[global]" > /etc/ceph/ceph.conf # echo "fsid = `uuidgen`" >> /etc/ceph/ceph.conf현재 Ceph 구성 파일을 확인합니다.
$ cat /etc/ceph/ceph.conf [global] fsid = a7f64266-0894-4f1e-a635-d0aeaca0e993루트로서 초기 모니터를 Ceph 구성 파일에 추가합니다.구문
# echo "mon initial members = <monitor_host_name>[,<monitor_host_name>]" >> /etc/ceph/ceph.conf예제
# echo "mon initial members = node1" >> /etc/ceph/ceph.confroot로 초기 모니터의 IP 주소를 Ceph 구성 파일에 추가합니다.구문
# echo "mon host = <ip-address>[,<ip-address>]" >> /etc/ceph/ceph.conf예제
# echo "mon host = 192.168.0.120" >> /etc/ceph/ceph.conf참고IPv6 주소를 사용하려면
ms bind ipv6옵션을true로 설정합니다. 자세한 내용은 Red Hat Ceph Storage 4의 구성 가이드의 바인딩 섹션을 참조하십시오.root로 클러스터의 인증 키를 생성하고 Monitor 시크릿 키를 생성합니다.# ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *' creating /tmp/ceph.mon.keyringroot사용자로 관리자 인증 키를 생성하고ceph.client.admin.keyring사용자를 생성하고 사용자를 인증 키에 추가합니다.구문
# ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon '<capabilites>' --cap osd '<capabilites>' --cap mds '<capabilites>'예제
# ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow' creating /etc/ceph/ceph.client.admin.keyringroot로ceph.client.admin.keyring키를ceph.mon.keyring에 추가합니다.# ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring importing contents of /etc/ceph/ceph.client.admin.keyring into /tmp/ceph.mon.keyring모니터 맵을 생성합니다. 초기 모니터의 노드 이름, IP 주소,
fsid를 사용하여 지정하고 이를/tmp/monmap으로 저장합니다.구문
$ monmaptool --create --add <monitor_host_name> <ip-address> --fsid <uuid> /tmp/monmap예제
$ monmaptool --create --add node1 192.168.0.120 --fsid a7f64266-0894-4f1e-a635-d0aeaca0e993 /tmp/monmap monmaptool: monmap file /tmp/monmap monmaptool: set fsid to a7f64266-0894-4f1e-a635-d0aeaca0e993 monmaptool: writing epoch 0 to /tmp/monmap (1 monitors)초기 모니터 노드에서
root로 기본 데이터 디렉토리를 생성합니다.구문
# mkdir /var/lib/ceph/mon/ceph-<monitor_host_name>예제
# mkdir /var/lib/ceph/mon/ceph-node1root로 초기 모니터 데몬을 Monitor 맵 및 인증 키로 채웁니다.구문
# ceph-mon --mkfs -i <monitor_host_name> --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring예제
# ceph-mon --mkfs -i node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring ceph-mon: set fsid to a7f64266-0894-4f1e-a635-d0aeaca0e993 ceph-mon: created monfs at /var/lib/ceph/mon/ceph-node1 for mon.node1현재 Ceph 구성 파일을 확인합니다.
# cat /etc/ceph/ceph.conf [global] fsid = a7f64266-0894-4f1e-a635-d0aeaca0e993 mon_initial_members = node1 mon_host = 192.168.0.120다양한 Ceph 구성 설정에 대한 자세한 내용은 Red Hat Ceph Storage 4의 구성 가이드를 참조하십시오. 다음 Ceph 구성 파일의 예는 가장 일반적인 구성 설정 중 일부를 나열합니다.
예제
[global] fsid = <cluster-id> mon initial members = <monitor_host_name>[, <monitor_host_name>] mon host = <ip-address>[, <ip-address>] public network = <network>[, <network>] cluster network = <network>[, <network>] auth cluster required = cephx auth service required = cephx auth client required = cephx osd journal size = <n> osd pool default size = <n> # Write an object n times. osd pool default min size = <n> # Allow writing n copy in a degraded state. osd pool default pg num = <n> osd pool default pgp num = <n> osd crush chooseleaf type = <n>root로완료된파일을 생성합니다.구문
# touch /var/lib/ceph/mon/ceph-<monitor_host_name>/done예제
# touch /var/lib/ceph/mon/ceph-node1/done루트로서 새로 생성된 디렉토리 및 파일에 대한 소유자 및 그룹 권한을 업데이트합니다.구문
# chown -R <owner>:<group> <path_to_directory>예제
# chown -R ceph:ceph /var/lib/ceph/mon # chown -R ceph:ceph /var/log/ceph # chown -R ceph:ceph /var/run/ceph # chown ceph:ceph /etc/ceph/ceph.client.admin.keyring # chown ceph:ceph /etc/ceph/ceph.conf # chown ceph:ceph /etc/ceph/rbdmap참고Ceph Monitor 노드가 OpenStack 컨트롤러 노드와 함께 배치되는 경우 Glance 및 Cinder 키링 파일은 각각
glance및cinder가 소유해야 합니다. 예를 들어 다음과 같습니다.# ls -l /etc/ceph/ ... -rw-------. 1 glance glance 64 <date> ceph.client.glance.keyring -rw-------. 1 cinder cinder 64 <date> ceph.client.cinder.keyring ...root로 초기 모니터 노드에서ceph-mon프로세스를 시작하고 활성화합니다.구문
# systemctl enable ceph-mon.target # systemctl enable ceph-mon@<monitor_host_name> # systemctl start ceph-mon@<monitor_host_name>예제
# systemctl enable ceph-mon.target # systemctl enable ceph-mon@node1 # systemctl start ceph-mon@node1root로 모니터 데몬이 실행 중인지 확인합니다.구문
# systemctl status ceph-mon@<monitor_host_name>예제
# systemctl status ceph-mon@node1 ● ceph-mon@node1.service - Ceph cluster monitor daemon Loaded: loaded (/usr/lib/systemd/system/ceph-mon@.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2018-06-27 11:31:30 PDT; 5min ago Main PID: 1017 (ceph-mon) CGroup: /system.slice/system-ceph\x2dmon.slice/ceph-mon@node1.service └─1017 /usr/bin/ceph-mon -f --cluster ceph --id node1 --setuser ceph --setgroup ceph Jun 27 11:31:30 node1 systemd[1]: Started Ceph cluster monitor daemon. Jun 27 11:31:30 node1 systemd[1]: Starting Ceph cluster monitor daemon...
스토리지 클러스터에 Red Hat Ceph Storage Monitors를 추가하려면 Red Hat Ceph Storage 4 관리 가이드의 모니터 추가 섹션을 참조하십시오.
OSD Bootstrapping
초기 모니터가 실행되면 OSD(오브젝트 스토리지 장치)를 추가할 수 있습니다. OSD가 충분한 OSD가 개체 복사본 수를 처리할 때까지 클러스터는 활성 + 클린 상태에 도달할 수 없습니다.
개체의 기본 복사본 수는 3입니다. 최소 3개의 OSD 노드가 필요합니다. 그러나 오브젝트 사본을 두 개만 사용하므로 OSD 노드를 두 개 추가하면 Ceph 구성 파일에서 osd 풀 기본 크기 및 osd 풀 기본 크기 설정을 업데이트합니다.
자세한 내용은 Red Hat Ceph Storage 4용 구성 가이드의 OSD 구성 참조 섹션을 참조하십시오.
초기 모니터를 부트 스트랩하면 클러스터에 기본 ArgoCD 맵이 있습니다. 그러나 nmap 맵에는 Ceph 노드에 매핑된 Ceph OSD 데몬이 없습니다.
클러스터에 OSD를 추가하고 기본 NetNamespace 맵을 업데이트하려면 각 OSD 노드에서 다음을 실행합니다.
Red Hat Ceph Storage 4 OSD 리포지토리를 활성화합니다.
[root@osd ~]# subscription-manager repos --enable=rhceph-4-osd-for-rhel-8-x86_64-rpms루트로서 Ceph OSD 노드에ceph-osd패키지를 설치합니다.# yum install ceph-osdCeph 구성 파일 및 관리 인증 키 파일을 초기 모니터 노드에서 OSD 노드로 복사합니다.
구문
# scp <user_name>@<monitor_host_name>:<path_on_remote_system> <path_to_local_file>예제
# scp root@node1:/etc/ceph/ceph.conf /etc/ceph # scp root@node1:/etc/ceph/ceph.client.admin.keyring /etc/cephOSD에 대한 UUID(Universally Unique Identifier)를 생성합니다.
$ uuidgen b367c360-b364-4b1d-8fc6-09408a9cda7aroot로 OSD 인스턴스를 생성합니다.구문
# ceph osd create <uuid> [<osd_id>]예제
# ceph osd create b367c360-b364-4b1d-8fc6-09408a9cda7a 0참고이 명령은 후속 단계에 필요한 OSD 번호 식별자를 출력합니다.
루트로서 새 OSD의 기본 디렉터리를 생성합니다.구문
# mkdir /var/lib/ceph/osd/ceph-<osd_id>예제
# mkdir /var/lib/ceph/osd/ceph-0루트로서 OSD로 사용할 드라이브를 준비하여 방금 만든 디렉터리에 마운트합니다. Ceph 데이터 및 저널용 파티션을 생성합니다. 저널 및 데이터 파티션은 동일한 디스크에 있을 수 있습니다. 이 예에서는 15GB 디스크를 사용합니다.구문
# parted <path_to_disk> mklabel gpt # parted <path_to_disk> mkpart primary 1 10000 # mkfs -t <fstype> <path_to_partition> # mount -o noatime <path_to_partition> /var/lib/ceph/osd/ceph-<osd_id> # echo "<path_to_partition> /var/lib/ceph/osd/ceph-<osd_id> xfs defaults,noatime 1 2" >> /etc/fstab예제
# parted /dev/sdb mklabel gpt # parted /dev/sdb mkpart primary 1 10000 # parted /dev/sdb mkpart primary 10001 15000 # mkfs -t xfs /dev/sdb1 # mount -o noatime /dev/sdb1 /var/lib/ceph/osd/ceph-0 # echo "/dev/sdb1 /var/lib/ceph/osd/ceph-0 xfs defaults,noatime 1 2" >> /etc/fstab루트로서 OSD 데이터 디렉토리를 초기화합니다.구문
# ceph-osd -i <osd_id> --mkfs --mkkey --osd-uuid <uuid>예제
# ceph-osd -i 0 --mkfs --mkkey --osd-uuid b367c360-b364-4b1d-8fc6-09408a9cda7a ... auth: error reading file: /var/lib/ceph/osd/ceph-0/keyring: can't open /var/lib/ceph/osd/ceph-0/keyring: (2) No such file or directory ... created new key in keyring /var/lib/ceph/osd/ceph-0/keyring루트로OSD 인증 키를 등록합니다.구문
# ceph auth add osd.<osd_id> osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-<osd_id>/keyring예제
# ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-0/keyring added key for osd.0root로 OSD 노드를 ArgoCD 맵에 추가합니다.구문
# ceph osd crush add-bucket <host_name> host예제
# ceph osd crush add-bucket node2 hostroot로 OSD 노드를기본ArgoCD 트리 아래에 배치합니다.구문
# ceph osd crush move <host_name> root=default예제
# ceph osd crush move node2 root=defaultroot로 OSD 디스크를 ArgoCD 맵에 추가합니다.구문
# ceph osd crush add osd.<osd_id> <weight> [<bucket_type>=<bucket-name> ...]예제
# ceph osd crush add osd.0 1.0 host=node2 add item id 0 name 'osd.0' weight 1 at location {host=node2} to crush map참고DASD 맵을 분리하고 장치 목록에 OSD를 추가할 수도 있습니다. OSD 노드를 버킷으로 추가한 다음, 장치를 OSD 노드에서 항목으로 추가하고, OSD를 가중치를 할당하고, ArgoCD 맵을 다시 컴파일하고, NetNamespace 맵을 설정합니다. 자세한 내용은 Red Hat Ceph Storage 4용 스토리지 전략 가이드 의 ArgoCD 맵 편집 섹션을 참조하십시오.
루트로서 새로 생성된 디렉토리 및 파일에 대한 소유자 및 그룹 권한을 업데이트합니다.구문
# chown -R <owner>:<group> <path_to_directory>예제
# chown -R ceph:ceph /var/lib/ceph/osd # chown -R ceph:ceph /var/log/ceph # chown -R ceph:ceph /var/run/ceph # chown -R ceph:ceph /etc/cephOSD 노드는 Ceph 스토리지 클러스터 구성에 있습니다. 그러나 OSD 데몬은
down및in입니다. 데이터 수신을 시작하기 전에 새 OSD가가동중이어야 합니다.root로 OSD 프로세스를 활성화하고 시작합니다.구문
# systemctl enable ceph-osd.target # systemctl enable ceph-osd@<osd_id> # systemctl start ceph-osd@<osd_id>예제
# systemctl enable ceph-osd.target # systemctl enable ceph-osd@0 # systemctl start ceph-osd@0OSD 데몬을 시작하면 이 데몬이
입니다.시작되어
이제 모니터와 일부 OSD가 실행 중입니다. 다음 명령을 실행하여 배치 그룹 피어를 확인할 수 있습니다.
$ ceph -w
OSD 트리를 보려면 다음 명령을 실행합니다.
$ ceph osd tree
예제
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 2 root default
-2 2 host node2
0 1 osd.0 up 1 1
-3 1 host node3
1 1 osd.1 up 1 1
스토리지 클러스터에 새 OSD를 추가하여 스토리지 용량을 확장하려면 Red Hat Ceph Storage 4의 관리 가이드에 있는 OSD 추가 섹션을 참조하십시오.