YashanDB 23.2 YAC 공유 클러스터 배포 실전: 쉽게 시작하기!

환경 준비

본 문서에서는 2대 서버, 1개 공유 스토리지(3개 이상 LUN 포함)를 기반으로 하는 클래식 아키텍처를 예로 들어, 이중 인스턴스 단일 데이터베이스 공유 클러스터 환경을 구축합니다.

호스트 이름 IP 버전 CPU 메모리 디스크
yac01 192.168.6.160 은하麒麟 Kylin V10 x86 8G 100G
yac02 192.168.6.161 은하麒麟 Kylin V10 x86 8G 100G

서버 구성

서버 구성은 최소 요구 사항 이상이어야 합니다:

공유 스토리지 계획

YashanDB v23.2 공유 클러스터는 3종류의 디스크를 요구합니다(23.3에서는 2종류로 변경됨):

  • 데이터 디스크: 하나 이상, 비즈니스 실제 요구에 따라 계획하며, 하나의 데이터 디스크 경로는 `yasboot package ce gen` 명령의 data 옵션 매개변수로 사용됩니다.
  • 투표 디스크: 하나, 1G 이상 권장하며, 이 디스크 경로는 `yasboot package ce gen` 명령의 vote 옵션 매개변수로 사용됩니다.
  • YCR 디스크: 하나, 1G 이상 권장하며, 이 디스크 경로는 `yasboot package ce gen` 명령의 YCR 옵션 매개변수로 사용됩니다.

기정된 공유 스토리지에 이미 3개의 디스크가 구분되었습니다:

  • 데이터 디스크: /dev/yasdata 경로에 바인딩합니다.
  • 투표 디스크: /dev/yasvote 경로에 바인딩합니다.
  • YCR 디스크: /dev/yasycr 경로에 바인딩합니다.

바인딩 디렉토리(/dev/yfs)와 디스크 이름(yasdata, yasvote, yasycr 등)은 예시 값입니다. 실제 비즈니스 요구에 따라 조정해야 하며, 명명 시 다음 사항에 주의해야 합니다:

  • 바인딩 후 디스크의 절대 경로(예: /dev/yfs/sys0) 길이는 31바이트를 초과할 수 없습니다.
  • 바인딩 디렉토리와 디스크의 절대 경로는 모두 `yasboot package ce gen` 명령의 매개변수 값으로 사용되므로, 수정 시 실제 매개변수를 사용해야 합니다.

포트 구분

YashanDB 제품 실행에는 일련의 포트가 필요합니다:

배포 형태 데이터베이스 리스닝 yasom yasagent 서버 간 통신
단일 서버 배포 1688 1675 1676 1689, 1670

모든 서버에서 위 포트를 개방하거나 방화벽을 비활성화하는 것이 좋습니다. 또한, 시각화 배포 웹 서비스를 활성화해야 하는 서버에서는 9001 포트도 개방해야 합니다.

설치 패키지 다운로드

은하 v23.2 공유 클러스터 버전은 기업 버전만 지원하며, 공식 웹사이트에서 직접 다운로드할 수 있습니다:

은하 설치 패키지 공식 다운로드 링크: https://download.yashandb.com/download

설치 전 준비(모든 노드)

주의: 본 장 내용은 모든 노드에서 실행해야 하며, 노드 1을 예로 설명합니다!

/etc/hosts 구성

YAC 공유 클러스터 배포 시 호스트 이름을 구성해야 합니다. 서버 이름 요구 사항은 다음과 같습니다:

  • 이름은 문자, 숫자 및 밑줄로 구성되며, 반드시 문자로 시작하고 길이는 [4,64] 문자여야 합니다.
  • 동일한 YashanDB 공유 클러스터의 서버 이름은 서로 달라야 합니다.
  • 한 서버에서 여러 인스턴스를 실행해야 하는 경우 서버 이름을 [3,63] 문자로 설정해야 합니다.

호스트 이름 확인 구성 권장:

## 노드 1을 예로 들어
[root@yac01 ~]# cat<-EOF>>/etc/hosts
192.168.6.160   yac01
192.168.6.161   yac02
EOF

방화벽 비활성화

데이터베이스 설치 시 방화벽을 비활성화하는 것이 좋습니다:

