들어가며

안녕하세요. 오픈소스컨설팅 엔지니어 김정은입니다.

최근 회사 내부에서 OpenStack의 스토리지를 증설하는 과정에서, Cinder 멀티 백엔드 설정의 중요성을 실감하게 되었습니다. 스토리지 규모를 사전에 정확하게 예측하고, 이를 바탕으로 증설이 용이하도록 설계 및 구축하는 것이 얼마나 중요한지 다시 한 번 인식할 수 있었습니다. OpenStack 환경에서는 다양한 스토리지 요구 사항을 충족시키기 위해 여러 유형의 백엔드 스토리지를 동시에 사용해야 할 때가 많습니다. 이를 통해 우리는 운영의 유연성을 높이고, 각기 다른 워크로드의 요구를 만족시킬 수 있습니다.

이번 블로그 글에서는 OpenStack 환경에서 Cinder 멀티 백엔드를 설정하는 방법에 대해 알아보겠습니다.

Kolla Ansible 소개

Kolla Ansible은 Ansible 플레이북을 통해 OpenStack의 모든 서비스를 컨테이너로 배포하고 유지 보수하며 운영할 수 있도록 도와주는 프로젝트입니다. 이를 통해 복잡한 설치 과정과 수동 설정을 최소화하고, 재현 가능한 환경을 제공하여 효율적이며 안정적인 클라우드 인프라 운영을 가능하게 합니다.

OpenStack Cinder의 역할

OpenStack에서는 서버, 스토리지, 네트워크와 같은 온프레미스 환경의 인프라를 클라우드 서비스로 제공합니다. 그 중 Cinder는 OpenStack의 블록 스토리지 서비스로 블록 스토리지 볼륨을 생성하고 관리 할 수 있게 해주며, 다양한 스토리지 백엔드를 지원하여 필요에 따라 성능과 용량을 조절할 수 있고 사용자와 애플리케이션은 데이터를 안전하게 저장하고, 필요 시 데이터를 빠르게 액세스 할 수 있습니다.

Cinder Multi Backend의 필요성

OpenStack 환경에서의 멀티 백엔드는 단일 Cinder 서비스가 여러 종류의 스토리지 백엔드를 동시에 사용할 수 있게 해줍니다. 멀티 백엔드 사용은 매우 유용하며 다음과 같은 이점을 제공합니다.

  • 유연성: 서로 다른 요구 사항을 가진 다양한 워크로드에 대해 적합한 스토리지를 사용할 수 있습니다. 예를 들어, 고성능이 요구되는 애플리케이션은 SSD 기반의 스토리지를, 대용량 데이터 저장에는 저비용의 스토리지를 사용할 수 있습니다.
  • 비용 효율성: 비용과 성능의 균형을 맞출 수 있습니다. 중요한 데이터는 고성능 백엔드에 저장하고, 덜 중요한 데이터는 비용 효율적인 백엔드에 저장함으로써 전체 비용을 절감할 수 있습니다.
  • 확장성: 필요에 따라 스토리지 시스템을 확장할 수 있습니다. 추가 백엔드를 구성하여 스토리지 용량을 쉽게 늘릴 수 있습니다.

이러한 이유로, 멀티 백엔드 구성은 OpenStack 클라우드 환경에서 매우 유용하며, 다양한 스토리지 요구 사항을 효율적으로 관리할 수 있게 해줍니다.

Cinder에서 지원하는 백엔드 종류

Cinder에서 지원하는 백엔드 유형으로는 LVM, NFS, Ceph 등이 있습니다. 각 백엔드는 다양한 환경과 요구사항에 맞추어 선택할 수 있으며, 각각의 특징과 장점을 가지고 있습니다. 다음은 주요 백엔드 유형에 대한 설명입니다.

  • LVM: 로컬 디스크를 사용하는 백엔드로 설정이 간단하고 빠르게 구성할 수 있습니다. LVM을 사용하면 물리 디스크를 논리 볼륨으로 관리할 수 있어 디스크 공간을 유연하게 사용할 수 있습니다.
  • NFS: 네트워크 파일 시스템을 사용하여 여러 노드에서 공유할 수 있는 스토리지를 제공합니다. NFS를 사용하면 여러 OpenStack 노드에서 동일한 스토리지 리소스를 공유할 수 있어 유연한 스토리지 구성이 가능합니다. 이는 데이터의 중앙 집중화와 쉽게 접근 가능한 공유 스토리지를 제공하는 데 유리합니다.
  • Ceph: 분산 스토리지 시스템으로 고성능과 고가용성을 제공하며, 확장성이 뛰어납니다. Ceph는 오브젝트 스토리지, 블록 스토리지, 파일 스토리지를 모두 지원하는 통합 스토리지 솔루션으로, 대규모 클라우드 환경에서 많이 사용됩니다.

이 게시글에서는 NFS와 Ceph를 OpenStack Cinder 백엔드로 설정하여 Multi Backend를 활용하는 방법을 알아보고 최종적으로 MultiBackend 적용 결과를 확인해보겠습니다.

Cinder Multi Backend 설정

Kolla Ansible을 사용하여 OpenStack을 설치할 때, globals.yml 파일을 수정하여 배포 환경에 필요한 다양한 매개변수를 설정할 수 있으며, 원하는 Cinder Backend 유형을 활성화할 수 있습니다. 이 때 OpenStack의 Cinder 기능을 활성화해야 백엔드를 사용할 수 있으므로 Cinder 기능을 반드시 함께 활성화해야 합니다. 또한 각 백엔드에 대한 상세 설정 값은 별도의 config 파일을 통해 적용할 수 있습니다.

