본문 바로가기
DATABASE/Ignite

[Ignite][Linux] 3-1. Config.xml - Memory / disk 관련 기본 설정

by DANEW 2024. 2. 27.

Ingite Config 옵션

Ignite의 옵션들은 Config.xml 파일을 통해 적용을 하는것을 기본으로 한다.

 

Config.xml 파일에서 설정 할 수 있는 옵션들은 매우 많지만, 이번 포스팅에서는 운영에 직관적으로 필요한 간단한 옵션들 중 Memory와 Disk관련 된 설정에 대해서 적용해보도록 하겠다.

 

이전 포스팅에서 config.xml파일을 마운트해서 사용하는 방법을 통해 도커 컨테이너에서 실행 될 Ignite에 옵션들을 적용해본다.

[Ignite][Linux] 2. Setting - Docker를 활용한 Ignite 세팅

 

default-config.xml

Ignite는 기본적으로 다른 설정이 없다면,  {$IGNITE_HOME}/config 에 위치한 default-config.xml을 불러와 실행을 한다.

우리는 이 default-config.xml 파일이 아닌 새로운 파일을 만들어 설정을 하며, 도커 컨테이너 내부가 아닌 localhost에 위치한 후 마운트하여 사용하도록 한다.

 

아래는  {$IGNITE_HOME}/config 에 위치한 default-config.xml 파일이다.

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean class="org.apache.ignite.configuration.IgniteConfiguration">
        
        <!-- 옵션 넣을 곳 -->
        
    </bean>
</beans>

 

아래의 설정들은 옵션 넣는 곳에 넣는 하나의 블럭 묶음으로 소개하도록 하겠다.

 

작업 디렉토리

Ignite의 work directory는 {$IGNITE_HOME} 하위의 work라는 경로로 위치하고 있다.

지난 포스팅에 컨테이너 실행시 IGNITE_WORK_DIR  명령어를 통해 work 디렉토리를 변경해본적이 있으나, config의 옵션으로 추가 할 수 있다.

 

작업 디렉토리 위치 변경 옵션 - workDirectory 속성

<!-- WORK DIR 설정 -->
<property name="workDirectory" value="/data/ignite" />

 

위 옵션을 적용하여 /data/ignite 라는 경로를 작업 디렉토리로 설정하였다.

 

영구 저장소

Ignite는 In Memory DB이다. 데이터 저장공간을 디스크가 아닌 메모리를 사용하는 DB라는 뜻이다.

우리가 아는 메모리는 휘발성 데이터를 저장하고 있는 공간으로, Ignite 서비스가 내려간다면 모든 데이터가 사라지게 될 것이다.

이를 방지하고자 데이터를 메모리뿐만아니라 디스크에도 함께 쓰는 옵션이다.

 

영구 저장소 활성화 옵션 - persistenceEnabled 속성

<property name="dataStorageConfiguration">
    <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
        <property name="defaultDataRegionConfiguration">
            <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                <!-- 영구저장소 활성화 / 디스크에 데이터 쓰기 -->
                <property name="persistenceEnabled" value="true"/>
            </bean>
        </property>
    </bean>
</property>

 

위 옵션을 작성하여 영구저장소를 활성화 한다.

옵션을 활성화 하여 디스크에 데이터를 저장하게되면 위에서 설정한 작업디렉토리에 쓰여지게 된다.

 

데이터 및 인덱스는 {workDirectory}/db/nodeID 각 cacheName 별로 저장된다.

 

최대 메모리 사용량

메모리 영역에 데이터와 인덱스를 올려놓고 사용하는 Ignite에서 중요한 설정 중 하나이다.

메모리의 사용량 최대치를 얼마 만큼 사용할지 설정하는 옵션으로 이 옵션을 설정하지 않을 경우 최대 2GB의 메모리를 데이터+인덱스 영역으로 사용하는 것을 확인하였다.

반응형

해당 옵션은 영구 저장소 활성화와 같은 bean 하위에 들어간다.

 

Memory 사용 한계치 설정 - maxSize 속성

<property name="dataStorageConfiguration">
    <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
        <property name="defaultDataRegionConfiguration">
            <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                <!-- 최대 메모리 크기 설정 -->
                <property name="maxSize" value="#{6L * 1024 * 1024 * 1024}"/>
            </bean>
        </property>
    </bean>
</property>

 

메모리 8GB의 테스트 환경에서 Ignite를 구동중으로 최대 메모리를 6GB로 설정하였다.

 

영구 저장소와 메모리의 관계

만약 영구저장소를 활성화 시키지 않고 메모리 최대치를 넘는 데이터가 Insert 되는 경우 Ignite가 다운되는 상황이 발생하게 된다.

당연히 다운 된 Ignite를 재기동 할 경우 데이터는 모두 휘발되어 사라지게된다.

 

영구 저장소 옵션과 메모리 크기 설정을 하게되면 아래와 같이 쓰게 된다.

<property name="dataStorageConfiguration">
    <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
        <property name="defaultDataRegionConfiguration">
            <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                <!-- 영구저장소 활성화 / 디스크에 데이터 쓰기 -->
                <property name="persistenceEnabled" value="true"/>
                <!-- 최대 메모리 크기 설정 -->
                <property name="maxSize" value="#{6L * 1024 * 1024 * 1024}"/>
            </bean>
        </property>
    </bean>
</property>

 

영구 저장소를 활성화 하고 데이터를 Insert 하면, 데이터는 메모리에 상주하며 디스크 저장소에도 쓰여지게 된다.

 

만약 메모리 최대치 6GB의 Ignite에 데이터를 10GB를 Insert하게 되는 경우, 메모리에는 최대로 올릴 수 있는 6GB의 데이터를 서비스하며, 디스크에는 10GB의 데이터를 모두 저장하고 있게된다.

 

데이터의 메모리와 디스크의 이동 과정은 옵션에 따라 퇴거와 교체 정책이 있다.

영구 저장소를 활성화하지 않을 경우 퇴거정책을 통해 사용하지 않는 데이터를 비워나가며 Ignite 서비스가 다운되는 것을 방지 할 수 있다.

 

재기동 시 Memory 자동 로드

해당 옵션도 영구저장소와 같은 bean 하위에 포함된다.

Ignite 서비스가 재 기동될 경우 자동으로 모든 데이터를 메모리에 최대한 Load하는 옵션이다.

 

해당 옵션을 사용하지 않을 경우 디스크에 있는 데이터를 필요할때 읽어와 메모리에 올리므로 성능저하가 발생 할 수 있다.

하지만 해당 옵션을 사용한다면 초기 실행에 다소 시간이 걸릴 수 있다.

 

Memory Load - defaultWarmUpConfiguration 속성

<property name="dataStorageConfiguration">
    <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
        <!-- 재기동시 메모리에 데이터 로드 -->
        <property name="defaultWarmUpConfiguration">
            <bean class="org.apache.ignite.configuration.LoadAllWarmUpConfiguration"/>
        </property>
    </bean>
</property>

 

Related Posts

[Ignite][Linux] 1. Setup - Docker를 활용한 Ignite 설치

[Ignite][Linux] 2. Setting - Docker를 활용한 Ignite 세팅

반응형