본문 바로가기 대메뉴 바로가기

테크니컬 스토리

아이티마야의 새로운 기술 뉴스를 만나보세요.
기술자료
LVM 이란 LVM 사용 방법 LVM 이란 LVM이란 ● Logical Volume(LV)을 효율적이고 유연하게 관리하기 위한 기능입니다. ● 여러 물리 디스크를 하나의 볼륨 그룹으로 만든 후, 다시 논리적 볼륨으로 나누어서 사용합니다. 장점 ● 유연한 용량 논리 볼륨을 사용하는 경우 장치 및 파티션을 단일 논리 볼륨에 집계할 수 있습니다. 이 기능을 사용하면 파일 시스템을 단일 대규모 장치처럼 여러 장치에 걸쳐 확장할 수 있습니다. ● 편리한 장치 이름 지정 논리 스토리지 볼륨은 사용자 정의 및 사용자 정의 이름으로 관리할 수 있습니다. ● 크기 조정할 수 있는 스토리지 볼륨 기본 장치를 다시 포맷하고 다시 분할하지 않고도 간단한 소프트웨어 명령으로 논리 볼륨을 확장하거나 논리 볼륨을 줄일 수 있습니다 ? 디스크의 용량이 더 필요할 때 기존의 쓰던 디스크를 그대로 두고, 새로운 디스크를 추가 장착하여, Volume Grub에 추가한 뒤 사용하면 편하게 용량을 확장할 수 있습니다. 구성 방법은 아래와 같습니다. ● 과정: PV구성 → VG구성 → LV구성 ● OS: Centos7 ● DISK: 50GB *3 CentOS 7에서는 LVM 패키지가 기본으로 설치되어 있지만, 만약 없다면 다음 명령으로 설치할 수 있습니다. # yum install lvm2 디스크 추가 및 파티션 생성 현재 추가한 디스크 정보를 확인합니다. [실제 디스크명은, 시스템에 따라 다를 수 있습니다.] # fdisk -1 추가한 디스크 파티션을 생성해 줍니다. [저는 아래와 같이 /dev/sdb, /dev/sdc, /dev/sdd 3개의 디스크를 추가하였습니다] # fdisk /dev/sdb # fdisk /dev/sdc # fdisk /dev/sdd 각각의 디스크들을 파티션 설정을 해줍니다. # fdisk /dev/sdb Command (m for help) : n [n을 눌러 넘어가 줍니다.] Partition type :    p   primary (0 primary, 0 extended, 4 free)    e   extended Select (default p) : ---------[파티션 유형 선택으로 Enter를 눌러 넘어가줍니다. (default)] Using default response p Partition number (1-4, default 1) : ------------[파티션 번호 설정으로 Enter를 눌러줍니다. (default)] First sector (2048-104857599, default 2048) : ----[섹터 설정으로 Enter를 눌러줍니다. (default)] Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-104857599, default 104857599) : Using default value 104857599 Partition 1 of type Linux and of size 50 GiB is set Command (m for help) : w ------------[저장 명령어로, w를 눌러줍니다.] The partition table has been altered! Calling ioctl( ) to re-read partition table. Syncing disks. 아래 명령어로 파티션이 설정된 디스크 정보를 확인할 수 있습니다. # fdisk -l Disk /dev/sdb : 53.7 GB, 53687091200 bytes, 104857600 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical) : 512 bytes / 512 bytes I/O size (minimum/optimal) : 512 bytes / 512 bytes Disk label type : dos Disk identifier : 0xec2d7732 Device Boot Start End Blocks Id System /dev/sdb1 2048 104857599 5242777683 83 Linux Disk /dev/sdc : 53.7GB, 53687091200 bytes, 104857600 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical) : 512 bytes / 512 bytes I/O size (minimum/optimal) : 512 bytes / 512 bytes Disk label type : dos Disk identifier : 0x564a089d Device Boot Start End Blocks Id System /dev/sdc1 2048 104857599 52427776 83 Linux Disk /dev/sdd : 53.7 GB, 53687091200 bytes, 104857600 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical) : 512 bytes / 512 bytes I/O size (minimum/optimal) : 512 bytes / 512 bytes Disk label type : dos Disk identifier : 0x6ddfa8e1 Device Boot Start End Blocks Id System /dev/sdd1 2048 104857599 52427776 83 Linux 설정된 파티션을 물리 볼륨(PV)으로 설정 # pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 하나 이상의 물리 볼륨(PV)을 하나의 볼륨 그룹(VG)으로 설정 # vgcreate (VG이름) (PV) (예시) # vgcreate VG0 /dev/sdb1 /dev/sdc1 /dev/sdd1 VG확인 방법 [생성된 VG를 확인할 수 있습니다.] # vgdisplay -- Volume group --- VG Name VG0 System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size < 149.99 GiB PE Size 4.00 MiB Total PE 38397 Alloc PE / Size 0 / 0 Free PE / Size 38397 / < 149.99 GiB VG UUID WIgfbu-7RaH-XjAQ-HEzi-PUYS-0Cca-x2ea1K 볼륨그룹(VG)에서 원하는 용량으로 논리 볼륨(LV)을 생성합니다. # lvcreate -L (원하는 용량) -n (LV이름) (생성된 VG) (예시) # lvcreate -L 50GB -n maya VG0 아래는 생성된 LV를 확인하는 방법입니다. # lvdisplay --- Logical volume --- LV Path /dev/VG0/maya LV Name maya VG Name VG0 LV UUID w97PnQ-IseL-CngM-M6hu-Iwz4-cwCR-sT134F LV Write Access read/write LV Creation host, time localhost.localdomain, 2024-01-10 15:38:27 +0900 LV Status available # open 0 LV Size 50.00 GiB Current LE 12800 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:2 해당 LV에 파일시스템을 생성합니다. # mkfs.xfs -f /dev/VG0/maya 아래 명령어로 UUID를 확인해줍니다. # blkid /dev/sr0: UUID=\"2020-11-04-11-36-43-00\" LABEL=\"CentOS 7 x86_64\" TYPE=\"iso9660\" PTTYPE=\"dos\" /dev/sda1: UUID=\"50c1c5d4-162a-484e-9fa4-7e4344c1635d\" TYPE=\"xfs\" /dev/sda2: UUID=\"dpdJGz-sJyQ-JiQw-1CoH-hcez-7K4e-gVLd16\" TYPE=\"LVM2_member\" /dev/mapper/centos-root: UUID=\"2c9ed7a0-ce19-4d88-99db-cc983328ff01\" TYPE=\"xfs\" /dev/mapper/centos-swap: UUID=\"72b8aa15-e046-4084-9c2c-f40b93879e84\" TYPE=\"swap\" /dev/sdb1: UUID=\"PdhsGo-1oDI-BceI-Ot9c-Tq0q-F2JB-kVzfkk\" TYPE=\"LVM2_member\" /dev/sdc1: UUID=\"kOmHXN-8EJx-RAh1-RVJd-hvwz-wY9R-QOIYq3\" TYPE=\"LVM2_member\" /dev/sdd1: UUID=\"WrNvhk-B0Hs-AJpB-R9TF-QdVw-855b-8dQLfG\"TYPE=\"LVM2_member\" /dev/mapper/VG0-maya: UUID=\"9ce07e0f-dcb0-409c-b1b3-a940060ef138\" TYPE=\"xfs\" 마지막으로 마운트 후, 사용하시면 됩니다. 디렉토리 생성 # mkdir /data 마운트 # mount /dev/mapper/VG0-maya /data 디스크 정보 확인 # df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 6.2G 0 6.2G 0% /dev tmpfs 6.3G 0 6.3G 0% /dev/shm tmpfs 6.3G 8.6M 6.2G 1% /run tmpfs 6.3G 0 6.3G 0% /sys/fs/cgroup /dev/mapper/centos-root 28G 1.5G 27G 6% / /dev/sda1 1014M 137M 878M 14% /boot tmpfs 1.3G 0 1.3G 0% /run/user/0 /dev/mapper/VG0-maya 50G 33M 50G 1% /data LV생성 후, VG 용량 확인 방법은 아래와 같습니다. # vgdisplay ---- Volume group --- VG Name /dev/VG0 System ID Format lvm2 Metadata Areas 3 etadata Sequence No 2 VG Access read/write VG Status esizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 3 Act PV 3 VG Size < 149.99GiB PE Size 4.00 MiB Total PE 38397 Alloc PE / Size 12800 / 50.00 GiB -----------------(남은 용량 확인) Free PE / Size 25597 / < 99.99 GiB Free VG UUID WIgfbu-7RaH-XjAQ-HEzi- PUYS -0Cca-x2ea1K 논리 볼륨(LV)을 삭제하려면 아래와 같습니다. [논리 볼륨을 삭제하면 해당 볼륨에 저장된 데이터가 사라지므로 신중히 진행해야 합니다.] 삭제할 LV마운트 해제 (필수) # umount /dev// (예시) # umount /dev/mapper/VG0-maya 논리 볼륨 삭제 # lvremove /dev// (예시) # lvremove /dev/mapper/VG0-maya 볼륨 그룹에서 삭제 # vgremove (예시) # vgremove VG0 물리 볼륨에서 삭제 # pvremove /dev/sdd1 여기서 sdd1은 PV의 경로에 따라 적절히 변경해 줍니다. ?  LVM은 설정 및 조작에 대한 오류로 인해 데이터 손실이 발생할 수 있으며, 복구가 어렵습니다. 각 볼륨그룹과, 논리볼륨이 일부 공간을 소비하여 디스크 공간 낭비가 있습니다. LVM은 유연성과 운영체제에서 볼륨을 효과적으로 관리하는 데에 많은 도움을 주지만, 이러한 단점을 고려하여 사용해야 합니다. 2024.03.04
윈도우 server 네트워크 티밍 (Network Teaming) 두 개의 NIC를 이용한 독립 전환 이중화 방법(Active/Standby) 윈도우 server 네트워크 티밍 (Network Teaming) 네트워크 티밍(Network Teaming) 이란? 둘 이상의 네트워크 인터페이스를 결합하여 하나의 가상 인터페이스로 동작하게 하는 기술입니다. 이를 통해 네트워크 성능을 향상 시키고, 고 가용성을 제공하며, 부하 분산을 할 수 있습니다. 주로 서버 환경에서 사용되며, 신뢰성 및 성능 향상을 위해 여러 네트워 크 연결을 하나로 결합하는 데 활용됩니다.(윈도우 환경에서는 teaming , 리눅스 환경에서는 bonding이라고 불립니다) 네트워크 티밍(Network Teaming) 종류 1. Switch Independent (Static Teaming): ● 이 모드에서는 본딩 된 어댑터 간에 특정한 스위치와의 의존성이 없습니다. 각각의 어댑터가 본딩 된 팀에서 독립적으로 작동하며, 네트워크 트래픽은 사용 가능한 어댑터 간에 균등하게 분산됩니다. 2. Switch Dependent (Dynamic Teaming): ● 이 모드에서는 본딩 된 어댑터가 특정한 가상 스위치에 종속됩니다. 스위치가 어댑터에 대한 부하 분산을 결정하고, 어댑터 간에 트래픽을 분산합니다. 3. IEEE 802.3ad (Dynamic Link Aggregation): ● 이 모드는 스위치의 지원이 있는 경우에 사용 가능하며, 동적으로 링크 어그리게이션을 수행합니다. IEEE 802.3ad 표준에 따라 여러 물리적 링크를 하나의 논리적 링크로 결합합니다. 4. Hyper-V Port: ● 이 모드는 Hyper-V 가상 스위치와 함께 사용될 때 특히 유용합니다. 트래픽은 각 가상 스위치 포트로 분산됩니다. 5. Static Teaming: ● 이 모드에서는 사용 가능한 모든 어댑터에 트래픽이 균등하게 분산됩니다. 이는 특정 스위치와의 의존성이 없는 정적인 부하 분산 방식입니다. 구성 방법 - 구성 환경 : windows 2022 server - 테스트 장비 : AUSUS RS300-E11-PS4 - 테스트 티밍 종류 : Switch Independent (Static Teaming) 1. 서버관리자 로컬 서버에서 NIC 팀 사용 안 함을 클릭합니다. 2. 작업에서 새 팀을 클릭합니다. 3. 팀 이름을 임의로 만든 후 (test) 아래 사진과 같이 설정합니다. - 팀 구성 모드 : 독립 전환 - 부하 분산 모드 : 동적 - 대기 어댑터 : 이더넷 2 4. 사진과 같이 설정되었는지 확인합니다. 5. 네트워크 연결에서 test라는 새로운 디바이스를 확인합니다. 6. 명령 프롬프트에 들어옵니다. 7. 외부로 ping이 나가는지 확인합니다. 8. 테스트 방법 - 사진과 같이 서버에 연결되어 있는 랜선을 하나씩 제거해 보면서 ping이 잘나가는지 확인합니다. 9. 정상작동 확인 2024.01.31
Linux에서 서버 상태를 파악해 보자. IpmiTool 사용 방법. Linux에서 서버 상태를 파악해 보자. IPMI(Intelligent Platform Management Interface)란, ●서버 관리를 위한 관리 인터페이스로 원격지나 로컬 서버의 상태를 파악하고 제어할 수 있는 유틸리티입니다. ? 모든 서버에는 네트워크 관리자 포트가 따로 탑재되어 있어, 노트북을 이용하여 해당 서버에 직접 연결 후, 서버 상태와 로그 등 확인할 수 있습니다. (1) IpmiTool 설치 방법 아래 명령어를 이용하여 IpmiTool을 설치하시면 됩니다. # sudo apt update # sudo apt install ipmitool (2) 명령어 사용방법 [IPMI 정보 확인 방법] 아래 이미지와 같이 명령어로 ipmi 정보[주소]를 확인할 수 있습니다. # sudo ipmitool lan print [System power 상태 확인 방법] # sudo ipmitool chassis statu 아래 명령을 통해 power 전원을 작동 시킬 수 있습니다. # sudo ipmitool chassis power on or # sudo ipmitool chassis power off [System Sensor Date 상태 확인 방법] # sudo ipmitool sdr list [System Event Log 상태 확인 방법] 아래 명령어로 Log를 확인하여 하드웨어 상태를 점검할 수 있습니다. $ sudo ipmitool sel list [옵션 값으로 last 5를 붙이면 마지막 5개의 이벤트 로그를 확인할 수 있습니다.] (3) IPMI 설정 방법 [Ipmi IP 설정 방법] IP가 설정되어 있지 않을 때 방법 입니다. 설정 후 해당 IP로 접속 가능합니다. # sudo ipmitool lan set 1 ipsrc static [Default로 DHCP로 설정되어 있기에, Static으로 변경해 줍니다.] # sudo ipmitool lan set 1 ipaddr (IP) [(IP) 쪽에 원하는 IP를 넣어주세요.] # sudo ipmitool lan set 1 netmask (NetMask) [NetMask를 넣어줍니다.] # sudo ipmitool lan set 1 defgw ipaddr (GateWayIP) [GateWayIP를 넣어줍니다.] # sudo ipmitool lan set 1 access on [설정을 마무리 해줍니다.] # sudo ipmitool bmc reset cold [IpmiTool 재시작 합니다.] 재시작 후, IP정보 확인 방법 # sudo ipmitool lan print 1 [User 생성 방법] 아래 명령어를 이용하여, 계정을 잃어버렸거나, 계정 추가를 할 때 사용할 수 있습니다. # sudo ipmitool user list [우선 Default 계정이 존재하기에, 유저 리스트를 확인해 줍니다.] 위에 이미지처럼 1번, 2번 빼고는 빈 ID로 해당 ID에 유저를 생성해 줍니다. [User ID 생성] # sudo ipmitool user set name < user id > < user name > 예시) sudo ipmitool user set name 3 sadmin [User PWD 생성] # sudo ipmitool user set password < user id > Password for user 3: 예시) sudo imitool user set password 3 아래 명령을 통해 User에 권한을 부여할 수 있다. # sudo ipmitool user priv < user id > < privilege level > < channel num > 예시) sudo ipmitool user priv 3 4 1 [1번 채널에 UserID3번을 administrator 권한을 부여한다.] privilege level 목록은 아래와 같습니다. [privilege level] 1  Callback level 2  User level 3  Operator level 4  Administrator level 5  OEM Proprietary level 15  No access 생성된 유저 정보 확인 방법 # sudo ipmitool user list 아래 이미지처럼 UserID 3번에 User가 생성된 걸 확인할 수 있습니다. 2024.01.02
Docker swarm으로 mlflow를 쉽게 구성해 보자. docker swarm 구성 장점. Docker swarm으로 mlflow를 쉽게 구성해 보자. Mlflow의 주요 특징 및 용어 MLflow는 오픈 소스 머신 러닝 라이프사이클 관리 도구로, 모델 훈련, 추적, 협업, 그리고 모델 배포를 간단하게 관리할 수 있게 해 줍니다. MLflow는 모델 훈련 코드, 파라미터, 메트릭, 모델 아티팩트 등을 추적하며, 실험과 버전을 관리합니다. 1.Tracking:모델 훈련의 메트릭, 파라미터 등을 추적하고, 여러 실험을 생성하고 비교할 수 있는 기능을 제공합니다. 2.Projects:모델 코드를 패키징하고 다양한 환경에서 쉽게 재현할 수 있도록 하는 프로젝트 관리 기능이 있습니다. 3.Registry:모델 버전을 추적하고 모델 레지스트리에서 모델을 저장, 검색, 배포할 수 있습니다. 4.Flavors:모델 아티팩트를 저장하고 로드하는 다양한 형식과 환경에 대한 지원을 제공합니다. [Docker Swarm을 사용하여 MLflow를 구성했을 때 장점] 1.쉬운 배포:Docker Swarm은 Docker의 일부로 제공되며, 단일 명령어로 클러스터를 설정하고 서비스를 배포할 수 있습니다. 초기 구성이 상대적으로 간단하며, 단일 호스트에서 멀티노드 클러스터까지 쉽게 확장할 수 있습니다. 2.통합성:Docker Swarm은 Docker 컨테이너 기반으로 동작하기 때문에 기존에 Docker를 사용하는 환경에서 쉽게 도입할 수 있습니다. 도커 컨테이너는 환경에 관계없이 일관되게 동작합니다. 3.클러스터 관리:Docker Swarm은 클러스터 관리를 위한 간단한 명령어를 제공하며, 클러스터에서 서비스를 확장하고 관리하기가 상대적으로 쉽습니다. 4.역할 분리:MLflow는 모델 라이프사이클 관리에 중점을 둡니다. 따라서 각 도구가 자신의 역할을 수행하면서 역할을 분리할 수 있습니다. 5.모델 훈련과 배포:MLflow는 모델 훈련 코드를 관리하고 모델 버전을 추적하며, 편리하게 모델을 관리하고 배포할 수 있습니다. 6.스케일 다운 및 자동 복구:Docker Swarm은 서비스의 인스턴스 수를 쉽게 조절할 수 있습니다. 따라서 MLflow 서비스의 부하에 따라 스케일을 업 또는 다운하고 필요한 경우 자동으로 복구할 수 있습니다. 결론적으로, Docker Swarm을 사용하여 MLflow를 구성하면 쉽고 빠르게 시작할 수 있으며, 간단한 환경에서는 효과적일 수 있습니다. 그러나 기능의 확장성과 더 복잡한 워크 로드를 다루기 위해서는 Kubernetes와 같은 더 강력한 오케스트레이션 도구를 고려해 볼 수 있습니다. (1)Docker swarm으로 Mlflow 구성 방법 저의 구성 환경입니다.[master, node1, node2] OS: Ubuntu22.04[VM] CPU: 4core MEMORY: 10GB DISK: 50GB 1: Docker 및 Docker Swarm 설치 docker 설치 # sudo apt update # sudo apt install -y apt-transport-https ca-certificates curl software-properties-common # curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable\" # sudo apt update # apt-cache policy docker-ce # sudo apt install docker-ce # sudo systemctl status docker docker-compose 설치 # sudo apt-get install jq # VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | jq .name -r) DESTINATION=/usr/bin/docker-compose # sudo curl -L https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m) -o $DESTINATION # sudo chmod 755 $DESTINATION # which docker-compose # sudo apt install docker-compose Docker Swarm 초기화 (마스터 노드에서만 실행) # sudo docker swarm init 나머지 노드 Join docker swarm join --token SWMTKN-1-2c7c3b4ph7mgqo6ewwl867qqvz5m7asc0jx5mxm0awa5cojxbs-2j9llq4ti57vlqvfeb6eqo0gv 192.168.0.111:2377 node확인 방법 [마스터 노드에서 확인 가능합니다] # sudo docker node ls 아래 이미지와 같이 나온다면 완료 입니다. 2. MLflow 서비스 생성: MLflow Docker 이미지 가져오기 - docker file을 아래와 같이 작성하여 이미지를 빌드해 줍니다. # sudo mkdir docker # cd docker # sudo vi Dockerfile FROM python:3.8 RUN pip install mlflow EXPOSE 5000 CMD [\"mlflow\", \"ui\", \"--host\", \"0.0.0.0\"] # sudo docker build -t mlflow-server:latest . MLflow 서비스 생성 # sudo vi mllfow-stack.yml version: \'3.8\' services: mlflow: image: mlflow-server:latest deploy: replicas: 1 ports: - \"5000:5000\" volumes: - mlflow-data:/mlflow volumes: mlflow-data: MLflow 실행 # sudo docker stack deploy -c mlflow-stack.yml flow-stack MLflow 확인방법 # sudo docker stack list AME SERVICES flow-stack 1 # sudo docker stack ps flow-stack ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS tqfyevzwdpww flow-stack_mlflow.1 mlflow-server:latest master Running Running 37 seconds ago 이제 mlflow는 Docker Swarm에서 실행 중입니다. 웹 브라우저에서 http://:5000로 이동하여 MLflow 웹 UI에 액세스할 수 있습니다. span{vertical-align: inherit;} li span{vertical-align: middle;} p span{vertical-align: top;} 2024.01.02
오픈소스로, 자원관리를 통해 이중화가 가능한 Pacemaker를 알아보자. Master/Slave로 Pacemaker를 설치해보자. 오픈소스로, 자원관리를 통해 이중화가 가능한 Pacemaker를 알아보자. Pacemaker란, 고가용성 클러스터 자원관리 오픈소스입니다. 여러 대의 서버를 클러스터로 묶어 자원관리를 통해 이중화가 가능한 소프트웨어입니다. Pacemaker의 기능들 (Fail Over)하나의 노드가 장애가 생겼을 때 다른 노드가 서비스를 이어받아 서비스 중단 없이 운영이 가능합니다. 모니터링 및 제어 기능 네트워크, 노드, 디스크 등 저의 구성환경입니다.[2대 동일합니다] OS:Ubuntu22.04 CLI CPU:8core MEMORY:16GB DISK:50GB IP:192.168.0.57 / control / gpuadmin1 IP:192.168.0.56 / node1 / gpuadmin2 IP:192.168.0.43 / vip / vip (1) Pacemaker 설치 (ControlNode, SlaveNode 둘 다 설정해 줍니다.) (1-1) 우선 /etc/hosts 쪽에 해당 control, node1 의 IP를 넣어줍니다. #sudo vi /etc/hosts #wq! 아래 이미지처럼 IP, HOSTNAME을 넣어주시면 됩니다. [위에 만약 같은 호스트 네임이 있다면 주석처리해 주세요.] (1-2) Pacemaker를 설치해 줍니다. #sudo apt install pacemaker pcs (1-3) 설정 변경해 줍니다. #sudo vi /usr/lib/systemd/system/corosync.service #wq! 아래 이미지처럼 Type=simple로 바꿔주세요. (1-4) 패스워드를 설정해 줍니다. #sudo passwd hacluster #sudo systemctl restart pcsd (2) Pacemaker 설정해 줍니다. (Control Node만) #sudo pcs host auth control node1 -u hacluster #sudo pcs cluster setup FileCluster control node1 —force 아래와 같이 successful이라고 나오면 됩니다. (2-1) 이제 Pacemaker를 시작해 줍니다. (Control, Slave 둘 다) #sudo pcs cluster start #sudo pcs cluster enable (2-2) 아래 명령어로 Control, Slave 두대다 잘 올라왔는지 확인해 줍니다. #sudo pcs status #node list 확인하시면 됩니다. #sudo pcs cluster status #아래 사진 참고 (3-3) 나머지 설정값을 입력해 줍니다. (Control만) #sudo pcs property set stonith-enabled=false #sudo pcs property set no-quorum-policy=ignore #sudo pcs property set default-resource-stickiness=\"INFINITY\" --force (3-4) 나머지 vip 설정을 해줍니다. IP는 vip IP로 넣어주시면 됩니다.(Control만) #sudo pcs resource create vip ocf:heartbeat:IPaddr2 ip=”192.168.0.43” cide_netmask=”32” op monitor timeout=”30s” interval=”20s” role=”Slave” op monitor timeout=”30s” interval=”10s” role=”Master” --force (3-5) 아파치를 설정해 줍니다. (Control만) #sudo pcs resource create web_service systemd:apache2 ip monitor timeout=”30s” interval=”20s” role=”slave” op monitor timeout=”30s” interval=”10s” role=”Master” --force 설정이 끝난 후, 아래 이미지처럼 vip IP도 잘 뜨는 것을 확인할 수 있습니다. (# ip ad) (4) 설정이 다 끝난 Pacemaker를 웹브라우저로 실행시키면 아래 이미지처럼 나옵니다. https://[ControlNoedIP]:2224 Username: hacluster Password:(1-4)에서 설정하신 암호 (4-1) 로그인 후, 아래 이미지처럼 Add Existing를 누르신 후, 해당 Node의 HostName으로 Node를 추가하시면 됩니다. 추가 후, 아래 이미지처럼 기존 클러스터가 추가되신걸 확인할 수 있습니다. 이제 여기서 클러스터의 상태를 확인하거나 관리할 수 있습니다. span{vertical-align: inherit;} li span{vertical-align: middle;} p span{vertical-align: top;} 2024.01.02
PCMemtest를 사용해서 메모리 테스트 OS에서 간단히 Memory의 상태를 점검할 수 있습니다. PCMemtest를 사용한 메모리 테스트 PCMemtest 메모리 장애점검 방법은 여러 가지가 있습니다 오늘은 그중 하나인 PCMemtest를 안내해 드립니다. 현재 사용하고 있는 서버의 메모리를 전문 엔지니어가 아니더라도 PCMemtest를 사용해 매우 간단하게 점검할 수 있습니다. PCMemtest는 시스템의 메모리 안정성을 검사하고 문제를 발견하는데 사용되는 강력한 도구입니다. PCMemtest는 주로 서버 및 PC 하드웨어를 테스트하고 디버그 하는데 사용되며, 메모리 모듈의 결함이나 오류를 식별하여 시스템의 안정성을 향상시키는데 도움을 줍니다. 설명하기 앞서 먼저 메모리가 불량일 때 증상들을 알려드리겠습니다. 간헐적으로 강제로 재부팅이 된다. 블루 스크린이 뜬다. 부팅이 안된다. 메모리 용량 누락. 위 증상들이 100% 메모리 문제라고는 말하지 못하지만 메모리가 불량일 경우에 위 증상이 나타납니다. 제가 사용하는 서버의 OS , 메모리의 스펙은 아래와 같습니다. OS : Ubuntu22.04 server (CLI) boot : UEFI Memory : 32GB * 8 먼저 Ubuntu에서 필요한 패키지를 다운로드합니다. sudo apt-get install pcmemtest [boot 방식이 legacy 타입일 경우] sudo apt-get install memtest86+ [본인이 사용하고 있는 시스템의 부팅방식을 모를 경우 바이오스에서 부팅방식을 확인하는 방법과 /sys/firmware/efi라는 디렉토리가 존재한다면 UEFI 방식이고 존재하지 않는다면 legacy 방식입니다] 패키지를 다운로드하였다면 시스템을 재부팅 후 shift 키를 꾹 누르고 있으면 아래 이미지와 같은 화면이 나옵니다. Memory test (pcmemtest) 실행을 하면 위와 같은 화면이 출력되면서 바로 점검이 진행되게 됩니다.이상이 있는 메모리가 확인될 경우 아래 파란 공백란에 불량 메모리의 주소가 나타납니다. 위 화면처럼 이상이 없을 경우에는 ESC 눌러서 종료해 주시면 됩니다. 사용하시는 시스템이 리눅스 계열이 아닌, 윈도우를 사용 중이시라면 Windows 10 또는 11 일 경우에는 Windows 메모리 진단으로 점검하는 방법이 있습니다. 메모리 진단을 실행하게 되면 재부팅이 되면서 메모리 진단을 합니다.실행 전 꼭 하시던 작업을 저장 및 종료하시고 진행하시길 권장합니다. Windows 2019 나 2022 같은 서버용 OS를 사용 중이시라면 Memtest86+ 프로그램을 사용하기도 합니다. https://www.memtest86.com/download.htm 다운로드하신 후 아무것도 안 들어있는 USB에 파일을 넣고 부팅하시면, Ubuntu 메모리 테스트 이미지처럼 메모리 테스트가 바로 진행됩니다. 메모리 테스트를 매일 할 수는 없지만 건강한 하드웨어 관리를 위해 시간이 될 때 날 잡고 시도하시길 권장합니다. 2023.12.06
여러 대의 클러스터 서버들을 간편하게 모니터링, 관리할 수 있는 오픈소스를 알아보자. Ganglia라는 오픈소스를 구성해 보자. 여러 대의 클러스터 서버들을 간편하게 모니터링, 관리할 수 있는 오픈소스를 알아보자. Ganglia란, 클러스터 및 그리드를 위한 확장 가능한 분산 모니터링 시스템입니다. 즉, 클러스터의 사용 상태를 모니터해 주는 오픈소스입니다. Ganglia 장점 메모리, CPU, 디스크, 등, Hadoop, dfs와 관련된 200개 이상의 메트릭 정보를 모니터링할 수 있다는 장점과, 웹 UI가 모바일 장치에도 최적화되어있어 사용이 용이합니다. 아래는 저의 구성 환경입니다.[2대 서버 동일합니다.] OS:[VM]Ubuntu20.04 CLI CPU:8core MEMORY:16GB DISK:50GB Master Node: gpuadmin1 / IP:192.168.0.55 Slave Node: gpuadmin2 / IP:192.168.0.43 (1) Master Node 먼저 Ganglia를 설치해 줍니다. (1-1) 우선, 업데이트를 진행합니다. #sudo apt-get update (1-2) Ganglia에 필요한 패키지들을 다 같이 설치해 줍니다. #sudo apt-get install ganglia-monitor #sudo apt-get install rrdtool #sudo apt-get install gmetad #sudo apt-get install ganglia-webfrontend (1-3) Ganglia-webfrontend 구성파일들을, Apache 폴더에 복사해 줍니다. #sudo cp /etc/ganglia-webfrontend/apache.conf /etc/apache2/sites-enabled/ganglia.conf (1-4) Ganglia Gmetad.Conf 파일을 편집해 줍니다. #sudo vi /etc/ganglia/gmetad.conf #wq! 아래 이미지처럼, 자신의 클러스터 이름을 넣어주시면 됩니다. (1-5) Gmond.conf 파일을 편집해 줍니다. #sudo vi /etc/ganglia/gmond.conf #wq! 1.아래 이미지와 같이,/etc/ganglia/gmetad.conf 에서 설정한 클러스터 네임과 일치하게 넣어주세요. 2.MasterNode IP를 아래와 같이 [host = 192.168.0.55] 넣어주고, mcast_join는 주석처리 해주시면 됩니다. 3.아래와 같이 mcast_join, bind는 주석처리 해주시면 됩니다. (1-6) 위의 모든 설정이 끝난 후, 서비스를 다시 시작해 주세요. #sudo systemctl restart ganglia-monitor #sudo systemctl restart gmetad #sudo systemctl restart apache2 (2) Slave Node를 구성해 보겠습니다. (2-1) Slave Node는 GangliaMonitor만 설치하시면 됩니다. #sudo apt-get install ganglia-monitor (2-2) Master Node와 동일하게 gmond.conf 파일을 편집해 줍니다. #sudo vi /etc/ganglia/gmond.conf #wq! 1. 아래 이미지처럼 MasterNode와 같게 설정해 주시면 됩니다. [name={MasterNode ClusterName}] 2. 아래와 같이 mcast_join은 주석처리하고, [host = {MasterIP}] 넣어주시면 됩니다. 3. 아래 이미지처럼,mcast_join 과 bind 를 주석처리 해주세요. (2-3) GangliaMonitor service를 재시작해줍니다. #sudo systemctl restart ganglia-monitor (3) 웹 인터페이스로 들어가 줍니다. http://MasterNode IP/ganglia 아래 이미지처럼 접속이 되시는 걸 볼 수 있습니다. 192.168.0.43 = SlaveNode gpusystem = MasterNode 해당 노드로 들어가시면 모니터링이 가능합니다. 이와 같이 모니터링이 가능합니다. 2023.12.05
Linux의 주요 명령어인 fsck/e2fsck 를 알아보자. Linux명령어로, 파일을 복구, 점검해주는 명령어는 어떤 게 있을까? Linux의 주요 명령어인 fsck/e2fsck 를 알아보자. fsck(File System Check)란 Linux의 파일 시스템을 점검하고 복구하는 강력한 도구입니다. 이 도구는 시스템의 건강과 무결성을 유지하는 데 중요한 역할을 합니다. fsck는 파일 시스템 검사를 수행하여 부적절한 종료, 하드웨어 장애 또는 소프트웨어 문제로 인해 발생할 수 있는 오류나 불일치를 식별하고 수정하는 데 도움을 줍니다. fsck는 Linux 시스템의 건강과 안정성을 유지하는 데 필수적인 유틸리티입니다. 정기적으로 파일 시스템 검사를 실행하고 발생하는 문제를 처리함으로써 시스템의 최적한 성능과 신뢰성을 보장할 수 있습니다. e2fsck란 fsck의 확장버전으로 현재 Linux에서 fsck를 실행한다면, e2fsck로 실행 된다. (1) fsck의 동작 단계 1. 초기화 2. 블록들과 파일 크기 검사 3. 중복된 이름 검사 4. 경로 검사 5. 연결성 검사 6. Shadows/ACL 확인 7. 참조 수 확인 8. 사이클 그룹 확인 (1-1) 각 단계에서 감지될 수 있는 오류 메시지는 아래와 같다. BLK= 블록 번호 DUP= 중복된 블록 번호 MTIME= 파일이 마지막으로 수정된 시간 CG= 실린더 그룹 DIR= 디렉터리 이름 UNREF= 참조되지 않음 (2) fsck명령어 옵션 A= /etc/fstab의 내용을 참고 후,사용하는 모든 파일시스템을 검사 N= 실행을 하지 않고 작업 내용 출력 P= -A옵션을 사용할 때, 루트 파일시스템을 같이 검사 : 루트 파티션 손상이 의심 됐을 땐 안전하지 않음 R= -A옵션을 사용할 때, 루트 파일시스템은 제외 T= 검사를 시작할 때 제목을 보여주지 않음 t= 점검할 파일시스템의 유형을 지정. : -A옵션이 설정돼 있는 경우, /etc/fstab에서 파일시스템 유형이 일치하는 것만 검사한다. : 파일시스템 앞에 no를 붙이면, 지정한 파일시스템을 제외한 나머지를 검사 P= 자동 복구 s= fsck동작을 시리얼화 : 대화형 모드로 실행하면, 여러 파일시스템을 점검할 때 유용함 f= 강제로 파일 시스템을 점검 n= 문제가 있을 때 수정하지 않고, 문제점 출력 r= 파일 시스템 문제를 하나씩 수정할 경우 확인 절차를 거침 y= 파일 시스템 문제를 발견하였을 때 자동으로 수정 V= 자세한 정보 출력 v= 버전 정보 fsck는 손상된 파일, 디렉터리를 수정할 때 임시로 /lost+found 디렉터리에서 작업을 수행 후, 복구가 완료되면 사라집니다. (3) 명령어 사용법 예시 우선 점검 및 복구가 필요한 디바이스를 찾은 후, 꼭 해당 디바이스를 언마운트 후, fsck명령어 사용 종료코드 보기 # man fsck 0 No errors 1 Filesystem errors corrected 2 System should be rebooted 4 Filesystem errors left uncorrected 8O perational error 16 Usage or syntax error 32 Checking canceled by user request 128 Shared-library error 복구가 필요한 디바이스 자동복구 방법 # sudo fsck -p /dev/디바이스명 -p = 자동복구 fsck명령어 옵션 중 많이 사용하는 옵션이다. 안전하게 해결가능한 문제를 자동으로 점검해 준다. OR # sudo fsck /dev/디바이스명 -y = 파일 시스템 문제를 발견하였을 때 자동으로 수정 fsck 명령어로 기본 설정을 수정하는 것은 데이터 손실이나 기타 예기치 않은 결과를 초래할 수 있으므로 주의해야 합니다. 2023.12.05
Linux dd 명령어를 사용해 보자. Linux의 중요한 명령어 dd를 알아보자. Linux dd 명령어를 사용해 보자. Ubuntu dd 명령어란 리눅스 시스템에서 중요한 명령어 중 하나이며, 이 명령어를 사용하여 디스크나 파티션의 복사, 이미지 파일 생성, 디스크의 작업 등 다양한 작업을 수행할 수 있다. dd 명령어 옵션 bs [Bytes] = 한 번에 읽고 쓸 최대 바이트 크기 지정 cbs [Bytes] = 한 번에 변환 작업이 가능한 바이트 크기 지정 count [Number Blocks] = 지정한 블록 수 만큼 복사 ibs [Bytes] = 한번에 읽어오는 입력단위 바이트 지정 obs [Bytes] = 한번에 작성되는 출력단위 바이트 지정 if [File] = 지정한 파일을 입력대상으로 설정 iflag [FLAGS] = 표준 출력 파일에 사용되는 flag 옵션 flag가 direct 시, Output 파일에 Buffer Cache를 사용하지 않고 다이렉트로 I/O를 한다 of [File] = 지정한 파일을 출력대상으로 설정 oflag [FLAGS] = 표준 출력 파일에 사용되는 flag 옵션 flag가 direct 시, Output 파일에 Buffer Cache를 사용하지 않고 다이렉트로 I/O를 한다 seek [Number] = 지정한 단위만큼 obs 크기를 건너뛰고 출력을 시작 skip [Number] = 지정한 단위만큼 ibs크기를 건너뛰고 입력을 시작 conv = 기호목록에 따라 파일을 변환 ascii : EBCDIC코드를 ASCII코드로 변환 ebcdic : ASCII코드를 EBCDIC코드를 변환 ibm : ASCII코드를 EBCDIC코드로 EBCDIC코드를 ASCII코드로 변환 block : cbs 단위로 변환할 때 줄 바꿈 문자를 공백으로 변환 unblock : cbs단위로 변환할 때 공백문자를 줄 바꿈 문자로 변환 lcase : 영어 대문자를 소문자로 변환 ucase : 영어 소문자를 대문자로 변환 swab : 입력되는 두 바이트의 순서를 변경 sync : ibs크기와 obs크기가 차이가 있을 경우 NULL 문자로 대체 excl : 출력파일이 이미 존재하면 수행하지 않음 nocreat : 출력파일이 존재해야 수행함 notrunc : 출력파일을 자르지 않고 출력함 noerror : 입력데이터를 읽을 때 에러가 발생하여도 계속 진행함 dd의 입출력 시에 사용되는 단위 c = Character [1bytes] w = Word [2bytes] k = Kilo Bytes [1024bytes] b = Block [512bytes] dd 명령어 사용방법 예시 [Ubuntu기준] Disk부하 확인 명령어 # sudo apt install sysstat # sudo iostat -d 1 10 [1초에 10번씩 Disk사용량 확인] 읽고 쓰기 # dd if=/var/log/syslog of=test bs=1024 count=5 if= 입력대상 of= 출력대상 bs= 읽고 쓸 최대 크기 count= 지정 수 많큼 복사 [/var/log/syslog내용을 읽고, test파일에 쓰는것을 1024크기로 5번 반복] 디스크 복제 [꼭 목적지 디스크는 언마운트 후, 진행해 주세요] # sudo umount sdc1 # dd if=/dev/sdb1 of=/dev/sdc1 bs=1024 if= 입력대상 of= 출력대상 bs= 읽고 쓸 최대 크기 디스크 파티션 삭제 # dd if=/dev/zero of=/dev/sda count=1 bs=512 if= 입력대상 of= 출력대상 읽고 쓸 최대 크기 count= 지정 수 많큼 복사 디스크 초기화 # dd if=/dev/zero of=/dev/sdb1 if= 입력대상[/dev/zero는 고정] of= 출력대상 dd 명령어는 매우 유용하지만, 조심해서 사용해야 합니다. 잘못 사용하면 데이터의 손실이 발생할 수 있으므로, 사용하기 전에 명령어의 옵션과 동작을 충분히 이해해야 합니다. 2023.11.02
Software Raid을 구성해보자. Software Raid란 무엇일까? Software Raid을 구성해보자 Raid란 [Redundant Array of Independent Disk] 2개 이상의 디스크를 병렬로 처리하여 성능 및 안정성을 향상시키는 방식입니다. Software Raid 장단점 장점 = 별도의 하드웨어 없이 소프트웨어로만 구현되었기 때문에 하드웨어 구현 방식에 비해 비용이 들지 않는다. 단점 = 소프트웨어 RAID는 운영 체제의 일부이기 때문에. 따라서 성능은 CPU 성능과 서버의 워크로드에 따라 달라집니다. 따라서 고급 전용 하드웨어 RAID보다 성능이 느릴 수 있습니다. Raid 종류 Raid0(Stripe set) = 2개 이상의 디스크에 동시 저장. 동시 저장하기 때문에 속도는 빠르지만 디스크 하나라도 장애가 발생한다면 모든 데이터를 사용 못하게 된다. Raid1(Mirror) = Mirroring 방식으로 저장. 2개의 디스크에 동일한 내용이 동시에 저장. 디스크 하나만 장애가 발생한다면 복구가 가능합니다. Raid5(Parity) = 3개 이상의 하드 디스크가 필요. 패리티 정보를 사용하여 1개의 디스크가 장애 발생해도 데이터 복구가 가능. 하지만 2개의 디스크가 장애 발생하면 데이터를 복구할 수 없음. Raid6(double parity) = 4개 이상의 하드 디스크가 필요합니다. RAID5를 개선한 것으로 2개까지의 디스크 장애를 복구할 수 있습니다. Raid10(Mirror + stripe) = 4개의 하드디스크를 사용해 Raid1 방식으로 데이터를 미러링 하고, 이를 다시 Raid0 방식으로 스트라이핑 하는 방식. 읽기 및 쓰기 성능은 향상되지만 전체 공간의 절반만 사용할 수 있습니다. 디스크 하나만 장애가 발생한다면 복구가 가능합니다. 설치 방법 # sudo apt-get update # sudo apt-get -y install mdadm Ubuntu Raid구성방법 [구성 전, 디스크 파티션작업을 해주셔야 합니다] RAID 디바이스 명 --level --raid-device(갯수) RAID 0 /dev/md0 0 2 RAID 1 /dev/md1 1 2 RAID 5 /dev/md5 5 3 RAID 6 /dev/md6 6 4 RAID 10 /dev/md10 10 4 Raid0 구성 예시 [/dev/sdb1, /dev/sdc1] *2개 이상 디스크 필요* # sudo mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1 Raid5 구성 예시 [/dev/sdb1, /dev/sdc1, /dev/sdd1] *3개 이상 디스크 필요* # sudo mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1 Raid10 구성 예시 [/dev/sdb1, /dev/sdc1, /dev/sdd1, /dev/sde1] *4개 디스크 필요* # sudo mdadm --create /dev/md10 --level=10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sdb1 아래 이미지처럼 생성이 완료됩니다. 아래 명령어로 Disk정보를 확인해보면 md0으로 Raid가 잡힌것을 확인할수 있습니다. # sudo fdisk -1 Disk /dev/md0: 63.96 GiB, 68679630848 bytes, 134139904 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes OR 아래 명령어로 Raid 구성정보를 볼수있습니다. # mdadm --detail --scan # mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Wed Oct 18 08:17:51 2023 Raid Level : linear Array Size : 67069952 (63.96 GiB 68.68 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed Oct 18 08:17:51 2023 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Rounding : 0K Consistency Policy : none Name : gpuadmin:0 (local to host gpuadmin) UUID : bc10345a:2ae76717:1653a452:9874010b Events : 0 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 ctive sync /dev/sdc1 2023.11.02
PLEASE WAIT WHILE LOADING...