Skip to content

Commit

Permalink
Merge pull request #128 from infinistor/1.2.0-alpha
Browse files Browse the repository at this point in the history
1.2.0 merge
jssinn authored Dec 9, 2022
2 parents 49efc5f + 4cc36fe commit 6094d22
Showing 894 changed files with 31,814 additions and 29,353 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
*/.vscode
*.vscode
*.classpath
*.project
*.prefs
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -40,6 +40,8 @@ KSAN은 AWS S3 호환 API를 기본적으로 제공하고 개발 로드맵에

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

ℹ️ Microsoft Azure API는 v1.2.0부터 지원합니다.

<br><br>

### 미션 크리티컬 서비스에 즉시 도입 가능한 고가용성을 지원
@@ -52,9 +54,9 @@ KSAN 시스템은 메타데이터를 관리하기 위해 MariaDB와 같은 RDBMS

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

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

ℹ️ 재해 상황에 대한 서비스 고가용성 지원을 위한 ksanDR 기능은 2022년 4분기에 공개될 예정입니다.
ℹ️ 재해 상황에 대한 서비스 고가용성 지원을 위한 ksanReplicationManager 기능은 v1.2.0 부터 지원합니다.

<br><br>

@@ -64,7 +66,7 @@ KSAN 시스템은 메타데이터를 관리하기 위해 MariaDB와 같은 RDBMS

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

ℹ️ KSAN의 Erasure Coding 기능은 2022년 4분기에 공개될 예정입니다.
ℹ️ KSAN의 Erasure Coding 기능은 v1.2.0 부터 지원합니다.


<br><br>
2 changes: 1 addition & 1 deletion core/backend/lifecycle/DockerFile
Original file line number Diff line number Diff line change
@@ -18,6 +18,6 @@ FROM openjdk:11-jre-slim
WORKDIR /app
# RUN mkdir -p /usr/local/ksan/etc/
# COPY ./core/backend/lifecycle/resources/ksanLifecycle_log_conf.xml /usr/local/ksan/etc/
COPY --from=build /src/target/ksanLifecycle.jar /usr/local/ksan/sbin/
COPY --from=build /src/target/ksanLifecycleManager.jar /usr/local/ksan/sbin/
COPY ./core/backend/lifecycle/resources/start.sh /app
CMD ["/app/start.sh"]
18 changes: 9 additions & 9 deletions core/backend/lifecycle/README.md
Original file line number Diff line number Diff line change
@@ -64,12 +64,12 @@ systemctl start docker

### Build

- 실행후 ksanLifecycle.tar 이미지 파일이 생성됩니다.
- 실행후 ksanLifecycleManager.tar 이미지 파일이 생성됩니다.

```shell
#!/bin/bash
docker build --rm -t pspace/ksan-lifecycle:latest -f DockerFile .
docker save -o ksanLifecycle.tar pspace/ksan-lifecycle
docker build --rm -t pspace/ksan-lifecycle-manager:latest -f DockerFile .
docker save -o ksanLifecycleManager.tar pspace/ksan-lifecycle-manager
```

## How to Use
@@ -102,8 +102,8 @@ docker save -o ksanLifecycle.tar pspace/ksan-lifecycle

#### 로그 설정

- 파일명 : `ksan-lifecycle.xml`
- 경로 : `/app/ksan-lifecycle.xml`
- 파일명 : `ksan-lifecycle-manager_log_conf.xml`
- 경로 : `/app/ksan-lifecycle-manager_log_conf.xml`

```xml
<?xml version="1.0" encoding="UTF-8"?>
@@ -133,20 +133,20 @@ docker save -o ksanLifecycle.tar pspace/ksan-lifecycle
#### 프로그램 설치
``` shell
# 빌드 했을 경우 이미지 로드
docker load -i /root/docker/ksanLifecycle.tar
docker load -i /root/docker/ksanLifecycleManager.tar

