반응형

 

 


테스트는 나중에 하고, 오늘은 아래 블로그를 정독하고 이해만 하기로 함~~~~

 

https://jerryljh.tistory.com/40

 

Kubernetes Snapshot 백업/복구

Kube 환경에서도 기존 storage 벤더에서 제공하는 snapshot 기능을 사용 가능합니다. kube 환경답게 snapshot도 manifest YAML 파일 형태를 사용합니다. 그럼, 테스트 내역 공유합니다. Test 내역 snapshot 지원 sto

jerryljh.tistory.com

 

반응형

 


글 작성한 날짜: 2023년 2월 22일

 

자세한 테스트 내용은 나중에 작성하고, 오늘은 튜닝하면서 참고했던 문서만 리스팅~

 

Ceph를 실행할 때 Linux 커널에 대한 튜닝 고려 사항 (redhat 문서)
https://access.redhat.com/documentation/ko-kr/red_hat_ceph_storage/5/html/object_gateway_guide/tuning-considerations-for-the-linux-kernel-when-running-ceph_rgw

 

 


MariaDB + Ceph 조합으로 성능 테스트한 블로그 참고
  - https://ablog.jc-lab.net/230

 

 

[ 테스트 여담 ]
처음 Ceph cluster를 구축할 때, Storage로 HDD를 사용했었다.
그러다가 1개월 후에 SSD로 변경했는데 Bandwidth는 미미하게 커졌고, IOPS 값이 많이 상승했다.
mariaDB 처럼 OS Cache 사용을 원천적으로 막은 DB 제품은 Transaction이 빈번하게 발생하는데, 이런 경우 SSD를 사용하면
엄청나게 큰 효과를 볼 수 있다.
반면 큰 파일을 write, read 하는 Use case라면, ceph storage로 HDD를 사용하든 SSD를 사용하든 성능 면에서 큰 차이는 없다.

 

 

 

 

 

반응형

 


글 작성 및 테스트한 날짜: 2023년 2월 21일

 

<< 참고 문서 >>

InnoDB(MariaDB, MySQL) System Variables 전체 목록 및 상세 설명 문서
  - https://mariadb.com/kb/en/innodb-system-variables/

DB 관리 목적의 SQL (예: show, backup, analyze, kill, reset, use)
  - https://mariadb.com/kb/en/administrative-sql-statements/

 

 

자세한 설명을 하기 전에 설정 파일 예제부터 보자.

$ cat /etc/mysql/conf.d/mariadb.cnf

[client-server]
port = 3306
socket = /run/mysqld/mysqld.sock

[mariadbd]
server-id = 1
bind-address = 0.0.0.0
lower_case_table_names = 1

... 중간 생략 ...

##
## NOTE: 성능 테스트를 위해 아래 4개 항목을 변경하면서 Query Per Second를 측정해봤다.
##
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT_NO_FSYNC
innodb_flush_sync = OFF
innodb_use_native_aio = OFF

... 중간 생략 ...

$

 

 

Transaction Commit Log에 대한 Flush 여부 설정

설정 항목: innodb_flush_log_at_trx_commit

 

##
##  innodb_flush_log_at_trx_commit 설정 변경
##


MariaDB [(none)]> show variables like '%innodb_flush_log_at%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_timeout    | 1    |
| innodb_flush_log_at_trx_commit | 0     |
+--------------------------------+-------+
2 rows in set (0.001 sec)

MariaDB [(none)]> set global innodb_flush_log_at_trx_commit=0;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]>  show variables like 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 0     |
+--------------------------------+-------+
1 row in set (0.000 sec)

MariaDB [(none)]>

 

위 설정 관련 참고 문서:  innodb_flush_log_at_trx_commit 개념 그림 및 튜닝
https://yunhyeonglee.tistory.com/41

 

Flush method 개념

설정 항목: innodb-flush-method

아래 문서를 참고

-  https://medium.com/releem/innodb-flush-method-cbe0ebba8acb
-  https://dus815.tistory.com/entry/Mysql-InnoDB-%EC%97%90%EC%84%9C-OS-Cache-%EC%99%80%EC%9D%98-%EA%B4%80%EA%B3%84

그런데 mariaDB, MySQL 버전이 올라오면서 최근에는 이 설정값을 변경할 수 없다.

 

 

 

 

반응형

 


 


테스트한 날짜:  2023년 2월 20일

 

 

 

DD 명령으로 Storage I/O 성능 확인

 

############################################################################
## 쓰기(output) 성능 확인
############################################################################

