게시물 1,376건
   
RADOS(Reliable Autonomic Distributed Object Store) 설명
글쓴이 : 최고관리자 날짜 : 2019-03-06 (수) 13:26 조회 : 6929
글주소 :
                                
RADOS(Reliable Autonomic Distributed Object Store)

- RADOS 의미
   - Reliable : 복제를 통해 데이터 분실을 회피한다.
   - Autonomic : 서로 통신하여 failure를 감지하고 투명한 복제를 수행
   - Distributed
   - Object Store

- Ceph의 기반이며 모든 것들은 RADOS내에 저장된다.
- Ceph의 중요한 기능을 제공한다.(분산 오브젝트 저장, HA, 신뢰성, no SPOF, self healing, self managing 등)
- CRUSH 알고리즘을 포함한다.
- 모든 Data는 RADOS를 거쳐 object로 저장하게 된다.
- 데이터 타입을 구분하지 않는다.(즉, object, block, file 등을 구분하지 않고 최종 object로 저장한다.)
- object chunk는 4MB 이다.



1. librados : C/C++/Python/Ruby 등이 사용가능하며 TCP/IP 통신을 기반한 raw socket를 사용하여 통신이 이루어진다. HTTP를 사용하지 않고 direct로 연결이 되기 때문에 HTTP overhead를 가지지 않는다.
- 실제 librados를 통해 연결되는 방식은 다음과 같다.

import rados
cluster = rados.Rados(conffile='ceph.conf')
cluster.connect()
cluster_stats = cluster.get_cluster_stats()


2. RadosGW : Rest (혹은 S3, Swift 등) interface 를 통해 Rados cluster 에 object를 저장한다.