globals.yml – cinder backend 설정 항목

cat /etc/kolla/globals.yml
enable_cinder: "yes"  
enable_cinder_backup: "no"
enable_cinder_backend_hnas_nfs: "no"
enable_cinder_backend_iscsi: "{{ enable_cinder_backend_lvm | bool }}"
enable_cinder_backend_lvm: "no" 
enable_cinder_backend_nfs: "yes"
enable_cinder_backend_quobyte: "no"
enable_cinder_backend_pure_iscsi: "no"
enable_cinder_backend_pure_fc: "no"
enable_cinder_backend_pure_roce: "no"
cinder_backend_ceph: "yes"

이번 게시글에서는 NFS와 Ceph 백엔드를 추가하여 두 가지 스토리지 유형을 OpenStack Backend로 사용하는 방법에 대해 알아보겠습니다. 다음은 각 유형의 globals.yml 파일과 config 파일 설정, 적용, 사용 방법을 차례로 알아보겠습니다.

NFS

전제 조건

OpenStack 노드가 NFS 서버에 접근할 수 있도록 하기 위해서는 공유 디렉토리에 대한 접근 권한 설정과 통신 및 방화벽 설정이 사전에 완료되어야 합니다.

globals.yml

globals.yml 파일에서 NFS 백엔드를 활성화하는 설정 예시입니다. Cinder 기능과 NFS Backend 기능을 활성화합니다.

cat /etc/kolla/global.yml
enable_cinder: "yes"  #cinder 기능 활성화
enable_cinder_backend_nfs: "yes" #cinder nfs backend 활성화

NFS 공유 설정

다음으로 NFS 서버의 공유 디렉토리를 지정하여 Cinder가 사용할 수 있도록 설정합니다. 이 설정은 NFS 서버의 마운트 지점을 정의합니다. 앞서 말씀드렸듯이, NFS 서버의 공유 디렉토리에 접근할 수 있어야 합니다.

cat /etc/kolla/config/nfs_shares 10.10.70.230:/nfs #[NFS서버의 IP주소]:[공유 디렉토리]

NFS 백엔드 설정

마지막으로 cinder-volume.conf 파일에 NFS 백엔드에 대한 설정을 작성합니다. 이 파일은 Cinder가 NFS 백엔드를 사용하는 데 필요한 구체적인 설정을 포함합니다. 환경에 따라 다양한 옵션을 추가할 수 있습니다.

vi /etc/kolla/config/cinder/cinder-volume.conf
[DEFAULT]
enabled_backends=nfs    #활성화 된 백엔드 지정

[nfs]
nfs_shares_config = /etc/kolla/config/cinder/nfs_shares  #NFS 공유 설정 파일의 경로 지정
volume_driver = cinder.volume.drivers.nfs.NfsDriver  #Cinder가 사용할 드라이버 지정
volume_backend_name = nfs  #백엔드 이름 설정
nfs_mount_options = vers=4  #NFS 마운트 옵션 지정

Cinder 재 설정

Cinder 설정을 적용하기 위해 Kolla Ansible을 사용하여 재설정을 실행합니다.

kolla-ansible -i /etc/kolla/multinode reconfigure -t cinder

확인 및 테스트

Volume Service 조회

스토리지 백엔드를 통해 데이터를 저장하고 관리하는 Cinder Volume Service가 잘 등록되었는지 상태를 확인합니다. 아래의 예시에서는 openstack 호스트의 nfs 백엔드가 cinder-volume 서비스로 등록되어 있으며, statusenabled이고 stateup 상태로 서비스가 정상적으로 동작하고 있음을 의미합니다.

openstack volume service list
+------------------+-----------------------+------+----------+-------+----------------------------+
| Binary           | Host                  | Zone | Status   | State | Updated At                 |
+------------------+-----------------------+------+----------+-------+----------------------------+
| cinder-scheduler | openstack             | nova | enabled  | up    | 2024-05-30T02:07:54.000000 |
| cinder-volume    | openstack@nfs         | nova | enabled  | up    | 2024-05-30T02:07:58.000000 |
+------------------+-----------------------+------+----------+-------+----------------------------+
Volume Type 생성 및 조회

NFS 백엔드를 사용하기 위해 새로운 볼륨 유형을 생성하고, 생성된 볼륨 유형을 확인합니다.

Volume Type을 생성할 때 volume_backend_name 속성은 cinder-volume.conf 파일에서 지정한 volume_backend_name 값과 동일하게 설정합니다.

openstack volume type create --public --property volume_backend_name=nfs nfs
+-------------+--------------------------------------+
| Field       | Value                                |
+-------------+--------------------------------------+
| description | None                                 |
| id          | 0a84c61d-de2c-411d-90e9-e7ce355c1da6 |
| is_public   | True                                 |
| name        | nfs                                  |
| properties  | volume_backend_name='nfs'            |
+-------------+--------------------------------------+

openstack volume type list
+--------------------------------------+-------------+-----------+
| ID                                   | Name        | Is Public |
+--------------------------------------+-------------+-----------+
| 0a84c61d-de2c-411d-90e9-e7ce355c1da6 | nfs         | True      |
| 8b2c138c-01bf-4f5f-ab62-cf6c53494d59 | __DEFAULT__ | True      |
+--------------------------------------+-------------+-----------+

