[Cent 7 → Rocky 9] 레이드 백업 스토리지 서버 업그레이드

mimic1995·2024년 1월 29일
0

EOS

목록 보기
1/4

Raid 10 스토리지에 rsync 기반으로 원격지에서 백업 데이터를 저장하는 백업 스토리지 서버 EOS 작업을 진행하였습니다.
Raid 디스크 영역만 건들지 않고 재설치하면 되는 간단한 작업이며, 두 가지 사항을 중점으로 작업하였습니다.

① rsync 프로토콜이 기존 백업 대상 서버의 버전과 호환이 되는지 여부
② MegaCli 재설치 후 레이드 영역 관리가 가능한지 여부

OS 재설치

설치 옵션

항목value
OSRocky 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 하단에 있습니다.

firewalld 기본 방화벽 해제

iptables 사용 예정이므로 기본 방화벽을 해제합니다.

systemctl disable firewalld --now

selinux 해제

# 영구적용
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
===

daemon 갱신

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

RAID 영역 마운트

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
===

마운트가 잘 되었다면 기존 데이터가 잘 읽히는지 확인합니다.


기존 데이터 복원

보안 문제로 상세내역 기재는 불가하지만 기존에 사용하던 스크립트 및 기타 내역을 아래와 같이 백업해두었습니다.

  • /etc, /home, /var 세 디렉토리를 tar 압축파일로 생성 후 백업
  • python, MegaCli 버전 정보 백업
  • backup script 파일, cron 정보 백업 재확인
  • iptables, network 정보 백업 재확인

위 정보를 필요에 맞게 복원하였습니다. 이 과정에서 sshd 설정도 변경되어 root 접근 불가 처리 됩니다.

iptables 설치 및 복원

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

python3 설정

# 업데이트 이후 자동으로 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))

텔레그램 봇 알림이 잘 발송되는 것을 확인하였습니다.


MegaRAID 관리 툴 MegaCli 설치

카드 명 확인 (9271-8i)

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 버전 확인

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

ncurses 패키지 설정

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() 오전 113226초.
꾸러미 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  129 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 1219  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 스크립트 모두 잘 동작하였으며, 일주일 모니터링 후 특이사항 없을 시 작업을 종료하면 됩니다.

profile
Raiju Hantu Goryo Obake

0개의 댓글