Hello 👋

🧑🏻‍💻 A Developers who create code that changes the world

Infrastructure 20

[Linux] 디스크 검사

fsck 논리적 파일시스템 결함 검사기본검사fsck.ext4 /dev/sdX 클린해도 다시 검사fsck.ext4 -f /dev/sdX badblocks실제 물리적 손상 검사읽기 전용 검사fsck.ext4 /dev/sdX 읽기, 쓰기 검사 (데이터 삭제 [ -w 옵션 ] )badblocks -wsv /dev/sdX읽기, 쓰기 검사 (데이터 미삭제 [ -n 옵션 ] ) badblocks -nsv /dev/sdX Options-s: 진행상태-v: 상태출력-w: 디스크를 데이터를 삭제하면서 검사 - 상당한 시간 소요-n: 디스크 데이터 미삭제 검사 - -w옵션보다 더 많은 시간 소요

[Linux] 인터넷이 없는 서버에 Python + Poetry 프로젝트를 배포

원래의 Python + Poetry 프로젝트를 배포 방식 인터넷이 연결된 서버에 소스 코드를 배포한 뒤, `poetry install` 명령 하나로 필요한 Python 패키지들을 자동으로 설치 이 과정에서 Poetry는 `pypi.org`에서 패키지를 받아오고, `.cache/virtualenvs` 아래에 가상환경이 구성됨 하지만 서버를 현장에 설치해야하고 현장은 보안 때문에 인터넷을 연결할 수 없음 인터넷이 없는 서버에서 Python + Poetry 프로젝트 배포 가상환경 이 같은 빌드용 리눅스 PC 한 대를 준비하여 빌드를 해서 빌드한 파일을 가져가 서버에 배포 빌드한 가상환경 과 소스코드를 서버에 배포해야하는데가상환경은 /.cache/virtualenvs 경로에, 소스코드는 또 다른 경로에 있어서경..

[monitoring] Test PC로 기능 테스트 중 성능 저하 현상

프론트와의 기능 구현 테스트 중 DB load가 느려지는 현상 발생 원인을 찾기 위해 Grafana 접속 후 시스템 부하 확인 메모리 : 사용 가능 메모리가 30% → 7%까지 급감 load1 지표가 17:35쯤 58.7까지 급등 (정상보다 수십 배 높음) 17:35~17:40 사이 sda:read 및 dm-0:read가 최대 600MB/s 수준으로 증가 CPU : usage_user 95.8%까지 상승 특정 서비스나 프로세스가 메모리를 잡았을 확률이 높으며, MongoDB 관련 대용량 쿼리 실행을 했기 때문에 diskio가 급격히 증가 메모리 잡고 있는 프로세스 kill -9 명령어로 종료, api 요청 시 join과 같은 쿼리문 사용 지양

[Nomad] 하나의 Nomad job으로 서비스 통합 배포

초기엔 각각의 Nomad job 파일을 별도로 작성해 배포 서비스가 늘어날수록 관리가 복잡해지고, Job 하나 바꿀 때마다 다른 서비스와의 연결 상태가 깨지거나 누락되는 문제가 발생' 아래와 같이 하나의 파일로 비슷한 유형의 서비스 일괄 배포 가능하도록 수정api-service : api task들을 group 단위로 모아 실행database-service : service들을 group 단위로 모아 실행persist-infra : system-infra와 DB등 고가용성 서비스들을 모아 실행이외에도 device관련 계층 등의 서비스를 모아 실행job "persist-infra" { datacenters = ["dc1"] group "persist-infra-group" { count = 1 ..

[Linux] 배포 버전 관리 방법

프로젝트를 하면서 ‘버전 관리’는 그냥 Git commit log를 정리하는 수준이라고 생각 하지만 실제로 서비스를 운영하고, 배포 환경을 다루고, 긴급 상황에서 이전 상태로 롤백하거나 특정 시점의 설정을 되살려야 했던 경험을 겪고 버전 관리의 중요성을 느낌 개발과 배포를 효율적으로 정리하기 위해 X.Y.Z 형식으로 세자리 버전 넘버링 방식 사용 각 숫자의 의미를 다음과 같이 정함X : 서비스의 아키텍처 등이 크게 바뀌는 경우Y : 기능이 새로 추가되거나 UI/UX가 바뀌는 경우Z : 버그 수정, 오타 수정 등이 되는 경우 실제 배포 흐름 (v0.1.4) 1. 프론트엔드 빌드 - 빌드한 파일 압축 후 서버로 전송2. DB 변경 - mongo compass로 컬렉션 import3. 백엔드 배포 - 서버 ..