## Case: 저장 장치의 Cache memory(즉, Buffer memory)를 사용하는 경우
$ dd if=/dev/zero bs=1024 count=5000 of=/mnt/hdd1/my_test_file
5000+0 records in
5000+0 records out
5120000 bytes (5.1 MB, 4.9 MiB) copied, 0.0113672 s, 450 MB/s
$

## Case: 저장 장치의 Cache memory(즉, Buffer memory)를 사용하지 않는 경우,
##       oflag=direct  옵션을 추가한다.
$ dd if=/dev/zero bs=1024 count=5000 of=/mnt/hdd1/my_test_file oflag=direct
5000+0 records in
5000+0 records out
5120000 bytes (5.1 MB, 4.9 MiB) copied, 0.23691 s, 21.6 MB/s


############################################################################
## 읽기(input) 성능 확인
############################################################################

$ dd if=/mnt/hdd1/my_test_file of=/dev/null bs=1024
5000+0 records in
5000+0 records out
5120000 bytes (5.1 MB, 4.9 MiB) copied, 0.0123259 s, 415 MB/s
$

 

 


 

반응형

 


 

작성일: 2024년 2월 21일

 

Shell script 작성할 때마다 책꽂이 어딘가에 있을 책을 찾는 것이 귀찮고, 인터넷에서 검색하는 것도 귀찮아서, 
내가 자주 사용하는 Shell script use case를 정리하는 것이 편하겠다는 생각이 들었다.

 

 

Bash Shell Programming 추천 문서

추천 문서 1

  • Link: https://www.lesstif.com/lpt/bash-shell-script-programming-26083916.html
  • 이 문서가 다루는 내용
    • For loop
    • Script parameter, argument ($0, $1, ... $n, $@)   // CLI를 통해서 받은 argument를 처리하는 방법
    • getopt
    • compare operator (비교 연산자, if then fi, else, elif, ... )
    • File test (디렉토리 존재 여부, 파일 존재 여부, 실행 파일 여부 등 검사)
    • String test (문자열이 공백인지 검사,  Regular expression 정규식)
    • File 읽기 (Text file을 line by line으로 읽어서 변수에 담기)
    • nohup + stdin/out redirect (스크립트를 background로 실행시켜 terminal이 끊길 때 스크립트가 종료되는 것을 방지)
    • EUID 활용법 (일반 계정, root 계정으로 실행했는지 테스트)
    • $? 변수 체크 (외부 명령을 실행 후, 그 결과가 성공/실패인지를 체크)

추천 문서 2

  • Link: https://velog.io/@markyang92/declaretypeset
  • 이 문서가 다루는 내용
    • 변수 이름 작명 규칙
    • 변수 선언, 변수 사용(값 참조)
    • eval 키워드 사용법
    • export, declear, set 키워드를 사용하는 이유 및 활용 사례
    • unset, typeset 키워드 사용 사례
    • 미리 정의된 환경 변수 (HOME, PATH, LANG, SHELL, USER, DISPLAY, PS1, PS2, LINES, LS_COLORS 등)

