KSAN : Software Defined Storage for Objects and Files

Overview

KSAN : Software Defined Storage for Objects and Files

Overview

KSAN은 대규모 오브젝트 스토리지 서비스를 안정적이며 효율적으로 제공하기 위해 설계된 소프트웨어 정의 오브젝트 스토리지 시스템입니다.

KSAN 시스템은 기본적으로 이중화된 Management Server(MGS)와 확장 가능한 ksanNode 집합으로 구성됩니다.


Management Server(MGS)는 이중화 구성을 권장하며, KSAN 시스템의 모든 노드와 서비스를 모니터링하고 관리하는 역할을 담당합니다.

ksanNode는 구성에 따라 다양한 역할을 할 수 있도록 설계되어 있습니다.

ksanNode는 기본적으로 오브젝트 스토리지의 확장 가능한 백엔드 저장장치의 역할을 하며, AWS S3 호환 서비스를 동시에 처리할 수 있도록 설계되어 있습니다. 또한 메타데이터를 보관하는 방식(예를 들어 MariaDB, MongoDB 등)에 따라 ksanNode 내에 메타데이터 저장소를 배치할 수 있습니다.



Key Features

확장 가능한 오브젝트 스토리지

KSAN 시스템은 스케일-아웃 형태의 확장을 지원합니다.

관리자는 ksanNode를 KSAN 서비스의 중단없이 필요에 따라 추가할 수 있도록 설계되었습니다. 증설된 ksanNode의 OSD/OSDDISK를 기존 OSDDISK 그룹에 편입하면 즉시 스토리지 풀이 확장됩니다. 또한 증설된 ksanNode의 S3GW는 기존 오브젝트 스토리지 서비스 풀에 즉시 참여 가능하며 서비스 대역폭을 확장하는 역할을 합니다.


업계 표준의 다양한 오브젝트 스토리지 서비스 API 지원

KSAN은 오브젝트 스토리지 서비스 시장에서 가장 널리 사용되는 오브젝트 스토리지 서비스 API와 호환성을 제공하여 기존 클라우드 기반의 어플리케이션의 수정없이 사용할 수 있게 합니다.

KSAN은 AWS S3 호환 API를 기본적으로 제공하고 개발 로드맵에 따라 Microsoft Azure API 및 Google Cloud API를 순차적으로 제공할 예정입니다.

현재 KSAN에서 지원하는 AWS S3 호환 API는 이 문서(S3 Compatible API)를 참조해 주십시오.

⚠️ Microsoft Azure API 및 Google Cloud API는 각각 2022년, 2023년에 단계적으로 지원할 예정입니다.


미션 크리티컬 서비스에 즉시 도입 가능한 고가용성을 지원

KSAN 시스템은 메타데이터를 관리하기 위해 MariaDB와 같은 RDBMS와 mongoDB와 같은 NoSQL DB 등으로 구성할 수 있도록 설계되었으며, 각각의 지원 대상에 따라 최적화된 방식으로 DB 서비스의 고가용성을 지원합니다.

⚠️ mongoDB와 같은 NoSQL DB 지원은 로드맵에 따라 2022년 3분기 이후에 제공될 예정입니다.

그리고 KSAN 시스템의 오브젝트 데이터는 서로 다른 OSD의 OSDDISK에 복제본을 배치 및 저장하는 방식으로 단일 지점의 물리적인 장애에 대응하도록 설계되었습니다. 또한 S3GW는 HAProxy 등의 서비스 로드밸런서를 이용해 오브젝트 스토리지 서비스의 가용성을 보장할 수 있습니다.

또한 KSAN 시스템은 재해 상황에 대해서도 서비스 가용성을 보장할 수 있습니다. 2022년 3분기 이후에 공개 및 제공이 예정되어 있는 ksanDR 모듈은 지역적으로 배치되는 KSAN 시스템들 간의 오브젝트 데이터를 실시간으로 동기화하는 기능을 제공할 예정입니다.

⚠️ 재해 상황에 대한 서비스 고가용성 지원을 위한 ksanDR 기능은 2022년 3분기에 공개될 예정입니다.


유연하고 효율적인 저장 자원의 관리 지원

이더넷으로 연결된 ksanNode Cluster의 백엔드 저장 자원인 OSDDISK의 그룹은 특별한 설정없이 모든 사용자가 동시에 사용할 수 있습니다. 특정 버켓의 오브젝트를 삭제하면 즉시 해당 백엔드 저장 자원은 반환되며, 다른 버켓의 오브젝트 저장에 즉시 활용할 수 있습니다.

또한 1+1 복제 방식으로 OSDDISK에 분산 저장된 오브젝트 데이터를 특정 시간이 지나면 자동으로 Erasure Coding으로 처리해 더 적은 백엔드 저장 자원으로 오브젝트 데이터를 보관할 수 있도록 설계되었습니다.

⚠️ KSAN의 완전한 Erasure Coding 기능은 2022년 3분기에 공개될 예정입니다.



KSAN 시작하기

Quick Start Guide 문서를 참고하여 KSAN을 직접 사용해 보세요.





⚠️ 이 프로젝트는 아직 상업적 제품 제작에 적합한 단계가 아닙니다. 2022년 중에 상업적 이용에 적합한 수준에 도달하는 것을 목표로 하고 있습니다.

ℹ️ 이 프로젝트를 교육 및 연구목적에 적합한 단계입니다. 교육에 활용하는 경우 연락해주시면 필요에 따라 기술지원을 제공해 드리겠습니다.


ℹ️ 이 프로젝트는 2021년도 정부(과학기술정보통신부)의 재원으로 정보통신기획평가원의 지원을 받아 수행된 연구임 (No.2021-0-00422)

ℹ️ This Project was supported by Institute of Information & communications Technology Planning & Evaluation (IITP) grant funded by the Korea government(MSIT) (No.2021-0-00422)

