본문 바로가기

쓰기

storage

Ceph 스토리지 구축

by 이곤아이 posted Sep 14, 2021
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

ceph 소개

  1. 분산 객체 스토리지를 구성하는 OSS
  2. 서버 구성은 OSD, Monitor, Manager, MDS 서버가 필요
  3. 논리적으로 구성한 Storage pool안에서 데이터를 개체로 저장. Crush알고리즘을 사용해서 배치그룹을 계산하고 저장

구성 정보

  1. Component 종류
    1. ceph-mon(모니터노드) : 클러스터 상태를 체크하고, 데몬과 클라이언트간 인증관리 담당 / HA구성시 3대 필요
    2. ceph-mgr(관리노드) : 스토리지 활용도  / 현재상태 및 메트릭 추적 (dashboard 및 RestAPI 제공) / HA구성시 2대 필요(Active / Standby)
    3. ceph-osd(객체스토리지 데몬) :  데이터를 저장하고 복제 / 부하분산 역활을 수행 (OSD디스크 1TB당 메모리 1G이상으로 구성을 권고), HA구성시 최소 3대 필요
    4. ceph-mds : CEPH FS를 대신해서 메타 데이터를 관리하는 서버. = Block Devices / Object Storage에서는 MDS를 사용하지 않음
  2. Component Hardware Spec

    Component Hardward Spec
    osd CPU OSD당 2 Core
      MEM 데몬당 4GB이상
      DISK

    최소 1TB이상,(SSD 권장)
    단일 디스크에서 여러 OSD 실행은 비권장
    단일 디스크에서 osd+mon+mds 실행방식 비권장
    OSD용 디스크는 OS와 분리해서 사용(성능저하 이슈)

      NIC 10G이상
    mon CPU 2코어 이상
      MEM 데몬당 24GB이상
      DISK 데몬당 60GB
    mds CPU 2코어 이상
      MEM 데몬당 2GB이상
      DISK 데몬당 1MB 이상
      NIC 1Gb 이상

    * OSD에 RAID구성시 성능저하가 발생할 수 있으므로 BMT를 통해 성능 비교 권고

 

시스템 이해

  1. OSD Backend
    1. Bluestore
      1. Ceph 12.2이후 부터 default storage
      2. 저장장치를 직접 엑세스 해서 데이터를 관리 - XFS같은 파일시스템을 사용하지 않음
      3. RocksDB를 통한 메타데이터 관리
      4. 전체 데이터 및 메타데이터 checksum 수행 - 무결성 유지
      5. inline압축 - 디스크에 저장하기 전에 선택적으로 압축수행
      6. 데이터 관리 계층화 - journal을 별도 장치에 기록할 수 있어 성능향상 가능.
      7. CoW을 사용하기 때문에 기존보다 향상된 IO
    2. Filestore
      1. Ceph에 개체를 저장하는 방식.
      2. 일부 메타데이터에 대해 LevelDB를 사용해 key/value로 저장
      3. 파일시스템을 btrfs / ext4에서 사용시 알려진 결함이 있어 데이터가 손실될 수 있음 (XFS는 영향없음)
  2. Pool
    1. 개체를 저장하기 위해 사용하는 논리 파티션
      1. Recovery : 데이터 손실없이 사용할 수 있도록 설정하는 OSD 
      2. PG : Pool에 대한 배치 그룹 수 (일반적으로 OSD당 100개의의 PG을 사용)
      3. Cursh Rule : 데이터를 Pool에 저장할때 Crush Rule에 의해 결정
      4. Snapshot : 특정 Pool의 스냅샷 생성
    2. Pool을 사용하기 위해서는 어플리케이션과 연결되어 있어야 하며, RBD에서 사용할 경우 RBD도구를 사용해서 초기화가 필요 (cephfs / rbd / rgw 중 택1)
  3.  CephFS
    1. 분산 개체 저장소인 RADOS를 기반으로 구축된 파일시스템
    2. 공유 디렉토리 및  HA를 제공
    3. CephFS는 데이터용와 메다데이터용으로 각각 2개이상의 RAODS Pool이 필요
      1. 메타데이터  pool에서 데이터가 손실되면 전체파일 시스템 액세스가 불가능
      2. 메타 데이터 pool에 SSD 사용
      3. 데이터 풀은 파일시스템을 생성하고, 기본적으로 모든 inode 정보를 저장하는 위치
  4. NFSExport
    1. NFS-Ganesha NFS를 이용해 CephFS 네임스페이스 export 가능