# 컨테니어 생성
docker create -i -t \
--network=host \
-v /etc/localtime:/etc/localtime:ro \
-v /var/log/ksan:/app/logs \
-v /usr/local/ksan/etc:/usr/local/ksan \
--name ksan-lifecycle \
pspace/ksan-lifecycle:latest
--name ksan-lifecycle-manager \
pspace/ksan-lifecycle-manager:latest
```

#### 실행예시(CLI)

```bash
docker start ksan-lifecycle
docker start ksan-lifecycle-manager
```
6 changes: 3 additions & 3 deletions core/backend/lifecycle/pom.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>KsanLifecycle</groupId>
<artifactId>ksan-lifecycle</artifactId>
<groupId>KsanLifecycleManager</groupId>
<artifactId>ksan-lifecycle-manager</artifactId>
<version>1.0.0</version>

<properties>
@@ -146,7 +146,7 @@
<artifactId>really-executable-jar-maven-plugin</artifactId>
<version>1.4.1</version>
<configuration>
<programFile>ksanLifecycle.jar</programFile>
<programFile>ksanLifecycleManager.jar</programFile>
</configuration>
<executions>
<execution>
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<!--로그 파일 저장 위치-->
<property name="LIFECYCLE_LOGS_PATH" value="/var/log/ksan/lifecycle" />
<property name="LOGS_PATH" value="/var/log/ksan/s3backend" />
<property name="OBJMANAGER_LOGS_PATH" value="/var/log/ksan/objmanager" />

<appender name="LIFECYCLE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LIFECYCLE_LOGS_PATH}/lifecycle.log</file>
<file>${LOGS_PATH}/lifecycle.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LIFECYCLE_LOGS_PATH}/lifecycle.log.%d{yyyy-MM-dd, ${logback.timezone:-Asia/Seoul}}.%i.log.gz</fileNamePattern>
<fileNamePattern>${LOGS_PATH}/lifecycle.log.%d{yyyy-MM-dd, ${logback.timezone:-Asia/Seoul}}.%i.log.gz</fileNamePattern>
<maxHistory>7</maxHistory>
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
2 changes: 1 addition & 1 deletion core/backend/lifecycle/resources/start.sh
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
#!/bin/bash
java -jar -Dlogback.configurationFile=/usr/local/ksan/etc/ksanLifecycle_log_conf.xml /usr/local/ksan/sbin/ksanLifecycle.jar
java -jar -Dlogback.configurationFile=/usr/local/ksan/etc/ksanLifecycleManager_log_conf.xml /usr/local/ksan/sbin/ksanLifecycleManager.jar
2 changes: 1 addition & 1 deletion core/backend/lifecycle/setup.py
Original file line number Diff line number Diff line change
@@ -16,6 +16,6 @@
setup(
name='ksan-lifecycle-util',
version=Version,
data_files=[('/usr/local/ksan/etc', ['./ksanLifecycle_log_conf.xml'])],
data_files=[('/usr/local/ksan/etc', ['./ksanLifecycleManager_log_conf.xml'])],
)

Original file line number Diff line number Diff line change
@@ -94,7 +94,7 @@ private String GetURL() {
}

private String GetConfigURL() {
return String.format("%s/api/v1/Config/KsanLifecycle", GetURL());
return String.format("%s/api/v1/Config/KsanLifecycleManager", GetURL());
}

private String GetRegionURL(String RegionName) {
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@

public class LifecycleConstants {
public static final String AGENT_CONF_PATH = "/usr/local/ksan/etc/ksanAgent.conf";
public static final String LIFECYCLE_SERVICE_ID_PATH = "/usr/local/ksan/sbin/.ksanLifecycle.ServiceId";
public static final String LIFECYCLE_SERVICE_ID_PATH = "/usr/local/ksan/sbin/.ksanLifecycleManager.ServiceId";
public static final String MQ_EXCHANGE_NAME = "ksan.system";
public static final String MQ_BINDING_KEY = "*.services.state";
}
2 changes: 1 addition & 1 deletion core/backend/metering/README.md
Original file line number Diff line number Diff line change
@@ -87,7 +87,7 @@ docker save -o ksanMetering.tar infinistor/ksan-metering
#### 프로그램 설치
``` shell
# 빌드 했을 경우 이미지 로드
docker load -i /root/docker/ksanLifecycle.tar
docker load -i /root/docker/ksanLifecycleManager.tar