Comments
  • objmanager:mysql backend table column type varchar is not enough

    objmanager:mysql backend table column type varchar is not enough

    The following columns defined as var char but sometime it might be bigger than the size defined in the var char. It is better to come up with better data type that support the nature of our system.
    BUCKETS acl web cors lifecycle access tagging replication encryption objectlock policy

    MULTIPARTS acl meta etag

    enhancement 
    opened by legesse24 3
  • Objmanager:- support mongo db

    Objmanager:- support mongo db

    Due to changes applied only on mysql interface the mongod db interface was out of sync. It need to be synced with mysql interface to fully support mongod db.

    opened by legesse24 2
  • 1.2.0

    1.2.0

    v1.2.0

    ksanGW

    AWS S3-Compatible API 지원

    • (NEW) DeleteBucketLogging
    • (NEW) DeleteBucketTagIndex
    • (NEW) GetBucketLogging
    • (NEW) GetBucketTagIndex
    • (UPDATE) GetObejctLockConfiguration → GetObjectLegalHold
    • (NEW) PostObject
    • (NEW) PutBucketLogging
    • (NEW) PutBucketTagIndex
    • (UPDATE) PutObjectLockConfiguration → PutObjectLegalHold
    • (NEW) PutObjectRetention
    • (NEW) RestoreObject
    • (BUG-FIX) KsanReplication
      • 연동 관련 API 버그 수정
    • (ENHANCEMENT) PutObject
      • MD5 : OpenSSL4로 변경
    • (ENHANCEMENT) 모든 API
      • Polish, Grant 확인 코드 추가
    • (BUG-FIX) CompleteMultipartUpload, UploadPart, UploadCopyPart
      • 로컬 디스크가 없는 경우 OSD 연동 처리 버그 수정
    • (ENHANCEMENT) GetObject, DeleteObject
      • object가 EC된 경우 처리 추가

    Azure Blob Storage Compatible API 지원

    • (NEW) CreateContainer
    • (NEW) DeleteBlob
    • (NEW) DeleteContainer
    • (NEW) GetProperties
    • (NEW) HeadBlob
    • (NEW) HeadContainer
    • (NEW) ListBlobs
    • (NEW) ListContainers
    • (NEW) PutBlob
    • (NEW) PutBlock
    • (NEW) PutBlockList
    • (NEW) SharedKeyAuth

    ObjManager

    • (NEW) search objects with tags future
    • (NEW) Store and retrieve restoreObject request
    • (BUG-FIX) In maraidb backend, utfmb4 typed column not support indexing when the string have more than 191 character bug fix.

    ksanOSD

    • (ENHANCEMENT) Header 처리 방식 수정
      • CompleteMultipartUpload를 처리하기 위해서 PartList 정보를 받기 위해 Header 길이 설정하는 부분 수정
    • (ENHANCEMENT) trash 파일 지우는 Thread, Cache 에서 Disk로 옮기는 Thread
      • Config 설정에 의해 동작하도록 변경
    • (NEW) getECpart, putECPart, deleteECPart
      • EC 처리

    ksanApiPortal

    • (NEW) EC 설정기능 추가
    • (NEW) 서비스 조회시 서버 정보를 포함하여 전달 하도록 변경
    • (NEW) 서버 세부 조회 API 추가(/ap1/v1/Servers/Details)
    • (NEW) 최초 설치시 서비스와 설정정보를 자동으로 등록하는 기능 추가
      • ksanReplicationManager
      • ksanLifecycleManager
      • ksanLogManager
      • ksanGW
      • ksanOSD
    • (ENHANCEMENT) 디스크풀의 타입과 Replication 설정이 변경 가능하도록 개선
    • (ENHANCEMENT) Disk, DiskPool, Server, Service, KsanUSer 의 이름 중복 검사 기능 개선
    • (ENHANCEMENT) 명칭 변경으로 config, serviceType의 값도 동일하게 변경
      • ksanReplication → ksanReplicationManager
      • ksanLifecycle→ksanLifecycleManager
      • ksanLogmanager→KsanLogManager
    • (ENHANCEMENT) 디스크를 서비스에 추가할 수 없도록 변경
    • (ENHANCEMENT) 서버에 연결된 서비스가 존재할 경우 삭제할 수 없도록 변경
    • (ENHANCEMENT) 서버 정보 조회시 Free 메모리 용량을 자동 계산하도록 변경
    • (ENHANCEMENT) 디스크의 서버 정보를 변경할 수 있도록 개선
    • (ENHANCEMENT) RabbitMQ의 연결이 끊어졌을 경우 자동으로 재시도 하도록 변경
    • (ENHANCEMENT) 환경변수로 최초 생성 유저의 정보를 고정 할 수 있도록 개선
    • (BUG-FIX) Service 등록실패시 메시지의 오타 수정
    • (BUG-FIX) KsanAgent → ksanAgent 대소문자 오타 수정
    • (BUG-FIX) 스토리지 클래스 명이 소문자로 전달되는 버그 수정
    • (BUG-FIX) 서버, 서비스의 상태가 반영되지 않는 버그 수정
    • (BUG-FIX) 환경변수가 제대로 반영되지 않는 버그 수정

    ksanAgent

    • (ENHANCEMENT) rabbitmq 서버 연결 실패 시 retry 기능 추가
    • (BUG-FIX) 서비스 추가 시 .ServiceId 파일의 ServiceId 중복되는 버그 수정

    ksanLifecycleManager

    • (ENHANCEMENT) ksanLifecycle이 ksanLifecycleManager로 명칭이 변경
      • log 설정 파일 명칭 변경
      • 서비스 명 변경
      • Docker 파일명 변경
      • Docker 이미지명 변경

    ksanLogManager

    • (NEW) ksanGW의 로그를 RabbitMQ로 받아서 DB에 저장
    • (NEW) ksanReplicationManger의 로그를 RabbitMQ로 받아서 DB에 저장
    • (NEW) ksanLifecycleManager의 로그를 RabbitMQ로 받아서 DB에 저장

    ksanReplicationManager

    • (NEW) ksanGW의 로그를 RabbitMQ로 받아서 버킷의 Replication 설정에 따라 복제
    • (BUG-FIX) ReplicationData : Boolean → boolean 으로 변수타입 수정 (Null값 불허용)

    CLI & Utility

    통합 관리 도구(CLI)

    • (BUG-FIX) ksan 유틸리티 참조 모듈 path 위치 못 찾는 버그 수정
    • (NEW) ksanFsck, ksanCbalance, ksanGetattr 기능을 ksan 유틸리티에 연동
    • (NEW) ServerId 기준 서버 ip/netmask/gateway 변경 기능 ksan 유틸리티에 추가
    • (NEW) DiskId 기준 ServerId 정보 변경 기능 ksan 유틸리티에 추가
    • (ENHANCEMENT) ksan 정보 출력 결과 (sysinfo, server, disk, diskpool, service, user) format 변경 및 정렬
    • (ENHANCEMENT) Diskpool replication 타입 변경(--RepType → --Tolerance)
    • (ENHANCEMENT) Diskpool replication 타입 추가(EC)

    ETC

    설치 스크립트

    • (NEW) ksanLifecycleManager, ksanLogManager, ksanReplicationManager 모듈 설치 기능 추가
    • (NEW) offline/timeout/unknown 서비스 모니터링 및 재시작 기능 추가
    • (ENHANCEMENT) 설치 summary 정보 변경
    • (BUG-FIX) docker-support 모듈 패치 버그 수정

    한계 및 향후 계획

    한계 및 알려진 문제점

    • ksanReplicationManager
      • DeleteMarker 동기화 기능 동작시 DeleteObjects로 삭제한 오브젝트의 동기화가 올바르게 동작하지 않음
      • CopyObject로 업로드한 오브젝트가 복제되지 않음

    향후 계획

    • WEB 기반 KSAN 관리 인터페이스 개발 및 공개 (프로토타입)
    • ksanReplicationManager
      • 설정 지원 도구(CLI) 개발 및 공개
      • 알려진 문제점 해결 (DeleteMarker, CopyObject 대응 등)
    • ksanLifecycleManager
      • s3backend의 공통 라이브러리를 사용하도록 변경
    • ksanGW
      • S3 서비스 성능 최적화
      • Azure Blob Service 안정화
      • Erasure Coding 기능 안정화
    • ksanFSCK
      • Erasure Coding 오브젝트 정합성 검사 및 복구 지원
    opened by pspace-jwkwak 1
  • ksanAgent serviceId 파일 생성 버그

    ksanAgent serviceId 파일 생성 버그

    service가 추가되고 portal이 rabbitmq 로 해당 정보를 broadcasting 하면 ksanAgent 가 해당 serviceId 파일을 sbin 에 생성하는데 local server에 맞는 service 인지(serverId 체크 필요) 확인과정이 생략되어 처음 등록되는 serviceId 로 모두 업데이트 됨.

    opened by bkfly2000 1
  • mongodb listobjectversion query error

    mongodb listobjectversion query error

    INFO 2022-06-21 15:08:22.422 [S3-729][c.p.i.k.g.a.ListObjectVersions.isGrantBucket:522] : bucket owner id : 52920015-c11e-4900-9039-5e4b786f6658 INFO 2022-06-21 15:08:22.422 [S3-729][c.p.i.k.g.d.DataListObjectVersions.extract:41] : delimiter is null or empty INFO 2022-06-21 15:08:22.422 [S3-729][c.p.i.k.g.d.DataListObjectVersions.extract:46] : encodingType is null or empty INFO 2022-06-21 15:08:22.422 [S3-729][c.p.i.k.g.d.DataListObjectVersions.extract:56] : maxKeys is null or empty INFO 2022-06-21 15:08:22.422 [S3-729][c.p.i.k.g.d.DataListObjectVersions.extract:61] : prefix is null or empty DEBUG 2022-06-21 15:08:22.423 [S3-729][c.p.i.k.g.a.ListObjectVersions.process:78] : maxKeys = 1000 Query failed with error code 2 and error message '$options needs a $regex' on server 192.168.31.11:27017 ERROR 2022-06-21 15:08:22.425 [S3-729][c.p.i.k.g.a.ListObjectVersions.logging:21] : com.mongodb.MongoQueryException: Query failed with error code 2 and error message '$options needs a $regex' on server 192.168.31.11:27017 ERROR 2022-06-21 15:08:22.426 [S3-729][c.p.i.k.g.a.ListObjectVersions.logging:23] : com.pspace.ifs.ksan.objmanager.ListObject.listObjectAndParse(ListObject.java:660) ERROR 2022-06-21 15:08:22.426 [S3-729][c.p.i.k.g.a.ListObjectVersions.logging:23] : com.pspace.ifs.ksan.objmanager.ListObject.(ListObject.java:154) ERROR 2022-06-21 15:08:22.426 [S3-729][c.p.i.k.g.a.ListObjectVersions.logging:23] : com.pspace.ifs.ksan.objmanager.ObjManager.listObjectVersions(ObjManager.java:621) ERROR 2022-06-21 15:08:22.426 [S3-729][c.p.i.k.g.a.ListObjectVersions.logging:23] : com.pspace.ifs.ksan.gw.api.S3Request.listObjectVersions(S3Request.java:1181) ERROR 2022-06-21 15:08:22.426 [S3-729][c.p.i.k.g.a.ListObjectVersions.logging:23] : com.pspace.ifs.ksan.gw.api.ListObjectVersions.process(ListObjectVersions.java:88) ERROR 2022-06-21 15:08:22.426 [S3-729][c.p.i.k.g.a.ListObjectVersions.logging:23] : com.pspace.ifs.ksan.gw.handler.GWHandler.doHandle(GWHandler.java:178) ERROR 2022-06-21 15:08:22.426 [S3-729][c.p.i.k.g.a.ListObjectVersions.logging:23] : com.pspace.ifs.ksan.gw.handler.GWHandlerJetty.handle(GWHandlerJetty.java:72) ERROR 2022-06-21 15:08:22.426 [S3-729][c.p.i.k.g.a.ListObjectVersions.logging:23] : org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122) ERROR 2022-06-21 15:08:22.426 [S3-729][c.p.i.k.g.a.ListObjectVersions.logging:23] : org.eclipse.jetty.server.Server.handle(Server.java:562)

    bug 
    opened by legesse24 1
  • DiskPool에 추가정보 요청

    DiskPool에 추가정보 요청

    DiskPool에 추가적인 설정이 필요합니다.

    • ReplicaCount : 데이터 보존을 위한 백업용 데이터 생성을 지원할지 여부 선택
      • OnePulsZero(1 + 0) : 추가적인 데이터 복제를 하지 않음
      • OnePulsOne(1 + 1) : 다른 디스크에 복제본 1개 생성
      • OnePulsTwo(1 + 2) : 다른 디스크 2곳에 복제본 1개씩 생성
    enhancement 
    opened by pspace-jwkwak 1
  • objmanager listobject method mongodb version unknown top level operator error

    objmanager listobject method mongodb version unknown top level operator error

    listobject method failed with DEBUG 2022-03-15 12:14:43.809 [c.p.i.k.o.ListObject.bindAndExcute:1032]: >> bucketName : my-test-java-wc9je4ym3rbmg8k-2j7ia >>mongo query : {"$and": [{"lastversion": true}, {"deleteMarker": {"$ne": "mark"}}, {"objKey": {"$gt": "obj1"}}, {"$gte": "_under10"}]} maxKeys : 1 ERROR 2022-03-15 12:14:43.812 [c.p.i.k.o.ListObject.listObjectAndParse:1200]: Query failed with error code 2 and error message 'unknown top level operator: $gte' on server 192.168.13.17:27017

    bug 
    opened by legesse24 1
  • 1.2.0 merge

    1.2.0 merge

    v1.2.0

    ksanGW

    AWS S3-Compatible API 지원

    • (NEW) DeleteBucketLogging
    • (NEW) DeleteBucketTagIndex
    • (NEW) GetBucketLogging
    • (NEW) GetBucketTagIndex
    • (UPDATE) GetObejctLockConfiguration → GetObjectLegalHold
    • (NEW) PostObject
    • (NEW) PutBucketLogging
    • (NEW) PutBucketTagIndex
    • (UPDATE) PutObjectLockConfiguration → PutObjectLegalHold
    • (NEW) PutObjectRetention
    • (NEW) RestoreObject
    • (BUG-FIX) KsanReplication
      • 연동 관련 API 버그 수정
    • (ENHANCEMENT) PutObject
      • MD5 : OpenSSL4로 변경
    • (ENHANCEMENT) 모든 API
      • Polish, Grant 확인 코드 추가
    • (BUG-FIX) CompleteMultipartUpload, UploadPart, UploadCopyPart
      • 로컬 디스크가 없는 경우 OSD 연동 처리 버그 수정
    • (ENHANCEMENT) GetObject, DeleteObject
      • object가 EC된 경우 처리 추가

    Azure Blob Storage Compatible API 지원

    • (NEW) CreateContainer
    • (NEW) DeleteBlob
    • (NEW) DeleteContainer
    • (NEW) GetProperties
    • (NEW) HeadBlob
    • (NEW) HeadContainer
    • (NEW) ListBlobs
    • (NEW) ListContainers
    • (NEW) PutBlob
    • (NEW) PutBlock
    • (NEW) PutBlockList
    • (NEW) SharedKeyAuth

    ObjManager

    • (NEW) search objects with tags future
    • (NEW) Store and retrieve restoreObject request
    • (BUG-FIX) In maraidb backend, utfmb4 typed column not support indexing when the string have more than 191 character bug fix.

    ksanOSD

    • (ENHANCEMENT) Header 처리 방식 수정
      • CompleteMultipartUpload를 처리하기 위해서 PartList 정보를 받기 위해 Header 길이 설정하는 부분 수정
    • (ENHANCEMENT) trash 파일 지우는 Thread, Cache 에서 Disk로 옮기는 Thread
      • Config 설정에 의해 동작하도록 변경
    • (NEW) getECpart, putECPart, deleteECPart
      • EC 처리

    ksanApiPortal

    • (NEW) EC 설정기능 추가
    • (NEW) 서비스 조회시 서버 정보를 포함하여 전달 하도록 변경
    • (NEW) 서버 세부 조회 API 추가(/ap1/v1/Servers/Details)
    • (NEW) 최초 설치시 서비스와 설정정보를 자동으로 등록하는 기능 추가
      • ksanReplicationManager
      • ksanLifecycleManager
      • ksanLogManager
      • ksanGW
      • ksanOSD
    • (ENHANCEMENT) 디스크풀의 타입과 Replication 설정이 변경 가능하도록 개선
    • (ENHANCEMENT) Disk, DiskPool, Server, Service, KsanUSer 의 이름 중복 검사 기능 개선
    • (ENHANCEMENT) 명칭 변경으로 config, serviceType의 값도 동일하게 변경
      • ksanReplication → ksanReplicationManager
      • ksanLifecycle→ksanLifecycleManager
      • ksanLogmanager→KsanLogManager
    • (ENHANCEMENT) 디스크를 서비스에 추가할 수 없도록 변경
    • (ENHANCEMENT) 서버에 연결된 서비스가 존재할 경우 삭제할 수 없도록 변경
    • (ENHANCEMENT) 서버 정보 조회시 Free 메모리 용량을 자동 계산하도록 변경
    • (ENHANCEMENT) 디스크의 서버 정보를 변경할 수 있도록 개선
    • (ENHANCEMENT) RabbitMQ의 연결이 끊어졌을 경우 자동으로 재시도 하도록 변경
    • (ENHANCEMENT) 환경변수로 최초 생성 유저의 정보를 고정 할 수 있도록 개선
    • (BUG-FIX) Service 등록실패시 메시지의 오타 수정
    • (BUG-FIX) KsanAgent → ksanAgent 대소문자 오타 수정
    • (BUG-FIX) 스토리지 클래스 명이 소문자로 전달되는 버그 수정
    • (BUG-FIX) 서버, 서비스의 상태가 반영되지 않는 버그 수정
    • (BUG-FIX) 환경변수가 제대로 반영되지 않는 버그 수정

    ksanAgent

    • (ENHANCEMENT) rabbitmq 서버 연결 실패 시 retry 기능 추가
    • (BUG-FIX) 서비스 추가 시 .ServiceId 파일의 ServiceId 중복되는 버그 수정

    ksanLifecycleManager

    • (ENHANCEMENT) ksanLifecycle이 ksanLifecycleManager로 명칭이 변경
      • log 설정 파일 명칭 변경
      • 서비스 명 변경
      • Docker 파일명 변경
      • Docker 이미지명 변경

    ksanLogManager

    • (NEW) ksanGW의 로그를 RabbitMQ로 받아서 DB에 저장
    • (NEW) ksanReplicationManger의 로그를 RabbitMQ로 받아서 DB에 저장
    • (NEW) ksanLifecycleManager의 로그를 RabbitMQ로 받아서 DB에 저장

    ksanReplicationManager

    • (NEW) ksanGW의 로그를 RabbitMQ로 받아서 버킷의 Replication 설정에 따라 복제
    • (BUG-FIX) ReplicationData : Boolean → boolean 으로 변수타입 수정 (Null값 불허용)

    CLI & Utility

    통합 관리 도구(CLI)

    • (BUG-FIX) ksan 유틸리티 참조 모듈 path 위치 못 찾는 버그 수정
    • (NEW) ksanFsck, ksanCbalance, ksanGetattr 기능을 ksan 유틸리티에 연동
    • (NEW) ServerId 기준 서버 ip/netmask/gateway 변경 기능 ksan 유틸리티에 추가
    • (NEW) DiskId 기준 ServerId 정보 변경 기능 ksan 유틸리티에 추가
    • (ENHANCEMENT) ksan 정보 출력 결과 (sysinfo, server, disk, diskpool, service, user) format 변경 및 정렬
    • (ENHANCEMENT) Diskpool replication 타입 변경(--RepType → --Tolerance)
    • (ENHANCEMENT) Diskpool replication 타입 추가(EC)

    ETC

    설치 스크립트

    • (NEW) ksanLifecycleManager, ksanLogManager, ksanReplicationManager 모듈 설치 기능 추가
    • (NEW) offline/timeout/unknown 서비스 모니터링 및 재시작 기능 추가
    • (ENHANCEMENT) 설치 summary 정보 변경
    • (BUG-FIX) docker-support 모듈 패치 버그 수정

    한계 및 향후 계획

    한계 및 알려진 문제점

    • ksanReplicationManager
      • DeleteMarker 동기화 기능 동작시 DeleteObjects로 삭제한 오브젝트의 동기화가 올바르게 동작하지 않음
      • CopyObject로 업로드한 오브젝트가 복제되지 않음

    향후 계획

    • WEB 기반 KSAN 관리 인터페이스 개발 및 공개 (프로토타입)
    • ksanReplicationManager
      • 설정 지원 도구(CLI) 개발 및 공개
      • 알려진 문제점 해결 (DeleteMarker, CopyObject 대응 등)
    • ksanLifecycleManager
      • s3backend의 공통 라이브러리를 사용하도록 변경
    • ksanGW
      • S3 서비스 성능 최적화
      • Azure Blob Service 안정화
      • Erasure Coding 기능 안정화
    • ksanFSCK
      • Erasure Coding 오브젝트 정합성 검사 및 복구 지원
    opened by pspace-jwkwak 0
  • ksan_install.sh : 저사양 서버에서 All-in-One 설치 문제

    ksan_install.sh : 저사양 서버에서 All-in-One 설치 문제

    • 저사양 서버에서 KSAN 설치 도구로 All-in-One 모드 설치 시 일부 모듈의 상태값이 이상함
      • 테스트 서버 사양 : AMD Opteron(tm) X3216 APU
      • 상기 서버 사양에서 "ksan_install.sh allinone" 명령으로 설치 시 아래 문제가 발생함
        • ksanOSD, ksanGW, ksanLifecycleManager 등 대부분의 모듈의 상태가 "UNKNOWN"으로 출력됨
        • 상기 상태에서 ./ksan service list 명령으로 서비스 상태를 다시 조회하면 이상 없이 "ONLINE"으로 표기됨
    • 이 문제는 인스톨러의 내부 코드에서 서비스를 재시작한 뒤에 기다리는 시간을 늘리는 방식으로 해결될 것으로 보임
    invalid 
    opened by PSPACE-KYS 0
  • KsanRestoreObject, KsanStorageMove 추가

    KsanRestoreObject, KsanStorageMove 추가

    KsanRestoreObject -> GLACIER storage에 저장되어 있는 오브젝트를 STANDARD storage로 이동 시킨다. KsanStorageMove -> 해당 오브젝트가 STANDARD storage에 저장되어 있으면 GLACIER storage로, CLACIER storage에 저장되어 있으면 STANDARD storage로 이동 시킨다.

    opened by HeoKyungseok 1
  • AllInOne 설치 지원

    AllInOne 설치 지원

    Docker compose 로 설치 지원

    • Gw
    • Osd
    • Api Portal
    • Portal Bridge
    • Agent
    • Lifecycle
    • Metering
    • LogExport
    • Recovery
    • RabbitMq
    • MariaDB
    • MongoDB 설치 가능하도록 구성

    ApiPortal이 최초 실행될때 자동으로 서버 등록 및 설정파일 초기화 기능 추가

    enhancement 
    opened by pspace-jwkwak 0
  • gw - listObjects, listObjectsV2, listObjectsVersions 1차 개선

    gw - listObjects, listObjectsV2, listObjectsVersions 1차 개선

    현재 gw에서는 listObjets, listObjectsV2, listObjectsVersions 요청이 들어오면 objManager의 결과를 받아서 응답해준다.

    listObjets, listObjectsV2, listObjectsVersions를 처리하는 objManager 함수는 delimiter 처리 등으로 인해서 구현이 복잡하게 되어 있다.

    다양한 DB로 확장을 보다 쉽게 하기 위해서 objManager는 정해진 쿼리만을 수행하고 나머지는 gw에서 처리하는 방안을 적용하려고 한다.

    우선 listObjects를 적용하고 테스트를 한 후에, listObjectV2, listObjectsVersions로 확대할 예정이다.

    opened by HeoKyungseok 0
