Raid 10 스토리지에 rsync 기반으로 원격지에서 백업 데이터를 저장하는 백업 스토리지 서버 EOS 작업을 진행하였습니다.
Raid 디스크 영역만 건들지 않고 재설치하면 되는 간단한 작업이며, 두 가지 사항을 중점으로 작업하였습니다.
① rsync 프로토콜이 기존 백업 대상 서버의 버전과 호환이 되는지 여부
② MegaCli 재설치 후 레이드 영역 관리가 가능한지 여부
항목 | value |
---|---|
OS | Rocky 9 |
Partition | /boot 512 MiB /swap 4GiB / 나머지 전부 할당 |
미디어 타입 | 최소 설치 |
특이사항 | root 비밀번호 설정 시 root로 ssh 접근 가능하도록 체크 |
# 설정 명령어
nmtui
# 재시작 후 적용
systemctl restart NetworkManager
# 통신 테스트
ping 8.8.8.8
===
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=112 time=28.0 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=112 time=27.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=112 time=27.9 ms
===
설정 파일은 /etc/NetworkManager/system-connections
하단에 있습니다.
iptables 사용 예정이므로 기본 방화벽을 해제합니다.
systemctl disable firewalld --now
# 영구적용
vi /etc/selinux/config
===
# 주석처리 SELINUX=enforcing
SELINUX=disabled # 추가
===
# 바로 임시 적용
getenforce
===
Enforcing
===
setenforce 0
getenforce
===
Permissive
===
uname -msr
===
# 설치 직후 5.x 커널로 확인됩니다.
Linux 5.14.0-162.6.1.el9_1.x86_64 x86_64
===
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
dnf install -y https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm
dnf update -y
dnf list available --disablerepo='*' --enablerepo=elrepo-kernel
6.7 버전 대인 kernel-ml을 설치하겠습니다.
dnf --enablerepo=elrepo-kernel install -y kernel-ml
재부팅 후에도 다시 구 커널 버전으로 올라오는 일이 없도록 하기 위해 grub 설정을 확인합니다.
grub2-editenv list
===
saved_entry=3e8a76f185e64fbb9939b96669dffda2-6.7.2-1.el9.elrepo.x86_64
menu_auto_hide=1
boot_success=0
boot_indeterminate=0
===
cat /etc/default/grub | grep GRUB_DEFAULT
===
GRUB_DEFAULT=saved
===
saved_entry가 6.7.2 ml 커널 버전으로 되어 있으며 grub 설정은 saved 정보를 불러오도록 되어 있습니다. 설정이 잘 되어 있으니 리부팅을 진행하고 커널 버전이 올라갔는지 확인합니다.
reboot
uname -msr
===
Linux 6.7.2-1.el9.elrepo.x86_64 x86_64
===
systemctl daemon-reload
위 작업을 거치는 이유는 패키지 업그레이드 이후 old version을 이용한다는 warning이 발생하기 때문에 한 번 데몬 리로드를 해줍니다.
# daemon-reload warning 예시
(hint) your fstab has been modified, but systemd still uses
the old version; use 'systemctl daemon-reload' to reload.
rpm -qa | grep chrony
===
chrony-4.3-1.el9.x86_64
===
vi /etc/chrony.conf
===
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
# 주석 처리 pool 2.rocky.pool.ntp.org iburst
server time.bora.net iburst # 추가
===
systemctl restart chronyd
chronyc sources
====
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* time.bora.net 2 6 17 1 +438us[ +596us] +/- 47ms
===
timedatectl list-timezones | grep Seoul
===
Asia/Seoul
===
timedatectl set-timezone Asia/Seoul
# 설정
hwclock -w
# 확인
date
hwclock -v
parted -l
===
모델: ATA CT250MX500SSD1 (scsi)
/dev/sda 디스크: 250GB
섹터 크기(논리/실제): 512/B4096B
분할 영역 테이블: msdos
디스크 플래그:
번호 시작 끝 크기 형식 파일 시스템 플래그
1 1049kB 538MB 537MB primary ext4 boot
2 538MB 246GB 245GB primary ext4
3 246GB 250GB 4295MB primary linux-swap(v1) swap
모델: LSI MR9271-8i (scsi)
/dev/sdb 디스크: 32.0TB
섹터 크기(논리/실제): 512/B4096B
분할 영역 테이블: gpt
디스크 플래그:
번호 시작 끝 크기 파일 시스템 이름 플래그
1 17.4kB 32.0TB 32.0TB ext4 primary msftdata
===
blkid /dev/sdb1 >> /etc/fstab
vi /etc/fstab
===
# 변경 전
/dev/sdb1: UUID="592c8b59-a48b-4209-a1c5-f5d2cd3c1db9" TYPE="ext4" PARTLABEL="primary" PARTUUID="5d29eece-058f-4365-b680-2f37693c622d"
# 변경 후
UUID="592c8b59-a48b-4209-a1c5-f5d2cd3c1db9" /backup ext4 defaults 0 0
===
mkdir /backup
mount -a
df -Th | egrep "Filesystem|\/backup"
===
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 ext4 29T 14T 14T 51% /backup
===
마운트가 잘 되었다면 기존 데이터가 잘 읽히는지 확인합니다.
보안 문제로 상세내역 기재는 불가하지만 기존에 사용하던 스크립트 및 기타 내역을 아래와 같이 백업해두었습니다.
위 정보를 필요에 맞게 복원하였습니다. 이 과정에서 sshd 설정도 변경되어 root 접근 불가 처리 됩니다.
dnf install -y iptables-services iptables-utils
systemctl enable iptables --now
iptables-restore < 백업파일
systemctl restart iptables
참고 URL
https://docs.rockylinux.org/de/guides/security/enabling_iptables_firewall
# 업데이트 이후 자동으로 3.9 적용 확인
python --version
===
Python 3.9.18
===
# pip3 설치
dnf install python-pip
===
# 중간에 버전 정보를 꼭 확인하거나 python3-pip로 다운로드
======================================================================================================================
꾸러미 구조 버전 저장소 크기
======================================================================================================================
설치 중:
python3-pip noarch 21.2.3-7.el9 appstream 1.7 M
===
python telegram bot 과정에서 필요 패키지가 있어 다운로드하였습니다.
python3 -m pip install python-telegram-bot
모니터링 봇이었는데 정상 발송이 되지 않아 확인 시 python telegram version update 이후(v20 ↑)로는 문법을 변경하여 발송해야 한다고 합니다.
제가 만든 스크립트는 bash 스크립트에서 curl로 사이트 정상 여부를 체크하고 if 문에 비정상 조건에 걸릴 경우 telegram 메시지 발송 python 스크립트를 호출하는 형식이었습니다. 이에 python 스크립트를 아래와 같이 수정하였습니다.
# 변경 전
bot.sendMessage(chat_id=chat_id1, text=msg)
# 변경 후
import asyncio
asyncio.run(bot.sendMessage(chat_id=chat_id1, text=msg))
텔레그램 봇 알림이 잘 발송되는 것을 확인하였습니다.
lspci -v | grep RAID
===
01:00.0 RAID bus controller: Broadcom / LSI MegaRAID SAS 2208 [Thunderbolt] (rev 05)
Subsystem: Broadcom / LSI MegaRAID SAS 9271-8i
===
MegaCli -v
===
MegaCLI SAS RAID Management Tool Ver 8.07.14 Dec 16, 2013
(c)Copyright 2013, LSI Corporation, All Rights Reserved.
Exit Code: 0x00
===
공식 홈페이지 release를 보면 8.07.14가 가장 마지막 버전임을 확인할 수 있습니다.
https://www.broadcom.com/support/download-search?dk=megacli
dnf install -y ncurses*
위 라이브러리를 설치하지 않으면 추후 MegaCli 실행 시 아래 에러가 발생하니 사전에 설치합니다.
MegaCli: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
또한 버전 업으로 인해 5가 아닌 6가 설치됩니다.
dnf install -y ncurses*
마지막 메타자료 만료확인(2:32:35 이전): 2024년 01월 29일 (월) 오전 11시 32분 26초.
꾸러미 ncurses-6.2-10.20210508.el9.x86_64가 이미 설치되어 있습니다.
꾸러미 ncurses-base-6.2-10.20210508.el9.noarch가 이미 설치되어 있습니다.
꾸러미 ncurses-libs-6.2-10.20210508.el9.x86_64가 이미 설치되어 있습니다.
종속성이 해결되었습니다.
======================================================================================================================
꾸러미 구조 버전 저장소 크기
======================================================================================================================
설치 중:
ncurses-c++-libs x86_64 6.2-10.20210508.el9 appstream 36 k
ncurses-devel x86_64 6.2-10.20210508.el9 appstream 516 k
ncurses-term noarch 6.2-10.20210508.el9 appstream 543 k
이에 심볼릭 링크를 생성하여 5 이름으로 파일을 만들어줍니다.
ln -s /usr/lib64/libncursesw.so.6.2 /usr/lib64/libncurses.so.5
ln -s /usr/lib64/libncursesw.so.6.2 /usr/lib64/libtinfo.so.5
ln -s /usr/lib64/libform.so.6.2 /usr/lib64/libform.so.5
기존과 동일한 마지막 버전으로 재설치합니다.
ls -al 8-07-07_MegaCLI.zip
===
-rw-r--r--. 1 smileserv smileserv 12391645 1월 29 13:57 8-07-07_MegaCLI.zip
===
개인적으로 설치 파일은 전부 /usr/local/src
에 보관하고 있어 해당 경로로 진행하였습니다. 압축 파일 해제 후 linux 폴더 하단에 있는 rpm을 설치합니다.
pwd
===
/usr/local/src/8-07-07_MegaCLI/linux
===
rpm -ivh MegaCli-8.07.07-1.noarch.rpm
===
Verifying... ################################# [100%]
준비 중... ################################# [100%]
Updating / installing...
1:MegaCli-8.07.07-1 ################################# [100%]
===
설치가 완료되면 /opt/MegaRAID/MegaCli/MegaCli64
경로에 자동으로 생성됩니다.
ls -al /opt/MegaRAID/MegaCli/MegaCli64
===
-rwxr-xr-x. 1 root root 2716224 12월 19 2012 /opt/MegaRAID/MegaCli/MegaCli64
===
심볼릭 링크를 걸어 절대경로까지 입력하지 않아도 되도록 설정합니다.
ln -s /opt/MegaRAID/MegaCli/MegaCli64 /usr/bin/MegaCli
이제 버전 및 정보 확인 명령어로 관리 기능이 잘 동작하는지 확인합니다.
MegaCli -v
MegaCli -PDList -aALL | grep Count
MegaCli -PDList -aALL 등등..
EOS 업그레이드 작업 직후 서버 내 기능들 확인 시 rsync, RAID 제어, python 스크립트 모두 잘 동작하였으며, 일주일 모니터링 후 특이사항 없을 시 작업을 종료하면 됩니다.