Ceph 설치하기 (ansible 기반의  ceph배포)

  • 설치 방법에는 cephadm / Rook / ansible을 이용한 설치방법이 존재,
    • cephadm - 자체적으로 설치하는 binary  container 혹은 python3이 필요
    • Rook - kuernetes에서 ceph를 설치하거나 기존 ceph를 k8s로 join할때 Rook을 이용
    • ceph-deply은 최신버전에서 사용되지 않음
  1. ceph-ansible을 설치하기 위한 python 패키지 설치
     

    $ yum install -y python3 python3-pip sshpass
    	$ pip3 install --upgrade setuptools pip --ignore-installed

     

     

  2. ceph-ansible 내려받기
     

    $ git clone https://github.com/ceph/ceph-ansible.git -b "v6.0.13"
    	$ cd ceph-ansible

     

    ceph-ansible 버전별 대응 버전

    ceph-ansible ceph ansible
    3.0 jewel / luminous 2.4
    3.1 luminous / mimic 2.4
    3.2 luminous / mimic 2.6
    4.0 nautilus 2.9
    5.0 octopus 2.9
    6.0 pacific 2.9

     

  3. dependency 패키지 설치
     

    $ pip3 install -r requirements.txt
  4. 배포를 위한 호스트파일 작성
     

    $ vi hosts
    	
    	[mons]
    	192.168.100.41
    	
    	[osds]
    	192.168.100.41
    	192.168.100.42
    	
    	[mdss]
    	
    	[rgws]
    	
    	[nfss]
    	192.168.100.41
    	
    	[rbdmirrors]
    	
    	[clients]
    	192.168.100.41
    	
    	[mgrs]
    	192.168.100.41
    	
    	[iscsigws]
    	
    	[iscsi-gws]
    	
    	[grafana-server]
    	
    	[rgwloadbalancers]
    	
    	[monitoring]
    	192.168.100.41
    	
    	[all:vars]
    	ansible_become=true
    	ansible_user=root
    	ansible_ssh_pass=next.123

     

  5. 환경변수 복사 (systemd 기반으로 구동시)
     

    $ cp site.yml.sample site.yml
    	$ cp group_vars/all.yml.sample  group_vars/all.yml
    	$ cp group_vars/osds.yml.sample  group_vars/osds.yml

     

  6. 환경변수 복사 (container 기반으로 구동시)
     

    $  cp site-container.yml.sample  site.yml
    	$ cp group_vars/all.yml.sample  group_vars/all.yml
    	$ cp group_vars/osds.yml.sample  group_vars/osds.yml

     

  7. config 설정 (systemd 기반으로 구동시)
     

    $ vi group_vars/all.yml
    	...
    	osd_objectstore: bluestore
    	monitor_interface: ens3f0
    	public_network: 192.168.100.0/24
    	ntp_service_enabled: true
    	ntp_daemon_type: chronyd
    	...
    	#############
    	# DASHBOARD #
    	#############
    	dashboard_enabled: false
    	dashboard_protocol: http
    	dashboard_port: 8081
    	dashboard_admin_user: admin
    	dashboard_admin_password: cs123!@#
    	containerized_deployment: false
    	...
    	configure_firewall: false
    	...
    	ceph_origin: repository
    	...
    	ceph_repository: community
    	...
    	ceph_stable_release: octopus
    	
    	
    	
    	$ vi group_vars/osds.yml
    	...
    	devices:
    	  - /dev/sdb
    	...
    	
    	
    	$ vi roles/ceph-validate/tasks/main.yml
    	...
    	    #해당 name 전체 삭제
    	    - name: validate ceph_repository_community  
    	      fail:
    	        msg: "ceph_stable_release must be 'pacific'"
    	      when:
    	        - ceph_origin == 'repository'
    	        - ceph_repository == 'community'
    	        - ceph_stable_release not in ['pacific'] 
    	...
    	
    	
    	Centos7에서 systemd 기반으로 구동시 dashboard가 호환되지 않아 false로 처리해야 함
    	ceph 릴리즈 버전 중 pacific 버전은 Centos7에서 nfs export가 되지 않아 octopus로 다운그레이드가 필요
    	config 설정 (ceph를 container로 구동시)
    	
    	$ vi group_vars/all.yml
    	...
    	osd_objectstore: bluestore
    	monitor_interface: ens3f0
    	public_network: 192.168.100.0/24
    	ntp_service_enabled: true
    	ntp_daemon_type: chronyd
    	...
    	#############
    	# DASHBOARD #
    	#############
    	dashboard_enabled: false
    	containerized_deployment: true
    	...
    	
    	
    	$ vi group_vars/osds.yml
    	...
    	devices:
    	  - /dev/sdb
    	...

     

  8. 배포
     

    $ ansible-playbook  -i hosts  site.yml -b -v

     

  9. cluster health check시 warn 발생시
     

    #Cluster 구성상태 모두 정상인데, health check warn으로 표시될 경우 조치방법 (ceph자체 버그로 의심)
    	$ ceph config set mon auth_allow_insecure_global_id_reclaim false

     


     