추천 문서 3

  • Link: https://blog.gaerae.com/2015/01/bash-hello-world.html
  • 이 문서가 다루는 내용
    • function 선언, function 참조
    • 변수 선언, 변수 사용(값 참조)
    • 예약 변수(Reserved Variable): FUNCNAME, SECONDS, SHLVL, PPID, BASH_ENV, BASH_VERSION, OSTYPE
    • 위치 매개 변수(Positional Parameters): $0,  $1,  $*,  $@,  $#
    • 특수 매개 변수(Special Parameters): $$,  $?,  $!,  $-,  $_
    • 매개 변수 확장(Parameter Expansion): ${변수:-단어}  ${변수#단어}  ${변수/%찾는단어/변경단어}
    • 배열 변수(Array Variable): ${array[3]}  ${array[@]}
    • 변수 타입 지정(Variables Revisited): declare, typeset
    • 논리 연산자(Logical Operator):  &&  -a   ||  -o
    • 산술 연산자(Arithmetic Operator):  **  +=  -=  *=  /= %=
    • 비트 연산자(Bitwise Operator):  <<   <<=  >>=  &   &=  |   |=  ~   ~  ^   ^=
    • 정수 비교(Integer Comparison):  -eq  -ne  >  -gt  >=  -ge  <  -lt  <=  -le
    • 문자열 비교(String Comparision):  =  ==  !=  <  >  -z   -n
    • 파일 비교 연산자(File Test Operator):  -e  -f  -s  -d -b  -c  -p  -nt  -ot  -ef
    • 반복문: for  while  until
    • 조건문:  if elif  else  fi
    • 선택문:  case ... esac
    • 디버깅 방법: Dry run (bash -n my-run.sh)

 


 

유용한 스크립트 예제 모음

 

Remote node의 파일을 가져와서 Local node의 파일과 동일한지 확인 후 Local 장비에 반영하거나 삭제

아래 스크립트에서 유용한 부분은

  • date(날짜) 출력 포맷을 가공
  • 여러 단어(Word)로 구성된 문자열을 cut 명령으로 자르기(cut, split, delimiter)
  • if 조건문 사용
#!/usr/bin/bash

MY_REMOTE_ACCT=my-id@my-domain.kr

CUR_DATE=`date +%+4Y-%m-%d-%H-%M-%S`
ORIGIN_FILE="my-domain.kr.zone"
REMOTE_FILE="${ORIGIN_FILE}_remote"
BACKUP_FILE="${ORIGIN_FILE}_${CUR_DATE}_bkup"
DIR_PATH=/var/cache/bind

cd $DIR_PATH

scp ${MY_REMOTE_ACCT}:${DIR_PATH}/${ORIGIN_FILE} $REMOTE_FILE

## cksum 명령의 결과가 3개의 컬럼으로 출력되는데, 
## 실제 필요한 데이터는 첫번째 column이라서 출력 내용을 cut -f 1 명령으로 잘라냄.
CKSUM_REMOTE_FILE=$(cksum $REMOTE_FILE | cut -d " " -f 1)
CKSUM_ORIGIN_FILE=$(cksum $ORIGIN_FILE | cut -d " " -f 1)

if [ $CKSUM_REMOTE_FILE -eq $CKSUM_ORIGIN_FILE ]; then
        echo "The ${CKSUM_REMOTE_FILE} and the $CKSUM_ORIGIN_FILE are equivalent"
        exit 1
fi

echo "The ${CKSUM_REMOTE_FILE} and the $CKSUM_ORIGIN_FILE are different"

cp $ORIGIN_FILE $BACKUP_FILE
cp $REMOTE_FILE $ORIGIN_FILE

systemctl restart bind9

 

 

##

## TODO: 나중에 추가로 예제를 작성하기

##

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

반응형

 


작성일: 2024년 3월 27일

 

 

Oracle Cloud Infra(OCI) 그리고 Kubernetes Engine(OKE)를 사용하면서 참고하기 좋은 블로그를 찾았다.

타이틀은 개인 기술 블로그이지만, 거의 Oracle Cloud Infra의 공식 사용 매뉴얼 같은 느낌이다.

Oracle Cloud Infra의 공식 문서보다 사용자 입장에서 잘 작성된 글이다.

 

https://thekoguryo.github.io/

 

TheKoguryo's 기술 블로그

 

thekoguryo.github.io

 

공식 홈피에는 너무 많은 자료가 있어서 다 읽기 부담스러운데, 이 블로그는 딱 필요한 부분만 설명되어 있고

대부분 시간순으로 글이 진행되니까 따라서 실행하면 되는지라...

처음 OCI를 접하는 사람이 한번 쭉~ 읽고 OCI를 사용하면 좋을 것 같다.

 

반응형

 


 


테스트한 날짜: 2023년 2월 14일

 

 

아래와 같이  /etc/containers/registries.conf.d/myregistry.conf 파일에 container image registry의 주소를 추가한다.

만약, 8080, 8443 같은 포트를 사용한다면 domain name 뒤에 :8080, :8443 값을 붙여주어야 한다.

 

 

(참고:  아래 2개 명령 중에서 첫번째 명령만 수행해도 잘 동작한다 ^^)

 

$  cat > /etc/containers/registries.conf.d/myregistry.conf <<EOF

[[registry]]
location = "registry.myexample.kr"
insecure = true

EOF

$


$  cat > /etc/containers/registries.conf.d/your_registry.conf <<EOF

[[registry]]
location = "registry.your-example.kr:8443"
insecure = true

EOF

$

 

 

위와 같이 conf 파일만 작성하고 바로 podman 명령을 수행하면 잘 동작한다.

 

 

$  podman login registry.myexample.kr

Username: gildong
Password:
Login Succeeded!

$

 


 

반응형

 



설치 및 테스트한 날짜: 2023년 4월 12일
Harbor version: v2.7.0

 

아래 문서에 준비 작업, 설정, 설치 과정이 자세히 설명되어 있다. 세부적인 설정이 필요하다면 아래 문서를 읽어보는 것이 좋다.

 

https://goharbor.io/docs/2.7.0/install-config/

 

Harbor – Harbor Installation and Configuration

Harbor Installation and Configuration

goharbor.io

 

 

1) 사전 준비 작업