## 노드 1을 예로 들어
[root@yac01 ~]# systemctl stop firewalld
[root@yac01 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

사용자 및 그룹 생성

호스트 생성 사용자에 비밀번호 복잡성 요구가 있는 경우, 너무 복잡한 비밀번호를 설정하고 싶지 않다면 비밀번호 복잡도를 취소할 수 있습니다:

## 노드 1을 예로 들어
[root@yac01 ~]# sed -i 's/^password\+[[:space:]]\+requisite[[:space:]]\+pam_pwquality.so/#&/g' /etc/pam.d/system-auth
[root@yac01 ~]# sed -i 's/use_authtok$//' /etc/pam.d/system-auth

모든 서버에서 YashanDB 제품의 설치 사용자를 생성하는 것이 좋으며, root 권한으로 설치 배포를 실행하지 않는 것이 좋습니다:

## 노드 1을 예로 들어
## 여기에 YASDBA 그룹을 추가하는 이유는 후속 구성에서: yasql / as sysdba 시스템 인증을 지원하기 위함입니다
[root@yac01 ~]# groupadd YASDBA
[root@yac01 ~]# useradd -d /home/yashan -m yashan
[root@yac01 ~]# usermod -a -G YASDBA yashan
[root@yac01 ~]# echo "yashan:yashan" | chpasswd
[root@yac01 ~]# id yashan
사용자id=1000(yashan) 그룹id=1001(yashan) 그룹=1001(yashan),1000(YASDBA)

## sudo 비밀번호 없음 구성
## root 사용자에게 권한을 부여하고 /etc/sudoers 파일을 엽니다
[root@yac01 ~]# chmod +w /etc/sudoers
## 파일 끝에 다음 내용을 추가합니다
[root@yac01 ~]# cat<-EOF>>/etc/sudoers
yashan ALL=(ALL)NOPASSWD:ALL
EOF
[root@yac01 ~]# chmod -w /etc/sudoers

디렉토리 생성

모든 YashanDB 인스턴스 노드는 다음 두 개의 디렉토리를 계획해야 합니다:

  • HOME 디렉토리: YashanDB 제품 디렉토리로, YashanDB가 제공하는 명령, 데이터베이스 실행에 필요한 라이브러리 및 각 주요 구성 요소를 포함합니다. 이 디렉토리는 yashan 사용자가 설치 배포를 실행할 때 입력한 install-path 매개변수에 따라 특정 규칙에 따라 생성됩니다.
  • DATA 디렉토리: 공유 클러스터의 경우 모든 데이터 파일과 redo 파일은 공유 스토리지에 저장되어야 하며, DATA 디렉토리는 인스턴스 실행 관련 구성 파일, 로그 파일 등 데이터만 저장하는 데 사용됩니다. 이 디렉토리는 yashan 사용자가 설치 배포를 실행할 때 입력한 `--data-path` 매개변수에 따라 특정 규칙에 따라 생성됩니다.

HOME 디렉토리와 DATA 디렉토리는 모두 /data/yashan에 계획되며, yashan 사용자는 이 디렉토리에 전체 권한이 있어야 하므로 다음 명령을 통해 권한을 부여할 수 있습니다:

## 노드 1을 예로 들어
[root@yac01 ~]# mkdir /soft
[root@yac01 ~]# mkdir -p /data/yashan
[root@yac01 ~]# chown -R yashan:yashan /data/yashan
[root@yac01 ~]# chmod -R 777 /data/yashan

시스템 매개변수 구성

YashanDB가 Linux 환경에 설치될 때 시스템이 더 나은 성능을 발휘하도록 다음 구성 조정을 권장합니다:

## 노드 1을 예로 들어
## 스왑 파티션 비활성화
[root@yac01 ~]# echo "vm.swappiness = 0" >>/etc/sysctl.conf
## 자동 로컬 포트 범위 할당 조정
[root@yac01 ~]# echo "net.ipv4.ip_local_port_range = 32768 60999" >>/etc/sysctl.conf
## 프로세스 VMA 상한 조정
[root@yac01 ~]# echo "vm.max_map_count=2000000" >>/etc/sysctl.conf
## 구성 적용
[root@yac01 ~]# sysctl -p

리소스 구성

일부 리소스 제한 값(ulimit -a를 사용하여 모든 리소스 제한 값을 확인할 수 있음)을 권장 값 이상으로 조정합니다.

## 노드 1을 예로 들어
[root@yac01 ~]# cat<-EOF>>/etc/security/limits.conf
yashan soft nofile 1048576
yashan hard nofile 1048576
yashan soft nproc 1048576
yashan hard nproc 1048576
yashan soft rss unlimited
yashan hard rss unlimited
yashan soft stack 8192
yashan hard stack 8192
EOF

공유 메모리 정리

YashanDB 공유 클러스터 배포 시 모든 서버에서 공유 메모리를 정리해야 합니다:

## 노드 1을 예로 들어
[root@yac01 ~]# ipcrm -a

소프트웨어 소스 구성

Linux 시스템 설치 소프트웨어는 로컬 소프트웨어 소스를 구성해야 합니다.

⭐️ Linux 소프트웨어 소스 구성은 이전에 작성한 글을 참조할 수 있습니다: DBA 필수: Linux 소프트웨어 소스 구성 전략

로컬 소프트웨어 소스 구성 방법은 먼저 로컬 ISO 설치 이미지를 마운트해야 합니다:

## 노드 1을 예로 들어
[root@yac01 ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.

KylinV10 로컬 소프트웨어 소스를 한 번에 구성합니다:

## 노드 1을 예로 들어
## 소프트웨어 소스 초기 구성 백업
[root@yac01 ~]# mkdir -p /etc/yum.repos.d/bak
[root@yac01 ~]# mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
mv: 디렉토리'/etc/yum.repos.d/bak'를 자체 하위 디렉토리'/etc/yum.repos.d/bak/bak'로 이동할 수 없음
## 소프트웨어 소스 구성
[root@yac01 ~]# cat<-EOF>/etc/yum.repos.d/local.repo
[server]
name=server
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
## 소프트웨어 소스 내용 확인
[root@yac01 ~]# cat /etc/yum.repos.d/local.repo
[server]
name=server
baseurl=file:///mnt
enabled=1
gpgcheck=0

소프트웨어 소스 구성이 완료되면 소프트웨어를 설치할 수 있습니다.

종속 패키지 설치

YashanDB의 정상 설치 및 실행을 보장하기 위해 다음 출처 및 최소 버전 요구 사항에 따라 모든 서버 환경에서 필요한 종속 항목을 구성합니다:

## 노드 1을 예로 들어
[root@yac01 ~]# dnf install -y openssl gmssl lz4 zlib zstd monit --skip-broken
Package openssl-1:1.1.1f-31.p23.ky10.x86_64 is already installed.
No match for argument: gmssl
Package lz4-1.9.2-4.ky10.x86_64 is already installed.
Package zlib-1.2.11-23.ky10.x86_64 is already installed.
Package zstd-1.4.5-2.ky10.x86_64 is already installed.
No match for argument: monit
Dependencies resolved.
Nothing to do.
Complete!

설치 후 설치가 성공했는지 확인합니다:

## 노드 1을 예로 들어
[root@yac01 ~]# rpm -q openssl gmssl lz4 zlib zstd monit
openssl-1.1.1f-31.p23.ky10.x86_64
설치되지 않은 소프트웨어 패키지 gmssl 
lz4-1.9.2-4.ky10.x86_64
zlib-1.2.11-23.ky10.x86_64
zstd-1.4.5-2.ky10.x86_64
설치되지 않은 소프트웨어 패키지 monit 

YashanDB는 23.2 버전부터 openssl 제한을 추가했으며, 버전이 1.1.1 이상이어야 하며, 그렇지 않으면 설치 과정에서 오류가 발생할 수 있습니다:

## 노드 1을 예로 들어
## 1.1.1 이상이어야 함
[root@yac01 ~]# openssl version
OpenSSL 1.1.1f  31 Mar 2020

麒麟 V10 시스템은 요구 사항을 충족하며, 1.1.1 미만 버전인 경우 openssl 버전을 업그레이드해야 하며, openssl 업그레이드 단계를 참조할 수 있습니다: YashanDB openssl 버전이 낮은 업그레이드 과정.

gmssl은 수동 컴파일 설치가 필요하며, GmSSL-3.1.1.tar.gz 설치 패키지 다운로드, 설치 단계는 다음과 같습니다:

## 노드 1을 예로 들어
## cmake 설치를 사용하려면 먼저 다음 종속 패키지를 설치해야 함
[root@yac01 soft]# yum install -y cmake openssl-devel gcc gcc-c++ unzip zlib-devel

## gmssl 컴파일 설치
[root@yac01 soft]# tar -xf GmSSL-3.1.1.tar.gz 
[root@yac01 soft]# cd GmSSL-3.1.1/
[root@yac01 GmSSL-3.1.1]# ls
cmake  CMakeLists.txt  demos  docs  include  INSTALL.md  LICENSE  README.md  src  tests  tools
[root@yac01 GmSSL-3.1.1]# mkdir build && cd build
[root@yac01 build]# cmake ..
## make install 완료 후, GmSSL은 기본 설치 디렉토리에 gmssl 명령줄 도구를 설치하고, 헤더 파일 디렉토리에 gmssl 디렉토리를 생성하며, 라이브러리 디렉토리에 libgmssl.a, libgmssl.so 등 라이브러리 파일을 설치합니다
[root@yac01 build]# make && make test && make install

## 컴파일된 동적 라이브러리는 경로를 지정해야 하며, 환경 변수를 구성합니다
[root@yac01 build]# cat<-EOF>>/etc/profile
export PATH=$PATH:/usr/local/bin
EOF
[root@yac01 build]# source /etc/profile
[root@yac01 build]# echo /usr/local/lib > /etc/ld.so.conf.d/gmssl.conf
[root@yac01 build]# ldconfig

## gmssl 버전 확인, 설치 성공
[root@yac01 build]# gmssl version
GmSSL 3.1.1

monit도 수동 컴파일 설치가 필요합니다: monit-5.34.2.tar.gz 설치 패키지 다운로드, 설치 단계는 다음과 같습니다:

## 노드 1을 예로 들어
## monit 컴파일 설치
[root@yac01 soft]# tar -xf monit-5.34.2.tar.gz 
[root@yac01 soft]# cd monit-5.34.2/
[root@yac01 monit-5.34.2]# ls
aclocal.m4  bootstrap  CHANGES  config  configure  configure.ac  CONTRIBUTORS  COPYING  doc  libmonit  m4  Makefile.am  Makefile.in  monit.1  monitrc  src  system
[root@yac01 monit-5.34.2]# ./configure && make && make install

## monit 버전 확인, 설치 성공
[root@yac01 monit-5.34.2]# monit -V
This is Monit version 5.34.2
Built with ssl, with ipv6, with compression, with pam and with large files
Copyright (C) 2001-2024 Tildeslash Ltd. All Rights Reserved.

종속 패키지 설치가 완료되었습니다.

공유 디스크 마운트

본 문서는 iscsi 공유 스토리지를 데이터베이스 스토리지 파일 시스템으로 사용합니다.

⭐️ iscsi 공유 디스크 구성은 이전에 작성한 글을 참조할 수 있습니다: 실전: StarWind을 사용하여 ISCSI 공유 스토리지 구성

1. Linux 클라이언트에 iscsi 소프트웨어 설치

## 노드 1을 예로 들어
## -bash: iscsiadm: 명령을 찾을 수 없음 오류가 발생하면 iscsi 소프트웨어를 설치해야 함
[root@yac01 ~]# yum install -y iscsi-initiator-utils*
[root@yac01 ~]# systemctl start iscsid.service
[root@yac01 ~]# systemctl enable iscsid.service

2. 서비스 측 iscsi target 검색

## 노드 1을 예로 들어
## 192.168.6.43은 iscsi 서비스 측 IP 주소
[root@yac01 ~]# iscsiadm -m discovery -t st -p 192.168.6.43
192.168.6.43:3260,-1 iqn.2008-08.com.starwindsoftware:lpc-matebook-yashandb

3. 서비스 측 iscsi 공유 스토리지 연결

## 노드 1을 예로 들어
## iqn.2008-08.com.starwindsoftware:lpc-matebook-yashandb은 위 단계에서 검색된 target 이름
[root@yac01 ~]# iscsiadm -m node -T iqn.2008-08.com.starwindsoftware:lpc-matebook-yashandb -p 192.168.6.43 -l
Logging in to [iface: default, target: iqn.2008-08.com.starwindsoftware:lpc-matebook-yashandb, portal: 192.168.6.43,3260]
Login to [iface: default, target: iqn.2008-08.com.starwindsoftware:lpc-matebook-yashandb, portal: 192.168.6.43,3260] successful.

4. 부팅 시 자동 마운트 구성

## 노드 1을 예로 들어
[root@yac01 ~]# iscsiadm -m node -T iqn.2008-08.com.starwindsoftware:lpc-matebook-yashandb -p 192.168.6.43 --op update -n node.startup -v automatic

5. 성공적으로 마운트된 공유 디스크 확인

## 노드 1을 예로 들어, sdb, sdc, sdd는 마운트된 공유 디스크
[root@yac01 ~]# lsblk 
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0  100G  0 disk 
├─sda1          8:1    0    1G  0 part /boot
└─sda2          8:2    0   99G  0 part 
  ├─klas-root 253:0    0 91.1G  0 lvm  /
  └─klas-swap 253:1    0  7.9G  0 lvm  [SWAP]
sdb             8:16   0   20G  0 disk 
sdc             8:32   0    5G  0 disk 
sdd             8:48   0    5G  0 disk 
sr0            11:0    1  4.4G  0 rom  /mnt

공유 디스크를 마운트한 후 UDEV 바인딩 디스크를 구성할 수 있습니다.

UDEV 바인딩 디스크

공유 디스크가 다중 경로인 경우, 먼저 multipath를 사용하여 바인딩 디스크를 구성하여 관리하기 편리할 수 있습니다.

여기에는 하나의 경로만 있으며, 노드 디스크 wwid를 확인합니다:

## 노드 1을 예로 들어
[root@yac01 rules.d]# /usr/lib/udev/scsi_id -g -u /dev/sdb
2aed2b7c393099358
[root@yac01 rules.d]# /usr/lib/udev/scsi_id -g -u /dev/sdc
2d87df1589c241e74
[root@yac01 rules.d]# /usr/lib/udev/scsi_id -g -u /dev/sdd
2bc79e1ce9dc0fae8

udev 바인딩 실행:

## 노드 1을 예로 들어
[root@yac01 ~]# cat<-EOF>/etc/udev/rules.d/yashan-device-rule.rules
KERNEL=="sd*",ENV{ID_SERIAL}=="2aed2b7c393099358",SYMLINK+="yas/data",OWNER="yashan",GROUP="YASDBA",MODE="0666",RUN+="/bin/sh -c 'chown -R yashan:yashan /dev/yas/data'"
KERNEL=="sd*",ENV{ID_SERIAL}=="2d87df1589c241e74",SYMLINK+="yas/vote",OWNER="yashan",GROUP="YASDBA",MODE="0666",RUN+="/bin/sh -c 'chown -R yashan:yashan /dev/yas/vote'"
KERNEL=="sd*",ENV{ID_SERIAL}=="2bc79e1ce9dc0fae8",SYMLINK+="yas/ycr",OWNER="yashan",GROUP="YASDBA",MODE="0666",RUN+="/bin/sh -c 'chown -R yashan:yashan /dev/yas/ycr'"
EOF

udev 적용:

## 노드 1을 예로 들어
[root@yac01 ~]# udevadm control --reload-rules
[root@yac01 ~]# udevadm trigger --type=devices --action=change

바인딩 후 디스크 확인:

## 노드 1을 예로 들어
[root@yac01 soft]# ll /dev/yas/*
lrwxrwxrwx 1 yashan yashan 6 12월  4 17:55 /dev/yas/data -> ../sdb
lrwxrwxrwx 1 yashan yashan 6 12월  4 17:55 /dev/yas/vote -> ../sdc
lrwxrwxrwx 1 yashan yashan 6 12월  4 17:55 /dev/yas/ycr -> ../sdd

두 노드 모두 바인딩이 성공했는지 확인합니다.

투명 대페이지 비활성화

YashanDB는 투명 대페이지를 비활성화하는 것을 권장하며, 일부 운영 체제는 기본적으로 투명 대페이지 옵션이 활성화되어 있습니다. 다음 명령을 실행하여 확인할 수 있습니다:

## 노드 1을 예로 들어
[root@yac01 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

결과 표시:

  • [always] madvise never: 투명 대페이지가 활성화되었습니다.
  • always [madvise] never: 투명 대페이지가 활성화되었습니다.
  • always madvise [never]: 투명 대페이지가 비활성화되었습니다.

/etc/default/grub 파일을 수정하여 GRUB_CMDLINE_LINUX에 transparent_hugepage=never 매개변수를 추가하거나 수정합니다:

## 노드 1을 예로 들어
[root@yac01 ~]# sed -i 's/quiet/quiet transparent_hugepage=never/' /etc/default/grub

다음 명령을 통해 현재 시스템의 부트 유형을 확인합니다:

## 노드 1을 예로 들어
[root@yac01 ~]# [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
BIOS

두 가지 부트 유형의 부트 파일 경로는 다음과 같습니다:

  • BIOS: /boot/grub2/grub.cfg
  • UEFI: /boot/efi/EFI/<distro_name>/grub.cfg, distro_name은 시스템 배포판 이름입니다. 예: ubuntu, fedora, debian 등

grub2-mkconfig 명령을 실행하여 grub.cfg를 다시 구성합니다:

## 노드 1을 예로 들어
## BIOS 부트
[root@yac01 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.19.90-89.11.v2401.ky10.x86_64
Found initrd image: /boot/initramfs-4.19.90-89.11.v2401.ky10.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-3a1c3f06e89644e5b9b560f2ba64fd98
Found initrd image: /boot/initramfs-0-rescue-3a1c3f06e89644e5b9b560f2ba64fd98.img
done
## UEFI 부트
# grub2-mkconfig -o /boot/efi/EFI/<distro_name>/grub.cfg

운영 체제를 재부팅하여 구성을 영구적으로 적용합니다:

## 노드 1을 예로 들어
[root@yac01 ~]# reboot

투명 대페이지가 비활성화되었는지 확인:

## 노드 1을 예로 들어
[root@yac01 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

결과는 always madvise [never]로 표시되어야 합니다.

YAC 설치(주 노드)

YashanDB 설치에는 두 가지 방법이 사용될 수 있습니다:

  • 명령줄 설치
  • 시각화 설치

저는 명령줄 모드를 선호하므로 데모도 명령줄 모드를 사용합니다. 공유 클러스터 설치 작업은 주 노드에서만 실행합니다!

설치 소프트웨어 압축 해제

설치 배포를 실행하기 전에 설치 사용자(yashan)로 데이터베이스 서버에 로그인하고 /home/yashan/install 설치 디렉토리로 이동합니다:

## yashan 사용자 아래에 install 설치 디렉토리 생성
[yashan@yac01 ~]$ mkdir -p /home/yashan/install
## 업로드 및 yashan 사용자 권한 부여
[root@yac01 ~]# chown yashan:yashan /home/yashan/install/yashandb-23.2.4.100-linux-x86_64.tar.gz 
## yashan 사용자로 설치 패키지 압축 해제
[root@yac01 ~]# su - yashan
[yashan@yac01 ~]$ cd install/
[yashan@yac01 install]$ tar -zxf /home/yashan/install/yashandb-23.2.4.100-linux-x86_64.tar.gz 
[yashan@yac01 install]$ ll
drwxr-xr-x 6 yashan yashan        70  9월  4 17:29 admin
drwxr-xr-x 2 yashan yashan       243  9월  4 17:29 bin
drwxr-xr-x 2 yashan yashan       176  9월  4 17:28 conf
drwxr-xr-x 4 yashan yashan        33  9월  4 17:28 ext
-rw-r--r-- 1 yashan yashan     10701  9월  4 17:28 gitmoduleversion.dat
drwxr-xr-x 2 yashan yashan        64  9월  4 17:28 include
drwxr-xr-x 3 yashan yashan        21  9월  4 17:29 java
drwxr-xr-x 2 yashan yashan      4096  9월  4 17:29 lib
-rw-r----- 1 yashan yashan     14989  9월  4 17:28 LICENSE
drwxr-xr-x 3 yashan yashan        61  9월  4 17:29 plug-in
drwxr-xr-x 2 yashan yashan        17  9월  4 17:29 scripts
-rwxr-xr-x 1 yashan yashan 189823431 12월  4 17:58 yashandb-23.2.4.100-linux-x86_64.tar.gz

배포 파일 생성

yasboot package 명령을 실행하여 구성 파일을 생성합니다:

## 여기서 yashan 사용자 비밀번호는 환경에 따라 구성해야 하며, 설치 튜토리얼을 따르면 수정할 필요가 없으며, 비밀번호는 yashan입니다
[yashan@yac01 install]$ ./bin/yasboot package ce gen --cluster yashandb -u yashan -p yashan --ip 192.168.6.160,192.168.6.161 --port 22 --install-path /data/yashan/yasdb_home --data-path /data/yashan/yasdb_data --begin-port 1688 --node 2 --data /dev/yas/data --vote /dev/yas/vote  --ycr /dev/yas/ycr
host host0001 openssl version: OpenSSL 1.1.1f  31 Mar 2020
OpenSSL version is 1.1.1 or greater
host host0002 openssl version: OpenSSL 1.1.1f  31 Mar 2020
OpenSSL version is 1.1.1 or greater
 hostid   | group | node_type | node_name | listen_addr        | inter_connect      | data_path               
--------------------------------------------------------------------------------------------------------------
 host0001 | ceg1  | ce        | 1-1       | 192.168.6.160:1688 | 192.168.6.160:1689 | /data/yashan/yasdb_data 
----------+-------+-----------+-----------+--------------------+--------------------+-------------------------
 host0002 | ceg1  | ce        | 1-2       | 192.168.6.161:1688 | 192.168.6.161:1689 | /data/yashan/yasdb_data 
----------+-------+-----------+-----------+--------------------+--------------------+-------------------------

Generate config completed

매개변수 설명:

실행 후 현재 디렉토리에 yashandb.tomlhosts.toml 두 개의 구성 파일이 생성되며, 수동으로 수정할 수 있지만, 파일의 어떤 행도 삭제하지 않는 것이 좋습니다. 그렇지 않으면 후속 설치 과정에서 오류가 발생하거나 구축된 환경이 후속 확장 구성을 수행할 수 없게 될 수 있습니다.

  • yashandb.toml: 데이터베이스 클러스터 구성 파일입니다.
  • hosts.toml: 서버 구성 파일입니다.

실제 요구에 따라 yashandb.toml 구성 파일의 설치 매개변수를 조정할 수 있으며, group 수준에서 YashanDB의 모든 데이터베이스 생성 매개변수를 설정하고 node 수준에서 YashanDB의 모든 구성 매개변수를 설정할 수 있습니다:

[yashan@yac01 install]$ cat yashandb.toml 
cluster = "yashandb" # 설치 후 수정해도 효과 없음, 재설치하지 않는 한
create_simple_schema = false # true로 설정하면 배포 후 예제 SQL이 실행되며, true로 변경하려면 deploy 시 sys-password 매개변수를 지정해야 함
uuid = "675028ea25cd37de2ae1eda1fcae7f67" # 시스템이 자동으로 생성하며, 수정하지 않는 것이 좋음
yas_type = "CE" # 배포 모드, 설치 후 수정해도 효과 없음, 재설치하지 않는 한

[[group]]
  database_role = "primary"
  group_type = "ce" # 노드 그룹 유형, 설치 후 수정해도 효과 없음, 재설치하지 않는 한
  name = "ceg1" # 노드 그룹 이름, 설치 후 수정해도 효과 없음, 재설치하지 않는 한
  [group.cedisk]
    vote = "/dev/yas/vote" # 투표 디스크, 설치 후 수정 불가, 재설치하지 않는 한
    ycr = "/dev/yas/ycr" # ycr 디스크, 설치 후 수정 불가, 재설치하지 않는 한
  [group.config] # 모든 데이터베이스 생성 매개변수를 구성할 수 있으며, 구성하지 않으면 기본값 사용
    CHARACTER_SET = "utf8"
    ISARCHIVELOG = true
    REDO_FILE_NUM = 4
    REDO_FILE_SIZE = "128M"

  [[group.diskgroup]] # 디스크 그룹 정보
    au_size = "1M" # 디스크 공간 할당 시 AU 크기
    disk_size = "" # diskgroup이 관리할 수 있는 disk 크기를 지정하며, 생략 가능하며, 기본값은 해당 disk의 총 크기입니다
    name = "DG0" # 디스크 그룹의 이름
    redundancy = "EXTERNAL" # 디스크 그룹의 중복도
    yfs_force_create = false # 디스크 강제 포맷

    [[group.diskgroup.failgroup]]
      disk = ["/dev/yas/data"]
      name = "DG0_0"

  [[group.node]] # 노드 구성
    data_path = "/data/yashan/yasdb_data" # DATA 디렉토리, 설치 후 수정 불가, 재설치하지 않는 한
    hostid = "host0001" # 서버 식별자, 설치 후 수정 불가, 재설치하지 않는 한
    role = 1 # 데이터베이스 주/부 역할, 공유 클러스터 인스턴스에는 주/부 개념이 없으며, 수정 지원 안 함
    [group.node.config] # 모든 데이터베이스 매개변수를 구성할 수 있으며, 구성하지 않으면 기본값 사용, 설치 후 수정 불가, 재설치하지 않는 한
      CLUSTER_DATABASE = "TRUE"
      CLUSTER_INTERCONNECT = "192.168.6.160:1689"
      DATA_BUFFER_SIZE = "1G"
      HA_ELECTION_TIMEOUT = 18
      HA_HEARTBEAT_INTERVAL = 6
      INTER_URL = "192.168.6.160:1788"
      LISTEN_ADDR = "192.168.6.160:1688"
      REDO_BUFFER_PARTS = 8
      REDO_BUFFER_SIZE = "64M"
      RUN_LOG_FILE_PATH = "/data/yashan/yasdb_home/yashandb/23.2.4.100/log/yashandb/ce-1-1/run"
      SHARE_POOL_SIZE = "1G"
      SLOW_LOG_FILE_PATH = "/data/yashan/yasdb_home/yashandb/23.2.4.100/log/yashandb/ce-1-1/slow"
      SQL_POOL_PARTS = 8

  [[group.node]]
    data_path = "/data/yashan/yasdb_data"
    hostid = "host0002"
    role = 2
    [group.node.config]
      CLUSTER_DATABASE = "TRUE"
      CLUSTER_INTERCONNECT = "192.168.6.161:1689"
      DATA_BUFFER_SIZE = "1G"
      HA_ELECTION_TIMEOUT = 18
      HA_HEARTBEAT_INTERVAL = 6
      INTER_URL = "192.168.6.161:1788"
      LISTEN_ADDR = "192.168.6.161:1688"
      REDO_BUFFER_PARTS = 8
      REDO_BUFFER_SIZE = "64M"
      RUN_LOG_FILE_PATH = "/data/yashan/yasdb_home/yashandb/23.2.4.100/log/yashandb/ce-1-2/run"
      SHARE_POOL_SIZE = "1G"
      SLOW_LOG_FILE_PATH = "/data/yashan/yasdb_home/yashandb/23.2.4.100/log/yashandb/ce-1-2/slow"
      SQL_POOL_PARTS = 8
  [group.ycsconfig] # YCS 구성 매개변수, 구성하지 않으면 기본값 사용
    DISK_HB_KEEP_ALIVE = 30
    LOG_LEVEL = "DEBUG"
    LOG_NUMBER = 10
    LOG_SIZE = "20M"
    NETWORK_HB_TIMEOUT = 30
    RESTART_INTERVAL = 30
    RESTART_TIMES = 3
    WAIT_STOP_FIN_TIME = 90
  [group.yfsconfig] # YFS 구성 매개변수, 구성하지 않으면 기본값 사용
    SHM_POOL_SIZE = "2G"
    SYS_AREA_SIZE = "1G"
    YFS_PACKET_SIZE = "1M"

소프트웨어 설치

여기서는 직접 설치를 선택합니다(처음에는 플러그인 패키지 다운로드 주소를 찾지 못했기 때문입니다):

[yashan@yac01 install]$ ./bin/yasboot package install -t hosts.toml -i /home/yashan/install/yashandb-23.2.4.100-linux-x86_64.tar.gz
host host0002 openssl version: OpenSSL 1.1.1f  31 Mar 2020
OpenSSL version is 1.1.1 or greater
host host0001 openssl version: OpenSSL 1.1.1f  31 Mar 2020
OpenSSL version is 1.1.1 or greater
checking install package...
install version: yashandb 23.2.4.100
host0001 100% [====================================================================]    3s
host0002 100% [====================================================================]    3s
update host to yasom...

플러그인 패키지가 있는 경우 다음 명령을 사용하여 설치할 수 있습니다:

## ./bin/yasboot package install -t hosts.toml -i yashandb-23.2.1.100-linux-x86_64.tar.gz --plugin yashandb-plugins-all-23.2.1.100-linux-x86_64.tar.gz

플러그인 패키지는 공식 웹사이트에서 직접 다운로드할 수 있습니다:

주의: DBLINK 기능 및 더 풍부한 내장 함수(예: LSFA_LISTAGG)를 사용해야 하는 경우, 먼저 플러그인 패키지를 다운로드하고 설치 명령에서 `--plugin` 매개변수를 지정해야 합니다(설치 완료 후에는 해당 플러그인 패키지를 개별적으로 설치할 수 없습니다).

데이터베이스 배포

## yasdb 배포, -p는 sys 사용자 비밀번호를 지정; [-d, --child] 매개변수를 지정하여 작업 및 하위 작업 정보를 표시하여 배포 진행 상황을 확인
[yashan@yac01 install]$ ./bin/yasboot cluster deploy -t yashandb.toml -p yasdb_123 -d --yfs-force-create
 type | uuid             | name               | hostid | index    | status  | return_code | progress | cost 
------------------------------------------------------------------------------------------------------------
 task | a01e25b0a3a9366f | DeployYasdbCluster | -      | yashandb | RUNNING | -           | 0        | -    
------+------------------+--------------------+--------+----------+---------+-------------+----------+------
task completed, status: SUCCESS

위 정보가 반환되면 배포가 성공한 것입니다.

설치 후 확인

환경 변수 구성(모든 노드)

배포 명령이 성공적으로 실행되면 $YASDB_HOME 디렉토리의 conf 폴더에 <<클러스터 이름>>.bashrc 환경 변수 파일이 생성됩니다:

## 노드 1을 예로 들어
[yashan@yac01 ~]$ cd /data/yashan/yasdb_home/yashandb/23.2.4.100/conf/
[yashan@yac01 conf]$ ls yashandb.bashrc
yashandb.bashrc
[yashan@yac01 conf]$ cat yashandb.bashrc >>~/.bashrc
[yashan@yac01 conf]$ echo "alias ys='yasql / as sysdba'" >> ~/.bashrc
[yashan@yac01 conf]$ source ~/.bashrc

ycsctl은 YashanDB의 YCS 관리 도구로, 사용자는 이 도구를 사용하여 공유 클러스터 수준 및 노드 수준의 관리 작업을 구현할 수 있습니다. 노드 수준의 ycsctl 명령은 노드의 YCS가 시작된 후에만 실행할 수 있으며, $YASCS_HOME 환경 변수를 구성해야 합니다:

# 다음 경로는 실제 노드 경로로 변경해야 함
[yashan@yac01 ~]$ echo "export YASCS_HOME=/data/yashan/yasdb_data/ycs/ce-1-1" >> ~/.bashrc
[yashan@yac02 ~]$ echo "export YASCS_HOME=/data/yashan/yasdb_data/ycs/ce-1-2" >> ~/.bashrc

클러스터 확인

클러스터 상태 확인:

[yashan@yac01 ce-1-1]$ ycsctl status
---------------------------------------------------------------------------------------------
Self Host ID|Cluster Master ID|YasFS Master ID|YasDB Master ID|Active Host Count
---------------------------------------------------------------------------------------------
1            1                 1               1               2
---------------------------------------------------------------------------------------------
Host ID   |Target    |State     |YasFS     |YasDB
---------------------------------------------------------------------------------------------
1          online     online     online     online
2          online     online     online     online

클러스터 구성 확인:

[yashan@yac01 ce-1-1]$ ycsctl show config
    Cluster name: yashandb, config version: 4
    Cluster id: 675028ea25cd37de2ae1eda1fcae7f67
    Voting disk: /dev/yas/vote
    Network timeout: 30s
    Disk heartbeat keep alive: 30s
    Default resource yasfs: enabled
    Shell in cluster:
      Start shell:   start.sh
      Stop shell:    stop.sh
      Monitor shell: monitor.sh
    Nodes in cluster:
      Node name: yac01, yascs/yasfs inter connect URL: 192.168.6.160:1788, Node ID: 1
        yasdb instance name:yasdb, yasdb instance id:1
      Node name: yac02, yascs/yasfs inter connect URL: 192.168.6.161:1788, Node ID: 2
        yasdb instance name:yasdb, yasdb instance id:1

ycsctl의 더 많은 사용법은 `ycsctl -H`를 사용하여 확인할 수 있습니다.

데이터베이스 확인

데이터베이스 상태 확인:

[yashan@yac01 conf]$ yasboot cluster status -c yashandb -d
 hostid   | node_type | nodeid | pid  | instance_status | database_status | database_role | listen_address     | data_path
------------------------------------------------------------------------------------------------------------------------------------------------
 host0001 | ce        | 1-1:1  | 7855 | open            | normal          | primary       | 192.168.6.160:1688 | /data/yashan/yasdb_data/ce-1-1
----------+-----------+--------+------+-----------------+-----------------+---------------+--------------------+--------------------------------
 host0002 | ce        | 1-2:2  | 7659 | open            | normal          | primary       | 192.168.6.161:1688 | /data/yashan/yasdb_data/ce-1-2
----------+-----------+--------+------+-----------------+-----------------+---------------+--------------------+--------------------------------

## 호스트 또는 그룹을 인덱스로 표시하며, 기본값은 호스트
[yashan@yac01 ~]$ yasboot cluster status -b group -c yashandb -d
 group_name | node_type | nodeid | pid   | instance_status | database_status | database_role | listen_address     | data_path
---------------------------------------------------------------------------------------------------------------------------------------------------
 ceg1       | ce        | 1-1:1  | 13299 | open            | normal          | primary       | 192.168.6.160:1688 | /data/yashan/yasdb_data/ce-1-1
            +-----------+--------+-------+-----------------+-----------------+---------------+--------------------+--------------------------------
            | ce        | 1-2:2  | 7659  | open            | normal          | primary       | 192.168.6.161:1688 | /data/yashan/yasdb_data/ce-1-2
------------+-----------+--------+-------+-----------------+-----------------+---------------+--------------------+--------------------------------

인스턴스 상태 확인:

## 시스템 인증 방식 로그인, 바로 ys 별칭 사용 가능: yasql / as sysdba 방식으로 연결
[yashan@yac01 ~]$ ys
YashanDB SQL Enterprise Edition Release 23.2.4.100 x86_64

Connected to:
YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 - X86 64bit Linux

SQL>

## 간단한 연결 방식으로 연결할 수도 있음
[yashan@yac02 conf]$ yasql sys/yasdb_123@192.168.6.160:1688
YashanDB SQL Enterprise Edition Release 23.2.4.100 x86_64

Connected to:
YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 - X86 64bit Linux

SQL> select instance_number,instance_name from gv$instance;

INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------------------------------------------------------
              1 yasdb
              2 yasdb

사용자 및 테이블 생성

-- 사용자 생성
SQL> create user lucifer identified by lucifer;

Succeed.
-- DBA 권한 부여
SQL> grant dba to lucifer;

Succeed.
-- 사용자 연결
SQL> conn lucifer/lucifer

Connected to:
YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 - X86 64bit Linux
-- 테이블 생성
SQL> create table test(id number,name varchar2(20));

Succeed.
-- 데이터 삽입
SQL> insert into test values (1,'lucifer');

1 row affected.
-- 커밋
SQL> commit;

Succeed.
-- 데이터 조회
SQL> select * from test;

         ID NAME
----------- ---------------------
          1 lucifer

1 row fetched.
-- 인덱스 생성
SQL> create index idx_lucifer_id on test(id);

Succeed.

monit 구성

모든 서버에서 monit 프로세스를 시작합니다:

[yashan@yac01 ~]$ yasboot monit start -c yashandb -d
 type  | uuid             | name             | hostid   | index             | status  | return_code | progress | cost
----------------------------------------------------------------------------------------------------------------------
 task  | b4fa7935681f5cd1 | MonitParentStart | -        | yashandb          | SUCCESS | 0           | 100      | 1
-------+------------------+------------------+----------+-------------------+---------+-------------+----------+------
 child | 17af5d919ccfe339 | MonitStart       | host0001 | yashandb-host0001 | SUCCESS | 0           | 100      | 1
       +------------------+------------------+----------+-------------------+---------+-------------+----------+------
       | 41341535c051a0f7 | MonitStart       | host0002 | yashandb-host0002 | SUCCESS | 0           | 100      | 1
-------+------------------+------------------+----------+-------------------+---------+-------------+----------+------
task completed, status: SUCCESS

monit의 모니터링 상태 간략 정보 확인:

[yashan@yac01 ~]$ yasboot monit summary -c yashandb
--------------------------------------------------------------------------------
HostID: host0001, ManageIP: 192.168.6.160
--------------------------------------------------------------------------------
Monit 5.34.2 uptime: 2m
 Service Name                     Status                      Type
 yac01                            OK                          System
 yasom                            OK                          Process
 yashandb-ce-1-1                  OK                          Process
 yasagent                         OK                          Process

--------------------------------------------------------------------------------
HostID: host0002, ManageIP: 192.168.6.161
--------------------------------------------------------------------------------
Monit 5.34.2 uptime: 2m
 Service Name                     Status                      Type
 yac02                            OK                          System
 yashandb-ce-1-2                  OK                          Process
 yasagent                         OK                          Process

부팅 시 자동 시작 구성(모든 노드)

매번 부팅 시 yasom 및 yasagent를 시작한 후 데이터베이스를 시작해야 하므로:

## 수동으로 yasom 및 yasagent 프로세스 시작
[root@yac01 ~]# yasboot process yasom start -c yashandb
[root@yac01 ~]# yasboot process yasagent start -c yashandb

## yasom 및 yasagent 프로세스가 시작된 후에만 데이터베이스를 시작할 수 있음
[root@yac01 ~]# yasboot cluster start -c yashandb

위 방식은 비교적 번거롭기 때문에 부팅 시 자동 시작을 구성하는 것이 좋습니다. 부팅 시 자동 시작을 구성하려면 yasagent 프로세스가 있는 서버(즉, 각 서버)에서 다음 작업을 실행해야 합니다:

## monit 명령 위치 가져오기
[yashan@yac01 ~]$ which monit
/usr/local/bin/monit

## monit의 설치 경로는 실제로 얻은 내용으로 변경해야 함
[root@yac01 ~]# cat<-EOF>>/etc/rc.local
su - yashan -c '/usr/local/bin/monit -c /data/yashan/yasdb_home/yashandb/23.2.4.100/ext/monit/monitrc'
EOF

[root@yac01 ~]# chmod +x /etc/rc.d/rc.local

호스트를 재부팅하여 시작되는지 테스트:

[root@ymp ~]# reboot
## 재부팅 후 데이터베이스에 연결하여 정상적으로 시작됨
[root@yac01 ~]# su - yashan
이전 로그인: 3 12월  4 21:51:16 CST 2024 pts/0 이전
[yashan@yac01 ~]$ ys
YashanDB SQL Enterprise Edition Release 23.2.4.100 x86_64

Connected to:
YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 - X86 64bit Linux

SQL> 

태그: YashanDB YAC 공유 클러스터 데이터베이스 배포 클러스터 구성

6월 17일 18:18에 게시됨