Volume 생성 테스트

NFS 백엔드에 새로운 볼륨을 생성하고, 생성된 볼륨이 정상 상태인지 확인합니다.

본 게시글에서는 NFS 백엔드를 사용하여 10GB 크기의 볼륨을 생성했습니다. 볼륨 생성 과정은 creating에서 시작하여, downloading을 거쳐 최종적으로 available 상태가 되며, 이는 볼륨이 사용할 수 있는 상태임을 나타냅니다.

openstack volume create --type nfs --bootable --size 10 test-nfs-volume
openstack volume list
+--------------------------------------+-----------------------+-----------+------+-------------+
| ID                                   | Name                  | Status    | Size | Attached to |
+--------------------------------------+-----------------------+-----------+------+-------------+
| 76ccf62d-02ff-4c4d-9ef7-ba4f5cd2fad2 | test-nfs-volume       | available |   10 |             |
+--------------------------------------+-----------------------+-----------+------+-------------+

openstack volume show test-nfs-volume
+--------------------------------+--------------------------------------+
| Field                          | Value                                |
+--------------------------------+--------------------------------------+
| attachments                    | []                                   |
| availability_zone              | nova                                 |
| bootable                       | true                                 |
| consistencygroup_id            | None                                 |
| created_at                     | 2024-05-31T00:46:40.000000           |
| description                    | None                                 |
| encrypted                      | False                                |
| id                             | 76ccf62d-02ff-4c4d-9ef7-ba4f5cd2fad2 |
| migration_status               | None                                 |
| multiattach                    | False                                |
| name                           | test-nfs-volume                      |
| os-vol-host-attr:host          | openstack@nfs#nfs                    |
| os-vol-mig-status-attr:migstat | None                                 |
| os-vol-mig-status-attr:name_id | None                                 |
| os-vol-tenant-attr:tenant_id   | 92458a269a25453a8adc3bf25c8cb5ce     |
| properties                     |                                      |
| replication_status             | None                                 |
| size                           | 10                                   |
| snapshot_id                    | None                                 |
| source_volid                   | None                                 |
| status                         | available                            |
| type                           | nfs                                  |
| updated_at                     | 2024-05-31T00:46:41.000000           |
| user_id                        | b2dca70a0744405d8f63ef9cb9b02277     |
+--------------------------------+--------------------------------------+

다음으로 NFS Backend 설정이 정상적으로 적용 되었는지, 만들어 Volume이 NFS Backend를 사용하였는지, 관련 로그를 확인하는 방법까지 알아보겠습니다!

Tip💡

  1. OpenStack Cinder NFS Backend 설정 적용 여부?

cinder가 동작 중인 Host에 접근하여 cinder_volume 컨테이너의 config파일을 확인하여 적용 정보를 확인할 수 있습니다.

*Cinder가 동작하는 Host정보는 /etc/kolla/multinode의 [storage]그룹에 정의 된 노드입니다.

docker ps | grep cinder
0b9e8d8b515f   quay.io/openstack.kolla/cinder-backup:zed-ubuntu-jammy                   "dumb-init --single-…"   8 days ago     Up 2 hours (healthy)              cinder_backup
e561150ca9ad   quay.io/openstack.kolla/cinder-volume:zed-ubuntu-jammy                   "dumb-init --single-…"   8 days ago     Up 2 hours (healthy)              cinder_volume
b19486b64887   quay.io/openstack.kolla/cinder-scheduler:zed-ubuntu-jammy                "dumb-init --single-…"   8 days ago     Up 2 hours (healthy)              cinder_scheduler
05cba62d0369   quay.io/openstack.kolla/cinder-api:zed-ubuntu-jammy                      "dumb-init --single-…"   8 days ago     Up 2 hours (healthy)              cinder_api

docker exec -it -u root  cinder_volume bash
cat /var/lib/kolla/config_files/cinder.conf
[DEFAULT]
enabled_backends = nfs

```
[nfs]
nfs_shares_config = /etc/cinder/nfs_shares
volume_driver = cinder.volume.drivers.nfs.NfsDriver
volume_backend_name = nfs
nfs_mount_options = vers=4
```

Cinder_volume이 동작하는 Host 또는 cinder_volume 컨테이너에 접속하여 NFS 서버에 정상적으로 Mount 되었는 지 확인할 수 있습니다. 또한 NFS 유형의 Backend 설정 시 /var/lib/cinder/mnt/ 경로에 마운트됩니다.

docker exec -it -u root  cinder_volume bash

mount | grep nfs
10.10.70.230:/nfs on /var/lib/cinder/mnt/31e5b7ae7ff7df8377dc2a1b29b6a727 type nfs4 (rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.10.70.225,local_lock=none,addr=10.10.70.230)

df -Th | grep nfs
10.10.70.230:/nfs                 nfs4      24G   22G  1.3G  95% /var/lib/cinder/mnt/31e5b7ae7ff7df8377dc2a1b29b6a727

  1. 생성한 Volume이 NFS Backend를 사용했을까?

NFS 서버의 공유 디렉토리에 접근해 확인 시 volume-76ccf62d-02ff-4c4d-9ef7-ba4f5cd2fad2 가 생성되어있습니다. volume뒤에 붙은 76ccf62d-02ff-4c4d-9ef7-ba4f5cd2fad2는 OpenStack에서 생성한 Volume ID와 일치합니다.

