Search
Duplicate

소프트웨어 권장 사항

문서번호 : 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 실행
# 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
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 동기화 확인 timedatectl | grep NTP NTP enabled: yes NTP synchronized: yes ## 기동 확인: chronyd 가 활성화된 상태의 예시 sudo systemctl status chronyd ● chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-04-26 10:02:58 KST; 9h ago … 이하, 출력 생략 … # 또는 ps -ef | grep chronyd chrony 571 1 0 10:02 ? 00:00:00 /usr/sbin/chronyd
Bash
복사
서비스 설치 및 기동 chronyd(권장) 또는 ntpd 미설치시 설치를 진행하거나, 이미 설치되었다면 설정을 업데이트하고 기동하십시오. 주의) 타임서버의 설정은 업체의 권고설정을 따르십시오.
### chrony 일 때 ## 설치 sudo yum install chrony ## 설정변경 sudo vi /etc/chrony.conf ## server 설정은 기본 설정 유지해도 되지만, 업체의 권고설정을 권장 ## 참고 : 우리나라/아시아 서버들 #server 2.kr.pool.ntp.org iburst #server time.bora.net iburst #server time.kornet.net iburst #server 3.kr.pool.ntp.org iburst #server 1.asia.pool.ntp.org iburst #server 2.asia.pool.ntp.org iburst ## 기동 sudo systemctl start chronyd ## 부팅 시 자동으로 기동 되도록 설정 sudo chkconfig chronyd on ## 중단 sudo systemctl stop chronyd ## 참고 : 기타 명령어들 # 상태 정보 chronyc sources 또는 chronyc tracking ## 동기화 및 H/W 시간 설정 sudo chronyc -a makestep sudo hwclock -w ### ntp 일 때 ## 설치 sudo yum install ntp ## 설정변경 sudo vi /etc/ntp.conf 또는 /etc/ntp/ntp.conf ## server 설정은 기본 설정 유지해도 되지만, 업체의 권고설정을 권장 ## 참고 : 우리나라/아시아 서버들 #server 2.kr.pool.ntp.org #server time.bora.net #server time.kornet.net #server 3.kr.pool.ntp.org #server 1.asia.pool.ntp.org #server 2.asia.pool.ntp.org ## 기동 sudo systemctl start ntpd ## 부팅 시 자동으로 기동 되도록 설정 sudo chkconfig ntpd on ## 중단 sudo systemctl stop ntpd ## 참고 : 기타 명령어들 # 상태 정보 ntpq -p 또는 ntpstat ## 동기화 및 H/W 시간 설정 sudo systemctl stop ntpd # ntpd 가 실행 중일 경우 ntpdate 가 실행되지 않음 sudo ntpdate [NTP server] #한번 수행으로 차이가 크게 줄어들지 않으므로, 여러 번 수행 필요 sudo hwclock -w sudo systemctl start ntpd
Bash
복사
일자
작성자
비고
2022.4.26
min
2022.07.22
jnshin
kernel memory 설정 안내 변경. ulimit 관련 안내 추가