1.2. 컨테이너에 Red Hat Ceph Storage 클러스터 설치
ceph-ansible
플레이북과 함께 Ansible 애플리케이션을 사용하여 컨테이너에 Red Hat Ceph Storage 3을 설치합니다.
프로덕션에서 사용되는 Ceph 클러스터는 일반적으로 10개 이상의 노드로 구성됩니다. Red Hat Ceph Storage를 컨테이너 이미지로 배포하려면 3개 이상의 OSD 노드와 모니터 3개로 구성된 Ceph 클러스터를 사용하는 것이 좋습니다.
그러나 프로덕션 클러스터에서 고가용성을 보장하기 위해 Ceph를 하나의 모니터로 실행할 수 있지만, Red Hat은 최소 3개의 모니터 노드가 있는 배포만 지원합니다.
사전 요구 사항
Ansible 관리 노드에서 root 사용자 계정을 사용하여 Red Hat Ceph Storage 3 툴 리포지토리 및 Ansible 리포지토리를 활성화합니다.
[root@admin ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms --enable=rhel-7-server-ansible-2.6-rpms
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-docker.yml.sample site-docker.yml
복사된 파일을 편집합니다.
group_vars/all.yml
파일을 편집합니다. 주석 처리를 위해 가장 일반적인 필수 매개 변수와 선택적 매개변수는 아래 표를 참조하십시오. 테이블에는 모든 매개 변수가 포함되어 있지 않습니다.중요사용자 지정 클러스터 이름 사용은 지원되지 않으므로
cluster: ceph
매개변수를ceph
이외의 값으로 설정하지 마십시오.표 1.1. 일반 Ansible 설정 옵션 값 필수 항목 참고 monitor_interface
모니터 노드가 수신하는 인터페이스
monitor_interface
,monitor_address
또는monitor_address_block
이 필요합니다.monitor_address
모니터 노드가 수신하는 주소입니다.
monitor_address_block
Ceph 공용 네트워크의 서브넷
노드의 IP 주소를 알 수 없지만 서브넷을 알 수 없는 경우 사용합니다.
ip_version
ipv6
예: IPv6 주소를 사용하는 경우
journal_size
저널의 필요한 크기(MB)
없음
public_network
Ceph 공용 네트워크의 IP 주소 및 넷마스크
있음
Red Hat Enterprise Linux 용 설치 가이드의 Red Hat Ceph Storage의 네트워크 구성 확인 섹션
cluster_network
Ceph 클러스터 네트워크의 IP 주소 및 넷마스크
없음
ceph_docker_image
로컬 Docker 레지스트리를 사용하는 경우
rhceph/rhceph-3-rhel7
또는cephimageinlocalreg
있음
containerized_deployment
true
있음
ceph_docker_registry
로컬 Docker 레지스트리를 사용하는 경우
registry.access.redhat.com
또는<local-host-fqdn>
있음
all.yml
파일의 예는 다음과 같습니다.monitor_interface: eth0 journal_size: 5120 public_network: 192.168.0.0/24 ceph_docker_image: rhceph/rhceph-3-rhel7 containerized_deployment: true ceph_docker_registry: registry.access.redhat.com
자세한 내용은
all.yml
파일을 참조하십시오.group_vars/osds.yml
파일을 편집합니다. 주석 처리를 위해 가장 일반적인 필수 매개 변수와 선택적 매개변수는 아래 표를 참조하십시오. 테이블에는 모든 매개 변수가 포함되어 있지 않습니다.중요다른 물리적 장치를 사용하여 운영 체제가 설치된 장치와 OSD를 설치합니다. 운영 체제와 OSD 간에 동일한 장치를 공유하면 성능에 문제가 발생합니다.
표 1.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_discovery
OSD를 자동으로 검색하려면
true
예:
osd_scenario: collocated
장치
설정을 사용할 때는 사용할 수 없습니다.devices
ceph 데이터가
저장된 장치 목록예: 장치 목록을 지정합니다.
osd_auto_discovery
설정이 사용되는 경우 사용할 수 없습니다.lvm
을osd_scenario
로 사용하고devices
옵션을 설정하면ceph-volume lvm 배치
모드를 사용하면 최적화된 OSD 구성이 생성됩니다.dedicated_devices
ceph 저널이
저장된 non-collocated OSD의 전용 장치 목록osd_scenario: non-collocated
파티션되지 않은 장치여야 합니다.
dmcrypt
OSD 암호화
없음
기본값은
false
lvm_volumes
FileStore 또는 BlueStore 사전 목록
예:
osd_scenario를 사용하는 경우: lvm
및 스토리지 장치는장치를
사용하여 정의되지 않습니다.각 사전에는
데이터
,journal
및data_vg
키가 포함되어야 합니다. 논리 볼륨 또는 볼륨 그룹은 전체 경로가 아닌 이름이어야 합니다.데이터
, 및저널
키는 논리 볼륨(LV) 또는 파티션이 될 수 있지만 여러데이터
LV에는 저널을 사용하지 않습니다.data_vg
키는data
LV를 포함하는 볼륨 그룹이어야 합니다. 필요한 경우journal_vg
키를 사용하여 저널 LV가 포함된 볼륨 그룹을 지정할 수 있습니다. 지원되는 다양한 구성은 아래 예제를 참조하십시오.osds_per_device
장치당 생성할 OSD 수입니다.
없음
기본값은
1
입니다.osd_objectstore
OSD의 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
옵션. 자세한 내용은 Red Hat Ceph Storage Container 가이드 의 모든 NVMe 스토리지에 대한 OSD Ansible 설정 구성 섹션을 참조하십시오.자세한 내용은
osds.yml
파일의 주석을 참조하십시오.
/etc/ansible/hosts
에 기본적으로 있는 Ansible 인벤토리 파일을 편집합니다. 예제 호스트를 주석 처리하십시오.[mons]
섹션 아래에 모니터 노드를 추가합니다.[mons] <monitor-host-name> <monitor-host-name> <monitor-host-name>
[osds]
섹션 아래에 OSD 노드를 추가합니다. 노드의 이름이 순차적인 경우 범위를 사용하는 것이 좋습니다.[osds] <osd-host-name[1:10]>
참고새 설치의 OSD의 경우 기본 오브젝트 저장소 형식은 BlueStore입니다.
또는
[mons]
및[osds]
섹션에 동일한 노드를 추가하여 한 노드에서 OSD 데몬과 함께 모니터를 배치할 수 있습니다. 자세한 내용은 2장. 컨테이너화된 Ceph 데몬 공동 배치 을 참조하십시오.
필요한 경우 모든 배포, 베어 메탈 또는 컨테이너 의 경우
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: True
SSD 장치를 사용하는 경우 다음과 같이 매개변수를 편집합니다.
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 및 hdd OSD 둘 다 배포되지 않으면 기본 CRUSH 규칙이 실패합니다.
참고아래 단계에 설명된 대로 host_vars 디렉터리의 OSD 파일에 사용자 지정 nmap 계층 구조를 추가하여 이 구성 작업을 수행합니다.
group_vars/clients.yml
파일에서 생성된crush_rules
를 사용하여풀
생성.예제
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
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-docker.yml
참고Red Hat Ceph Storage를 Red Hat Enterprise Linux Atomic Host 호스트에 배포하는 경우
--skip-tags=with_pkg
옵션을 사용합니다.[user@admin ceph-ansible]$ ansible-playbook site-docker.yml --skip-tags=with_pkg
참고배포 속도를 높이려면
--forks
옵션을ansible-playbook
에 사용합니다. 기본적으로ceph-ansible
은 포크를20
으로 설정합니다. 이 설정을 사용하면 최대 20개의 노드가 동시에 설치됩니다. 한 번에 최대 30개의 노드를 설치하려면ansible-playbook --forks 30 PLAYBOOK FILE을
실행합니다. 사용하지 않도록 관리 노드의 리소스를 모니터링해야 합니다. 이 값이 있는 경우--forks
에 전달된 수를 줄입니다.Monitor 노드에서 root 계정을 사용하여 Ceph 클러스터의 상태를 확인합니다.
docker exec ceph-<mon|mgr>-<id> ceph health
교체:
-
Monitor 노드의 호스트 이름이 있는
<id>
:
예를 들면 다음과 같습니다.
[root@monitor ~]# docker exec ceph-mon-mon0 ceph health HEALTH_OK
-
Monitor 노드의 호스트 이름이 있는