ll
total 12
drwxrwxrwx  2 root  root         4096 May 31 00:46 ./
drwxr-xr-x 22 root  root         4096 May 29 06:23 ../
-rw-r--r--  1 42407 42407          76 May 30 07:13 .cinderSecureEnvIndicator
-rw-rw----  1 42407 42407 10737418240 May 31 00:46 volume-76ccf62d-02ff-4c4d-9ef7-ba4f5cd2fad2

  1. OpenStack Cinder 관련 Log 확인 방법?

OpenStack의 Log는 /var/log/kolla/ 하위에 존재하며 cinder 관련 로그를 확인할 경우에는 cinder 디렉토리에 있는 로그파일들을 참고하실 수 있습니다. 단, 안정성을 위해 Control노드를 여러대로 구성하였을 경우에는 Control 노드 별로 로그파일을 확인하셔야합니다.

cat /var/log/kolla/cinder/cinder-volume.log
2024-05-30 01:12:42.228 307 INFO cinder.volume.drivers.remotefs [None req-cbc1b207-b331-4380-a15f-f01de2319ead df1c6637c2184a6a8e7768ee11fe645b 3262fe9983e64ee385314ffcb4605828 - - - -] casted to 10.10.70.230:/nfs

cat /var/log/kolla/cinder/cinder-scheduler.log 

cat /var/log/kolla/cinder/cinder-api.log
2024-05-30 02:43:46.310 22 INFO cinder.api.openstack.wsgi [None req-d5f0aa7c-0bba-4b14-b0d8-f5139f13177f df1c6637c2184a6a8e7768ee11fe645b 3262fe9983e64ee385314ffcb4605828 - - default default] http://10.10.30.150:8776/v3/3262fe9983e64ee385314ffcb4605828/volumes/detail?all_tenants=1&name=test-nfs-volume returned with HTTP 200

cat /var/log/kolla/cinder/cinder-api-access.log
10.10.30.220 - - [29/May/2024:06:16:03 +0000] "GET /v3/3262fe9983e64ee385314ffcb4605828/types?name=nfs-volumes&is_public=None HTTP/1.1" 200 247 50397 "-" "python-cinderclient"
10.10.30.220 - - [30/May/2024:02:43:45 +0000] "GET /v3/3262fe9983e64ee385314ffcb4605828/volumes/test-nfs-volume HTTP/1.1" 404 88 223770 "-" "python-cinderclient"
10.10.30.220 - - [30/May/2024:02:43:46 +0000] "GET /v3/3262fe9983e64ee385314ffcb4605828/volumes/detail?all_tenants=1&name=test-nfs-volume HTTP/1.1" 200 1447 127186 "-" "python-cinderclient

NFS Backend 구성 트러블 슈팅

NFS Backend가 올바르게 작동하지 않는 경우에는 cinder-volume.conf 파일에서 NFS 설정을 확인하고, /etc/kolla/config/cinder/nfs_shares 파일에 올바른 NFS 서버와 공유 디렉토리가 설정 되었는지 확인합니다. 또한 NFS 마운트가 정상적으로 동작하는지 확인하기 위해 사전 수동 Mount를 진행 및 공유 디렉토리에 파일 생성하여 NFS 마운트 상태를 점검합니다.

Ceph

전제조건

OpenStack 서비스가 Ceph 클러스터와 통신할 수 있도록 OpenStack 노드와 Ceph 클러스터 간의 네트워크 연결이 원활해야하며 필요한 포트가 방화벽에서 허용되어 있어야합니다.

사전에 Ceph 클러스터 즉 Ceph 모니터 및 OSD 데몬이 구성되어 있어야 하며 OpenStack의 컴포넌트가 Ceph 스토리지를 사용할 수 있도록 OpenStack 컴포넌트에서 사용할 Ceph 사용자와 키가 생성되어 있어야하고 접근이 가능하도록 알맞은 권한이 부여되어있어야합니다.

또한 OpenStack에서 Ceph로의 접근을 위해 OpenStack 노드에 Ceph 구성파일 및 키링 파일이 있어야합니다. Ceph 구성 파일(ceph.conf)과 키링 파일(ceph.client.cinder.keyring)은 OpenStack 서비스가 Ceph 클러스터와 통신하고 인증하는 데 필요합니다.

Ceph를 이용하는 경우 일반적으로 컴퓨팅을 담당하는 Nova, 이미지를 담당하는 Glance, 블록 스토리지를 담당하는 Cinder를 함께 구성하지만 본 게시글에서는 Cinder 관련 설정에 대해서만 설명하도록 하겠습니다!

globals.yml

globals.yml 파일을 수정하여 Ceph 백엔드를 설정합니다.

cat /etc/kolla/global.yml
enable_cinder: "yes"  #cinder 기능 활성화
cinder_backend_ceph: "yes" #cinder ceph backend 활성화

#######################
# External Ceph options
#######################
external_ceph_cephx_enabled: "yes"

# Cinder
ceph_cinder_keyring: "ceph.client.cinder.keyring"
ceph_cinder_user: "cinder"
ceph_cinder_pool_name: "volumes"

################################
# Cinder - Block Storage Options
################################
# Enable / disable Cinder backends
cinder_backend_ceph: "yes"

Config 파일 구성

Ceph 구성 파일 및 키링 파일을 /etc/kolla/config/ 하위에 복사합니다.