운영방법

  1. ceph cluster상태 확인
     

    	$  ceph status
    	  cluster:
    	    id:     ca96d48d-1c9d-4168-9f21-ffda54a5cd9c
    	    health: HEALTH_OK
    	
    	  services:
    	    mon: 2 daemons, quorum openstack-dev1,openstack-dev2 (age 87m)
    	    mgr: openstack-dev1(active, since 78m), standbys: openstack-dev2
    	    osd: 3 osds: 3 up (since 83m), 3 in (since 2h)
    	
    	  data:
    	    pools:   5 pools, 105 pgs
    	    objects: 49 objects, 5.3 KiB
    	    usage:   41 MiB used, 300 GiB / 300 GiB avail
    	    pgs:     105 active+clean

     

  2. ceph osd 상태 확인
     

    $ ceph osd tree
    	ID  CLASS  WEIGHT   TYPE NAME                STATUS  REWEIGHT  PRI-AFF
    	-1         0.29306  root default
    	-5         0.09769      host dev1
    	 2    hdd  0.09769          osd.2                up   1.00000  1.00000
    	-3         0.09769      host dev2
    	 0    hdd  0.09769          osd.0                up   1.00000  1.00000
    	-7         0.09769      host dev3
    	 1    hdd  0.09769          osd.1                up   1.00000  1.00000
    	 

     

  3. ceph현재 latency 확인방법
     

    $ ceph osd perf
    	osd  commit_latency(ms)  apply_latency(ms)
    	  2                   0                  0
    	  0                   0                  0
    	  1                   0                  0
    	
    	# commit은 시스템 call이 있기 때문에 일반적으로 100 ~ 600ms까지는 수용가능한 수준으로 판단
    	# 메모리내 적용된 파일을 파일시스템에 적용하는 시간 (ms단위, 실제 성능에 판단되는 시간)

     

  4. nfs 오류시 로그 확인
     

    $ cephadm logs --fsid <fsid> --name nfs.{{ clusteid }}.hostname

     

파일시스템 

  1. CephFS - Pool 관리
     

    $ ceph osd lspools

     

  2. Pool 생성
     

    #Pool 생성
    	$ ceph osd pool create {{ DATA_POOL_NAME }}
    	$ ceph osd pool create {{ METADATA_POOL_NAME }}
    	
    	#CephFS는 데이터용과 메타데이터용 각각 2개이상의 RADOS풀 필요

     

  3. 생성된 Pool을 애플리케이션에 연결 (cephfs로 연결)
     

    $ ceph osd pool application enable {{ DATA_POOL_NAME }} cephfs

     

  4. 파일시스템 생성
     

    $ ceph fs new {{ FS_NAME }} {{ METADATA_POOL_NAME  }} {{DATANAME }}

     

  5. NFS  export
     

    # 1. nfs module설정
    	$ ceph mgr module enable nfs
    	
    	
    	# 2. nfs ganesha 클러스터 생성
    	$ ceph nfs cluster create {{ clusterid }} 
    	
    	# 3. nfs export
    	$ ceph nfs export create cephfs {{ NAME }} {{ clusterid }

     

     

 

reference

  1. https://docs.ceph.com/en/latest/architecture/
  2. https://www.slideshare.net/jenshadlich/ceph-object-storage-at-spreadshirt-july-2015-ceph-berlin-meetup
TAG •
?

List of Articles
번호 분류 제목 글쓴이 조회 수 날짜
5 storage Glusterfs rpm 설치 이곤아이 200 2021.09.22
4 storage DRBD 기술노트 이곤아이 246 2021.09.17
3 storage RHEL환경에서 VDO 사용하기 이곤아이 291 2021.09.17
» storage Ceph 스토리지 구축 이곤아이 349 2021.09.14
1 storage centos6에서 iscsi 연결하기 이곤아이 307 2021.09.13
목록
Board Pagination Prev 1 Next
/ 1