아래 Web docs에 Harbor 운영에 필요한 HW 스펙 및 Software, Network port 정보가 있다.

 

https://goharbor.io/docs/2.7.0/install-config/installation-prereqs/

 

특별한 내용이 없으니까, 간단하게 읽고 패쑤~

 

 

2) Harbor Installer 다운로드 받기

아래 Web docs에 Harbor installer를 다운로드할 수 있는 절차가 설명되어 있다.

특별한 내용이 없으니까, 설명되어 있는 명령을 따라서 수행하면 된다.

 

  - 다운로드에 대한 설명 : https://goharbor.io/docs/2.7.0/install-config/download-installer/

  - 설치 파일 저장소:  https://github.com/goharbor/harbor/releases/tag/v2.7.0  (이 페이지의 제일 밑에 있는 링크를 사용)

  - 실제 다운로드한 파일: https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz

 

나는 여러 설치 파일 중에서 'harbor-offline-installer-v2.7.0.tgz' 파일을 다운로드 받았다.

그리고 이 tgz 압축 파일을 풀어준다.  (파일을 설정하고 실행하는 것은 뒤에서 다시 설명함)

 

3) Harbor 서버에 HTTPS Access하기 위한 인증서 만들기

OpenSSL 명령 도구를 잘 사용하는 사람이라면, 아래 Web docs의 예제 명령어를 조금 수정해서 수행하면 된다.

그런데 SSL 지식이 없거나 OpenSSL 명령 도구가 생소한 사람이라면, SSL을 공부하고 아래 Web docs 예제를 따라가는 것이 좋다.

 

https://goharbor.io/docs/2.7.0/install-config/configure-https/

 

내 경우, 위 문서의 예제 명령에서 "yourdomain.com" 부분만 실제 나의 internet domain name으로 변경하고 인증서를 만들었다.

 

 

4) 설정 파일 harbor.yaml 작성하기

위에서 다운로드한 'harbor-offline-installer-v2.7.0.tgz' 파일에 harbor.yml.tmpl 파일이 있다.

이 설정 파일을 내 상황에 맞게 편집하면 되는데, 솔직히 항목이 많고 설명을 읽어도 아리송한 부분이 있다.

내 경우는 전체 설정 항목 중에서 아래 예시와 같이 몇 개만 수정했다.

 

##
## 설정 Template 파일을 복사
##

$  cp  harbor.yml.tmpl  harbor.yml



##
## 설정 파일을 편집하기
##

$  vi  harbor.yml

... 중간 생략 ...

hostname: registry.sejong-world.kr

... 중간 생략 ...

https:
  port: 443
  certificate: /data/cert/sejong-world.kr.crt
  private_key: /data/cert/sejong-world.kr.key

harbor_admin_password: MyNewPass56789


$

 

 

 

5) 설치 Script 실행하기

아래 Web docs에 설명이 잘 되어 있어서 따라 하기만 해도 잘 설치된다.

 

https://goharbor.io/docs/2.7.0/install-config/run-installer-script/

 

단, 설치하는 방식에 따라 여러 옵션을 사용할 수 있는데 나는 Chart repository 서비스도 사용할 거라서

아래와 같이  --with-chartmuseum 옵션을 추가했다.

이 옵션으로 설치하면, container image registry와 chart repository 서비스를 모두 사용할 수 있다.

 

$ sudo ./install.sh --with-chartmuseum

 

 

위 옵션을 지정한 것 외에는 나머지 모든 설치 및 기동 종료 절차는 Web docs와 완전히 동일하게 수행했다.

문서의 설명이 간단했고, 따라만 해도 에러없이 설치가 술술 잘 되어서 부연 설명할 부분이 없다.

 

##
## Harbor 서버 종료하기  
##  (옵션 '-v'는 데이터 볼륨을 삭제하라는 뜻)
##

$  docker compose down -v


##
## Harbor 서버 시작하기 
##  (옵션 '-d'는 백그라운드에서 데몬 프로세스로 구동하라는 뜻)
##
$ docker compose up -d

 

 

 

 

 

 

 


 

+ Recent posts