Doris 배포¶
주의
OpenSearch와 Doris 중 하나만 선택하면 됩니다.
개요¶
구성 요소 개요¶
- Doris Manager: Doris 클러스터의 배포, 업그레이드, 구성 변경 등을 담당합니다.
- Doris FE: 주로 사용자 요청 수신, 쿼리 분석 및 계획, 메타데이터 관리, 노드 관리 관련 작업을 담당합니다.
- Doris BE: 주로 데이터 저장, 쿼리 계획 실행을 담당합니다.
- guance-insert: 행 프로토콜 형식의 데이터를 수신하여 로컬에 축적했다가(공간 사용량이 적어 일반적으로 tmpfs 사용) Doris BE에 일괄 기록합니다.
- guance-select: DQL 쿼리를 SQL로 변환하며, 대부분의 쿼리는 Doris FE를 사용하고 일부 쿼리는 Doris BE Thrift 인터페이스를 사용합니다.
- VictoriaMetrics: 샘플링 쿼리 등에 보조 정보를 제공하기 위해 인덱스 수준의 쓰기량 메트릭을 저장합니다.
서버 개요¶
일반적으로 다음 세 그룹의 머신을 사용하며, 소규모 클러스터는 혼합 배포도 가능합니다. 서버 OS는 Ubuntu가 가장 좋습니다.
- doris-fe: CPU 메모리 1:2, 메타데이터 저장용 20GB 이상 데이터 디스크 1개, 첫 번째 머신에 Doris Manager를 배포하는 데 사용 가능
- doris-be: CPU 메모리 1:8, 디스크 처리량 최대화를 목표로 디스크 구성(개수) 조정
- guancedb-logs: CPU 메모리 1:2, 호스트 또는 컨테이너로 배포 가능; 첫 번째 머신에는 Doris 메타데이터 메트릭 저장을 위해 VictoriaMetrics를 배포할 데이터 디스크가 필요함
- CPU는 AVX2 명령어 세트를 지원해야 함
- 다른 머신에 의해 리소스를 선점당하지 않아야 함(CPU steal이 높지 않아야 함)
네트워크 개요¶
- Doris Manager는 일반적으로 doris-fe-01 서버에 배포되며, 해당 머신은 모든 Doris 머신과 ssh 통신이 가능해야 하고 8004 포트의 웹 페이지에 접근할 수 있어야 합니다.
- guancedb-logs 머신은 시스템 패키지 관리 도구(APT)를 통해 supervisor를 설치해야 합니다.
- MySQL 프로토콜을 통해 FE 머신의 9030 포트에 접근해야 하며, 일반적으로 Doris Manager가 설치된 머신에 mysql-client를 설치합니다.
- guancedb-logs 머신은 다음 포트에 접근해야 합니다: doris-fe 머신의 8030 및 9030 포트; doris-be 머신의 8040 및 9060 포트; guancedb-logs 첫 번째 머신의 8428 포트
- 제공된 계정은 s3 스토리지 버킷에 대한 모든 권한을 가지고 있어야 합니다.
배포 개요¶
- s3 스토리지 버킷은 한 번 구성하면 수정할 수 없습니다. 수정하려면 데이터를 비우고 Doris 클러스터를 다시 설치해야 합니다.
- Doris는 호스트에 배포됩니다. 네트워크 유무와 관계없이 먼저 패키지를 지정된 위치에 배치해야 합니다.
- 직접 구매한 디스크 하드웨어로 RAID를 구성할 경우 RAID 0이 아니어야 합니다.
| 카테고리 | 설명 |
|---|---|
| 호스트 배포 구성 요소 | be + fe + manager + guancedb-logs |
| 배포 전제 조건 | 1. root 비밀번호 제공 및 root ssh 비밀번호 없는 로그인 지원 2. CPU 아키텍처가 AVX2 명령어 세트 지원 |
배포 기본 구성 정보¶
| 카테고리 | 설명 |
|---|---|
| 호스트 배포 | 아래 호스트 배포 설명 참조 |
호스트 배포 설명
guancedb-logs 머신이 한 대만 있는 경우, Guance 서비스에서 사용하는 주소는 호스트 ip:8480/8481입니다.
guancedb-logs 머신이 여러 대 있는 경우:
a. ELB 기능을 제공하는 경우, ELB를 사용하여 여러 guancedb-logs의 8480/8481 포트를 수신 대기하고, 서비스에서 사용하는 주소는 ELB ip:8480/8481입니다.
b. ELB 기능을 제공하지 않는 경우, 비즈니스 클러스터에 service를 생성하는 방식으로, 서비스에서 사용하는 주소는 다음과 같습니다.
쓰기: internal-doris-insert.middleware:8480
읽기: internal-doris-select.middleware:8481
다음 yaml을 참조하여 service를 생성하십시오.
doris-service.yaml (클릭하여 펼치기)
---
apiVersion: v1
kind: Service
metadata:
name: internal-doris-insert
namespace: middleware
spec:
ports:
- protocol: TCP
port: 8480
targetPort: 8480
---
apiVersion: v1
kind: Endpoints
metadata:
# 여기 name은 Service의 이름과 동일해야 함
name: internal-doris-insert
namespace: middleware
subsets:
# guancedb-logs 머신 수만큼 작성
- addresses:
- ip: 10.7.17.250
ports:
- port: 8480
- addresses:
- ip: 10.7.17.251
ports:
- port: 8480
---
apiVersion: v1
kind: Service
metadata:
name: internal-doris-select
namespace: middleware
spec:
ports:
- protocol: TCP
port: 8481
targetPort: 8481
---
apiVersion: v1
kind: Endpoints
metadata:
# 여기 name은 Service의 이름과 동일해야 함
name: internal-doris-select
namespace: middleware
subsets:
# guancedb-logs 머신 수만큼 작성
- addresses:
- ip: 10.7.17.250
ports:
- port: 8481
- addresses:
- ip: 10.7.17.251
ports:
- port: 8481
Doris 배포¶
사전 준비¶
패키지 다운로드¶
설치 도구 패키지입니다. 설치 패키지는 fe-01 머신에 배치합니다.
다운로드하여 압축을 풀면 SelectDB + manager 설치 패키지입니다. 설치 패키지는 fe-01 머신에 배치하며, 폴더 위치는 inventory/doris-manager.vars.yaml에 구성된 경로와 동일합니다.
다운로드하여 압축을 풀면 GuanceDB 설치 패키지입니다. 설치 패키지는 모든 guancedb-logs 머신에 배치하며, 파일 위치는 inventory/guancedb-logs-doris.vars.yaml에 구성된 경로와 동일합니다.
다운로드하여 압축을 풀면 victoria-metrics + vmutils 설치 패키지입니다. 설치 패키지는 모든 guancedb-logs 머신에 배치하며, 파일 위치는 inventory/guancedb-logs-doris.vars.yaml에 구성된 경로와 동일합니다.
머신 간 비밀번호 없는 로그인 구성¶
점프 호스트(일반적으로 fe-01)에서 현재 사용자의 ~/.ssh에 공개 키가 이미 있는지 확인합니다. 공개 키가 생성된 적이 없다면 다음 명령을 실행하여 생성하고 다른 역할의 머신으로 원격 전송합니다.
배포 체크 포인트
be, fe 머신 구성이 동일한 사양인지 확인합니다.
be, fe 머신 간 네트워크 ping이 1ms를 초과하지 않는지 확인합니다.
서버에서 제공하는 데이터 디스크가 베어 디스크(파티션 포맷되지 않음)인지 확인합니다.
hosts 파일 준비¶
inventory 디렉토리에는 5개의 hosts 파일이 필요하며, 각각 다음과 같습니다.
- doris-be.hosts.yaml
- doris-fe.hosts.yaml
- doris-manager.hosts.yaml
- guancedb-logs-doris.hosts.yaml
- guancedb-logs-doris-vm.hosts.yaml
각 host 파일 형식은 다음과 같습니다.
name 형식은 xxx-doirs-fe-01 또는 xxx-doris-be-01이어야 합니다.
clusters:
- name: xxx
hosts:
- name: xxx-doris-be-01
port: xxx
host: xxx
user: xxx
vars:
default_ipv4: xxx
- name: xxx-doris-be-02
port: xxx
host: xxx
user: xxx
vars:
default_ipv4: xxx
# name: 클러스터를 표시하며, poc 또는 prd를 입력 가능
# hosts.name: 서버 역할을 표시하며, xxx-doris-be-01 형식으로 작성, xxx는 poc 또는 prd 가능
# hosts.port: ssh 포트, 일반적으로 22
# hosts.host: ssh 대상 머신의 IP
# hosts.user: ssh 대상 머신의 사용자, 일반적으로 root
# vars.default_ipv4: be-01의 IP 주소
설명
일반적으로 manager는 fe와 함께 배포되므로, doris-manager.hosts.yaml의 내용은 doris-fe.hosts.yaml과 동일합니다. doris-fe.hosts.yaml에 여러 대의 fe 호스트가 있는 경우 doris-manager.hosts.yaml에는 fe-01 한 대만 작성하면 됩니다.
guancedb-logs-doris-vm.hosts.yaml의 내용은 guancedb-logs-doris.hosts.yaml과 동일합니다. guancedb-logs-doris.hosts.yaml에 여러 대의 호스트가 있는 경우 guancedb-logs-doris-vm.hosts.yaml에는 한 대만 작성하면 됩니다.
변수 구성¶
inventory/doris-manager.vars.yaml 파일 수정
clusters:
- name: xxx
vars:
# 머신의 Doris 설치 패키지 경로 입력; 예: /root/packages/xxx.tar.gz
doris_local_path:
# 머신의 Doris Manager 설치 패키지 경로 입력; 예: /root/packages/xxx.tar.gz
manager_local_path:
# 콜드 스토리지를 사용하지 않으면 아래 부분은 입력하지 않아도 됨
oss_endpoint:
oss_bucket:
# 입력하지 않아도 됨
oss_region:
# 클라우드 제공업체 객체 스토리지 사용 시 일반적으로 입력하지 않음; 자체 구축 객체 스토리지 사용 시, endpoint가 IP인 경우 'path'를 입력해야 함
addressing_style:
clusters:
- name: xxx
vars:
# 복제본 수 구성. 테스트 환경은 1로 설정 가능, 프로덕션 환경은 2 이상 권장
replication_factor: 2
# FE 머신 메모리 GB
fe_host_mem_gb:
# FE 머신 수
fe_num:
# BE 머신 수
be_num:
# BE 머신 코어 수
be_host_core_num:
# BE 데이터 디스크 개수
be_data_disk_num:
# BE 단일 데이터 디스크 크기 GB
be_data_disk_gb:
# BE cgroup cpu 경로, 아래 내용을 참조하여 v1 또는 v2 지원 여부 확인 후 해당 주소 입력
be_cgroup_cpu_path:
# fe 자체 로그 보존 기간
fe_log_retention: 3d
# FE 및 BE 머신의 내부 네트워크 CIDR
cidr:
- name: xxx
vars:
# 버전 번호는 더 이상 사용되지 않음, 비워 둠
version: ""
# 머신의 설치 패키지 디렉토리 입력; 예: /root/packages
local_dir:
clusters:
- name: xxx
vars:
# OS zyadmin 사용자 비밀번호, 보안 요구 사항을 충족하려면 강력한 비밀번호 사용 권장
os_zyadmin_password:
# OS doris 사용자 비밀번호, 보안 요구 사항을 충족하려면 강력한 비밀번호 사용 권장
os_doris_password:
# root 데이터베이스 사용자 비밀번호, 강력한 비밀번호 사용 권장
doris_root_password:
# user_read 데이터베이스 사용자 비밀번호, 강력한 비밀번호 사용 권장
doris_user_read_password:
# 객체 스토리지 access key, 콜드 스토리지를 사용하지 않으면 입력하지 않아도 됨
oss_ak:
# 객체 스토리지 secret key, 콜드 스토리지를 사용하지 않으면 입력하지 않아도 됨
oss_sk:
# 자체 관측 데이터 업로드에 사용됨, 배열이며 일반적으로 하나만 입력하면 됨, 입력하지 않아도 됨
dataway_urls: []
# 호스트 이름 설정 여부, 혼합 배포 시 false로 설정해야 함
set_hostname: false
Python 종속 패키지 설치¶
Doris Manager 배포¶
머신 초기화, 완료 후 디스크 마운트 확인 필요
python3 deployer.py -l clusrer_name -i 'inventory/doris-?e.*.yaml' -p playbooks/doris/initialize-machine.yaml
배포 체크 포인트
서버 디스크 마운트가 올바른지 확인합니다.
서버 swap이 영구적으로 비활성화되었는지 확인합니다.
서버 vm.max_map_count 매개변수가 2000000으로 조정되었는지 확인합니다.
Datakit 구성을 업데이트하여 자체 관측 데이터 업로드에 사용
python3 deployer.py -l cluster_name -i 'inventory/doris-?e.*.yaml' -p playbooks/doris/update-datakit.yaml
Doris Manager 다운로드 및 시작
python3 deployer.py -l cluster_name -i 'inventory/doris-manager.*.yaml' -p playbooks/doris/initialize-manager.yaml
be 노드 cgroup 구성
서버가 cgroup v1 버전을 지원하는지 v2 버전을 지원하는지 확인해야 합니다.
이 경로가 존재하면 현재 적용되는 것은 cgroup v1입니다.
ls /sys/fs/cgroup/cpu/
이 경로가 존재하면 현재 적용되는 것은 cgroup v2입니다.
ls /sys/fs/cgroup/cgroup.controllers
# 서비스 파일 생성
sudo vi /etc/systemd/system/doris-cgroup-v1.service
# 파일 내용
[Unit]
Description=Create Doris CGroup V1
After=remote-fs.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c '\
mkdir -p /sys/fs/cgroup/cpu/doris && \
mkdir -p /sys/fs/cgroup/memory/doris && \
chmod 770 /sys/fs/cgroup/cpu/doris && \
chmod 770 /sys/fs/cgroup/memory/doris && \
chown -R doris:doris /sys/fs/cgroup/cpu/doris && \
chown -R doris:doris /sys/fs/cgroup/memory/doris'
[Install]
WantedBy=multi-user.target
# systemd 구성 다시 로드
sudo systemctl daemon-reload
# 부팅 시 서비스 활성화
sudo systemctl enable doris-cgroup-v1.service
# 서비스 시작
sudo systemctl start doris-cgroup-v1.service
# 서비스 상태 확인
sudo systemctl status doris-cgroup-v1.service
# 확인
ls -l /sys/fs/cgroup/cpu/doris
# 서비스 파일 생성
sudo vi /etc/systemd/system/doris-cgroup-v2.service
# 파일 내용
[Unit]
Description=Create Doris CGroup V2
After=remote-fs.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c '\
mkdir -p /sys/fs/cgroup/doris && \
chmod 770 /sys/fs/cgroup/doris && \
chown -R doris:doris /sys/fs/cgroup/doris && \
chmod a+w /sys/fs/cgroup/cgroup.procs'
[Install]
WantedBy=multi-user.target
# systemd 구성 다시 로드
sudo systemctl daemon-reload
# 부팅 시 서비스 활성화
sudo systemctl enable doris-cgroup-v2.service
# 서비스 시작
sudo systemctl start doris-cgroup-v2.service
# 서비스 상태 확인
sudo systemctl status doris-cgroup-v2.service
# 확인
ls -l /sys/fs/cgroup/doris
cat /sys/fs/cgroup/cgroup.subtree_control
Doris FE 및 BE 배포¶
Doris 클러스터 생성¶
접속 주소: http://doris-fe-01:8004
Doris Manager 관리자 계정 생성
서비스 구성
- 모니터링 및 알림 서비스 비활성화
- Doris 로컬 설치 패키지 경로: /data1/doris/manager/downloads/doris
- Doris Manager 로컬 설치 패키지 경로: /data1/doris/manager/downloads/manager
새 클러스터 생성
- 클러스터 이름: 고객 약어_test/prd 예: guance_prd
- 데이터베이스 root 사용자 비밀번호: inventory/secrets.yaml의 doris_root_password 입력
노드 구성
- 노드 사용자 이름: doris
- 노드 비밀번호: inventory/secrets.yaml의 os_doris_password 입력
- FE 설치 경로: /home/doris/
- FE 메타데이터 저장 디렉토리: /data1/doris/meta
- BE 설치 경로: /home/doris/
- BE 데이터 저장 디렉토리: 각 데이터 디스크에 해당하는 입력란에 하나씩 입력, /data1/doris/data, /data2/doris/data 등
Doris 클러스터 구성¶
토큰화 구성 변경, 매개변수를 클러스터 이름으로 변경해야 함
python3 deployer.py -l cluster_name -i 'inventory/doris-be.*.yaml' -p playbooks/doris/update-be.yaml
python3 deployer.py -l cluster_name -i 'inventory/doris.vars.yaml' -p playbooks/doris/render-config.yaml
배포 체크 포인트
구성 파일의 storage_path가 올바르게 구성되었는지 확인합니다.
구성 파일의 priority_networks 구성이 올바른지 확인합니다.
BE 구성 수정: Doris Manager 클러스터 페이지 오른쪽 상단의 '…' 버튼 -> '매개변수 구성' -> BE 노드 전체 선택 -> 오른쪽 상단 '구성 편집' -> 방금 생성한 be.conf 붙여넣기 -> '확인……' 체크 -> '확인'
FE 구성 수정: Doris Manager 클러스터 페이지 오른쪽 상단의 '…' 버튼 -> '매개변수 구성' -> FE 노드 전체 선택 -> 오른쪽 상단 '구성 편집' -> 방금 생성한 fe.conf 붙여넣기 -> '확인……' 체크 -> '확인'
데이터베이스 구성 수정
python3 deployer.py -l cluster_name -i 'inventory/doris-manager.*.yaml' -p playbooks/doris/exec-init-sql.yaml
이 단계에서 s3 스토리지 버킷이 구성됩니다. 다음 방법으로 스토리지 버킷에 파일을 업로드할 수 있는지 확인할 수 있습니다.
fe 머신에서 root 사용자로 전환하여 클러스터에 로그인합니다.
아래 sql을 실행한 후 s3 버킷의 default_resource 폴더에 result_ 접두사가 붙은 파일이 생성되었는지 확인합니다. 파일이 생성되지 않았다면 권한을 확인하십시오.use information_schema;
SELECT * FROM files
INTO OUTFILE "s3://bucket_name/default_resource/result_"
FORMAT AS ORC
PROPERTIES(
"s3.endpoint" = "https://xxx",
"s3.access_key"= "your-ak",
"s3.secret_key" = "your-sk"
);
배포 체크 포인트
s3 스토리지를 사용할 수 있고 구성 후 변경할 수 없는지 확인합니다.
s3 endpoint 주소는 내부 네트워크 주소여야 합니다.
guance-insert, guance-select 및 VictoriaMetrics 배포¶
머신 초기화
python3 deployer.py -l cluster_name -i 'inventory/guancedb-logs-doris.*.yaml' -p playbooks/guancedb/initialize-machine.yaml
python3 deployer.py -l cluster_name -i 'inventory/guancedb-logs-doris-vm.*.yaml' -p playbooks/doris/init-victoria-metrics.yaml
python3 deployer.py -l cluster_name -i 'inventory/guancedb-logs-doris.*.yaml' -p playbooks/guancedb/update-config.yaml
클러스터 상태 확인¶
VictoriaMetrics 상태 확인, IP는 guance-select 배포 머신
Doris 구성 요소 확인