3. RBD : Block Storage로 다음과 같은 기능을 제공한다.
- RADOS에서 disk image의 저장소
- Host로부터 VM들을 분리한다.
- object block size는 기본이 4M이고 4k부터 32M까지 설정이 가능하다.
  (http://docs.ceph.com/docs/kraken/man/8/rbd/)
- kernel module을 2.6.39부터 공식 지원한다.

4. CephFS : RADOS내에 존재하는 metadata 서버를 연결하여 file 정보를 확인한후 연결을 수행한다.




주요 알고리즘

우선 ceph의 경우 metadata 서버나 storage 서버에서 직접 계산하는 방식이 아닌 client에서 policy기반으로 계산을 하여 object의 위치를 탐색한다. 해당하는 알고리즘이 CRUSH 알고리즘이다.


CRUSH (Controlled Replication Under Scalable Hashing)
- 클러스터내에 object의 지능적인 분산 작업을 수행한다.
- RADOS에서 사용하는 알고리즘으로 object의 위치를 계산을 통해 결정한다.
- 계산된 데이터 저장소에 의해 어떻게 데이터를 저장하고 가져올지 결정하는 알고리즘
- ceph client는 중앙에 서버나 브로커를 통하기보다 직접 OSD와 통신한다.
- CRUSH는 빠르게 계산이 되고 lookup 과정이 없다. 또한 input이 output에 영향을 미치고 결과가 변하지 않는다.

- ruleset
  - pool에 할당되고 ceph client가 데이터를 저장하거나 가져갈때 CRUSH ruleset를 확인한다.
  - object에 대한 PG가 포함된 primary OSD를 식별한다.
  - 해당 ruleset은 ceph client가 OSD에 직접 연결하여 데이터의 쓰기/읽기를 하게 한다.

- workflow
  1. PG 할당
    - pg = Hash(object name) % num pg
  2. CRUSH(pg, cluster map, rule) 함수 계산
    - 해당 CRUSH를 거치면 OSD.(NUM)이 나옴
      즉, 저장될 OSD number가 나와 해당 OSD에 저장됨
       - https://javiermunhoz.com/blog/2016/04/30/scalable-placement-of-replicated-data-in-ceph.html

  


- Cluster map
  - 계층적인 OSD map
- Failure Domain
- Pseudo-Random (유사난수)
  (http://www.sebastien-han.fr/blog/2012/12/07/ceph-2-speed-storage-with-crush/)
https://ceph.com/wp-content/uploads/2016/08/weil-crush-sc06.pdf
https://www.slideshare.net/Yuryu/what-you-need-to-know-about-ceph


주요개념
cluster > pool > PG > object
1. cluster
   - ceph 배포에 기본이다.
   - default 는 ceph로 create 된다.
   - 다수의 cluster를 생성할수도 있다.
     (만약 cluster를 다수 생성하는 경우라면 cluster 에 적절한 port를 설정하여 conflict이 발생되지 않도록 한다.)
   - http://docs.ceph.com/docs/master/rados/deployment/ceph-deploy-new/

2. pool
   - Pool은 Ceph의 논리적 파티션을 의미한다. 
   - 데이터 타입에 따른 Pool을 생성할 수 있다. (예를 들어 block devices, object gateways 등)
   - pool 마다 pg 갯수 / replica 갯수를 지정할 수 있다.
     즉, pool마다 복제될 object 갯수를 지정할 수 있다.
   - pool type : replication, Erasure Code 이렇게 두개의 방식이 사용된다.

3. placement group(PG)
   - exabyte scale의 storage cluster에서는 몇백만개, 그이상의 object가 존재할지 모른다.
     이러한 환경에서의 관리가 어렵기에 pg를 두어 pool의 조각을 만든다.
   - 만약 cluster size보다 상대적으로 적은 PG를 가질 경우 PG마다 너무 많은 data를 가지게 되어 좋은 성능을 낼수 없다.
   - pool에 대한 pg의 갯수는 다음의 공식을 사용해 계산한다.
     (osds X 100) / replicas = (ceph osd stat  X 100) / ceph osd pool get [pool_name] size

4. object
   - 실제 OSD에 저장되는 data이다.
   - ID + binary data + metadata (key/value)


실제 데이터를 저장하고 가져오는 일련의 과정
Client는 최초 Monitor와 Cluster Map을 요청하여 전달받고 Cluster Map에 요청하려 했던 DATA의 위치를 확인하고 해당 OSD와 직접 연결을 수행하여 데이터에 대한 Operation을 수행한다.

1. ceph client는 ceph monitor에 접속하여 최신의 cluster map을 가져온다.
   (cluster map은 node의 up/down 상태정보를 가지고 있다.)

2. ceph client는 cluster map을 cache하고 업데이트가 가능한 경우 새로운 map을 가져온다.
3. ceph client에서는 data를 object/pool id가 포함된 object로 변환한다.
4. ceph client에서는 CRUSH algorithm을 사용해 PG와 Primary OSD를 결정한다.

5. ceph client는 primary OSD를 연결하여 data를 직접 저장하고 가져온다.
   (client에서 OSD에 직접 data를 쓴다.)
6. Primary OSD는 Crush Lookup을 실행하여 secondary PGs와 OSD를 결정한다.
7. replicate pool에서는 primary OSD는 secondary OSD들에 data를 전송하고 object를 복사한다.
8. erasure coding pool에서는 primary OSD는 object를 chunk로 분할하고 chunk들을 encode 하여 secondary OSD들에 writing 한다.
https://youtu.be/799XZyHOuHA


개인적으로 정리한 내용을 아래와 같은 diagram으로 표현해보았다.



Object 의 정보
아래 command를 통해 object 대한 정보를 확인할 수 있다.

① OSD map version
② pool name
③ pool ID
④ object name
⑤ placement group ID (object 가 속한)
⑥ OSD 5,6 번에 속해 있고 현재 UP
⑦ OSD 5,6 번에 속해 있고 현재 동작중
   - http://ceph.com/geen-categorie/how-data-is-stored-in-ceph-cluster/



이름 패스워드
비밀글 (체크하면 글쓴이만 내용을 확인할 수 있습니다.)
왼쪽의 글자를 입력하세요.
   

 



 
사이트명 : 모지리네 | 대표 : 이경현 | 개인커뮤니티 : 랭키닷컴 운영체제(OS) | 경기도 성남시 분당구 | 전자우편 : mojily골뱅이chonnom.com Copyright ⓒ www.chonnom.com www.kyunghyun.net www.mojily.net. All rights reserved.