[Nomad] HashiCorp Nomad 오케스트레이션 이슈 정리

nomad job 스크립트 자동 재시작 기능 (restart policy) Nomad는 작업이 죽었을 때 자동으로 재시작하거나 재배치를 시도할 수 있음 하지만 불필요하게 반복 재시작되면서 리소스를 과도하게 점유 할 수도 있음restart { attempts = 3 # 최대 재시도 횟수 interval = "5m" # 이 시간 내에 실패 횟수 초과하면 중단 delay = "15s" # 재시작 간격 둠 mode = "delay" # 즉시 중단 }nomad job 스크립트 리소스 과소/과다 할당 Nomad는 작업이 죽었을 때 자동으로 재시작하거나 재배치를 시도할 수 있음하지만 불필요하게 반복 재시작되면서 리소스를 과도하게 점유 할 수도..

[Linux] 리눅스 IP 관련 이슈 및 설정 명령어

네트워크 관련 이슈curl로 파일 다운로드가 안 되는 경우curl -o vps.sh "https://samsungaaaaa.com/aaa/bbbb/ccc/ddd/fileDownload.do?vaccineType=1"curl -v "url" 명령어로 로그 확인, 망 연결 안되어있거나, 보안, 인증/세션이 필요한 url일 확률이 높음 DHCP인데 IP가 안 잡힘# /etc/sysconfig/network-scripts/ifcfg-eth0 경로의 설정 파일에서 아래 내용 들어가있는지 확인BOOTPROTO=dhcp ONBOOT=yes 인터페이스 DOWN 상태인지 확인, NetworkManager가 막고 있는지 확인, 랜선/포트/스위치 연결 확인, 방화벽 차단 확인 IP 설정 명령어IP를 수동으로 설정하고 싶을 ..

[Linux] Clonezilla 디스크 매핑 오류 이슈

Clonezilla로 디스크 복제 시 장치명이 바뀌는 문제복제 전 디스크의 /dev/sda는 SSD로, /dev/sdb는 HDD로 잡혀있었지만Clonezilla로 부팅 후에는 /dev/sda가 HDD로 /dev/sda가 SDD로 디스크 인식 순서가 바뀌어 있었음 따라서, Clonezilla로 부팅 후 디스크 복제 시, 잡혀있는 디스크들의 용량 및 모델을 반드시 체크 후 실수 하지 않아야 함(잘못하면 데이터 날아갈 수 있음) 디스크 용량 및 모델명을 lsblk로 확인lsblk -o NAME,SIZE,MODEL,MOUNTPOINT # SSD, HDD구분, 디스크 크기 구분, mount 되어있는지 구분

[Linux] Clonezilla를 사용한 리눅스 백업 및 복구

Clonezilla 부팅 디스크 USB와 백업 이미지 파일 저장 할 USB 필요2가지 USB 모두 꽂고 부팅 시 Clonezilla로 부팅 [중요] 복구 시 복구할 하드웨어는 백업한 하드웨어의 용량보다 크거나 같아야함 이미지 백업 방법> 언어 - 영어 선택 > keymap 설정 화면Don't touch keymap 선택.> Start_Clonezilla 선택> 모드 선택 - 이미지 백업 및 복구 - device-image 선택 > 백업 이미지를 저장하거나 불러올 장소 설정local_dev 선택 - HDD나 USB에 이미지 저장> local_dev 선택 시 저장할 USB 선택 알림Ctrl+C 를 눌러 다음으로 진행> 백업 파일을 저장하거나 불러올 파티션 선택> 백업 파일을 저장하거나 불러올 폴더 선택> B..

[Linux] 서버 RAID 설정

RAID 0스트라이핑 기능(분할 기록) 사용. 빠른 I/O 성능, 고장 대비 능력 XRAID 1두 개 이상의 디스크를 미러링을 통해 하나의 디스크처럼 사용RAID 2ECC(에러 검출 기능) 탑재RAID 3하나의 디스크를 에러검출을 위한 패리티 정보 저장용으로 사용하고 나머지 디스크에 데이터를 균등히 분산 저장 RAID 4RAID 3 방식과 같지만 블록 단위로 분산 저장RAID 5하나의 디스크에 패리티 정보를 저장하지 않고 분산 저장 (회전식 패리티 어레이)RAID 6하나의 패리티 정보를 두 개의 디스크에 분산 저장쓰기 능력은 저하될 수 있지만 고장 대비 능력이 매우 우수함 (두 개의 오류까지 검증 가능)RAID 0+1최소 4개 이상의 디스크를 2쌍씩 스트라이핑(RAID 0) 후 미러링(RAID 1) 방..

[Linux] Filezilla로 파일 복사 시 x권한(실행 비트)가 사라지는 이유

로컬에서 실행 권한(chmod +x)을 부여한 스크립트나 바이너리를 FileZilla로 서버에 전송하면, 업로드된 파일의 실행 비트가 빠져 -rw-r--r-- 형태로만 올라감 복사 과정에서 새로 파일을 “만들기” 때문에 umask 설정에 따라 실행 비트가 제거되는 것이 문제의 원인 SFTP/FTP 프로토콜 동작FileZilla가 사용하는 SFTP(or FTP) 전송은 새 파일 생성(create) 동작임서버 입장에서는 “새로 만든 파일”로 인식되므로, OS의 기본 umask가 적용되어 실행 비트가 제거됨서버 측 umask 설정실행 권한(x)은 원래부터 기본 생성 권한(666)에 포함되지 않으므로, 항상 빠지게 됨ex --> umask 022라면 새 파일 권한은 666-022=644 -> rw-r--r--..

[Monitoring] InfluxDB v1 웹 인터페이스 에러

InfluxDB v1.x 버전에서는 localhost:8086으로 접속했을 때 "404 page not found" 오류 발생 원인 : InfluxDB v1.x는 기본적으로 웹 인터페이스를 제공하지 않음. 웹 인터페이스는 InfluxDB v2부터 지원 결론 : 웹 인터페이스는 사용할 수 없고, CLI나 외부 도구(Grafana 등)를 사용해야 함 또는 v2로 업그레이드 하여 UI 인텊페이스 사용해야함

[Monitoring] Telegraf/Influxdb/Grafana를 이용한 Windows, Linux 시스템 모니터링 설정 및 문제 해결

- Telegraf: 다양한 시스템 메트릭(CPU, 메모리, 디스크 사용량 등)을 수집하는 에이전트- InfluxDB: 시계열 데이터베이스로, Telegraf가 수집한 데이터를 저장- Grafana: InfluxDB에 저장된 데이터를 시각화하여 모니터링 대시보드를 구축하는 도구 설치 및 설정 과정 (Windows & Linux)1) Telegraf 설치 및 설정 (Windows)Telegraf 다운로드 및 설치# PowerShell에서 Telegraf 다운로드wget https://dl.influxdata.com/telegraf/releases/telegraf-1.31.2_windows_amd64.zip -UseBasicParsing -OutFile telegraf-1.31.2_windows_amd64...