ll /etc/kolla/config/cinder   #ceph.conf 파일이 /etc/kolla/config/ 하위에 존재해야 합니다.
ceph.conf

ll /etc/kolla/config/cinder/cinder-volume #ceph.client.cinder.keyring 파일이 /etc/kolla/config/ 하위에 존재해야 합니다.
ceph.client.cinder.keyring

Ceph 백엔드 설정

cinder-volume.conf 파일에 Ceph 백엔드에 대한 설정을 작성합니다. 이때 Ceph클러스터에 접근할 때 사용할 인증 정보인 cinder_rbd_secret_uuid 값을 추가해야합니다.

cat /etc/kolla/passwords.yml | grep cinder_rbd_secret_uuid  
cinder_rbd_secret_uuid: XXXXXXXXXXXXXXXXXXXXXXXX

vi /etc/kolla/config/cinder/cinder-volume.conf
[DEFAULT]
enabled_backends=rbd-1,nfs

[rbd-1]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = rbd-1
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rados_connect_timeout = 5
rbd_user = cinder
rbd_secret_uuid = XXXXXXXXXXXXXXXXXXXXXXXX
report_discard_supported = True

Cinder 재 설정

Ceph 백엔드 설정을 적용하기 위해 Cinder 서비스를 재설정합니다.

kolla-ansible -i /etc/kolla/multinode reconfigure -t cinder

확인 및 테스트

Volume Service 조회

스토리지 백엔드를 통해 데이터를 저장하고 관리하는 Cinder Volume Service가 잘 등록되었는지 상태를 확인합니다. 아래의 예시에서는 openstack 호스트의 rbd-1 백엔드가 cinder-volume 서비스로 등록되어 있으며, statusenabled이고 stateup 상태로 서비스가 정상적으로 동작하고 있음을 의미합니다.

openstack volume service list
+------------------+-----------------------+------+---------+-------+----------------------------+
| Binary           | Host                  | Zone | Status  | State | Updated At                 |
+------------------+-----------------------+------+---------+-------+----------------------------+
| cinder-scheduler | openstack             | nova | enabled | up    | 2024-05-30T23:55:47.000000 |
| cinder-volume    | openstack@rbd-1       | nova | enabled | up    | 2024-05-30T23:55:43.000000 |
| cinder-volume    | openstack@nfs         | nova | enabled | up    | 2024-05-30T23:55:48.000000 |
+------------------+-----------------------+------+---------+-------+----------------------------+
Volume Type 생성

Ceph 백엔드를 사용하기 위해 새로운 볼륨 유형을 생성하고, 생성된 볼륨 유형을 확인합니다.

Volume Type을 생성할 때 volume_backend_name 속성은 cinder-volume.conf 파일에서 지정한 volume_backend_name 값과 동일하게 설정합니다.

openstack volume type create --public --property volume_backend_name=rbd-1 ceph
+-------------+--------------------------------------+
| Field       | Value                                |
+-------------+--------------------------------------+
| description | None                                 |
| id          | 80cc2fbf-7ff5-407a-bbc4-2c9dfff454cf |
| is_public   | True                                 |
| name        | ceph                                 |
| properties  | volume_backend_name='rbd-1'          |
+-------------+--------------------------------------+

openstack volume type list
+--------------------------------------+-------------+-----------+
| ID                                   | Name        | Is Public |
+--------------------------------------+-------------+-----------+
| 0a84c61d-de2c-411d-90e9-e7ce355c1da6 | nfs         | True      |
| 80cc2fbf-7ff5-407a-bbc4-2c9dfff454cf | ceph        | True      |
| 0ee6dffc-8fe8-45da-9085-fb33f6c7d4fb | __DEFAULT__ | True      |
+--------------------------------------+-------------+-----------+
Volume 생성 테스트

Ceph 백엔드에 새로운 볼륨을 생성하고, 생성된 볼륨이 정상 상태인지 확인합니다.

본 게시글에서는 Ceph 백엔드를 사용하여 CentOS 7 이미지를 기반으로 부팅 가능한 40GB 크기의 볼륨을 생성했습니다. 볼륨 생성 과정은 creating에서 시작하여, downloading을 거쳐 최종적으로 available 상태가 되며, 이는 볼륨이 사용할 수 있는 상태임을 나타냅니다.

openstack volume create --image Centos7 --type ceph --bootable --size 40 test-ceph-volume
+--------------------------------------+------------------+-----------+------+-------------+
| ID                                   | Name             | Status    | Size | Attached to |
+--------------------------------------+------------------+-----------+------+-------------+
| 04226767-cd98-4181-b3fb-03a1e33542a6 | test-ceph-volume | available |   40 |             |
+--------------------------------------+------------------+-----------+------+-------------+

