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를 사용하든 성능 면에서 큰 차이는 없다.
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
############################################################################
## 쓰기(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
$
파일 비교 연산자(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
내 경우, 위 문서의 예제 명령에서 "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
$