네이버클라우드

[Ncloud] MinIO를 싱글노드로 구성하기(1)

graph-dev 2024. 9. 20. 18:30
728x90

 

MinIO Logo

 
요새 MinIO라는 오픈소스를 공부하고 있습니다. 가장 좋은 것은 docs, 공식 문서를 잘 참고하는 것이지만, 이상하게 공식 문서도 어렵게 느껴질 때가 많습니다. 혼자 공식문서를 여러 사이트를 짜깁기하여 나름대로 구성해본 MinIO 구축 일대기를 정리해보려고 합니다.
 
MinIO는 이전에도 소개한 것처럼, 사설 object storage를 구축하는 오픈소스 플랫폼입니다. 사설(private)라는 말처럼, 온프레미스 환경에서도 활용할 수 있습니다. 온프레미스에서 이걸로 스토리지를 만들고, 추가로 다른 클라우드의 공인 아이피를 활용해서 repo를 추가해주면, 온프레미스-클라우드 간 스토리지를 연동해볼 수도 있는 멋진 도구입니다.
 
그걸 일종의 Hybrid cloud라고도 부르는 것 같네요. 물론, 다양한 CSP 사의 클라우드에서 제공하는 스토리지도 연결할 수 있으니 Hybrid & Multi cloud 다 가능한 도구라고 알고 있으면 되겠습니다.
 
이번 글은 "싱글노드"에서 MinIO를 구축하는 방안을 정리해봤습니다. 싱글 노드는 아래 MinIO의 배포 가이드 문서만 봐도 충분합니다.
 
다만, 네이버클라우드 리눅스 서버 한대를 활용해보고, 나름대로 겪은 이야기를 정리해보았습니다.
 
Deploy MinIO: Single-Node Single-Drive — MinIO Object Storage for Linux

Deploy MinIO: Single-Node Single-Drive — MinIO Object Storage for Linux

min.io

 
 
실험 환경은 Rocky Linux 8.10 OS의 리눅스 서버입니다. 가이드에 나온대로, rpm 파일을 내려받고 이를 통해 minio 패키지를 설치합니다.

wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20240913202602.0.0-1.x86_64.rpm -O minio.rpm
sudo dnf install minio.rpm

 
 

minio rpm 설치
minio 패키지 설치

 
다음으로, systemd 서비스 파일 생성을 합니다. 이 파일은 /usr/lib/systemd/system/minio.service라는 이름으로 생성하겠습니다. 만약 이미 만들어진 파일이라면, 아래 내용으로 수정해주겠습니다. 대략 훑어본 결과로는 ExecStart, LimitNOFILE  변수 값이 수정되었네요.
 

sudo vi /usr/lib/systemd/system/minio.service
# /usr/lib/systemd/system/minio.service

[Unit]
Description=MinIO
Documentation=https://min.io/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local

User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

 
 
이 다음에는 앞서 설정한 "minio-user"라는 사용자를 추가하고, drive로 사용할 디렉토리에 접근 권한을 부여해주겠습니다.
이 드라이브는 사전에 생성하는게 좋은데, 가이드에는 빠져있어서 추가해보겠습니다.
 
1. 서버에 블록 스토리지 추가

3세대 서버는 스토리지 생성 후 서버에 연결하는 방식

 

추가된 스토리지 확인

 
2. 서버에서 마운트 작업 수행
https://docs.3rdeyesys.com/docs/compute/server-storage/storage-add-detail-process-guide/

Linux 서버 스토리지(디스크) 추가 상세 가이드

Ncloud (네이버 클라우드) Linux 서버 스토리지(디스크) 추가 상세 가이드입니다

docs.3rdeyesys.com

 
위 가이드를 따라, 추가해주었습니다.

fdisk 작업

 
마운트가 정상적으로 이루어지면, 아래처럼 파티션이 추가된 것을 확인할 수 있습니다.

파티션 추가

만약 재부팅 후에도 그대로 마운트된 상태를 유지하려면, 먼저 이 파티션의 UUID를 알아야 합니다.

sudo blkid
UUID 찾는 명령어

 
여기서 /dev/vdb1 이라는 이름의 UUID를 복사해두었다가, /etc/fstab에 추가합니다. 추가할 때, /mnt/data로 경로를 넣어주고 포맷 타입은 사전에 지정한대로(저는 xfs) 설정해둡니다.

fstab

 
서버를 재부팅해서, 그대로 마운트되어있는지 확인해봅니다.
 

재부팅 후에도 남아있는 마운트 정보

 
잘 마운트 되어있습니다.
 
다시 minio-user 사용자를 만들고, /mnt/data 라는 경로에 대해 접근 권한을 부여합니다.

sudo groupadd -r minio-user
sudo useradd -M -r -g minio-user minio-user
sudo chown minio-user:minio-user /mnt/data

 
이 상태에서, minio의 환경 설정 파일인 /etc/default/minio 를 생성합니다.

sudo vi /etc/default/minio

 

환경설정

 
그리고 시작하려는데 아래와 같은 에러가 뜹니다.

 
에러 코드에도 별 이야기가 없다면, 적절한 접근 권한 부여가 잘 이루어졌는지, 사용자 minio-user를 잘 생성했는지 다시 한번 확인합니다.
 
다시 실행해보겠습니다.

sudo systemctl start minio.service

 

실행 후 화면

 
이 상태에서 다시 webUI로 콘솔에 접근해볼 수 있습니다. 클라우드 환경에서는 CLI 상으로 한번 확인해보겠습니다.

curl http://localhost:9001

 

9001번 확인

 
그 다음으로 웹 브라우저로 접근하려면, 클라우드 서버의 공인 아이피로 접근합니다.

http://<공인아이피>:9001
웹 콘솔 접근

 
접근해보고, Monitoring > Metrics로 가보면 서버 한대(싱글 노드), 볼륨 한대(싱글 드라이브)로 잘 구성된 것을 확인할 수 있습니다.
 
웹 콘솔로도 가능하지만, CLI로도 접근할 수 있습니다. 바로 MinIO Client(mc) 명령어를 사용하는 것입니다.
MinIO Client — MinIO Object Storage for Linux

MinIO Client — MinIO Object Storage for Linux

The following commands add a temporary extension to your system PATH for running the mc utility. Defer to your operating system instructions for making permanent modifications to your system PATH. Alternatively, execute mc by navigating to the parent folde

min.io

 
 
설치 후에 아래처럼 설정해두면, mc라는 명령어로 서버 재부팅을 해도 자동 실행될 것입니다.

echo 'export PATH=$PATH:$HOME/minio-binaries/' >> ~/.bashrc
source ~/.bashrc

 

mc 명령어 확인

 
 
이제 MinIO 서버와 연결해줍니다. ALIAS에는 원격 서버의 이름으로 설정할 닉네임을 적고, myminioadmin에는 /etc/default/minio에서 설정한 아이디를 입력하고, minio-secret-key-change-me에는 비밀번호를 입력합니다.

mc alias set ALIAS http://localhost:9000 myminioadmin minio-secret-key-change-me

 
가령 저는 graph 라는 이름으로 ALIAS를 지정합니다.
 
그리고 정보를 확인합니다.

mc admin info graph

 

MinIO CLI로 확인

 
웹 콘솔과 동일하게 잘 설정된 점을 확인할 수 있습니다.