openstack volume show test-ceph-volume
+--------------------------------------+------------------+-----------+------+-------------+
| ID                                   | Name             | Status    | Size | Attached to |
+--------------------------------------+------------------+-----------+------+-------------+
| 04226767-cd98-4181-b3fb-03a1e33542a6 | test-ceph-volume | available |   40 |             |
+--------------------------------------+------------------+-----------+------+-------------+
(kolla-ansible) root@deploy:/playcecloud/image# openstack volume show test-ceph-volume
+--------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field                          | Value                                                                                                                                                                                                                                                                                                                                                                                                     |
+--------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| attachments                    | []                                                                                                                                                                                                                                                                                                                                                                                                        |
| availability_zone              | nova                                                                                                                                                                                                                                                                                                                                                                                                      |
| bootable                       | true                                                                                                                                                                                                                                                                                                                                                                                                      |
| consistencygroup_id            | None                                                                                                                                                                                                                                                                                                                                                                                                      |
| created_at                     | 2024-05-31T00:03:37.000000                                                                                                                                                                                                                                                                                                                                                                                |
| description                    | None                                                                                                                                                                                                                                                                                                                                                                                                      |
| encrypted                      | False                                                                                                                                                                                                                                                                                                                                                                                                     |
| id                             | 04226767-cd98-4181-b3fb-03a1e33542a6                                                                                                                                                                                                                                                                                                                                                                      |
| migration_status               | None                                                                                                                                                                                                                                                                                                                                                                                                      |
| multiattach                    | False                                                                                                                                                                                                                                                                                                                                                                                                     |
| name                           | test-ceph-volume                                                                                                                                                                                                                                                                                                                                                                                          |
| os-vol-host-attr:host          | openstack@rbd-1#rbd-1                                                                                                                                                                                                                                                                                                                                                                                     |
| os-vol-mig-status-attr:migstat | None                                                                                                                                                                                                                                                                                                                                                                                                      |
| os-vol-mig-status-attr:name_id | None                                                                                                                                                                                                                                                                                                                                                                                                      |
| os-vol-tenant-attr:tenant_id   | 92458a269a25453a8adc3bf25c8cb5ce                                                                                                                                                                                                                                                                                                                                                                          |
| properties                     |                                                                                                                                                                                                                                                                                                                                                                                                           |
| replication_status             | None                                                                                                                                                                                                                                                                                                                                                                                                      |
| size                           | 40                                                                                                                                                                                                                                                                                                                                                                                                        |
| snapshot_id                    | None                                                                                                                                                                                                                                                                                                                                                                                                      |
| source_volid                   | None                                                                                                                                                                                                                                                                                                                                                                                                      |
| status                         | available                                                                                                                                                                                                                                                                                                                                                                                                 |
| type                           | ceph                                                                                                                                                                                                                                                                                                                                                                                                      |
| updated_at                     | 2024-05-31T00:05:49.000000                                                                                                                                                                                                                                                                                                                                                                                |
| user_id                        | b2dca70a0744405d8f63ef9cb9b02277                                                                                                                                                                                                                                                                                                                                                                          |
| volume_image_metadata          | {'signature_verified': 'False', 'owner_specified.openstack.md5': '', 'owner_specified.openstack.sha256': '', 'owner_specified.openstack.object': 'images/Centos7', 'image_id': '7946cd2e-390e-4913-a2ec-c4fc2509a913', 'image_name': 'Centos7', 'checksum': 'd5dedb70692d04c20190f1d6f2ffdf6d', 'container_format': 'bare', 'disk_format': 'qcow2', 'min_disk': '0', 'min_ram': '0', 'size': '858783744'} |
+--------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

다음으로 Ceph Backend 설정이 정상적으로 적용 되었는지, 만들어진 Volume이 Ceph Backend를 사용하였는지, Log확인 방법, OpenStack과 Ceph 연동을 위한 Ceph 정보를 확인하는 방법에 대해 알아보겠습니다.

Tip💡

  1. OpenStack Cinder Ceph Backend 설정 적용 여부?

cinder가 동작 중인 Host에 접근하여 cinder_volume 컨테이너의 config파일을 확인하여 적용 정보를 확인할 수 있습니다.

docker ps | grep cinder
729bce1c6ff7   quay.io/openstack.kolla/cinder-backup:zed-ubuntu-jammy                   "dumb-init --single-…"   17 hours ago   Up 17 hours (healthy)             cinder_backup
d1dbc42d8f4b   quay.io/openstack.kolla/cinder-volume:zed-ubuntu-jammy                   "dumb-init --single-…"   17 hours ago   Up 17 hours (healthy)             cinder_volume
52428a1a4300   quay.io/openstack.kolla/cinder-scheduler:zed-ubuntu-jammy                "dumb-init --single-…"   17 hours ago   Up 17 hours (healthy)             cinder_scheduler
0cc05fe9c292   quay.io/openstack.kolla/cinder-api:zed-ubuntu-jammy                      "dumb-init --single-…"   17 hours ago   Up 17 hours (healthy)             cinder_api

docker exec -it -u root  cinder_volume bash
[DEFAULT]
```
enabled_backends = rbd-1,nfs

```
[rbd-1]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = rbd-1
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rados_connect_timeout = 5
rbd_user = cinder
rbd_secret_uuid = XXXXXXXXXXXXXXXXXXXXXXXX
report_discard_supported = True
  1. 생성한 Volume이 Ceph Backend를 사용했을까?

Cinder와 연동 된 Ceph RBD pool의 이름은 volumes ( ceph_cinder_pool_name: "volumes")였습니다. Ceph 클라이언트가 설치 된 노드에서 rbd명령어를 이용해 해당 pool에 생성 된 볼륨을 확인할 수 있습니다. 또한 Ceph 사용량을 조회하여 Volume 생성하기 전 후의 ceph 사용량을 통해 확인이 가능합니다.

openstack volume list
+--------------------------------------+------------------+-----------+------+-------------+
| ID                                   | Name             | Status    | Size | Attached to |
+--------------------------------------+------------------+-----------+------+-------------+
| 04226767-cd98-4181-b3fb-03a1e33542a6 | test-ceph-volume | available |   40 |             |
+--------------------------------------+------------------+-----------+------+-------------+