Releases(v1.2.0)
  • v1.2.0(Dec 9, 2022)

    ksanGW

    AWS S3-Compatible API 지원

    • (NEW) DeleteBucketLogging
    • (NEW) DeleteBucketTagIndex
    • (NEW) GetBucketLogging
    • (NEW) GetBucketTagIndex
    • (UPDATE) GetObejctLockConfiguration → GetObjectLegalHold
    • (NEW) PostObject
    • (NEW) PutBucketLogging
    • (NEW) PutBucketTagIndex
    • (UPDATE) PutObjectLockConfiguration → PutObjectLegalHold
    • (NEW) PutObjectRetention
    • (NEW) RestoreObject
    • (BUG-FIX) KsanReplication
      • 연동 관련 API 버그 수정
    • (ENHANCEMENT) PutObject
      • MD5 : OpenSSL4로 변경
    • (ENHANCEMENT) 모든 API
      • Polish, Grant 확인 코드 추가
    • (BUG-FIX) CompleteMultipartUpload, UploadPart, UploadCopyPart
      • 로컬 디스크가 없는 경우 OSD 연동 처리 버그 수정
    • (ENHANCEMENT) GetObject, DeleteObject
      • object가 EC된 경우 처리 추가

    Azure Blob Storage Compatible API 지원

    • (NEW) CreateContainer
    • (NEW) DeleteBlob
    • (NEW) DeleteContainer
    • (NEW) GetProperties
    • (NEW) HeadBlob
    • (NEW) HeadContainer
    • (NEW) ListBlobs
    • (NEW) ListContainers
    • (NEW) PutBlob
    • (NEW) PutBlock
    • (NEW) PutBlockList
    • (NEW) SharedKeyAuth

    ObjManager

    • (NEW) search objects with tags future
    • (NEW) Store and retrieve restoreObject request
    • (BUG-FIX) In maraidb backend, utfmb4 typed column not support indexing when the string have more than 191 character bug fix.

    ksanOSD

    • (ENHANCEMENT) Header 처리 방식 수정
      • CompleteMultipartUpload를 처리하기 위해서 PartList 정보를 받기 위해 Header 길이 설정하는 부분 수정
    • (ENHANCEMENT) trash 파일 지우는 Thread, Cache 에서 Disk로 옮기는 Thread
      • Config 설정에 의해 동작하도록 변경
    • (NEW) getECpart, putECPart, deleteECPart
      • EC 처리

    ksanApiPortal

    • (NEW) EC 설정기능 추가
    • (NEW) 서비스 조회시 서버 정보를 포함하여 전달 하도록 변경
    • (NEW) 서버 세부 조회 API 추가(/ap1/v1/Servers/Details)
    • (NEW) 최초 설치시 서비스와 설정정보를 자동으로 등록하는 기능 추가
      • ksanReplicationManager
      • ksanLifecycleManager
      • ksanLogManager
      • ksanGW
      • ksanOSD
    • (ENHANCEMENT) 디스크풀의 타입과 Replication 설정이 변경 가능하도록 개선
    • (ENHANCEMENT) Disk, DiskPool, Server, Service, KsanUSer 의 이름 중복 검사 기능 개선
    • (ENHANCEMENT) 명칭 변경으로 config, serviceType의 값도 동일하게 변경
      • ksanReplication → ksanReplicationManager
      • ksanLifecycle→ksanLifecycleManager
      • ksanLogmanager→KsanLogManager
    • (ENHANCEMENT) 디스크를 서비스에 추가할 수 없도록 변경
    • (ENHANCEMENT) 서버에 연결된 서비스가 존재할 경우 삭제할 수 없도록 변경
    • (ENHANCEMENT) 서버 정보 조회시 Free 메모리 용량을 자동 계산하도록 변경
    • (ENHANCEMENT) 디스크의 서버 정보를 변경할 수 있도록 개선
    • (ENHANCEMENT) RabbitMQ의 연결이 끊어졌을 경우 자동으로 재시도 하도록 변경
    • (ENHANCEMENT) 환경변수로 최초 생성 유저의 정보를 고정 할 수 있도록 개선
    • (BUG-FIX) Service 등록실패시 메시지의 오타 수정
    • (BUG-FIX) KsanAgent → ksanAgent 대소문자 오타 수정
    • (BUG-FIX) 스토리지 클래스 명이 소문자로 전달되는 버그 수정
    • (BUG-FIX) 서버, 서비스의 상태가 반영되지 않는 버그 수정
    • (BUG-FIX) 환경변수가 제대로 반영되지 않는 버그 수정

    ksanAgent

    • (ENHANCEMENT) rabbitmq 서버 연결 실패 시 retry 기능 추가
    • (BUG-FIX) 서비스 추가 시 .ServiceId 파일의 ServiceId 중복되는 버그 수정

    ksanLifecycleManager

    • (ENHANCEMENT) ksanLifecycle이 ksanLifecycleManager로 명칭이 변경
      • log 설정 파일 명칭 변경
      • 서비스 명 변경
      • Docker 파일명 변경
      • Docker 이미지명 변경

    ksanLogManager

    • (NEW) ksanGW의 로그를 RabbitMQ로 받아서 DB에 저장
    • (NEW) ksanReplicationManger의 로그를 RabbitMQ로 받아서 DB에 저장
    • (NEW) ksanLifecycleManager의 로그를 RabbitMQ로 받아서 DB에 저장

    ksanReplicationManager

    • (NEW) ksanGW의 로그를 RabbitMQ로 받아서 버킷의 Replication 설정에 따라 복제
    • (BUG-FIX) ReplicationData : Boolean → boolean 으로 변수타입 수정 (Null값 불허용)

    CLI & Utility

    통합 관리 도구(CLI)

    • (BUG-FIX) ksan 유틸리티 참조 모듈 path 위치 못 찾는 버그 수정
    • (NEW) ksanFsck, ksanCbalance, ksanGetattr 기능을 ksan 유틸리티에 연동
    • (NEW) ServerId 기준 서버 ip/netmask/gateway 변경 기능 ksan 유틸리티에 추가
    • (NEW) DiskId 기준 ServerId 정보 변경 기능 ksan 유틸리티에 추가
    • (ENHANCEMENT) ksan 정보 출력 결과 (sysinfo, server, disk, diskpool, service, user) format 변경 및 정렬
    • (ENHANCEMENT) Diskpool replication 타입 변경(--RepType → --Tolerance)
    • (ENHANCEMENT) Diskpool replication 타입 추가(EC)

    ETC

    설치 스크립트

    • (NEW) ksanLifecycleManager, ksanLogManager, ksanReplicationManager 모듈 설치 기능 추가
    • (NEW) offline/timeout/unknown 서비스 모니터링 및 재시작 기능 추가
    • (ENHANCEMENT) 설치 summary 정보 변경
    • (BUG-FIX) docker-support 모듈 패치 버그 수정

    한계 및 향후 계획

    한계 및 알려진 문제점

    • ksanReplicationManager
      • DeleteMarker 동기화 기능 동작시 DeleteObjects로 삭제한 오브젝트의 동기화가 올바르게 동작하지 않음
      • CopyObject로 업로드한 오브젝트가 복제되지 않음

    향후 계획

    • WEB 기반 KSAN 관리 인터페이스 개발 및 공개 (프로토타입)
    • ksanReplicationManager
      • 설정 지원 도구(CLI) 개발 및 공개
      • 알려진 문제점 해결 (DeleteMarker, CopyObject 대응 등)
    • ksanLifecycleManager
      • s3backend의 공통 라이브러리를 사용하도록 변경
    • ksanGW
      • S3 서비스 성능 최적화
      • Azure Blob Service 안정화
      • Erasure Coding 기능 안정화
    • ksanFSCK
      • Erasure Coding 오브젝트 정합성 검사 및 복구 지원
    Source code(tar.gz)
    Source code(zip)
    ksan-1.2.0.el7.x86_64.tar(169.74 MB)
  • v1.1.1(Oct 7, 2022)

    ksanApiPortal

    • (BUG-FIX) KSAN Server, Service의 상태 정보 업데이트 버그 처리 - #113
    • (BUG-FIX) KSAN Portal의 초기화 과정에서 rabbitmq의 message queue를 생성이 실패하는 경우에 대한 예외처리를 추가 - #112
      • KSAN All-in-One 타입 설치를 포함한 Docker compose 방식의 KSAN 설치 과정에서 ksanApiPortal이 오동작하는 것을 해결함

    한계 및 향후 계획

    한계 및 알려진 문제점

    • 메타데이터의 고가용성 보장 방식은 구성하는 DB 모듈에 따라 상이합니다. 연구소 레벨에서 고가용성 테스트가 되었지만 상용 레벨에서 사용하실 경우에는 각 DB 모듈 별로 재확인이 필요합니다.
      • MariaDB : Semisynchronous Replication 방식으로 구성, 최소 2개 노드 필요
      • MongoDB : Sharded Cluster 방식으로 구성, 최소 3개 노드 필요
    • 장애 상황에 따른 오브젝트 데이터 고가용성 보장은 아직 추가적인 테스트가 필요합니다.
      • KSAN v1.1.1의 ksanGW는 Put Object를 처리할 때 Sync 방식만 지원합니다.(Primary과 Replica Write를 동시에 처리하고 모두 완료하면 성공 메세지를 반환)
      • 따라서 오브젝트 데이터 고가용성 보장의 핵심 모듈 중의 하나인 ksanRecovery가 Async Write 상황에서 테스트되지 못하였습니다.

    향후 계획

    • ksanReplication 개발 및 공개 → v1.2.0에서 공개 예정
      • 원격지 KSAN 시스템 간의 DR(재해복구)를 제공하기 위한 Bucket 레벨의 동기화 모듈
      • 통합 테스트 단계
    • S3 logging 기능 개선 → v1.2.0에서 공개 예정
      • Message Queue 기반의 logging 데이터 처리 방식을 지원
      • 통합 테스트 단계
    • ksanGW / ksanOSD / ksanRecovery 개선 및 보완
      • Async 방식의 Put Object 처리 추가
      • ksanGW-ksanOSD-ksanRecovery의 장애 테스트를 기반으로 각 모듈 개선 및 보완
    • WEB 기반 KSAN 관리 인터페이스 개발 및 공개 (프로토타입)
    • ksanAzure(가칭) 개발 및 공개 (프로토타입)
      • Microsoft Azure 호환 서비스 게이트웨이 개발 및 공개
    • Erasure Coding 기반으로 데이터 가용성을 제공하는 Diskpool 지원
    Source code(tar.gz)
    Source code(zip)
    ksan-1.1.1.el7.x86_64.tar(199.50 MB)
  • v1.1.0(Sep 22, 2022)

    ksanGW

    ObjManager 연동

    • (NEW) disk, diskpool 변경에 대한 정보를 objManager에게 실시간으로 전달함
      • ObjManager.updateDiskpools(String routingKey, String body)로 전달
      • diskpool
        • add / update(add2disk, remove2disk) / remove
      • disk
        • add / remove / start / stop / mode change (Read/Write, Readonly)

    장애대응 및 예외처리

    • (ENHANCEMENT) ksanGW의 로컬 디스크가 없는 경우 ObjManager에 의해 배정된 OSD가 UploadPart를 진행하도록 해당 OSD에 요청함

    성능 부분

    • (NEW) 캐시 디스크 지원
      • 최초 공개 버전의 경우 ksanGW별 설정을 지원하지 않음 (캐시 디스크를 활성화하면 KSAN 클러스터 내의 모든 ksanGW에 적용됨)

    AWS S3-Compatible API

    • (NEW) PostObject
    • (ENHANCEMENT) GetObject, PutObject
      • 암호화 관련 수정 및 성능 개선
    • (ENHANCEMENT) CompleteMultipartUpload, UploadPart
      • 요청받은 ksanGW의 로컬 디스크가 없는 경우 ObjManager에 의해 배정된 OSD가 UploadPart 백엔드 처리할 수 있도록 변경함
    • (BUG-FIX) DeleteObject
      • 존재하지 않는 Object에 대해 삭제 요청이 있는 경우에 대해 S3와 동일하게 동작하도록 수정함
    • (ENHANCEMENT) ListObjects, ListObjectsV2, ListObjectVersions
      • 성능 개선

    ksanReplication 연동

    • (NEW) 향후 추가될 ksanReplication 모듈을 위해 필요한 백엔드 KSAN S3 API 프로토타입을 추가함
      • ksanReplication은 v1.1.0에서 공개되지 않음

    배포 및 설정

    • (NEW) 패키지 설치 방식과 Docker Container로 배포 가능
    • (ENHANCEMENT) Configuration Key와 Value 정의를 보완
    • (NEW) 자신의 서비스 이벤트 및 상태 정보를 ksanApiPortal에게 직접 보고

    ObjManager

    • (NEW) MongoDB를 기반으로 Object / Bucket 메타데이터 저장 및 관리를 지원
      • 기존 MariaDB 기반의 동일한 ObjManager 기능을 제공
    • (ENHANCEMENT) createLocal() 강화
      • Diskpool의 구성 및 Disk의 상태 변화에 따라 로컬 디스크에 Object를 할당할 수 없는 경우 create()로 전환되도록 변경
    • (ENHANCEMENT) 실시간으로 Diskpool의 구성 및 Disk의 상태 변화에 대응할 수 있도록 처리 구조 변경
    • (NEW) S3 호환 Storage Class 지원
    • (ENHANCEMENT) 신규 Object의 Replica Count 설정 기능 강화
      • 더이상 Bucket 생성시 정의된 Replica Count 설정을 사용하지 않고 User에 정의된 Storage Class 정보 및 KSAN Diskpool의 데이터 보호 정책을 참고하여 Replica Count를 판단
    • (NEW) ksanLifecycle이 Object DB를 직접 참조하지 않고 ObjManager를 통해서 작업을 수행할 수 있도록 관련 API를 추가

    ksanOSD

    OSD 간의 연동

    • (ENHANCEMENT) 신규로 추가된 OSD 서비스와 기존 OSD 서비스를 연동하기 위해 Connection 처리 방식을 개선

    OSD Interface

    • (NEW) CompleteMultipartUpload, UploadPart를 OSD 레벨에서 처리하기 위한 관련 API를 추가함

    성능 부분

    • (NEW) Object 삭제 요청이 오면 해당 백엔드 데이터를 즉시 삭제하지 않고 Trash에 보관하고 설정된 시간 이후에 삭제 처리함

    배포 및 설정

    • (NEW) 패키지 설치 방식과 Docker Container로 배포 가능
    • (ENHANCEMENT) Configuration Key와 Value 정의를 보완
    • (NEW) 자신의 서비스 이벤트 및 상태 정보를 ksanApiPortal에게 직접 보고

    ksanApiPortal

    • (ENHANCEMENT) 프로토타입에 사용했던 상용 DB 라이브러리를 더이상 사용하지 않음
    • (NEW) 신규 ksanAgent 대응한 KSAN Server / Service 관리를 지원
    • (ENHANCEMENT) Docker Container 환경 변수 추가
      • 설치 및 배치 자동화 관련 환경 변수 추가
      • KSAN 개발 및 테스트 목적으로 활용할 수 있는 Default User 생성 옵션 제공
    • (ENHANCEMENT) Docker Container 환경 변수를 활용한 KSAN Service Configuration 정보 자동 생성 지원
    • (ENHANCEMENT) RabbitMQ의 Quorum Queue 기반으로 시스템 상태 및 설정 변경 정보를 공유
    • (ENHANCEMENT) RabbitMQ의 Quorum Queue 기반으로 서비스 모니터링 정보 수집
    • (NEW) 모니터링 보고 주기에 따른 서버 및 서비스 TIMEOUT 상태 판단
    • (NEW) 디스크의 사용 용량 정보를 기준으로 FULL(WEAK) 상태 판단 및 처리

    ksanAgent

    • (ENHANCEMENT) 서버 데몬 방식으로 ksanAgent를 재설계하고 구현
      • 기존 ksanEdge, ksanMon, ksanRegister를 통합
    • (NEW) 신규 서비스 추가에 대응하여 해당 서비스의 ServiceId 정보를 지정된 위치에 파일로 저장
    • (ENHANCEMENT) 서비스의 이벤트 및 기본 상태 정보를 더이상 ksanAgent가 보고하지 않음

    ksanLifecycle

    • (ENHANCEMENT) ObjManager를 통해서만 Bucket의 Lifecycle 설정 정보에 접근하도록 변경
    • (ENHANCEMENT) ObjManager를 통해서만 Object의 메타 정보에 접근하도록 변경
    • (NEW) Docker Container로 배포
    • (NEW) 자신의 서비스 이벤트 및 상태 정보를 ksanApiPortal에게 직접 보고
    • (ENHANCEMENT) Lifecycle 검사 스케쥴 설정을 추가

    CLI & Utility

    통합 관리 도구(CLI)

    • (NEW) KSAN의 관리를 위한 통합 CLI를 제공 (→ ksanApiPortal 및 ksanUtility와 통합 연동됨)
      • /usr/local/ksan/bin/ksan
        • Server 관리 : KSAN 서버(노드) 추가, 제거 도구
        • Service 관리 : KSAN 서비스 추가, 제거, 제어 도구
        • Config 관리 : KSAN 서비스 설정 관리 도구
        • Diskpool 관리 : 디스크풀 추가, 제거, 디스크 배치 도구
        • Disk 관리 : 디스크 추가, 제거, 제어, 모드 변경 도구
        • User 관리 : KSAN 서비스 대상 사용자 관리 도구
        • Fsck 수행 : 오브젝트 정합성 관리 및 복구
        • Cbalance 수행 : 디스크 데이터 리밸런싱 도구
        • Getattr 수행 : KSAN 백엔드 레벨의 오브젝트 정보 조회 도구

    ksanFsck

    • (NEW) RabbitMQ를 기반으로 ksanOSD에 질의하는 방식으로 백엔드 오브젝트 데이터의 상태를 정확히 파악
    • (ENHANCEMENT) ksanFsck 수행 결과를 세분화하고 이해하기 쉽게 변경
    • (BUG-FIX) UploadPart로 생성된 Object의 Checksum 비교는 Skip 함
      • UploadPart로 생성된 Object의 메타데이터 레벨의 Checksum 정보는 S3과의 호환성을 유지하는 방식으로 저장 → 실제 백엔드 데이터의 MD5 값과는 일치할 수 없음
      • 따라서 UploadPart로 생성된 Object는 Size 만으로 메타데이터와 비교함

    ksanCbalance

    • (ENHANCEMENT) 데이터 리밸런싱을 할 경우에 Diskpool 정보를 참고하여 동일한 Diskpool 내의 Disk 간에만 리밸런싱이 수행될 수 있도록 변경

    ETC

    설치 스크립트

    • (NEW) All-In-One 설치 자동화 기능 제공
      • 일괄 설치 지원 (Docker Compose 기반)
        • KSAN
          • ksan command Line Interface(CLI) : /usr/local/ksan/bin
          • ksanAgent : /usr/local/ksan/sbin
          • ksanApiPortal (Docker Container) : ksan-api-portal
          • ksanGW (Docker Container) : ksan-gw
          • ksanOSD (Docker Container) : ksan-osd
          • ksanLifecycle (Docker Container) : ksan-lifecycle
        • 외부 모듈
          • MariaDB 10.9.2 (Docker Container)
          • MongoDB 4.4 (Docker Container)
          • RabbitMQ 3.10.7 (Docker Container)
        • 기타
          • ksanApiPortal용 인증서 : /usr/local/ksan/etc/ssl/pspace.pfx
          • ksanGW용 인증서 : /usr/local/ksan/etc/ssl/pspace.jks
          • 상기 인증서는 사용자가 부여한 Password에 의해 자동 생성됨
      • 자동 설정 및 서비스 구동
        • KSAN Server, Service, Diskpool, Disk 자동 추가, 설정 및 구동
        • 필요에 따라 KSAN User 자동 생성 지원

    로그

    • log, dump 파일 위치 재조정 → /var/log/ksan
    • 로그의 시간 표시가 호스트 서버의 시간대와 동일하도록 변경

    한계 및 향후 계획

    한계 및 알려진 문제점

    • 메타데이터의 고가용성 보장 방식은 구성하는 DB 모듈에 따라 상이합니다. 연구소 레벨에서 고가용성 테스트가 되었지만 상용 레벨에서 사용하실 경우에는 각 DB 모듈 별로 재확인이 필요합니다.
      • MariaDB : Semisynchronous Replication 방식으로 구성, 최소 2개 노드 필요
      • MongoDB : Sharded Cluster 방식으로 구성, 최소 3개 노드 필요
    • 장애 상황에 따른 오브젝트 데이터 고가용성 보장은 아직 추가적인 테스트가 필요합니다.
      • KSAN v1.1.0의 ksanGW는 Put Object를 처리할 때 Sync 방식만 지원합니다.(Primary과 Replica Write를 동시에 처리하고 모두 완료하면 성공 메세지를 반환)
      • 따라서 오브젝트 데이터 고가용성 보장의 핵심 모듈 중의 하나인 ksanRecovery가 Async Write 상황에서 테스트되지 못하였습니다.

    향후 계획

    • ksanReplication 개발 및 공개
      • 원격지 KSAN 시스템 간의 DR(재해복구)를 제공하기 위한 Bucket 레벨의 동기화 모듈
      • 마무리 작업 중이며 2022년 이내에 공개 예정
    • ksanGW / ksanOSD / ksanRecovery 개선 및 보완
      • Async 방식의 Put Object 처리 추가
      • ksanGW-ksanOSD-ksanRecovery의 장애 테스트를 기반으로 각 모듈 개선 및 보완
    • WEB 기반 KSAN 관리 인터페이스 개발 및 공개 (프로토타입)
    • ksanAzure(가칭) 개발 및 공개 (프로토타입)
      • Microsoft Azure 호환 서비스 게이트웨이 개발 및 공개
    • Erasure Coding 기반으로 데이터 가용성을 제공하는 Diskpool 지원
    • S3 logging 기능 개선
      • Message Queue 기반의 logging 데이터 처리 방식을 지원
    Source code(tar.gz)
    Source code(zip)
    ksan-1.1.0.el7.x86_64.tar(199.50 MB)
  • v1.0.0(Dec 30, 2021)

    GW

    ObjManager / OSD 연동 부분

    • 오브젝트 PUT 요청시 ObjManager를 통해 GW와 동일한 서버의 OSD DISK에 Primary 오브젝트 데이터를 우선 배정 (WRITE)
    • 오브젝트 GET 요청시 ObjManager를 통해 GW와 동일한 서버의 OSD DISK에 오브젝트 데이터를 우선 사용 (READ)
    • OSD와 연동하여 오브젝트 데이터의 1+1 Replication에 대응

    AWS S3-Compatible API 지원

    • AbortMultipartUpload
    • CompleteMultipartUpload
    • CopyObject
    • CreateBucket
    • CreateMultipartUpload
    • DeleteBucket
    • DeleteBucketCors
    • DeleteBucketEncryption
    • DeleteBucketLifecycle
    • DeleteBucketObjectLock
    • DeleteBucketPolicy
    • DeleteBucketReplication
    • DeleteBucketTagging
    • DeleteBucketWebsite
    • DeleteObject
    • DeleteObjects
    • DeleteObjectTagging
    • DeletePublicAccessBlock
    • GetBucketAcl
    • GetBucketCors
    • GetBucketEncryption
    • GetBucketLifecycleConfiguration
    • GetBucketLocation
    • GetBucketPolicy
    • GetBucketPolicyStatus
    • GetBucketReplication
    • GetBucketTagging
    • GetBucketVersioning
    • GetBucketWebsite
    • GetObject
    • GetObjectAcl
    • GetObjectLockConfiguration
    • GetObjectRetention
    • GetObjectTagging
    • GetPublicAccessBlock
    • HeadBucket
    • HeadObject
    • ListBuckets
    • ListMultipartUploads
    • ListObjects
    • ListObjectsV2
    • ListObjectVersions
    • ListParts
    • OptionsObject
    • PutBucketAcl
    • PutBucketCors
    • PutBucketEncryption
    • PutBucketLifecycleConfiguration
    • PutBucketPolicy
    • PutBucketReplication
    • PutBucketTagging
    • PutBucketVersioning
    • PutBucketWebsite
    • PutObject
    • PutObjectAcl
    • PutObjectLockConfiguration
    • PutObjectTagging
    • PutPublicAccessBlock

    ObjManager

    • 오브젝트 스토리지 서비스 요청의 메타데이터 처리 및 관리 지원
    • 오브젝트 데이터를 유효한 OSD DISK에 배치하기 위한 정보 생성 및 제공 (GW 동일한 위치 우선 또는 랜덤)
    • 백엔드 메타데이터 저장소 지원 및 최적화: MariaDB, MongoDB(최적화 후 공개 예정)

    OSD

    • 오브젝트 데이터 Write / Read / Delete 지원
    • ILM 기반의 Erasure Coding 지원 (프로토타입)

    MGS

    • 오브젝트 정합성 체크 및 복구 지원
    • 오브젝트 데이터 Replication 실패시 재시도하여 복제본을 복원하는 기능 지원

    Utility

    • Server 및 Server Pool 관리 지원
    • OSD Disk 및 Disk Pool 관리 지원
    • 시스템 User(Portal User) 관리 지원
    • S3 User 관리 지원
    • Service 및 Service Group 관리 지원
    • ksanGW 관리 지원
    • ksanOSD 관리 지원
    • 시스템 전체 상태 정보 모니터링 지원

    Portal

    • KSAN
      • KSAN 사용자 관리
      • Disk 관리
      • Diskpool 관리
    • Network
      • Network Interface 관리
      • Network Interface Vlan 관리
    • KSAN 서비스 관리
    • KSAN 서버 관리
    • Portal 사용자 관리
    • Swagger를 통한 Api 테스트 기능 제공

    Backend Service

    Metering, Logging 지원

    • Bucket에 포함된 objects size 저장
    • REST 처리 및 결과에 대한 log 저장

    Lifecycle

    • 버킷의 오브젝트를 수명주기 설정에 따라 삭제
    • 버킷의 오브젝트 버전을 수명주기 설정에 따라 삭제
    • 버킷의 삭제마커를 수명주기 설정에 따라 삭제
    Source code(tar.gz)
    Source code(zip)
