Search

소프트웨어 권장 사항

문서번호 : 11-200427
1) LINUX VM 설정
노드 배포과정에 Kernel memory 설정을 일부 자동 수정합니다. 또한 sdb-report 명령어 등을 통해 설정 값을 검증하는 절차를 제공합니다.
아래는 여러 단계로 나뉘어져 있는 메모리 설정 대상의 확인방법과 설정 절차를 한 곳에 통합한 것으로 수동 설정시 참조할 수 있습니다. 수동 설정시 Cluster의 모든 노드에서 수행합니다.
## 설정 확인 sysctl -a | egrep "vm.max_map_count|vm.min_free_kbytes|vm.overcommit_memory|vm.overcommit_ratio|vm.swappiness" vm.max_map_count = 1000000000 vm.min_free_kbytes = 67584 vm.overcommit_memory = 0 vm.overcommit_ratio = 50 vm.swappiness = 30 ## 설정 변경 vi /etc/sysctl.conf # 파일에 다음 라인 추가 # 10 억; 프로세스가 가질수 있는 최대 메모리 맵; 65536:default vm.max_map_count=1000000000 # 메모리 반환 임계치; RAM 의 1% 또는 4G 중 작은 값, 예) 16G x 1% vm.min_free_kbytes=162339 # 0; 메모리 overcommit 설정; 0:휴리스틱(default), 1:항상, 2:제한적(ratio 설정) vm.overcommit_memory=0 # 99; vm.overcommit_memory=2 일때만 설정 필요, 아닌 경우 무시됨 vm.overcommit_ratio=99 # 0~10(권장);스왑 활용도; 0:미활용,60:default,100:적극활용 vm.swappiness=10 ## 설정 적용 및 재부팅시 영구 적용됨 sysctl -p /etc/sysctl.conf
Bash
복사
2) NUMA 활성화
클러스터 배포 수행 후 하나의 호스트에 멀티 Leaf 노드 구성하기 위해 설정합니다.
※ 다중 NUMA(Non-Uniform Memory Access) 노드가 있는 시스템에서 SingleStore DB 를 실행할 때 최적의 성능을 위해 numactl 을 사용하여 NUMA 용 SingleStore DB 를 구성해야 합니다. 이 방법으로 SingleStore DB 를 구성하지 않으면 값비싼 NUMA 노드 간 메모리 액세스로 인해 성능이 크게 저하됩니다. NUMA 구성은 설치 프로세스의 일부로 수행해야 합니다. 그러나 필요한 경우 나중에 배포를 재구성할 수 있습니다.
구성 절차
1.
numactl 패키지 설치
2.
NUMA 노드 수 확인
3.
NUMA 노드 수만큼 SingleStore Leaf 노드 배포
4.
sdb-admin optimize 실행
5.
SingleStore 노드 재시작
# 1. numactl 패키지 설치 # Redhat/CentOS 기반 sudo yum install numactl # 2. NUMA 노드 수 확인 numactl -H available: 1 nodes (0) # 3. NUMA 노드 수만큼 SingleStore Leaf 노드 배포 sdb-admin create-node ... 사용 sdb-admin add-leaf ... 사용 # 4. sdb-admin optimize 실행 sdb-admin optimize # 5. SingleStore 노드 재시작 sdb-admin restart-node -a -y
Bash
복사
3) LINUX ulimit 설정 & unlimit 파일 오픈 및 최대 프로세스 제한 증가
[주의]
✓ 현재 설정을 확인하려면 SingleStore DB 를 기동하는 유저(memsql)로 로그인해야 합니다.
✓ 설치 방법에 따라 설치 유저로 로그인이 제한될 수 있습니다. ulimit 명령어 대신 설정파일을 직접 확인합니다.
✓ 변경된 ulimit 설정을 적용하려면 SingleStore DB 노드를 다시 시작해야 합니다.
✓ 설정 값이 작은 경우만 설정 변경이 필요합니다.
대부분의 Linux 운영 체제는 개별 사용자 또는 프로세스 수준에서 스레드, 파일 및 네트워크와 같은 시스템 리소스의 사용을 제어하는 방법을 제공합니다. 리소스에 대한 사용자 별 제한을 ulimits 라고하며 단일 사용자가 너무 많은 시스템 리소스를 소비하는 것을 방지합니다. 최적의 성능을 위해 SingleStore 는 ulimits 를 기본 Linux 설정보다 높은 값으로 설정할 것을 권장합니다. ulimit 설정은 /etc/security/limits.conf 파일에서 구성하거나 쉘 명령을 통해 직접 구성할 수 있습니다.
SingleStore 는 Aggregator 와 Leaf 간 많은 수의 서버-클라이언트 연결을 사용하여 쿼리 및 클러스터 작업을 실행합니다. 이러한 연결을 위하 설정과 최대 프로세스 제한을 늘리지 않으면 성능이 크게 저하되거나, 연결 제한 오류가 발생할 수 있습니다. 모든 노드가 대상입니다.
open files : 한 프로세스에서 열수 있는 파일 및 네트워크 연결 최대 개수
max user processes : 단일 사용자의 프로세스/쓰레드 최대 개수
## 설정 확인 ulimit -n -u open files (-n) 1024 max user processes (-u) 15037 ## 설정 변경 : 현재 값보다 작을 경우 설정 추가 vi /etc/security/limits.conf # 다음 설정 추가 <user> - nofile 1024000 <user> - nproc 128000 ## 적용 : 해당 노드 재기동 # ※ 모든 노드의 호스트를 변경한 후 일괄 재기동이 편리합니다. # 해당 노드 restart sdb-admin restart-node --memsql-id <memsql_id> ## 참고, 모든 노드 적용 후 전체 restart 수행 sdb-admin restart-node --all
Bash
복사
4) ulimit nice 설정
[주의]
✓ 현재 설정을 확인하려면 SingleStore DB 를 기동하는 유저(memsql)로 로그인해야 합니다.
✓ 설치 방법에 따라 설치 유저로 로그인이 제한될 수 있습니다. ulimit 명령어 대신 설정파일을 직접 확인합니다.
✓ 변경된 ulimit 설정을 적용하려면 SingleStore DB 노드를 다시 시작해야 합니다.
✓ CPU 사용률이 높은 클러스터에서 권장됩니다.
SingleStore DB 엔진이 가비지수집(Garbage Collector = GC) 스레드와 같은 일부 스레드를 높은 우선순위로 실행할 수 있도록 합니다. CPU 가 부족한 클러스터에서도 삭제된 데이터를 빠르게 해제될 수 있도록 하여 불필요한 메모리 사용을 줄일 수 있습니다.
## 설정 확인 ulimit -e # 기본값: 0 0 ## 설정 변경 vi /etc/security/limits.conf # 다음 설정을 추가 <user_id> - nice -10 ## 적용: 해당 노드 재기동 # ※ 모든 노드의 호스트를 변경한 후 일괄 재기동이 편리합니다. # 해당 노드 restart sdb-admin restart-node --memsql-id <memsql_id> ## 참고, 모든 노드 적용 후 전체 restart 수행 sdb-admin restart-node --all
Bash
복사
5) NVMe 설정
이 설정은 SingleStore 가 온-프레미스(On-premise) 로 구성되고 노드가 NVMe 를 사용할 때, Columnstore 성능을 위한 권장 사항입니다.
※ SingleStore 는 EXT4 및 XFS 파일 시스템을 지원합니다. 또한 최근 NVMe 장치 용 Linux 에서 많은 기능이 향상되었으므로 3.0 이상의 커널을 사용하는 것이 좋습니다(예, CentOS 7.2 는 3.10 커널). 설치 위치의 디스크가 NVMe 장치인 경우 다음과 같이 최적화 하시기 바랍니다. 각 장치의 <장치번호>는 확인된 값을 넣으십시오.
## 설정 변경 (영구) : 주의, 부팅될 때 실행되는 스크립트이므로 별도 적용 필요 # 파일에 다음 명령문 추가 echo 0 > /sys/block/nvme<장치번호>n1/queue/add_random echo 1 > /sys/block/nvme<장치번호>n1/queue/rq_affinity echo none > /sys/block/nvme<장치번호>n1/queue/scheduler echo 1023 > /sys/block/nvme<장치번호>n1/queue/nr_requests ## 적용: 각 명령라인 실행 sudo "echo 0 > /sys/block/nvme<장치번호>n1/queue/add_random" sudo "echo 1 > /sys/block/nvme<장치번호>n1/queue/rq_affinity" sudo "echo none > /sys/block/nvme<장치번호>n1/queue/scheduler" sudo "echo 1023 > /sys/block/nvme<장치번호>n1/queue/nr_requests"
Bash
복사
6) SWAP 공간 생성
SingleStore 는 RAM 을 광범위하게 사용하므로 메모리가 부족한 경우 OS 가 SingleStore 를 강제종료 시킬 수 있습니다. 이를 완화하기 위해 swap 공간(파티션 또는 파일)을 만드는 것이 좋습니다. SingleStore 머신은 많은 양의 RAM(32G 이상)이 있으므로 실제 swap 공간이 작을 수 없습니다(물리 RAM 의 10%이상). 모든 노드가 대상입니다.
## 설정 확인 sudo swapon --show # 설정되지 않은 경우 출력 내용 없음 free -h total used free shared buff/cache available Mem: 3.7G 879M 1.2G 8.6M 1.6G 2.3G Swap 0B 0B 0B ## 설정 변경 : RAM 의 10%이상 권장 # ex) 4G swap 파일 추가 (사이즈, 파일명/경로는 변경가능) sudo dd if=/dev/zero of=/swap01 bs=1MiB count=4096 sudo chmod 600 /swap01 ## swap 영역 생성 sudo mkswap /swap01 ## 즉시 적용 sudo swapon /swap01 ## 영구 적용 sudo vi /etc/fstab # 다음 설정 추가 /swap01 swap swap defaults 0 0 ## 참고 : 제거 적용 sudo swapoff /swap01 # /etc/fstab 에서 해당 설정 제거
Bash
복사
7) THP(Transparent Huge Pages) 비활성화
비활성화 되어 있지 않을 경우 쿼리 실행 시간이 일관되지 않을 수 있습니다. 모든 노드가 대상입니다
※ Linux 는 RAM 을 기본으로 4KB 크기의 페이지를 구성합니다. THP 를 사용하면 2MB 크기 이상의 페이지를 사용할 수 있습니다. 백그라운드 프로세스로서 THP 는 작은 페이지를 거대한 페이지로 병합하거나 몇 개의 거대한 페이지를 작은 페이지로 분할하여 커널 내부의 프로세스에서 사용하는 메모리를 투명하게 재구성합니다. 이로 인해 몇 초 동안 메모리 관리자의 메모리 사용이 차단되고 프로세스가 메모리에 액세스하지 못할 수 있습니다. SingleStore DB 는 많은 메모리를 사용하므로 클러스터의 모든 노드에서 부팅 시 THP 를 비활성화 하는 것이 좋습니다. THP 지연으로 인해 쿼리 실행 시간이 일관되지 않거나 시스템 CPU 가 높아 질 수 있습니다.
## 설정 확인 # never 인지 확인 sudo cat /sys/kernel/mm/transparent_hugepage/{enabled,defrag} [always] madvise never # 활성화된 상태일 때 always madvise [never] # 비활성화된 상태일 때 ## 임시 비활성화 : 현재 런타임에서 만 비활성화 sudo bash -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled" sudo bash -c "echo never > /sys/kernel/mm/transparent_hugepage/defrag" ## 영구 비활성화 방법 : 주의, 부팅시 비활성화되는 것이므로 리부팅 필요 # 설정파일 편집 sudo vi /etc/default/grub # 다음 설정의 끝에 transparent_hugepage=never 추가 GRUB_CMDLINE_LINUX="<이전설정> transparent_hugepage=never" # 실 설정 필드: 수정한 정보를 /boot/grub/grub.cfg 파일에 반영함 sudo grub2-mkconfig -o /boot/grub2/grub.cfg # 시스템 리부팅 sudo shutdown -r now ## 만약 비활성화 되지 않을 경우 tuned 데몬 설정을 변경해야 합니다. # 데몬 확인 sudo systemctl status tuned # 설정파일 편집 sudo mkdir /etc/tuned/transparent_hugepage # 설정 파일 생성 sudo vi /etc/tuned/transparent_hugepage/tuned.conf [main] include= throughput-performance [vm] transparent_hugepages=never # 설정 파일에 실행(x) 권한 부여 sudo chmod +x /etc/tuned/transparent_hugepage/tuned.conf # transparent_hugepage 프로파일 활성화 sudo tuned-adm profile transparent_hugepage # 프로파일 활성화 확인 tuned-adm active
Bash
복사
8) cgroup 관련 설정 비활성화 (비 VM 배포일 경우)
VM 이 아닌 배포의 경우 cgroups 관련하여 다음과 같이 비활성화 합니다. 다음 인수를 사용하여 커널을 실행하십시오.
intel_pstate=disable : 커널의 CPU 성능 확장 서브시스템 비활성화
cgroup_disable=memory : 메모리 리소스에 대한 cgroup 비활성화
## 설정 확인 grep memory /proc/cgroups memory 0 111 1 <- 끝의 값이 1 이면 enable 된 상태 ## 설정 변경(비활성화) # 설정파일 편집 sudo vi /etc/default/grub # 다음 설정의 끝에 intel_pstate=disable cgroup_disable=memory 추가 GRUB_CMDLINE_LINUX="<이전설정> intel_pstate=disable cgroup_disable=memory" # 실 설정 필드: 수정한 정보를 /boot/grub/grub.cfg 파일에 반영함 sudo grub2-mkconfig -o /boot/grub2/grub.cfg ## 설정 # 시스템 리부팅 sudo shutdown -r now
Bash
복사
9) 표준시간대를 KST 로 설정 (선택)
## 확인 timedatectl | grep Local Local time: Tue 2022-04-26 18:54:45 KST ## 변경 sudo timedatectl set-timezone Asia/Seoul ## 참고: 다른 방법 sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
Bash
복사
10) NTP(Network Time Protocol) 서비스 설치 및 실행
안정적인 클러스터 운영을 위해, 클러스터의 모든 노드가 동일한 시간을 유지하도록 운영 환경에 맞추어 NTP 클라이언트를 설치하고 설정해 주십시오.
일자
작성자
비고
2022.4.26
min
2022.07.22
jnshin
kernel memory 설정 안내 변경. ulimit 관련 안내 추가
2025.09.15
jwy
NTP 관련 내용 수정