rbd ls -p volumes
volume-04226767-cd98-4181-b3fb-03a1e33542a6


ceph osd df tree
ID   CLASS  WEIGHT   REWEIGHT  SIZE     RAW USE  DATA     OMAP     META     AVAIL    %USE  VAR   PGS  STATUS  TYPE NAME
 -1         0.78145         -  400 GiB   10 GiB  9.0 GiB    8 KiB  1.2 GiB  390 GiB  2.54  1.00    -          root default
 -3         0.19536         -  200 GiB  9.6 GiB  9.0 GiB      0 B  596 MiB  190 GiB  4.79  1.88    -              host cephtest01
  2    ssd  0.09769   1.00000  100 GiB  4.8 GiB  4.5 GiB      0 B  298 MiB   95 GiB  4.78  1.88  193      up          osd.2
  5    ssd  0.09769   1.00000  100 GiB  4.8 GiB  4.5 GiB      0 B  298 MiB   95 GiB  4.79  1.88  193      up          osd.5
```
                        TOTAL  400 GiB   10 GiB  9.0 GiB  8.2 KiB  1.2 GiB  390 GiB  2.54    

ceph osd df tree
ID   CLASS  WEIGHT   REWEIGHT  SIZE     RAW USE  DATA     OMAP     META     AVAIL    %USE  VAR   PGS  STATUS  TYPE NAME
 -1         0.78145         -  400 GiB   11 GiB  9.6 GiB    8 KiB  1.2 GiB  389 GiB  2.69  1.00    -          root default
 -3         0.19536         -  200 GiB   10 GiB  9.6 GiB      0 B  604 MiB  190 GiB  5.08  1.89    -              host cephtest01
  2    ssd  0.09769   1.00000  100 GiB  5.1 GiB  4.8 GiB      0 B  302 MiB   95 GiB  5.08  1.89  193      up          osd.2
  5    ssd  0.09769   1.00000  100 GiB  5.1 GiB  4.8 GiB      0 B  302 MiB   95 GiB  5.08  1.89  193      up          osd.5
```
                        TOTAL  400 GiB   11 GiB  9.6 GiB  8.2 KiB  1.2 GiB  389 GiB  2.69    
MIN/MAX VAR: 0.11/1.89  STDDEV: 2.39
  1. OpenStack Cinder 관련 Log 확인 방법?

마찬가지로 OpenStack의 Log는 /var/log/kolla/ 하위에 존재하며 cinder 관련 로그를 확인할 경우에는 cinder 디렉토리에 있는 로그파일들을 참고하실 수 있습니다. 단, 안정성을 위해 Control노드를 여러대로 구성하였을 경우에는 Control 노드 별로 로그파일을 확인하셔야합니다.

cat /var/log/kolla/cinder/cinder-volume.log
cat /var/log/kolla/cinder/cinder-scheduler.log
cat /var/log/kolla/cinder/cinder-api.log
cat /var/log/kolla/cinder/cinder-api-access.log

  1. Ceph 구성 파일, 키링파일 위치?

ceph 구성 파일과 키링은 ceph노드의 /etc/ceph/ 에서 확인할 수 있습니다! 필요한 파일을 Deploy노드로 복사한 뒤 /etc/kolla/config/ 하위에 알맞게 위치 시켜주면 Kolla ansible 배포 시 적용 됩니다.

ll /etc/ceph/
total 52
drwxr-xr-x   2  167  167 4096 May 22 00:36 ./
drwxr-xr-x 109 root root 4096 May 30 06:49 ../
-rw-------   1  167  167  151 May 22 00:29 ceph.client.admin.keyring
-rw-------   1  167  167  176 May 22 00:34 ceph.client.cinder.keyring
-rw-------   1  167  167  131 May 22 00:36 ceph.client.crash.keyring
-rw-r--r--   1  167  167  638 May 22 00:28 ceph.conf
-r--------   1  167  167  141 May 22 00:30 ceph.mgr.cephtest01.keyring
-r--------   1  167  167  141 May 22 00:30 ceph.mgr.cephtest02.keyring
-r--------   1  167  167  141 May 22 00:30 ceph.mgr.cephtest03.keyring
-rw-r--r--   1 root root   77 May 22 00:28 ceph.mon.keyring
  1. OpenStack 컴포넌트에서 사용할 Ceph 사용자와 키, 권한 확인 방법?

먼저 Ceph 클러스터에서 Cinder 에서 사용할 풀 설정을 확인합니다. 저자는 Ceph ansible을 이용하여 Ceph Cluster를 배포하였으며, 동일한 방법으로 Ceph를 설치한 경우 /ceph-ansible/group_vars/all.yml 파일을 통해 설정 정보 확인이 가능합니다.

다음의 /ceph-ansible/group_vars/all.yml 파일에서 보여지는 설정은 Cinder에서 사용할 volumes 풀에 대한 설정과 OpenStack Cinder에서 사용할 Ceph 사용자와 키 설정입니다. client.cinder 사용자는 volumes 풀에 접근할 수 있는 권한을 가집니다.

/ceph-ansible/group_vars/all.yml

openstack_cinder_pool:
  name: "volumes"
  application: "rbd"
  size: 2
  min_size: 1
  pg_autoscale_mode: True