Owner
InfiniStor / KSAN
Software Defined Storage for Objects and Files
InfiniStor / KSAN
Generate a dynamic PAC script that will route traffic to your Burp proxy only if it matches the scope defined in your Burp target.

Burp PAC Server This Burp Extension generates a dynamic Proxy Auto-Configuration (PAC) script that will route traffic to your Burp proxy only if it ma

null 30 Jun 13, 2022
Simple and extensible storage service implementation with optional encryption.

Simple and extensible storage service implementation with optional encryption. About Hole Hole is a simple data storage made with a soul for those who

d1s utils 3 Aug 13, 2022
Nullify for null representations and assertions of objects

Nullify Nullify for null representations and assertions of objects. Philosophy A semantic emptiness is a key concept used to indicate the absence of a

Hyesung Lee 2 Jan 20, 2022
Observing a sequence of objects that can be numerically ranked best and worst.

Optimal-Stopping The Secretary Problem from Optimal Stopping. https://en.wikipedia.org/wiki/Optimal_stopping Observing a sequence of objects that can

null 1 Feb 3, 2022
Using this library, and writing a few lines of code, you can manage your own domain objects in ZooKeeper

Using this library, and writing a few lines of code, you can manage your own domain objects in ZooKeeper. It provides CRUD operations and change notifications out of the box.