[Linux] 리눅스에서 HDD 마운트 및 자동 마운트 설정

1. 리눅스에서 추가 HDD 마운트리눅스 시스템에 새로운 HDD를 추가했을 때, 디스크를 사용하려면 먼저 파티션을 생성하고 파일 시스템을 만들어야 함 1-1. 파티션 생성새로운 HDD를 확인하고 파티션을 생성하기 위해 fdisk 명령어를 사용sudo fdisk /dev/sdbfdisk가 실행되면 다음 옵션을 사용하여 새로운 파티션을 만듦n: 새 파티션 생성p: Primary 파티션 선택파티션 번호 지정 (예: 1)첫 번째 섹터와 마지막 섹터는 기본값을 사용w: 변경 사항을 저장하고 fdisk를 종료1-2. 파일 시스템 생성새로 생성된 파티션 /dev/sdb1에 파일 시스템을 생성sudo mkfs.ext4 /dev/sdb1 1-3. 마운트 지점 생성 및 마운트마운트할 디렉토리 /storage를 생성하고, ..

[Linux] 리눅스 보안 설정

SSH root 접근 보안일반 계정 생성# root로 원격 접속을 바로 하면 '무작위 대입 공격'으로 패스워드가 탈취될 경우 위험하기 때문에 일반 계정을 생성해서 사용해야함useradd 계정이름passwd 패스워드ROOT 계정의 원격 접속 제한 및 포트 변경# SSH접근을 하기 위한 포트는 기본적으로 22번. 잘 알려진 포트 번호이기 때문에 공격 시도가 많음# 따라서 포트를 별도로 설정vi /etc/ssh/sshd_configPort 1234 # 주석 해제. 원하는 포트 입력하여 그 포트로 접속가능하게PermitRootLogin no # 옵션을 no로 변경하여 root로 원격 접속하지 못하도록 설정systemctl restart sshd # 재부팅계정 패스워드 보안계정 패스워드vi /etc/..