openstack_pools:
  - "{{ openstack_cinder_pool }}"

openstack_keys:
  - { name: client.cinder, caps: { mon: "profile rbd", osd: "profile rbd pool={{ openstack_cinder_pool.name }}"}, mode: "0600" }

Ceph 클라이언트가 설치 된 노드에서 ceph auth ls 명령어를 이용하여 Ceph 클러스터에서 client.cinder 사용자가 올바르게 생성되었는지, 그리고 해당 사용자가 필요한 권한을 가지고 있는지 확인할 수 있습니다.

ceph auth ls
client.cinder
        key: AQCnPU1mAAAAABAA7Y9854W2MrA2jXBwe8kklg==
        caps: [mon] profile rbd
        caps: [osd] profile rbd pool=volumes

Ceph Backend 구성 트러블 슈팅

OpenStack 노드가 Ceph 클러스터와 연결되지 않는 경우 Ceph 클러스터의 상태를 확인하고 네트워크 설정 확인 및 포트 개방 여부를 확인합니다.

Cinder가 Ceph 클러스터에 접근하지 못하는 경우 ceph auth ls 명령어로 사용자의 권한을 확인하고, 적절한 권한을 부여합니다.

Cinder에서 볼륨 생성 중 error가 발생하는 경우 /var/log/kolla/cinder 디렉토리의 로그파일들을 확인하여 문제 원인을 파악 할 수 있습니다.

Multi Backend 적용 확인

이번 섹션에서는 OpenStack Cinder에서 NFS와 Ceph 백엔드를 동시에 사용하는 Multi Backend 구성이 제대로 적용되었는지 확인하는 방법을 살펴보겠습니다. openstack volume service list 명령어와 /etc/kolla/config/cinder.conf 파일을 확인하여 설정이 올바르게 적용되었는지 확인할 수 있습니다.

Cinder 서비스 상태 확인

먼저, openstack volume service list 명령어를 통해 Cinder 서비스가 올바르게 동작하고 있는지 확인합니다. 아래 예시에서는 cinder-scheduler, cinder-volume 서비스가 enabled 상태이며, 두 백엔드(rbd-1, nfs)가 모두 up 상태로 등록되어 있습니다. 이 리스트를 통해 각 서비스가 제대로 실행 중이며, 설정한 백엔드들이 모두 활성화되었음을 확인할 수 있습니다.

openstack volume service list
+------------------+-----------------------+------+---------+-------+----------------------------+
| Binary           | Host                  | Zone | Status  | State | Updated At                 |
+------------------+-----------------------+------+---------+-------+----------------------------+
| cinder-scheduler | openstack             | nova | enabled | up    | 2024-05-31T01:46:10.000000 |
| cinder-volume    | openstack@rbd-1       | nova | enabled | up    | 2024-05-31T01:46:10.000000 |
| cinder-volume    | openstack@nfs         | nova | enabled | up    | 2024-05-31T01:46:10.000000 |
+------------------+-----------------------+------+---------+-------+----------------------------+

Cinder 설정 파일 확인

다음으로, /etc/kolla/config/cinder.conf 파일을 확인하여 두 백엔드(rbd-1, nfs)가 설정 파일에 올바르게 정의되어 있는지 확인합니다. 이 설정 파일에서 enabled_backends 항목이 rbd-1,nfs로 설정되어 있으며, 각 백엔드에 필요한 구체적인 설정들이 포함되어 있음을 확인할 수 있습니다.

cat /etc/kolla/config/cinder.conf
[DEFAULT]
enabled_backends = rbd-1,nfs

[rbd-1]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = rbd-1
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rados_connect_timeout = 5
rbd_user = cinder
rbd_secret_uuid = 5121c984-187e-43cc-bdcb-8712b222ca39
report_discard_supported = True

[nfs]
nfs_shares_config = /etc/kolla/config/nfs_shares
volume_driver = cinder.volume.drivers.nfs.NfsDriver
volume_backend_name = nfs
nfs_mount_options = vers=4

결론

Kolla Ansible을 사용하면 OpenStack 설치와 유지보수가 훨씬 간단해집니다. 이번 게시글에서 설명한 것처럼, Cinder Multi Backend의 세부적인 설정 및 적용 또한 Kolla Ansible을 통해 가능하며 다양한 스토리지 요구를 효과적으로 관리할 수 있어 안정적이고 유연한 스토리지 환경을 구축할 수 있습니다.

이번 게시글에서는 Kolla Ansible을 활용하여 OpenStack 환경에서 NFS와 Ceph 백엔드를 사용하는 Cinder Multi Backend 설정 방법을 살펴보았습니다. Ceph와 NFS를 동시에 사용하는 경우의 환경을 예를 들면, 고성능이 필요한 애플리케이션에는 Ceph를, 대용량 데이터 저장소에는 NFS를 사용할 수 있습니다.

본 게시글에서 다루지는 않았지만 Backend 간 우선순위 및 가중치 설정과 같은 유용한 옵션들이 다양하게 존재합니다. 또한 초기 구축이 아닌 Cinder Backend를 추가하는 경우에는 기존 설정 파일을 필수로 백업해 두시는 걸 추천드립니다!

이 게시글이 OpenStack의 Cinder, 즉 Storage를 보다 효과적으로 사용하고 관리하는데 도움이 되기를 바랍니다!

👉관련 글 더 읽어보기

Leave a Reply

Your email address will not be published. Required fields are marked *