Releases: infinistor/ksan
Releases · infinistor/ksan
KSAN v1.4.2
ksanApiPortal
- (NEW) Ksan Disk, DiskPool 추가 시 Id를 입력 할 수 있도록 수정 (#288)
- (NEW) User 추가 시 Id, Access Key, Secret Key 지정 가능하도록 변경 (#283)
- (NEW) KSAN Server 추가 시 Id, HostName을 입력 할 수 있도록 수정 (#287)
- (NEW) KSAN Service 추가 시 Id를 입력 할 수 있도록 수정 (#284)
- (BUG-FIX) Server, Service의 상태가 정상임에도 Timeout 상태로 변하는 버그 수정(#286)
- (BUG-FIX) Modified User 업데이트 안되는 버그수정 (#285)
CLI & Utility
통합 관리 도구(CLI)
- (BUG-FIX) 직전 릴리즈(v1.4.1)에 포함된 CLI 도구 바이너리의 실험적 설정 항목을 제거함 (#289)
KSAN v1.4.1
ObjManager
- (ENHANCEMENT) Match the data storage difference between MongoDB and MariaDB back-end (#272)
- (BUG-FIX) MariaDB back-end prepared statement resource release bug fix (#273)
ksanGW
AWS S3-Compatible API 지원
- (BUG-FIX) ListBucketInventory - inventory 내용이 없는 경우에 대한 버그 수정 (#278)
- (BUG-FIX) ListBucketAnalytics - analytics 내용이 없는 경우에 대한 버그 수정 (#277)
- (ENHANCEMENT) DeleteBucketInventory - Error Log 추가 (#276)
- (BUG-FIX) writePID 버그 수정 (#275)
- (ENHANCEMENT) Admin REST에 대한 로그를 backend 전용 queue로 전송 (#244)
- (ENHANCEMENT) Log 데이터 중 Date 포멧 변경 (#254)
- (ENHANCEMENT) S3Logging을 ExcutorService로 변경 (#256)
- (ENHANCEMENT) Admin REST opcode 변경 (#257)
- (ENHANCEMENT) Azure API 관련 수정 (#264)
- (ENHANCEMENT) Object 저정 방식 일부 변경 (#266)
- (ENHANCEMENT) DeleteObject에 error 로그 추가 (#267)
- (ENHANCEMENT) TagIndex에 대한 Signing pass 코드 삭제 (#268)
- (ENHANCEMENT) CompleteMultipart 에서 contents Length 계산 추가 (#269)
- (ENHANCEMENT) Libs - OSDClient:getSocket 함수 주석 제거 (#270)
ksanApiPortal
- (NEW) mariadb 설정 정보 조회 기능 추가 (#265)
- (NEW) rabbitmq 연결 문제 체크 기능 추가 (#200)
- (NEW) metering 조회 API 추가 (#247)
- (NEW) accessips API 추가 (#260)
- (NEW) Access Log 추가 (#238)
- (BUG-FIX) 서버, 서비스 상태조회시 에러 수정 (#271)
- (BUG-FIX) Logout 작동 버그 수정 (#167)
ksanLogManager
- (ENHANCEMENT) 모든 로그를 mariadb에 저장하도록 변경 (#255)
- (ENHANCEMENT) db config를 공용으로 변경 (#249)
- (NEW) Backend Log 저장 기능 추가 (#253)
- (NEW) Backend Log Metering 기능 추가 (#253)
- (NEW) Log table 롤링 기능 추가 (#252)
- (BUG-FIX) metering의 timestamp를 gmt에서 서울로 고정 (#259)
- (BUG-FIX) metering의 버킷 정보 누락 수정 (#258)
- (BUG-FIX) s3log 저장 버그 수정 (#251)
- (BUG-FIX) replication event log 누락 수정 (#250)
- (BUG-FIX) metering이 특정상황에서 저장되지 않는 버그 수정 (#280)
ksanReplicationManager
KSAN v1.4.0
ObjManager
- (ENHANCEMENT) Uniqe indexing of an object table change from objid, versionid, deletemark and lastversion to objid, versionid and deletemarke to avoid duplicate result (#241)
- (NEW) Bucket analytics , notification and inventory configurations are added to bucket storage(#239)
- (NEW) Sort list bucket result alphabetically (#240)
- (BUG-FIX) Fix a bug caused due to usage of mongodb special character inside object key (#213)
- (BUG-FIX) Diskpool disk status update bug fix (#214)
ksanGW
AWS S3-Compatible API 지원
- (BUG-FIX) KsanGetObject VersionId 설정 버그 수정 (#235)
- (BUG-FIX) KsanUtils makeDirectoryName 버그 수정 (#234)
- (BUG-FIX) KsanPutObject ContentLength 설정 버그 수정 (#233)
- (ENHANCEMENT) KsanPutObject 동일한 VersionId인 경우 이전 object를 삭제 (#232)
- (NEW) Object Index Depth 설정 추가 (#231)
- (NEW) Multipart Upload Method 설정 추가 (#230)
- (BUG-FIX) DeleteObjejcts marker 삭제되지 않는 버그 수정 (#226)
- (BUG-FIX) S3Logging에서 VersionId가 출력되지 않는 버그 수정 (#225)
- (BUG-FIX) makeAcl, admin용 추가 (#223)
- (BUG-FIX) S3Logging에서 bucket name 출력되지 않는 버그 수정 (#222)
- (NEW) BucketNotification 추가 (#221)
- (NEW) BucketInventory 추가 (#220)
- (NEW) RequestPayment 추가 (#218)
- (NEW) BucketAnalytics 추가 (#217)
- (NEW) BucketAccelerate 추가 (#216)
ksanOSD
- (BUG-FIX) CacheToDisk - Cache 파일 삭제 버그 수정 (#236)
ksanApiPortal
- (ENHANCEMENT) rabbitmq 연결 문제시 callback 함수 추가 (#200)
- (ENHANCEMENT) 환경 변수로 region 정보 입력 기능 추가 (#237)
- (ENHANCEMENT) access log 추가 (#238)
- (ENHANCEMENT) dotnet core 7.0으로 변경
ksanLifecycleManager
- (ENHANCEMENT) java 17로 변경
- (ENHANCEMENT) ServiceId 참조 경로 변경 (#197)
- (ENHANCEMENT) Filtering 방식 변경 (#199)
ksanLogManager
- (ENHANCEMENT) java 17로 변경
- (ENHANCEMENT) ServiceId 참조 경로 변경 (#197)
ksanReplicationManager
- (ENHANCEMENT) java 17로 변경
- (ENHANCEMENT) ServiceId 참조 경로 변경 (#197)
- (ENHANCEMENT) Region별 Alive 체크 기능 제거 (#198)
CLI & Utility
통합 관리 도구(CLI)
- (ENHANCEMENT) ksan service/disk start/stop & diskpool add/remove 시에 여러 객체를 일괄로 수행 되도록 수정 (#228)
ETC
KSAN Installer
- All-in-One 설치 모드에서 KSAN 시스템의 Region 정보 입력 추가
- Offline 설치 옵션 추가
한계 및 향후 계획
한계 및 알려진 문제점
- ksanReplicationManager
- DeleteMarker 동기화 기능 동작시 DeleteObjects로 삭제한 오브젝트의 동기화가 올바르게 동작하지 않음
- CopyObject로 업로드한 오브젝트가 복제되지 않음
- DeleteMarker 버전 아이디가 동일하게 복제되지 않음
향후 계획
- ksanReplicationManager
- 알려진 문제점 해결 (DeleteMarker, CopyObject 대응 등)
- ksanGW
- Azure Blob Service 안정화
- Erasure Coding 기능 안정화
- ksanFSCK
- 개선된 Erasure Coding 오브젝트 정합성 검사 및 복구 지원
KSAN v1.3.1
ObjManager
- (ENHANCEMENT) Add a new get Expired object list API’s (#196)
- (ENHANCEMENT) List object query with delimiter performance improvement (#204)
- (ENHANCEMENT) Multipart indexing improvement (#205)
- (BUG-FIX) Disk pool default replica count information change update bug fix (#206)
ksanGW
AWS S3-Compatible API 지원
- (BUG-FIX) ListObjects 시 user-meta-data 인식 버그 수정 (#187)
- (ENHANCEMENT) ServiceID 파일 위치 변경 (#189)
- (ENHANCEMENT) PutObject 시 디스크 장애 처리 추가 (#190)
- (ENHANCEMENT) SpotBugs 코드 수정 (#191)
- (ENHANCEMENT) objmanager의 multipart 관련 개선에 따른 코드 변경 (#201)
GCP Storage API 지원
- (NEW) GCS HMAC Key 인증 (#185)
- (NEW) GCSCreateBucket (#186)
- (NEW) GCSDeleteBucket (#186)
- (NEW) GCSListBucket (#186)
- (NEW) GCSPutObject (#186)
- (NEW) GCSHeadObject (#186)
- (NEW) GCSGetObject (#186)
- (NEW) GCSListObjects (#186)
ksanOSD
- (ENHANCEMENT) ServiceID 파일 위치 변경 (#189)
- (ENHANCEMENT) SpotBugs 코드 수정 (#191)
- (ENHANCEMENT) OSD 종료 시, IO 작업 완료 처리 (#194)
- (ENHANCEMENT) CacheToDisk 최적화 (#203)
ksanAgent
- (ENHANCEMENT) osd config key 및 default value 변경 (#195)
- (ENHANCEMENT) service stop 시 서비스가 수행 중인 작업 완료 후 종료 할 수 있도록 signal 처리 할 수 있는 sigterm 으로 정지 (#193)
- (BUG-FIX) service가 비정상 상태일 때 정상으로 체크 되는 문제 (#192)
ksanApiPortal
- (NEW) rabbitmq 연결 문제 체크 callback 함수 추가 (#200)
ksanLifecycleManager
- (ENHANCEMENT) serviceId 파일 경로 변경 (#197)
- (ENHANCEMENT) Lifecycle filtering 성능 개선 (prefix, expired 값을 코드내에서 처리하지 않고 쿼리로 변경) (#199)
- (BUG-FIX) Lifecycle filtering 오타 수정 (#199)
ksanLogManager
- (NEW) serviceId 파일 경로 변경 (#197)
ksanReplicationManager
ETC
서비스 ID 저장 위치 변경
- (기존) /usr/local/ksan/sbin → (변경) /usr/local/ksan/etc
한계 및 향후 계획
한계 및 알려진 문제점
- ksanReplicationManager
- DeleteMarker 동기화 기능 동작시 DeleteObjects로 삭제한 오브젝트의 동기화가 올바르게 동작하지 않음
- CopyObject로 업로드한 오브젝트가 복제되지 않음
- DeleteMarker 버전 아이디가 동일하게 복제되지 않음
향후 계획
- ksanReplicationManager
- 알려진 문제점 해결 (DeleteMarker, CopyObject 대응 등)
- ksanGW
- Azure Blob Service 안정화
- Erasure Coding 기능 안정화
- GCP Cloud Storage Service 추가 및 안정화
- ksanFSCK
- 개선된 Erasure Coding 오브젝트 정합성 검사 및 복구 지원
KSAN v1.3.0
ksanGW
AWS S3-Compatible API 지원
- (NEW) EC(Erasure Code) 추가 (#125)
- (ENHANCEMENT) POLICY에 IP 설정 추가 (#130)
- (NEW) GW Config log 옵션에 따라 Log를 생성 (#131)
- (NEW) KsanRestore, KsanStorageMove 추가 (#132)
- (ENHANCEMENT) 각 Request에서 필요한 Data를 얻기 위해 따로 구현했던 Data Class들을 S3RequestData로 통합 (#137)
- (ENHANCEMENT) S3Metadata에서 fastxml을 사용하지 않도록 수정, 속도 향상 (#138)
- (ENHANCEMENT) ACL에 display name이 없는 경우에도 정상 동작하도록 수정 (#141)
- (ENHANCEMENT) 다양한 Object 저장 시스템에 적용하기 위해서 IObjectManager로 인터페이스화 하고 기존 S3ObjectOperation 클래스를 VFSObjectManager로 변경 새로 작성, Multipart 방식을 새로운 방식으로 변경. CompleteMultipartUpload에서 생성된 파일은 Part 파일에 대한 정보로 구성되도록 함. (#169)
- (BUG-FIX) PutObject 시에 Replica에 저장되지 않는 버그 수정 (#170)
- (BUG-FIX) VFSObjectManager에서 OSD/getObject를 하는 경우 sourceRange와 encryption key 순서를 반대로 지정하는 버그 수정 (#171)
- (BUG-FIX) https로 접근이 되지 않는 버그 수정 (#172)
- (BUG-FIX) VFSObjectManager/PutObject에서 기존 Metadata의 versionId로 Object를 생성하는 버그를 새로운 versionId로 생성하도록 수정 (#173)
- (BUG-FIX) PostObject Request 시에, object meta에 content length를 설정하지 않는 버그 수정 (#174)
- (ENHANCEMENT) Encryption 관련 클래스를 통합하고 KMS 추가 (#175)
- (BUG-FIX) UploadPartCopy 시에 source object가 multipart object인 경우 인식하지 못하는 버그 수정 (#176)
- (BUG-FIX) HeadObject에서 x-amz-version-id를 두 번 response로 보내는 버그 수정 (#180)
\
ObjManager
- (ENHANCEMENT) 독립적인 ObjManager 설정 및 적용
- (BUG-FIX) Listobject performance improvements
\
ksanOSD
- 변경 사항 없음
ksanAgent
- (ENHANCEMENT) rabbitmq 서버 연결 실패 시 retry 기능 추가
- (BUG-FIX) 서비스 추가 시 .ServiceId 파일의 ServiceId 중복되는 버그 수정
ksanApiPortal
- (NEW) DiskpoolType에 PERFORMANCE 타입 추가
- (NEW) User Name, Diskpool Name으로 User Storage class 변경 API 추가
- (NEW) objManager Config 설정 기능 추가(#160)
- (NEW) User Storage Class 관리 API 추가(#150)
- (ENHANCEMENT) Disk Week 상태 로직 변경(#165)
- (ENHANCEMENT) 최초 설치시 설정한 사용자 명과 비밀번호를 Portal의 메인 계정으로 설정(#163)
- (ENHANCEMENT) 불필요한 Service Type 제거(#161)
- (ENHANCEMENT) objManager config를 Portal에서 받아가도록 변경(#168)
- (ENHANCEMENT) mariadb와 mongodb간의 스키마가 다른 부분 수정
- (ENHANCEMENT) backend 관련 서비스 등록 기능 추가(#156)
- (ENHANCEMENT) EC의 K, M 값 입력 가능하도록 변경
- (ENHANCEMENT) 기본 디스크풀 변경 기능 추가(#154)
- (ENHANCEMENT) 기본 디스크풀 변경 API를 Post에서 Put으로 변경
- (ENHANCEMENT) 할당된 디스크들에 대한 예외처리를 추가(#152)
- (BUG-FIX) ksanUser의 Storage Class 등록이 안되는 버그 수정(#159)
- (BUG-FIX) Disk 상태가 반영되지 않는 버그 수정(#152)
- (BUG-FIX) Config 설정시 알람이 가지 않는 버그 수정(#151)
ksanPortal (WEB UI)
- (NEW) Portal UI 추가
- (ENHANCEMENT) 새로고침 기능 개선(#166)
- (ENHANCEMENT) 각모듈의 이름에 필터링 기능 추가(#162)
- (ENHANCEMENT) portal에서 DiskPool의 EC값 입력기능 지원(#158)
- (ENHANCEMENT) 서비스를 선택하지 않을 경우 삭제,시작,정지,재시작버튼 비활성화
- (ENHANCEMENT) 추가폼을 열때마다 초기화 하도록 변경
- (ENHANCEMENT) storage class 예시 추가
- (ENHANCEMENT) 기본 디스크풀 변경 기능 추가(#154)
- (BUG-FIX) 로그아웃 안되는 버그 수정 (#167)
- (BUG-FIX) 불필요한 경고문 제거(#157)
- (BUG-FIX) Diskpool 추가 실패 버그 수정(#164, #155)
ksanLifecycleManager
- (ENHANCEMENT) objManager 기반으로 Object Metadata를 접근하도록 변경
- (ENHANCEMENT) s3backend의 공통 라이브러리를 사용하도록 변경
ksanLogManager
- (NEW) mongoDB 지원
- (ENHANCEMENT) s3backend의 공통 라이브러리를 사용하도록 변경
ksanReplicationManager
- (ENHANCEMENT) objManager 기반으로 Object Metadata를 접근하도록 변경
- (ENHANCEMENT) s3backend의 공통 라이브러리를 사용하도록 변경
CLI & Utility
통합 관리 도구(CLI)
- (BUG-FIX) CLI의 Usage 오기 수정
- (BUG-FIX) cbalance 유틸리티 컨트롤 버그 수정
- (BUG-FIX) fsck 유틸리티 컨트롤 버그 수정
- (ENHANCEMENT) MA(Maintenance) 타입의 Disk 관리 기능 추가
- (ENHANCEMENT) Diskpool의 Tolerance 변경을 허용 (EC 제외)
- (ENHANCEMENT) Diskpool 조회시 Default Diskpool이 표기되도록 변경
- (ENHANCEMENT) 특정 User가 정의한 “STANDARD” 타입의 S3 호환 Storage Class의 수정을 허용
- (ENHANCEMENT) KsanGetattr support display disk and osd server name
- (BUG-FIX) KsanFsck and KsanCbalance move object from the rest of disk to specific disk in the pool bug fix
ETC
설치 스크립트
- (ETC) docker 기반의 rabbitmq의 정상적인 구동을 위한 docker-compose.yml 수정
한계 및 향후 계획
한계 및 알려진 문제점
- ksanReplicationManager
- DeleteMarker 동기화 기능 동작시 DeleteObjects로 삭제한 오브젝트의 동기화가 올바르게 동작하지 않음
- CopyObject로 업로드한 오브젝트가 복제되지 않음
- DeleteMarker 버전 아이디가 동일하게 복제되지 않음
향후 계획
- WEB 기반 KSAN 관리 인터페이스 개발 및 공개 (프로토타입)
- ksanReplicationManager
- 알려진 문제점 해결 (DeleteMarker, CopyObject 대응 등)
- config 변경시 자동으로 반영되도록 기능 지원
- ksanLifecycleManager
- config 변경시 자동으로 반영되도록 기능 지원
- 알려진 문제점 해결
- ksanLogManager
- config 변경시 자동으로 반영되도록 기능 지원
- ksanGW
- S3 서비스 성능 최적화
- Azure Blob Service 안정화
- Erasure Coding 기능 안정화
- GCS 서비스 기능 추가
- Multipart 관련 성능 최적화
- ksanFSCK
- 개선된 Erasure Coding 오브젝트 정합성 검사 및 복구 지원
KSAN 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 오브젝트 정합성 검사 및 복구 지원
KSAN v1.1.1
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 지원
KSAN v1.1.0
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 백엔드 레벨의 오브젝트 정보 조회 도구
- /usr/local/ksan/bin/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
- 자동 설정 및 서비스 구동
- KSAN Server, Service, Diskpool, Disk 자동 추가, 설정 및 구동
- 필요에 따라 KSAN User 자동 생성 지원
- 일괄 설치 지원 (Docker Compose 기반)
로그
- 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 데이터 처리 방식을 지원
KSAN v1.0.0
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
- 버킷의 오브젝트를 수명주기 설정에 따라 삭제
- 버킷의 오브젝트 버전을 수명주기 설정에 따라 삭제
- 버킷의 삭제마커를 수명주기 설정에 따라 삭제