다음 예시에서는 username이 있는 기본 사용자의 암호를 자동 생성된 값으로 재설정하고 콘솔에 새 암호를 인쇄합니다. 지정된 URL은 elasticsearch-reset-password 도구가 로컬 Elasticsearch 노드에 연결하려고 시도하는 위치를 나타냅니다.
이후에 해당 docker compose를 restart 해줍니다. docker compose restart
2. Elasticsearch 보안 설정 점검
Elasticsearch에서 X-Pack Security가 활성화되어 있는지 확인하고, 필요하면 일시적으로 비활성화하여 테스트합니다.
보안 설정 확인: Elasticsearch의 설정 파일(예: elasticsearch.yml) 또는 docker-compose.yml에서 보안 설정을 확인하세요. 기본적으로 7.10.0 이상에서는 보안이 활성화되어 있습니다. docker-compose.yml에서 다음이 설정되어 있는지 확인:
오류가 사라지면 인증 문제가 원인입니다. 주의: 프로덕션 환경에서는 보안을 비활성화하지 마세요. 대신 올바른 자격 증명을 설정하세요.
이후에 logstash 에서 아래와 같은 오류가 또 발생 - 403에러
비밀번호를 바꿔줬는데도 뭔가 에러가 계속 발생하고 있었는데, 이번엔 좀 다른 종류의 에러였습니다. (아래)
[2025-04-17T04:07:20,233][WARN ][logstash.outputs.elasticsearch][main] Health check failed {:code=>403, :url=>http://elasticsearch:9200/, :message=>"Got response code '403' contacting Elasticsearch at URL 'http://elasticsearch:9200/'"} [2025-04-17T04:07:20,304][WARN ][logstash.outputs.elasticsearch][main] Elasticsearch main endpoint returns 403 {:message=>"Got response code '403' contacting Elasticsearch at URL 'http://elasticsearch:9200/'", :body=>"{\"error\":{\"root_cause\":[{\"type\":\"security_exception\",\"reason\":\"action [cluster:monitor/main] is unauthorized for user [logstash_internal] with effective roles [] (assigned roles [logstash_writer] were not found), this action is granted by the cluster privileges [monitor,manage,all]\"}],\"type\":\"security_exception\",\"reason\":\"action [cluster:monitor/main] is unauthorized for user [logstash_internal] with effective roles [] (assigned roles [logstash_writer] were not found), this action is granted by the cluster privileges [monitor,manage,all]\"},\"status\":403}"}
위 에러를 요약하자면 HTTP 403 Forbidden 응답 코드로 인해 Elasticsearch에 접근할 수 없는 문제라는 내용입니다. 구체적으로, logstash_internal 사용자가 cluster:monitor/main 액션을 수행할 권한이 없으며, 할당된 역할(logstash_writer)이 Elasticsearch에서 인식되지 않는다는 메시지가 나타납니다.
오류 원인
로그를 분석해보면 다음과 같은 주요 원인을 확인할 수 있습니다:
권한 부족 (HTTP 403 Forbidden)
logstash_internal 사용자가 Elasticsearch에서 필요한 작업(cluster:monitor/main)을 수행할 권한이 없습니다.
역할 설정 문제
logstash_writer 역할이 logstash_internal 사용자에게 할당되었지만, Elasticsearch에서 이 역할이 정의되지 않았거나 찾을 수 없습니다.
보안 설정 오류
Elasticsearch에서 X-Pack Security가 활성화된 상태에서 사용자와 역할이 올바르게 구성되지 않았을 가능성이 있습니다.
해결 방법
1. Elasticsearch에서 사용자와 역할 확인
먼저, logstash_internal 사용자와 logstash_writer 역할이 Elasticsearch에 제대로 설정되어 있는지 확인합니다.
Elasticsearch 컨테이너에 접속:
docker exec -it elasticsearch bash
사용자 역할 확인:
bin/elasticsearch-users roles logstash_internal
출력 결과에 logstash_writer 역할이 포함되어 있는지 확인하세요.
역할 정의 확인:
bin/elasticsearch-roles list logstash_writer
logstash_writer 역할이 존재하지 않거나, 필요한 권한(monitor, manage_index_templates, write 등)이 누락되었는지 확인합니다.
제 경우, bin/elasticsearch-roles list 에서 사용자가 아무것도 나타나지 않았습니다.
그래서 kibana web console로 접속(http://kibana:5601/app/dev_tools#/console/shell) 한 뒤에 아래 3개의 POST 명령을 각각 실행해줬습니다.
오래된 SMB 버전(예: SMBv1)을 사용하는 경우 호환성 문제가 있을 수 있음. -o vers=3.0을 추가.
mount -t cifs //192.168.1.10/share /mnt/nas -o username=<smb_user>,password=<smb_pass>,uid=1000,gid=1000,vers=3.0
최종확인:
ls -ld /mnt/nas
아래와 같이 뜨면서 언마운트가 되는 경우
root@server1:/mnt# umount -f /mnt/nas umount: /mnt/nas: target is busy.
umount -f /mnt/nas를 실행했는데 target is busy 오류가 발생한다는 것은 /mnt/nas 디렉토리가 현재 사용 중이어서 마운트를 해제할 수 없다는 뜻입니다. SMB 마운트를 강제로 해제하려면 사용 중인 프로세스를 종료하거나, 더 강력한 옵션을 사용해야 합니다. 아래에서 단계별로 해결 방법을 설명하겠습니다.
1. 왜 'target is busy'가 발생하는가?
/mnt/nas에 접근 중인 프로세스가 있거나, 열린 파일/디렉토리가 존재합니다.
예: 셸에서 cd /mnt/nas로 이동한 상태이거나, 프로그램이 해당 경로의 파일을 사용 중일 수 있습니다.
2. 해결 방법
(1) 사용 중인 프로세스 확인
lsof 또는 fuser를 사용해 /mnt/nas를 사용 중인 프로세스를 찾아봅니다.
lsof 사용:
lsof /mnt/nas
출력 예시:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 1234 user1 cwd DIR 0,XX 4096 12 /mnt/nas
PID 열에 나오는 프로세스 번호(위 예시에서는 1234)를 확인하세요.
fuser 사용:
fuser -m /mnt/nas
출력 예시:
/mnt/nas: 1234 5678
사용 중인 프로세스 ID(PID)가 나옵니다.
(2) 프로세스 종료
확인된 PID를 종료합니다.
특정 PID 종료:
kill -9 1234
예: 1234는 lsof나 fuser로 찾은 PID로 대체하세요.
fuser로 한 번에 종료:
fuser -km /mnt/nas
-k: 프로세스를 강제로 종료.
-m: 마운트 포인트를 지정.
(3) 다시 언마운트 시도
프로세스를 종료한 후 다시 시도:
umount /mnt/nas
여전히 실패하면 강제 옵션 추가:
umount -f /mnt/nas
(4) 최후의 수단: Lazy 언마운트
위 방법으로도 안 되면, lazy unmount(-l)를 사용해 즉시 마운트를 해제할 수 있습니다:
umount -l /mnt/nas
-l: 사용 중인 프로세스가 끝날 때까지 기다리지 않고 마운트를 즉시 해제. 이후 시스템이 자동으로 정리합니다.
이 방법은 마운트 포인트를 즉시 사용 가능한 상태로 만들지만, 백그라운드에서 정리 작업이 진행되므로 주의하세요.
집에 오랫동안 안쓰고 방치해둔 lenovo e535 노트북이 있어서 여기에 proxmox를 설치했다.
synology NAS에 컨테이너를 여러개 띄워서 사용하고 있었는데, 컨테이너 수가 50개가 넘어가면서 슬슬 걱정이되기 시작된 참이었는데, proxmox 라는 가상화 OS와 synology NAS와 병행 운영하는 사례들을 접하면서 나도 해볼 수 있을 거 같다는 생각이 들었다. e535 정도의 사양이라면 CPU나 메모리 측면에서 NAS보단 더 빡세게 굴릴 수 있겠다 싶었다.
노트북이라서 잘 설치될지 염려가 되었지만. 생각보다 어렵지 않았고, 아래 링크를 참조했다.
설치 후에 tailscale 을 설치해서 외부에서도 원격접속할 수 있도록 설정했고, 여기에 synology NAS는 smb로 mount 시켰다.
Synology NAS를 Proxmox에 연결하는 방법
NFS 로 마운트도 가능하겠지만, 내 경우에는 그게 잘 안되는 듯 하여 SMB로 마운트했다.
1. Synology NAS 에서의 사전 설정
1. 공유폴더 생성 : Proxmox에 연동할 공유폴더를 만든다. '제어판 > 공유 폴더' 에서 새 폴더로 만들 수 있다. 2. 새 계정 생성 : 제어판에서 Proxmox에 연동용 계정 하나를 생성한다. 그 후에 새로 만든 계정에 Administrator 그룹권한을 부여해야 한다. 그래야 SMB로 접속이 가능하다.
2. Proxmox에서 NAS 스토리지 추가
웹 UI 접속: Proxmox 웹 인터페이스(기본적으로https://[Proxmox IP]:8006)에 로그인한다.
스토리지 추가:Datacenter > Storage > 추가(Add) > SMB를 선택.
설정 입력:
ID: 원하는 이름(예: "SynologyNAS") 입력.
서버: Synology NAS의 IP 주소(예: 192.168.1.100).
사용자명: 아까 만들어둔 계정 ID를 입력한다.
비밀번호: 아까 만들어둔 계정의 비밀번호를 입력한다.
Share: Synology에서 설정한 공유 폴더 경로(예:/volume1/ProxmoxStorage) 입력한다. 사용자명과 비밀번호를 입력해두면, Synology의 경로들이 목록에 불러와진다.
내용: 저장할 내용 선택(예: 디스크 이미지, ISO 이미지, 백업 등), 모조리 선택해도 무방하다.
확인: 설정을 저장하면 Proxmox에서 NAS가 스토리지로 인식된다.
3. VM 설정
VM 생성 시 디스크 저장 위치를 "SynologyNAS"로 선택하면, VM의 디스크 이미지가 NAS에 저장된다.
로컬의 SSD는 Proxmox OS와 최소한의 시스템 파일만 유지하고, NAS를 주 스토리지로 활용할 예정이다.
Proxmox에서 확인: VM의 "Summary" 탭에서 "QEMU Agent"가 "Running"으로 표시되면 설치가 완료된 것입니다. IP 주소가 보이고, 안전한 종료/재부팅이 가능해집니다.
결론
QEMU 에이전트를 설치하면 VM 관리의 편의성이 크게 향상되지만, 필수는 아닙니다. IP 주소를 쉽게 확인하거나 VM을 안전하게 제어하고 싶다면 설치하는 것이 좋습니다. 하지만 보안이나 리소스 절약이 더 중요하다면 설치하지 않아도 VM은 문제없이 작동합니다. 사용 목적과 필요에 따라 결정하세요.
Proxmox에 Tailscale을 설치하고 활성화하는 방법을 단계별로 설명하겠습니다. Tailscale은 장치 간 안전한 연결을 제공하는 메쉬 VPN으로, Proxmox를 원격으로 접속할 때 방화벽 포트를 열지 않고도 보안적으로 접근할 수 있게 해줍니다. 아래 단계를 따라 진행하면 됩니다.
1. Proxmox 시스템 업데이트
먼저 Proxmox가 최신 상태인지 확인해야 합니다. 터미널에서 다음 명령어를 실행하세요:
apt update && apt upgrade -y
이 명령어는 패키지 목록을 업데이트하고 시스템을 업그레이드합니다.
2. Tailscale 설치
Proxmox는 Debian 기반이므로, Tailscale을 Debian에 설치하는 방식과 동일하게 진행할 수 있습니다.