Sahab 4 Oct 26, 2022
OBKV Table Client is Java Library that can be used to access table data from OceanBase storage layer.

OBKV Table Client OBKV Table Client is Java Library that can be used to access table data from OceanBase storage layer. Its access method is different

OceanBase 12 Dec 16, 2022
Digital storage system mod for Minecraft b1.7.3.

RetroStorage Digital storage system mod for Minecraft b1.7.3. Requires Modloader. Features: ItemNBT (Allows items to carry NBT data) Digital Network (

SunsetSatellite 7 Dec 15, 2022
PolarDB-X is a cloud native distributed SQL Database designed for high concurrency, massive storage, complex querying scenarios.

中文文档 What is PolarDB-X ? PolarDB-X is a cloud native distributed SQL Database designed for high concurrency, massive storage and complex querying scen

null 1.2k Dec 31, 2022
Java How To Program (Early Objects), 10th Edition (Paul Deitel, Deitel & Associates, Inc. Harvey Deitel)

Java How To Program (Early Objects), 10th Edition Description I have written book source codes and answers to exercises Structure of Source Codes Each

Ali Moradzade 2 Apr 19, 2022
A suite of software tools and services created to support activity planning and sequencing needs of missions with modeling, simulation, scheduling and validation capabilities

Aerie A suite of software tools and services created to support activity planning and sequencing needs of missions with modeling, simulation, scheduli

NASA Advanced Multi-Mission Operations System 31 Jan 3, 2023
An API Library that provides the functionality to access, manage and store device topologies found in JSON files using Java and Maven Framework

Topology API ?? About An API library which provides the functionality to access, manage and store device topologies. ?? Description Read a topology fr

Abdelrahman Hamdy 2 Aug 4, 2022
Team project within the course of Software System Design and Analysis.

InnoBookCrossing - Application for sharing books at Innopolis Description The application is designed to help people share books with each other. All

Dariya 33 Oct 22, 2022
CodeGen - a secure, high efficiency, and offline-able software, it provides several useful functions

CodeGen Efficiency ToolBox Introduce Download References Issues and Suggestions Software Preview Introduce CodeGen is a secure, high efficiency, and o

null 454 Jan 4, 2023
This repository should serve as a guide to everybody who wants to study software and hardware for embedded systems but doesn't know where to start.

Roadmap to Embedded Engineering This repository should serve as a guide to anyone who wants to study software and hardware for embedded systems but do

Mateus Antonio da Silva 108 Jan 4, 2023
Source Code for TransRot, molecular modeling software for simulated annealing Monte Carlo geometry optimizations of atomic and molecular clusters.

TransRot Version 1.5.3 Steven L. Topper and Robert Q. Topper School of Engineering The Cooper Union   for the Advancement of Science and Art New York,

Steven Topper 5 Dec 14, 2022
An assistance platform made using Spring framework that analyses your code, and helps you either to start a devops project, or to turn an existing project into a devops project using open source software (Git, Docker, Jenkins..)

DevOpsify Description An assistance platform made using Spring framework that analyses your code, and helps you either to start a devops project, or t

obaydah bouifadene 14 Nov 8, 2022
DataCap is integrated software for data transformation, integration and visualization.

DataCap (incubator) DataCap is integrated software for data transformation, integration and visualization. Require Must-read for users: Be sure to exe

EdurtIO 184 Dec 28, 2022
Decipher-pad - Encrypt and secure your text files with Decipher Pad!

Welcome to Decipher Pad ?? Encrypt and secure your text files with Decipher Pad! Table of Contents About The Project Tech Stack Prerequisites Developm

Md Ausaf Rashid 4 Feb 24, 2022