Red Hat Training
A Red Hat training course is available for Red Hat Ceph Storage
3.2. Red Hat Ceph Storage 클러스터 설치
ceph-ansible 플레이북과 함께 Ansible 애플리케이션을 사용하여 Red Hat Ceph Storage 3을 설치합니다.
프로덕션 Ceph 스토리지 클러스터는 최소 3개의 모니터 호스트 및 여러 OSD 데몬이 포함된 OSD 노드 3개로 시작합니다.

사전 요구 사항
Ansible 관리 노드에서 root 계정을 사용하여
ceph-ansible패키지를 설치합니다.[root@admin ~]# yum install ceph-ansible
절차
달리 지침이 없는 경우 Ansible 관리 노드에서 다음 명령을 실행합니다.
Ansible 사용자로 Ansible에서
ceph-ansible플레이북에서 생성한 임시 값을 저장하는ceph-ansible-keys디렉터리를 생성합니다.[user@admin ~]$ mkdir ~/ceph-ansible-keys
root로
/etc/ansible/디렉터리의/usr/share/ceph-ansible/group_vars디렉터리에 대한 심볼릭 링크를 생성합니다.[root@admin ~]# ln -s /usr/share/ceph-ansible/group_vars /etc/ansible/group_vars
/usr/share/ceph-ansible/디렉터리로 이동합니다.[root@admin ~]$ cd /usr/share/ceph-ansible
yml.sample파일의 새 복사본을 생성합니다.[root@admin ceph-ansible]# cp group_vars/all.yml.sample group_vars/all.yml [root@admin ceph-ansible]# cp group_vars/osds.yml.sample group_vars/osds.yml [root@admin ceph-ansible]# cp site.yml.sample site.yml
복사된 파일을 편집합니다.
group_vars/all.yml파일을 편집합니다. 주석 처리를 위해 가장 일반적인 필수 매개 변수와 선택적 매개변수는 아래 표를 참조하십시오. 테이블에는 모든 매개 변수가 포함되어 있지 않습니다.중요사용자 지정 클러스터 이름 사용은 지원되지 않으므로
cluster: ceph매개변수를ceph이외의 값으로 설정하지 마십시오.표 3.1. 일반 Ansible 설정
옵션 값 필수 항목 참고 ceph_origin리포지토리또는디트로또는로컬있음
리포지토리값은 새 리포지토리를 통해 Ceph가 설치됨을 의미합니다.distro값은 별도의 리포지토리 파일이 추가되지 않으며 Linux 배포에 포함된 모든 Ceph 버전을 가져옵니다.local값은 Ceph 바이너리가 로컬 시스템에서 복사됨을 의미합니다.ceph_repository_typeCDN또는iso있음
ceph_rhcs_version3있음
ceph_rhcs_iso_pathISO 이미지 경로
예: ISO 이미지를 사용하는 경우
monitor_interface모니터 노드가 수신하는 인터페이스
monitor_interface,monitor_address또는monitor_address_block이 필요합니다.monitor_address모니터 노드가 수신하는 주소입니다.
monitor_address_blockCeph 공용 네트워크의 서브넷
노드의 IP 주소를 알 수 없지만 서브넷을 알 수 없는 경우 사용합니다.
ip_versionipv6예: IPv6 주소를 사용하는 경우
public_networkCeph 공용 네트워크의 IP 주소 및 넷마스크 또는 IPv6를 사용하는 경우 해당 IPv6 주소
있음
cluster_networkCeph 클러스터 네트워크의 IP 주소 및 넷마스크
아니요, 기본값은
public_network입니다.configure_firewallAnsible에서 적절한 방화벽 규칙을 설정하려고 합니다.
아니요. 값을
true또는false로 설정합니다.all.yml파일의 예는 다음과 같습니다.ceph_origin: distro ceph_repository: rhcs ceph_repository_type: cdn ceph_rhcs_version: 3 monitor_interface: eth0 public_network: 192.168.0.0/24
참고ceph_origin을all.yml파일에 배포하도록 설정해야 합니다.이렇게 하면 설치 프로세스에서 올바른 다운로드 리포지토리를 사용합니다.참고ceph_rhcs_version옵션을3으로 설정하면 최신 버전의 Red Hat Ceph Storage 3이 가져옵니다.주의기본적으로 Ansible은 설치를 다시 시작하려고 하지만 마스킹된
firewalld서비스는 Red Hat Ceph Storage 배포가 실패할 수 있습니다. 이 문제를 해결하려면all.yml파일에서configure_firewall옵션을false로 설정합니다.firewalld서비스를 실행하는 경우all.yml파일에configure_firewall옵션을 사용할 필요가 없습니다.자세한 내용은
all.yml파일을 참조하십시오.group_vars/osds.yml파일을 편집합니다. 주석 처리를 위해 가장 일반적인 필수 매개 변수와 선택적 매개변수는 아래 표를 참조하십시오. 테이블에는 모든 매개 변수가 포함되어 있지 않습니다.중요다른 물리적 장치를 사용하여 운영 체제가 설치된 장치와 OSD를 설치합니다. 운영 체제와 OSD 간에 동일한 장치를 공유하면 성능에 문제가 발생합니다.
표 3.2. OSD Ansible 설정
옵션 값 필수 항목 참고 osd_scenario쓰기 로깅 및 키/값 데이터(BlueStore) 또는 저널(FileStore) 및 OSD 데이터에 동일한 장치를 사용하도록
배치됨SSD 또는 NVMe 미디어와 같은 전용 장치를 사용하여 쓰기 로그 및 키/값 데이터(BlueStore) 또는 저널 데이터(FileStore)를 저장합니다.
LVM에서 논리 볼륨 관리자를 사용하여 OSD 데이터를 저장합니다.있음
osd_scenario를 사용하는 경우,ceph-ansible은장치및dedicated_devices의 변수 수가 일치할 것으로 예상합니다. 예를 들어장치에서10 디스크를 지정하는 경우dedicated_devices에 10 개의 항목을 지정해야 합니다.osd_auto_discoveryOSD를 자동으로 검색하려면
true예:
osd_scenario: collocated장치설정을 사용할 때는 사용할 수 없습니다.devicesceph 데이터가저장된 장치 목록예: 장치 목록을 지정합니다.
osd_auto_discovery설정이 사용되는 경우 사용할 수 없습니다.lvm을osd_scenario로 사용하고devices옵션을 설정하면ceph-volume lvm 배치모드를 사용하면 최적화된 OSD 구성이 생성됩니다.dedicated_devicesceph 저널이저장된 non-collocated OSD의 전용 장치 목록osd_scenario: non-collocated파티션되지 않은 장치여야 합니다.
dmcryptOSD 암호화
없음
기본값은
falselvm_volumesFileStore 또는 BlueStore 사전 목록
예:
osd_scenario를 사용하는 경우: lvm및 스토리지 장치는장치를사용하여 정의되지 않습니다.각 사전에는
데이터,journal및data_vg키가 포함되어야 합니다. 논리 볼륨 또는 볼륨 그룹은 전체 경로가 아닌 이름이어야 합니다.데이터, 및저널키는 논리 볼륨(LV) 또는 파티션이 될 수 있지만 여러데이터LV에는 저널을 사용하지 않습니다.data_vg키는dataLV를 포함하는 볼륨 그룹이어야 합니다. 필요한 경우journal_vg키를 사용하여 저널 LV가 포함된 볼륨 그룹을 지정할 수 있습니다. 지원되는 다양한 구성은 아래 예제를 참조하십시오.osds_per_device장치당 생성할 OSD 수입니다.
없음
기본값은
1입니다.osd_objectstoreOSD의 Ceph 오브젝트 저장소 유형입니다.
없음
기본값은
bluestore입니다. 다른 옵션은filestore입니다. 업그레이드에 필요합니다.다음은 세 개의 OSD 시나리오(, 결합
되지 않은, ,lvm)를 사용할 때osds.yml파일의 예입니다.기본 OSD 개체 저장소 형식은 지정되지 않은 경우 BlueStore입니다.collocated
osd_objectstore: filestore osd_scenario: collocated devices: - /dev/sda - /dev/sdb
지원되지 않는 - BlueStore
osd_objectstore: bluestore osd_scenario: non-collocated devices: - /dev/sda - /dev/sdb - /dev/sdc - /dev/sdd dedicated_devices: - /dev/nvme0n1 - /dev/nvme0n1 - /dev/nvme1n1 - /dev/nvme1n1
이 지원되지 않는 예에서는 장치당 하나씩 4개의 BlueStore OSD를 생성합니다. 이 예에서 기존의 하드 드라이브(
sda,sdb,sdc,sdd)는 오브젝트 데이터에 사용되며 솔리드 상태 드라이브(SSD) (/dev/nvme0n1,/dev/nvme1n1)는 BlueStore 데이터베이스 및 write-ahead 로그에 사용됩니다. 이 구성은/dev/sda및/dev/sdb장치를/dev/nvme0n1장치를 사용하여 연결하고/dev/sdc및/dev/sdd장치를/dev/nvme1n1장치와 쌍으로 연결합니다.지원되지 않음 - 파일 저장소
osd_objectstore: filestore osd_scenario: non-collocated devices: - /dev/sda - /dev/sdb - /dev/sdc - /dev/sdd dedicated_devices: - /dev/nvme0n1 - /dev/nvme0n1 - /dev/nvme1n1 - /dev/nvme1n1
LVM simple
osd_objectstore: bluestore osd_scenario: lvm devices: - /dev/sda - /dev/sdb
또는
osd_objectstore: bluestore osd_scenario: lvm devices: - /dev/sda - /dev/sdb - /dev/nvme0n1
이러한 간단한 구성으로
ceph-ansible은 배치 모드(ceph-volume lvm batch)를 사용하여 OSD를 생성합니다.첫 번째 시나리오에서는
장치가기존 하드 드라이브 또는 SSD인 경우 장치당 하나의 OSD가 생성됩니다.두 번째 시나리오에서는 기존 하드 드라이브와 SSD가 혼합되어 있는 경우 데이터는 기존 하드 드라이브(
sda,sdb)에 배치되고 BlueStore 데이터베이스(block.db)는 SSD(nvme0n1)에서 최대한 크게 생성됩니다.LVM advance
osd_objectstore: filestore osd_scenario: lvm lvm_volumes: - data: data-lv1 data_vg: vg1 journal: journal-lv1 journal_vg: vg2 - data: data-lv2 journal: /dev/sda data_vg: vg1또는
osd_objectstore: bluestore osd_scenario: lvm lvm_volumes: - data: data-lv1 data_vg: data-vg1 db: db-lv1 db_vg: db-vg1 wal: wal-lv1 wal_vg: wal-vg1 - data: data-lv2 data_vg: data-vg2 db: db-lv2 db_vg: db-vg2 wal: wal-lv2 wal_vg: wal-vg2이러한 고급 시나리오 예제를 사용하면 볼륨 그룹과 논리 볼륨을 사전에 생성해야 합니다.
ceph-ansible에서 생성되지 않습니다.참고모든 NVMe SSD를 사용하는 경우
osd_scenario: lvm및osds_per_device를 설정합니다. 4옵션. 자세한 내용은 모든 NVMe 스토리지 for Red Hat Enterprise Linux에 대한 OSD Ansible 설정 구성 또는 Red Hat Ceph Storage 설치 가이드 의 모든 NVMe 스토리지 for Ubuntu에 대한 OSD Ansible 설정 구성을 참조하십시오.자세한 내용은
osds.yml파일의 주석을 참조하십시오.
/etc/ansible/hosts에 기본적으로 있는 Ansible 인벤토리 파일을 편집합니다. 예제 호스트를 주석 처리하십시오.[mons]섹션 아래에 모니터 노드를 추가합니다.[mons] MONITOR_NODE_NAME1 MONITOR_NODE_NAME2 MONITOR_NODE_NAME3
[osds]섹션 아래에 OSD 노드를 추가합니다. 노드의 이름이 순차적인 경우 범위를 사용하는 것이 좋습니다.[osds] OSD_NODE_NAME1[1:10]참고새 설치의 OSD의 경우 기본 오브젝트 저장소 형식은 BlueStore입니다.
선택적으로
devices및dedicated_devices옵션을 사용하여 OSD 노드에서 사용할 장치를 지정합니다. 쉼표로 구분된 목록을 사용하여 여러 장치를 나열합니다.구문
[osds] CEPH_NODE_NAME devices="['DEVICE_1', 'DEVICE_2']" dedicated_devices="['DEVICE_3', 'DEVICE_4']"
예제
[osds] ceph-osd-01 devices="['/dev/sdc', '/dev/sdd']" dedicated_devices="['/dev/sda', '/dev/sdb']" ceph-osd-02 devices="['/dev/sdc', '/dev/sdd', '/dev/sde']" dedicated_devices="['/dev/sdf', '/dev/sdg']"
장치를 지정하지 않으면
osds.yml파일에서osd_auto_discovery옵션을true로 설정합니다.참고devices및dedicated_devices매개 변수를 사용하면 OSD에서 이름이 다른 장치를 사용하거나 장치 중 하나가 OSD에서 실패한 경우 유용합니다.
선택적으로 모든 배포, 베어 메탈 또는 컨테이너에 대해 호스트 특정 매개 변수를 사용하려면
host_vars디렉터리에 호스트 파일을 생성하여 호스트와 관련된 모든 매개변수를 포함합니다.스토리지 클러스터에 추가된 새 Ceph OSD 노드의 새 파일을
/etc/ansible/host_vars/디렉터리에 생성합니다.구문
touch /etc/ansible/host_vars/OSD_NODE_NAME예제
[root@admin ~]# touch /etc/ansible/host_vars/osd07
호스트별 매개 변수를 사용하여 파일을 업데이트합니다. 베어 메탈 배포에서는
devices:및dedicated_devices:섹션을 파일에 추가할 수 있습니다.예제
devices: - /dev/sdc - /dev/sdd - /dev/sde - /dev/sdf dedicated_devices: - /dev/sda - /dev/sdb
필요한 경우 모든 배포, 베어 메탈 또는 컨테이너 의 경우
ansible-playbook 을 사용하여 사용자 지정 CRUSH 계층을 생성할 수 있습니다.Ansible 인벤토리 파일을 설정합니다.
osd_crush_location매개변수를 사용하여 OSD 호스트가 CRUSH 맵 계층 구조에 있을 위치를 지정합니다. OSD 위치를 지정하려면 최소 2개의 CRUSH 버킷 유형을 지정해야 하며 하나의 버킷유형이호스트여야 합니다. 기본적으로루트,데이터 센터,방,행,pod, du ,랙,섀시및호스트가포함됩니다.구문
[osds] CEPH_OSD_NAME osd_crush_location="{ 'root': ROOT_BUCKET', 'rack': 'RACK_BUCKET', 'pod': 'POD_BUCKET', 'host': 'CEPH_HOST_NAME' }"
예제
[osds] ceph-osd-01 osd_crush_location="{ 'root': 'default', 'rack': 'rack1', 'pod': 'monpod', 'host': 'ceph-osd-01' }"crush_rule_config및create_crush_tree매개변수를True로 설정하고 기본 CRUSH 규칙을 사용하지 않으려면 최소 하나의 CRUSH 규칙을 만듭니다. 예를 들어 HDD 장치를 사용하는 경우 다음과 같이 매개 변수를 편집합니다.crush_rule_config: True crush_rule_hdd: name: replicated_hdd_rule root: root-hdd type: host class: hdd default: True crush_rules: - "{{ crush_rule_hdd }}" create_crush_tree: TrueSSD 장치를 사용하는 경우 다음과 같이 매개변수를 편집합니다.
crush_rule_config: True crush_rule_ssd: name: replicated_ssd_rule root: root-ssd type: host class: ssd default: True crush_rules: - "{{ crush_rule_ssd }}" create_crush_tree: True참고기본 규칙에는 정의해야 하는
class매개 변수가 포함되어 있으므로ssd및hddOSD가 모두 배포되지 않으면 기본 CRUSH 규칙이 실패합니다.참고또한 사용자 지정 CRUSH 계층 구조를 위의 단계에 설명된 대로
host_vars디렉터리의 OSD 파일에 추가하여 이 구성 작업을 수행합니다.group_vars/clients.yml파일에서 생성된crush_rules를 사용하여풀생성.예제
>>>>>>> 3993c70c7f25ab628cbfd9c8e27623403ca18c99
copy_admin_key: True user_config: True pool1: name: "pool1" pg_num: 128 pgp_num: 128 rule_name: "HDD" type: "replicated" device_class: "hdd" pools: - "{{ pool1 }}"트리를 봅니다.
[root@mon ~]# ceph osd tree
풀을 검증합니다.
# for i in $(rados lspools);do echo "pool: $i"; ceph osd pool get $i crush_rule;done pool: pool1 crush_rule: HDD
모든 배포, 베어 메탈 또는 컨테이너 의 경우 기본적으로
/etc/ansible/hosts파일을 통해 Ansible 인벤토리 파일을 편집하기 위해 를 엽니다. 예제 호스트를 주석 처리합니다.[mgrs]섹션에 Ceph Manager(ceph-mgr) 노드를 추가합니다. Ceph Manager 데몬을 모니터 노드와 분리합니다.[mgrs] <monitor-host-name> <monitor-host-name> <monitor-host-name>
Ansible 사용자로 Ansible이 Ceph 호스트에 연결할 수 있는지 확인합니다.
[user@admin ~]$ ansible all -m ping
/etc/ansible/ansible.cfg파일에 다음 행을 추가합니다.retry_files_save_path = ~/
root로서/var/log/ansible/디렉터리를 생성하고ansible사용자에게 적절한 권한을 할당합니다.[root@admin ~]# mkdir /var/log/ansible [root@admin ~]# chown ansible:ansible /var/log/ansible [root@admin ~]# chmod 755 /var/log/ansible
/usr/share/ceph-ansible/ansible.cfg파일을 편집하여 다음과 같이log_path값을 업데이트합니다.log_path = /var/log/ansible/ansible.log
Ansible 사용자로
/usr/share/ceph-ansible/디렉터리로 변경합니다.[user@admin ~]$ cd /usr/share/ceph-ansible/
ceph-ansible플레이북을 실행합니다.[user@admin ceph-ansible]$ ansible-playbook site.yml
참고배포 속도를 높이려면
--forks옵션을ansible-playbook에 사용합니다. 기본적으로ceph-ansible은 포크를20으로 설정합니다. 이 설정을 사용하면 최대 20개의 노드가 동시에 설치됩니다. 한 번에 최대 30개의 노드를 설치하려면ansible-playbook --forks 30 PLAYBOOK FILE을실행합니다. 사용하지 않도록 관리 노드의 리소스를 모니터링해야 합니다. 이 값이 있는 경우--forks에 전달된 수를 줄입니다.Monitor 노드에서 root 계정을 사용하여 Ceph 클러스터의 상태를 확인합니다.
[root@monitor ~]# ceph health HEALTH_OK
rados를 사용하여 클러스터가 작동하는지 확인합니다.모니터 노드에서 8개의 배치 그룹이 있는 테스트 풀을 생성합니다.
구문
[root@monitor ~]# ceph osd pool create <pool-name> <pg-number>
예제
[root@monitor ~]# ceph osd pool create test 8
hello-world.txt라는 파일을 생성합니다.구문
[root@monitor ~]# vim <file-name>
예제
[root@monitor ~]# vim hello-world.txt
hello-world.txt오브젝트 이름hello-world를 사용하여 test 풀에 업로드합니다.구문
[root@monitor ~]# rados --pool <pool-name> put <object-name> <object-file>
예제
[root@monitor ~]# rados --pool test put hello-world hello-world.txt
test 풀에서
fetch.txt로hello-world를 다운로드합니다.구문
[root@monitor ~]# rados --pool <pool-name> get <object-name> <object-file>
예제
[root@monitor ~]# rados --pool test get hello-world fetch.txt
fetch.txt의 내용을 확인합니다.[root@monitor ~]# cat fetch.txt
출력은 다음과 같아야 합니다.
"Hello World!"
참고클러스터 상태를 확인하는 것 외에도
ceph-medic유틸리티를 사용하여 Ceph Storage 클러스터를 전반적으로 진단할 수 있습니다. Red Hat Ceph Storage 3 관리 가이드의 Ceph Storage 클러스터 진단 장을 사용하여ceph-medic사용 장을 참조하십시오.