# 컨테니어 생성
docker create -i -t \
23 changes: 0 additions & 23 deletions core/backend/setup.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.pspace.backend.libs.Config;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class LifecycleConfig {

@JsonProperty("objM.db_repository")
public String DBType;

@JsonProperty("objM.db_host")
public String Host;

@JsonProperty("objM.db_port")
public int Port;

@JsonProperty("objM.db_name")
public String DatabaseName;

@JsonProperty("objM.db_user")
public String User;

@JsonProperty("objM.db_password")
public String Password;

@JsonProperty("ksan.region")
public String Region;

@JsonProperty("lifecycle.schedule")
public String Schedule;

@JsonProperty("lifecycle.check_interval")
public long CheckInterval;

@Override
public String toString() {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.writeValueAsString(this);
} catch (JsonProcessingException e) {
return "";
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*
* Copyright (c) 2021 PSPACE, inc. KSAN Development Team ksan@pspace.co.kr
* KSAN is a suite of free software: you can redistribute it and/or modify it under the terms of
* the GNU General Public License as published by the Free Software Foundation, either version
* 3 of the License. See LICENSE for details
*
* 본 프로그램 및 관련 소스코드, 문서 등 모든 자료는 있는 그대로 제공이 됩니다.
* KSAN 프로젝트의 개발자 및 개발사는 이 프로그램을 사용한 결과에 따른 어떠한 책임도 지지 않습니다.
* KSAN 개발팀은 사전 공지, 허락, 동의 없이 KSAN 개발에 관련된 모든 결과물에 대한 LICENSE 방식을 변경 할 권리가 있습니다.
*/
package com.pspace.backend.libs.Config;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class LogManagerConfig {

@JsonProperty("ksan.region")
public String Region;

@JsonProperty("logM.db_repository")
public String DBType;

@JsonProperty("logM.db_host")
public String DBHost;

@JsonProperty("logM.db_port")
public int DBPort;

@JsonProperty("logM.db_name")
public String DBName;

@JsonProperty("logM.db_user")
public String DBUser;

@JsonProperty("logM.db_password")
public String DBPassword;

@JsonProperty("logM.db_pool_size")
public int DBPoolSize;

@JsonProperty("logM.db_expires")
public int DBExpires;

@JsonProperty("logM.check_interval")
public int CheckInterval;

@JsonProperty("logM.meter_minute")
public int MeterMinute;

@JsonProperty("logM.assert_hour")
public int AssertHour;

@Override
public String toString() {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.writeValueAsString(this);
} catch (JsonProcessingException e) {
return "";
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright (c) 2021 PSPACE, inc. KSAN Development Team ksan@pspace.co.kr
* KSAN is a suite of free software: you can redistribute it and/or modify it under the terms of
* the GNU General Public License as published by the Free Software Foundation, either version
* 3 of the License. See LICENSE for details
*
* 본 프로그램 및 관련 소스코드, 문서 등 모든 자료는 있는 그대로 제공이 됩니다.
* KSAN 프로젝트의 개발자 및 개발사는 이 프로그램을 사용한 결과에 따른 어떠한 책임도 지지 않습니다.
* KSAN 개발팀은 사전 공지, 허락, 동의 없이 KSAN 개발에 관련된 모든 결과물에 대한 LICENSE 방식을 변경 할 권리가 있습니다.
*/
package com.pspace.backend.libs.Config;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ReplicationConfig {

@JsonProperty("objM.db_repository")
public String DBType;

@JsonProperty("objM.db_host")
public String DBHost;

@JsonProperty("objM.db_port")
public int DBPort;

@JsonProperty("objM.db_name")
public String DBName;

@JsonProperty("objM.db_user")
public String DBUser;

@JsonProperty("objM.db_password")
public String DBPassword;

@JsonProperty("ksan.region")
public String Region;

@JsonProperty("replication.upload_thread_count")
public int ReplicationUploadThreadCount;

@JsonProperty("replication.multipart_size")
public long ReplicationPartSize;

@Override
public String toString() {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.writeValueAsString(this);
} catch (JsonProcessingException e) {
return "";
}
}
}
27 changes: 27 additions & 0 deletions core/backend/src/com/pspace/backend/libs/Data/BackendHeaders.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright (c) 2021 PSPACE, inc. KSAN Development Team ksan@pspace.co.kr
* KSAN is a suite of free software: you can redistribute it and/or modify it under the terms of
* the GNU General Public License as published by the Free Software Foundation, either version
* 3 of the License. See LICENSE for details
*
* 본 프로그램 및 관련 소스코드, 문서 등 모든 자료는 있는 그대로 제공이 됩니다.
* KSAN 프로젝트의 개발자 및 개발사는 이 프로그램을 사용한 결과에 따른 어떠한 책임도 지지 않습니다.
* KSAN 개발팀은 사전 공지, 허락, 동의 없이 KSAN 개발에 관련된 모든 결과물에 대한 LICENSE 방식을 변경 할 권리가 있습니다.
*/
package com.pspace.backend.libs.Data;

public class BackendHeaders {
public static final String S3_NOT_ACTIVATED = "This S3 is not active.";

public static final String HEADER_DATA = "NONE";
public static final String HEADER_BACKEND = "x-ifs-admin";

public static final String HEADER_REPLICATION = "x-ifs-replication";
public static final String HEADER_VERSIONID = "x-ifs-version-id";

public static final String HEADER_LOGGING = "x-ifs-logging";
public static final String HEADER_LIFECYCLE = "x-ifs-lifecycle";

public static final String S3PROXY_HEADER_NO_DR = "x-amz-ifs-nodr";
public static final String S3PROXY_HEADER_VERSIONID = "x-amz-ifs-VersionId";
}
Loading

0 comments on commit 6094d22

Please sign in to comment.