1. 들어가며
지난 포스팅 [Ansible 실습] 맥북에 리눅스 서버 5대 구성하기에서는 Vagrant와 Ansible을 이용해 로컬 환경에 리눅스 서버 5대를 구축했습니다.
이번에는 이 인프라 위에 StarRocks의 압도적 퍼포먼스 경험기에서 다룬 Starrocks 클러스터를 구축해보겠습니다. Starrocks는 분산 OLAP 데이터베이스로 FE노드의 고가용성(HA) 구성 BE 노드의 등록과정이 필요합니다.
이를 일일이 수동으로 설정하지 않고, Ansible Playbook을 작성하여 "코드 한 줄로 클러스터를 띄우는" 자동화 과정을 진행해보겠습니다.
2. 아키텍처 및 구성도

5대의 가상 서버 자원을 FE 3대(HA), BE 5대(전체)를 구성합니다. 모는 노드는 Docker로 배포하며, 네트워크 설정 편의를 Host Network를 사용합니다.
- Frontend(FE): 3대(
server-1,server-2,server-3)server-1: Leaderserver-2,server-4: Follower
- Backend(BE): 5대 전원 (
server-1~server-6) - Network : Vagrant Private Network (
192.168.56.0/24)대역을 사용하여 노드 간 통신을 보장합니다.
3. 프로젝트 폴더 구조
전체 프로젝트는 역할(Role) 기반으로 관리하기 쉽도록 구성했습니다.
├── rocky9
│ ├── ansible.cfg
│ ├── initial_setup.yml
│ ├── inventory.ini
│ └── Vagrantfile
├── roles
│ ├── base # OS 튜닝 및 공통 설정
│ └── docker # Docker 설치 및 설정
└── starrocks
├── ansible.cfg # StarRocks 전용 Ansible 설정
├── hosts.ini # 클러스터 인벤토리
├── playbook
│ ├── cleanup.yml
│ ├── restart_fe.yml
│ ├── roles
│ │ ├── base # ../../roles/base와 별도로 StarRocks용 튜닝
│ │ │ └── tasks
│ │ │ └── main.yml
│ │ ├── be # Backend 배포 Role
│ │ │ ├── tasks
│ │ │ │ └── main.yml
│ │ │ └── templates
│ │ │ └── be.conf.j2
│ │ └── fe # Frontend 배포 Role
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ │ └── fe.conf.j2
│ ├── site.yml # [Main] 배포 시나리오 정의
│ └── update_be.yml
├── restart.sh
├── ssh_config # SSH 접속 정보
└── start.sh
4. 사전 준비: 연결 및 인벤토리 설정
1) hosts.ini
FE와 BE 그룹을 나누고, 노드 간 통신을 위한 네트워크 대역(prioirty_network_cidr)을 변수로 선언합니다.
├── rocky9
│ ├── ansible.cfg
│ ├── initial_setup.yml
│ ├── inventory.ini
│ └── Vagrantfile
├── roles
│ ├── base # OS 튜닝 및 공통 설정
│ └── docker # Docker 설치 및 설정
└── starrocks
├── ansible.cfg # StarRocks 전용 Ansible 설정
├── hosts.ini # 클러스터 인벤토리
├── playbook
│ ├── cleanup.yml
│ ├── restart_fe.yml
│ ├── roles
│ │ ├── base # ../../roles/base와 별도로 StarRocks용 튜닝
│ │ │ └── tasks
│ │ │ └── main.yml
│ │ ├── be # Backend 배포 Role
│ │ │ ├── tasks
│ │ │ │ └── main.yml
│ │ │ └── templates
│ │ │ └── be.conf.j2
│ │ └── fe # Frontend 배포 Role
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ │ └── fe.conf.j2
│ ├── site.yml # [Main] 배포 시나리오 정의
│ └── update_be.yml
├── restart.sh
├── ssh_config # SSH 접속 정보
└── start.sh
2) ssh_config
Ansible이 Vagrant VM에 올바르게 접속 할 수 있도록 포트와 키 경로를 지정합니다.
Host server-1
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/tskim/Project/devops/rocky9/.vagrant/machines/server-1/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
PubkeyAcceptedKeyTypes +ssh-rsa
HostKeyAlgorithms +ssh-rsa
Host server-2
HostName 127.0.0.1
User vagrant
Port 2200
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/tskim/Project/devops/rocky9/.vagrant/machines/server-2/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
PubkeyAcceptedKeyTypes +ssh-rsa
HostKeyAlgorithms +ssh-rsa
Host server-6
HostName 127.0.0.1
User vagrant
Port 2201
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/tskim/Project/devops/rocky9/.vagrant/machines/server-6/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
PubkeyAcceptedKeyTypes +ssh-rsa
HostKeyAlgorithms +ssh-rsa
Host server-4
HostName 127.0.0.1
User vagrant
Port 2202
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/tskim/Project/devops/rocky9/.vagrant/machines/server-4/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
PubkeyAcceptedKeyTypes +ssh-rsa
HostKeyAlgorithms +ssh-rsa
Host server-5
HostName 127.0.0.1
User vagrant
Port 2203
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/tskim/Project/devops/rocky9/.vagrant/machines/server-5/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
PubkeyAcceptedKeyTypes +ssh-rsa
HostKeyAlgorithms +ssh-rsa
3) ansible.cfg
위에서 만든 ssh_conifg를 사용하도록 설정합니다.
[defaults]
roles_path = ../roles
inventory = ./hosts.ini
host_key_checking = False
[ssh_connection]
# 방금 만든 ssh_config 파일을 사용하여 접속 정보를 가져옴
ssh_args = -F ./ssh_config -o ControlMaster=auto -o ControlPersist=60s
5. 구현 상세 1: Docker 설치 (Role: Docker)
Starrocks를 Docker로 배포할 것이기 때문에 모든 가상서버에 도커를 설치합니다.
Rocky Linux 9에 기본으로 podman이 설치되어 있어 Docker와 충돌이 날 수 있어, 이를 제거하고 Docker CE를 설치합니다.
또한 Ansible 제어를 위해 Python SDK도 설치합니다.
roles/docker/tasks/main.yml
---
- name: Remove conflicting packages (podman, buildah)
dnf:
name:
- podman
- buildah
state: absent
- name: Add Docker CE repository
get_url:
url: https://download.docker.com/linux/centos/docker-ce.repo
dest: /etc/yum.repos.d/docker-ce.repo
- name: Install Docker packages
dnf:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-compose-plugin
- python3-pip # Ansible 모듈용
state: present
- name: Install Python Docker SDK (Required for Ansible docker_container module)
pip:
name: docker
executable: pip3
- name: Start and Enable Docker service
service:
name: docker
state: started
enabled: yes
- name: Add 'vagrant' user to docker group
user:
name: vagrant
groups: docker
append: yes
6. 구현 상세 2: OS 튜닝 및 공통 설정 (Role: Base)
DB 성능 최적화와 안정성을 위해 Swap 메모리를 비활성화하고, 분산 시스템 필수 요소인 시간 동기화(Chrony)를 설정합니다.
BE 노드를 위해 vm.max_map_count값도 조정합니다.
starrocks/playbook/roles/base/tasks/main.yml
---
- name: Disable Swap (Runtime)
command: swapoff -a
when: ansible_facts['swaptotal_mb'] > 0
- name: Disable Swap (Permanent)
replace:
path: /etc/fstab
regexp: '^([^#].*?\sswap\s+sw\s+.*)$'
replace: '# \1'
- name: Set vm.max_map_count (Required for BE)
sysctl:
name: vm.max_map_count
value: '2000000'
state: present
reload: yes
# Chrony 설치 (시간 동기화)
- name: Install chrony
package:
name: chrony
state: present
- name: Enable and start chronyd
service:
name: chronyd
state: started
enabled: yes
# 강제로 시간 동기화 수행 (즉시 보정)
- name: Force time synchronization
shell: chronyc -a makestep
ignore_errors: yes # 이미 동기화된 경우 에러 무시
7. 구현 상세 3: Frontend(FE)배포 (Role: FE)
FE 배포의 핵심을 Leader와 Follower의 역할 분배입니다. fe.conf 설정을 배포하고, Follwer 노드는 기동 후 자동으로 Leader에게 자신을 등록하도록 구성합니다.
starrocks/playbook/role/fe/tasks/main.yml
---
- name: Create FE Directories
file:
path: "{{ item }}"
state: directory
mode: '0755'
loop:
- /data/starrocks/fe/meta
- /data/starrocks/fe/conf
- /data/starrocks/fe/log
- name: Deploy fe.conf
template:
src: fe.conf.j2
dest: /data/starrocks/fe/conf/fe.conf
- name: Pre-register this Follower to Leader
delegate_to: server-1 # 이 작업은 server-1에서 실행
shell: |
# 리더(server-1)에게 접속해서 현재 노드(inventory_hostname)를 등록
docker exec starrocks-fe mysql -h 127.0.0.1 -P9030 -uroot -e "ALTER SYSTEM ADD FOLLOWER '{{ inventory_hostname }}:9010';"
# 리더 자신은 등록할 필요 없으므로 제외
when: inventory_hostname != 'server-1'
ignore_errors: true # 이미 등록되어 있으면 에러 무시
- name: Run FE Container
docker_container:
name: starrocks-fe
image: starrocks/fe-ubuntu:latest
network_mode: host
restart_policy: unless-stopped
hostname: "{{ inventory_hostname }}"
command: >
{% if inventory_hostname == 'server-1' %}
/opt/starrocks/fe/bin/start_fe.sh
{% else %}
/opt/starrocks/fe/bin/start_fe.sh --helper server-1:9010
{% endif %}
recreate: yes
volumes:
- /data/starrocks/fe/meta:/opt/starrocks/fe/meta
- /data/starrocks/fe/conf/fe.conf:/opt/starrocks/fe/conf/fe.conf
- /data/starrocks/fe/log:/opt/starrocks/fe/log
env:
TZ: "Asia/Seoul"
HOST_TYPE: "FQDN"
JAVA_OPTS_FE: "-Dfrontend_ip={{ hostvars[inventory_hostname].private_ip }}"
starrocks/playbook/roles/fe/tempaltes/fe.copf/j2
LOG_DIR = ${STARROCKS_HOME}/log
meta_dir = /opt/starrocks/fe/meta
priority_networks = {{ hostvars[inventory_hostname].private_ip }}
# Ports
http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010
8. 구현 상세4: Backend(BE)배포 (Role: BE)
BE 노드는 FE와 동일한 서버에 뜰 때 포트 충돌이 나지 않도록 포트를 변경해주어야 합니다.
starrocks/playbook/roles/be/tasks/main.yml
---
- name: Create BE Directories
file:
path: "{{ item }}"
state: directory
mode: '0755'
loop:
- /data/starrocks/be/storage
- /data/starrocks/be/conf
- /data/starrocks/be/log
- name: Deploy be.conf
template:
src: be.conf.j2
dest: /data/starrocks/be/conf/be.conf
- name: Run BE Container
docker_container:
name: starrocks-be
image: starrocks/be-ubuntu:latest
network_mode: host
privileged: true # 성능 최적화
restart_policy: unless-stopped
hostname: "{{ inventory_hostname }}"
command: >
/opt/starrocks/be/bin/start_be.sh server-1:9010
recreate: yes
volumes:
- /data/starrocks/be/storage:/opt/starrocks/be/storage
- /data/starrocks/be/conf/be.conf:/opt/starrocks/be/conf/be.conf
- /data/starrocks/be/log:/opt/starrocks/be/log
env:
TZ: "Asia/Seoul"
HOST_TYPE: "FQDN"
JAVA_OPTS_BE: "-Dbe_host={{ inventory_hostname }}"
BE_HOST: "{{ inventory_hostname }}"
starrocks/playbook/roles/be/templates/be.conf.j2
storage_root_path = /opt/starrocks/be/storage
priority_networks = 192.168.56.0/24
# FE와 같은 서버일 경우 포트 충돌 방지
be_port = 9060
web_server_port = 8040
heartbeat_service_port = 9050
brpc_port = 8060
9. 구현 상세 5: 오케스트레이션 (Site,yml)
가장 핵심인 메인 플레이북입니다. OS 튜닝 및 공통 설정 -> Leader FE 배포 -> Leader 상태 확인 -> Follower FE 배포 및 조인 -> BE 배포 -> BE 리더에 조인
---
# 1. OS 튜닝 및 공통 설정
- name: Apply Base Tuning
hosts: starrocks_cluster
become: true
roles:
- base
# 2. [Step 1] Leader FE 배포 (server-1만 먼저 실행)
- name: Deploy Leader FE
hosts: server-1
become: true
roles:
- fe
vars:
fe_role: "leader" # Role 내부에서 분기 처리용 변수
# 3. [Step 2] Leader 상태 확인 (Health Check)
- name: Wait for Leader FE Ready
hosts: server-1
become: true
tasks:
- name: Wait for TCP port 9030
wait_for:
port: 9030
host: '127.0.0.1'
delay: 5
timeout: 120
# 4. [Step 3] Follower FE 배포 및 조인 (Leader가 뜬 후 실행)
- name: Deploy Follower FEs
hosts: fe_servers:!server-1
become: true
roles:
- fe
vars:
fe_role: "follower"
# 5. [Step 4] BE 배포
- name: Deploy BE Nodes
hosts: be_servers
become: true
roles:
- be
# 6. [Step 5] BE 노드 Leader FE에 등록
- name: Register BE Nodes to Leader
hosts: server-1 # 등록 명령은 Leader FE에서 수행
become: true
gather_facts: false # server-1 팩트는 이미 수집되었으므로 생략 가능
vars:
fe_query_port: 9030
be_heartbeat_port: 9050
tasks:
- name: Add Backend nodes to StarRocks Cluster
shell: |
docker exec starrocks-fe mysql -h 127.0.0.1 -P9030 -uroot -e "ALTER SYSTEM ADD BACKEND '{{ hostvars[item]['ansible_host'] | default(item) }}:{{ be_heartbeat_port }}'"
loop: "{{ groups['be_servers'] }}"
register: add_be_result
# 이미 등록된 경우 에러를 무시하거나, 멱등성을 위해 실패 처리 조건을 완화
failed_when:
- add_be_result.rc != 0
- '"Same backend already exists" not in add_be_result.stderr'
- '"Same backend already exists" not in add_be_result.stdout'
11. 배포하기
cd starrocks/
ansible-playbook -i starrocks/hosts.ini starrocks/playbook/site.yml
명령어를 실행하면 서버 5대 Starrocks 클러스터 세팅을 시작합니다.
PLAY [Apply Base Tuning] **************************************************************************************
TASK [Gathering Facts] ****************************************************************************************
[WARNING]: Host 'server-5' is using the discovered Python interpreter at '/usr/bin/python3.9', but future installation of another Python interpreter could cause a different interpreter to be discovered. See https://docs.ansible.com/ansible-core/2.20/reference_appendices/interpreter_discovery.html for more information.
ok: [server-5]
[WARNING]: Host 'server-6' is using the discovered Python interpreter at '/usr/bin/python3.9', but future installation of another Python interpreter could cause a different interpreter to be discovered. See https://docs.ansible.com/ansible-core/2.20/reference_appendices/interpreter_discovery.html for more information.
ok: [server-6]
[WARNING]: Host 'server-4' is using the discovered Python interpreter at '/usr/bin/python3.9', but future installation of another Python interpreter could cause a different interpreter to be discovered. See https://docs.ansible.com/ansible-core/2.20/reference_appendices/interpreter_discovery.html for more information.
ok: [server-4]
[WARNING]: Host 'server-1' is using the discovered Python interpreter at '/usr/bin/python3.9', but future installation of another Python interpreter could cause a different interpreter to be discovered. See https://docs.ansible.com/ansible-core/2.20/reference_appendices/interpreter_discovery.html for more information.
ok: [server-1]
[WARNING]: Host 'server-2' is using the discovered Python interpreter at '/usr/bin/python3.9', but future installation of another Python interpreter could cause a different interpreter to be discovered. See https://docs.ansible.com/ansible-core/2.20/reference_appendices/interpreter_discovery.html for more information.
ok: [server-2]
TASK [base : Disable Swap (Runtime)] **************************************************************************
skipping: [server-1]
skipping: [server-2]
skipping: [server-4]
skipping: [server-5]
skipping: [server-6]
TASK [base : Disable Swap (Permanent)] ************************************************************************
ok: [server-5]
ok: [server-4]
ok: [server-1]
ok: [server-6]
ok: [server-2]
TASK [base : Set vm.max_map_count (Required for BE)] **********************************************************
[WARNING]: Deprecation warnings can be disabled by setting `deprecation_warnings=False` in ansible.cfg.
[DEPRECATION WARNING]: Importing 'to_native' from 'ansible.module_utils._text' is deprecated. This feature will be removed from ansible-core version 2.24. Use ansible.module_utils.common.text.converters instead.
ok: [server-1]
ok: [server-6]
ok: [server-2]
ok: [server-5]
ok: [server-4]
TASK [base : Install chrony] **********************************************************************************
ok: [server-5]
ok: [server-6]
ok: [server-2]
ok: [server-1]
ok: [server-4]
TASK [base : Enable and start chronyd] ************************************************************************
ok: [server-6]
ok: [server-5]
ok: [server-4]
ok: [server-2]
ok: [server-1]
TASK [base : Force time synchronization] **********************************************************************
changed: [server-2]
changed: [server-6]
changed: [server-4]
changed: [server-5]
changed: [server-1]
PLAY [Deploy Leader FE] ***************************************************************************************
TASK [Gathering Facts] ****************************************************************************************
ok: [server-1]
TASK [fe : Create FE Directories] *****************************************************************************
changed: [server-1] => (item=/data/starrocks/fe/meta)
ok: [server-1] => (item=/data/starrocks/fe/conf)
changed: [server-1] => (item=/data/starrocks/fe/log)
TASK [fe : Deploy fe.conf] ************************************************************************************
ok: [server-1]
TASK [fe : Pre-register this Follower to Leader] **************************************************************
skipping: [server-1]
TASK [fe : Run FE Container] **********************************************************************************
changed: [server-1]
PLAY [Wait for Leader FE Ready] *******************************************************************************
TASK [Gathering Facts] ****************************************************************************************
ok: [server-1]
TASK [Wait for TCP port 9030] *********************************************************************************
ok: [server-1]
PLAY [Deploy Follower FEs] ************************************************************************************
TASK [Gathering Facts] ****************************************************************************************
ok: [server-2]
ok: [server-4]
TASK [fe : Create FE Directories] *****************************************************************************
changed: [server-4] => (item=/data/starrocks/fe/meta)
changed: [server-2] => (item=/data/starrocks/fe/meta)
ok: [server-2] => (item=/data/starrocks/fe/conf)
ok: [server-4] => (item=/data/starrocks/fe/conf)
changed: [server-2] => (item=/data/starrocks/fe/log)
changed: [server-4] => (item=/data/starrocks/fe/log)
TASK [fe : Deploy fe.conf] ************************************************************************************
ok: [server-4]
ok: [server-2]
TASK [fe : Pre-register this Follower to Leader] **************************************************************
changed: [server-2 -> server-1]
changed: [server-4 -> server-1]
TASK [fe : Run FE Container] **********************************************************************************
changed: [server-4]
changed: [server-2]
PLAY [Deploy BE Nodes] ****************************************************************************************
TASK [Gathering Facts] ****************************************************************************************
ok: [server-1]
ok: [server-5]
ok: [server-4]
ok: [server-6]
ok: [server-2]
TASK [be : Create BE Directories] *****************************************************************************
changed: [server-5] => (item=/data/starrocks/be/storage)
changed: [server-6] => (item=/data/starrocks/be/storage)
changed: [server-1] => (item=/data/starrocks/be/storage)
changed: [server-2] => (item=/data/starrocks/be/storage)
changed: [server-4] => (item=/data/starrocks/be/storage)
ok: [server-6] => (item=/data/starrocks/be/conf)
ok: [server-1] => (item=/data/starrocks/be/conf)
ok: [server-5] => (item=/data/starrocks/be/conf)
ok: [server-2] => (item=/data/starrocks/be/conf)
ok: [server-4] => (item=/data/starrocks/be/conf)
changed: [server-6] => (item=/data/starrocks/be/log)
changed: [server-1] => (item=/data/starrocks/be/log)
changed: [server-5] => (item=/data/starrocks/be/log)
changed: [server-2] => (item=/data/starrocks/be/log)
changed: [server-4] => (item=/data/starrocks/be/log)
TASK [be : Deploy be.conf] ************************************************************************************
ok: [server-1]
ok: [server-2]
ok: [server-5]
ok: [server-6]
ok: [server-4]
TASK [be : Run BE Container] **********************************************************************************
changed: [server-5]
changed: [server-1]
changed: [server-4]
changed: [server-6]
changed: [server-2]
PLAY [Register BE Nodes to Leader] ****************************************************************************
TASK [Add Backend nodes to StarRocks Cluster] *****************************************************************
changed: [server-1] => (item=server-1)
changed: [server-1] => (item=server-2)
changed: [server-1] => (item=server-4)
changed: [server-1] => (item=server-5)
changed: [server-1] => (item=server-6)
PLAY RECAP ****************************************************************************************************
server-1 : ok=17 changed=6 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
server-2 : ok=15 changed=6 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
server-4 : ok=15 changed=6 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
server-5 : ok=10 changed=3 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
server-6 : ok=10 changed=3 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
이렇게 나오면 성공!
11. 핵심 설정 Deep Dive: FQDN과 Prioirty Network
Starrocks 클러스터 구축할 때 FE, BE 노드가 서로를 어떻게 식별하는지 아는 것이 중요합니다.
1) IP 대신 FQDN(Fully Qualified Domain Name) 사용하기
...
env:
HOST_TYPE: "FQDN" # IP 대신 호스트네임으로 클러스터 등록
서버의 IP가 바뀌더라도 /etc/hosts또는 DNS만 업데이트하면 클러스터 설정을 고칠 필요가 없습니다.
2) Priority Networks 지정
Starocks가 자동으로 IP를 감지하게 하면 Doker 내부 IP 또는 Vagrant NAT IP를 잡아서 노드간 통신이 단절 될 수 있습니다.
fe.conf,be.conf템플릿에prioirity_networks를 명시하여 사용할 대역을 강제했습니다.
...
# 192.168.56.x 대역을 사용하는 인터페이스를 무조건 사용해라!
priority_networks = 192.168.56.0/24
3) FE의 frontend_address 바인딩
# roles/fe/tasks/main.yml
...
env:
# 내 IP는 inventory에 적힌 private_ip야! 라고 알려줌
JAVA_OPTS_FE: "-Dfrontend_ip={{ hostvars[inventory_hostname].private_ip }}"
FE 노드는 자신의 IP를 정확히 알고 있어야 리더 선출 투표나 팔로워 통신에 참여할 수 있습니다. docker_container 태스크에서 frontend_ip를 명시적으로 주입해 주었습니다.
12. 클러스터 확인
클러스터 배포가 완료되면 http://192.168.56.11:8030에 접속하여 FE 노드의 클러스터 정보(메타데이터)를 확인할 수 있습니다.

또는 FE 노드에 접속하여 확인 가능합니다.
- FE (HA)
# mysql클라이언트로 FE노드(9030) 접속
SHOW FRONTENDS;
- BE
# mysql클라이언트로 FE노드(9030) 접속
SHOW BACKENDS;'DevOps' 카테고리의 다른 글
| Docker Container IP로 직접 접근하는 방법 - (docker-mac-net-connect) (0) | 2025.12.18 |
|---|---|
| Kafka KRaft Cluster 구축하기 with Ansible (0) | 2025.12.13 |
| 맥북에 리눅스 서버 5대 구성하기 - Ansible, Vagrant (0) | 2025.12.10 |
| Ansible을 사용한 Provisioning (0) | 2025.12.09 |
| Icinga2 Monitoring Basic (4) | 2022.12.21 |