[Linux] 자주 쓰는 리눅스 명령어 정리

방화벽(Firewalld)열린 포트 및 서비스 확인sudo firewall-cmd --get-active-zones # 활성화된 zone 확인sudo firewall-cmd --zone=public --list-ports # 특정 zone에 열린 포트sudo firewall-cmd --zone=public --list-services # 특정 zone에 등록된 서비스sudo firewall-cmd --list-all # 전체 구성 정보포트/서비스 추가 및 삭제# 포트 추가 및 삭제 sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent sudo firewall-cmd --zone=public --remove-port=8080/tcp --perma..

[Nomad] Nomad에서 raw_exec 드라이버 사용

raw_exec 드라이버Nomad에서 Docker 같은 컨테이너 기술 없이, 호스트 머신에서 직접 실행 파일을 구동하는단순한 드라이버 /etc/nomad.d 의 경로에서 nomad.hcl 파일을 수정해줘야함client { enabled = true servers = ["127.0.0.1"] options { "driver.raw_exec.enable" = "true" "driver.docker.enable" = "false" }} mongodb.nomad file 작성 예시job "mongodb" { # 이 Job은 "mongodb"라는 이름으로 정의되고 # 실행 위치는 "dc1"이라는 데이터센터(기본값)에 제한됨 datacenters = ["dc1"] type = "servic..

[Linux] 인프라 설치 스크립트 및 오류 해결

# ------------------------------# 버전 정의 (참고용)# ------------------------------PYTHON_VERSION=3.12.8INFLUXDB_VERSION=1.11.8TELEGRAF_VERSION=1.34.1GRAFANA_VERSION=11.6.0REDIS_VERSION=7.0.11REDIS_CMD_VERSION=0.8.0FLUENTD_VERSION=1.18.0POETRY_VERSION=2.1.2MONGO_VERSION=5.0.31PG_VERSION=14KONG_VERSION=3.9.0KONG_REPO_URL="https://download.konghq.com/gateway-3.x-rhel"KONGA_VERSION=0.1.3# ===============..

[Infra] poetry 가상환경 기본 내용

파이썬에서 종속성 관리와 패키징을 위한 도구 Poetry requires Python 3.9+. It is multi-platform and the goal is to make it work equally well on Linux, macOS and Windows. 파이썬 3.9 버전 이상을 필요로 함자주 쓰게 되는 명령어================================================# 의존성 설치poetry install# 패키지 추가poetry add requests# 패키지 제거poetry remove requests# 의존성 업데이트poetry update# 전체 업데이트poetry update requests===================================..

[Nomad] Nomad 오케스트레이션 설정 방법

컨테이너 도구(Docker 등)를 사용할 수 없다는 점을 보완하기 위해 local에 환경 설치 후 오케스트레이션 할 수 있는 Nomad 사용HashiCorp사의 Nomad란?경량화된 오케스트레이션 도구로,Docker 같은 컨테이너뿐만 아니라 바이너리 파일, JAR, 파이썬 스크립트 등 다양한 작업을 배포하고 관리할 수 있음 - 컨테이너 가상화 없이도 작동할 수 있다는 점에서 적합한 선택 작동 원리서버 - 클라이언트1,2,3 ...서버가 중심이 되어 클라이언트들에게 작업(JOB)을 지시하고, 서버와 소통하며 리소스를 효율적으로 관리하고 장애에 빠른 대응을 함 여러가지 서비스(몽고디비 등)를 JOB Specification(작업정의)하여 HCL(HashiCorp Configuration Language) 형..