Amazon Linux 2 의 지원 종료일 (EOL): 2026년 6월 30일로 명시
해당 OS 사용중인 EC2 가 있다면, EOL 이전에 OS 마이그레이션 필요
AmazonLinux2023-GoldenAMI 생성
기존 EC2 와 동일한 설정(Subnet/Volume(kms)/SG) 과 AL2023 AMI 로 EC2 생성
AL2023 EC2 접근 및 서버 기본 세팅 (os_set.sh)
**# os_set.sh**
#!/bin/sh
#1.User 기입
echo "1.생성할 유저기입(sysadm 및 root계정 패스워드 변경)";
echo '{password}' | passwd --stdin sysadm;
echo '{password}' | passwd --stdin root;
echo "sysadm 패스워드 변경이 완료 되었습니다.";
echo "1-1.추가 유저가 있을 경우 첫 번째 유저명을 기입해주세요.(유저 없을 경우 엔터)";
read -a USER1;
if [ -z "$USER1" ];
then
echo "기입할 유저가 없습니다.";
else
echo "1-2.두 번째 유저명을 기입해주세요.(유저 없을 경우 엔터)";
read -a USER2;
if [ -z "$USER2" ];
then
echo "기입할 유저가 없습니다.";
else
echo "1-3.세 번째 유저명을 기입해주세요.(유저 없을 경우 엔터)";
read -a USER3;
if [ -z "$USER3" ];
then
echo "기입할 유저가 없습니다.";
else
echo "1-4.네 번째 유저명을 기입해주세요.(유저 없을 경우 엔터)";
read -a USER4;
if [ -z "$USER4" ];
then
echo "기입할 유저가 없습니다.";
else
echo "2-5.다섯 번째 유저명을 기입해주세요.(유저 없을 경우 엔터)";
read -a USER5;
if [ -z "$USER5" ];
then
echo "기입할 유저가 없습니다.";
fi
fi
fi
fi
fi
#2.볼륨기입
echo "2.생성할 볼륨기입";
echo "2-1.첫 번째 볼륨을 기입해주세요.(볼륨 없을 경우 엔터)";
read -a VOL1;
if [ -z "$VOL1" ];
then
echo "기입 할 볼륨이 없습니다.";
else
echo "2-2.두 번째 볼륨을 기입해주세요.(볼륨 없을 경우 엔터)";
read -a VOL2;
if [ -z "$VOL2" ];
then
echo "기입할 볼륨이 없습니다.";
else
echo "2-3.세 번째 볼륨을 기입해주세요.(볼륨 없을 경우 엔터)";
read -a VOL3;
if [ -z "$VOL3" ];
then
echo "기입할 볼륨이 없습니다.";
else
echo "2-4.네 번째 볼륨을 기입해주세요.(볼륨 없을 경우 엔터)";
read -a VOL4;
if [ -z "$VOL4" ];
then
echo "기입할 볼륨이 없습니다.";
else
echo "2-5.다섯 번째 볼륨을 기입해주세요.(볼륨 없을 경우 엔터)";
read -a VOL5;
if [ -z "$VOL5" ];
then
echo "기입할 볼륨이 없습니다.";
fi
fi
fi
fi
fi
#3.hostname 변경
echo "3.Hostname 변경";
echo "변경할 hostname 정보를 입력해주세요.";
read -a HOSTNAME;
hostnamectl set-hostname $HOSTNAME;
echo "호스네임이 변경 되었습니다.";
#4.유저생성
# 첫 번째 유저명
echo "4.유저생성";
if [ -n "$USER1" ];
then
useradd $USER1;
echo '{password}' | passwd --stdin $USER1;
fi
# 두 번째 유저명
if [ -n "$USER2" ];
then
useradd $USER2;
echo '{password}' | passwd --stdin $USER2;
fi
# 세 번째 유저명
if [ -n "$USER3" ];
then
useradd $USER3;
echo '{password}' | passwd --stdin $USER3;
fi
# 네 번째 유저명
if [ -n "$USER4" ];
then
useradd $USER4;
echo '{password}' | passwd --stdin $USER4;
fi
# 다섯 번째 유저명
if [ -n "$USER5" ];
then
useradd $USER5;
echo '{password}' | passwd --stdin $USER5;
fi
echo "유저 생성이 완료 되었습니다."
#5.볼륨생성
echo "5.볼륨생성"
if [ -n "$VOL1" ];
then
cd /;
mkdir $VOL1;
ls -ld /$VOL1;
fi
if [ -n "$VOL2" ];
then
cd /;
mkdir $VOL2;
ls -ld /$VOL2;
fi
if [ -n "$VOL3" ];
then
cd /;
mkdir $VOL3;
ls -ld /$VOL3;
fi
if [ -n "$VOL4" ];
then
cd /;
mkdir $VOL4;
ls -ld /$VOL4;
fi
if [ -n "$VOL5" ];
then
cd /;
mkdir $VOL5;
ls -ld /$VOL5;
fi
echo "볼륨 생성이 완료 되었습니다.";
#6. LVM 설치
echo "6.LVM 설치";
lvm=`rpm -qa | grep lvm |wc -l`;
if [ $lvm -lt 1 ];
then
echo "LVM 패키지 설치가 필요합니다.";
yum install -y lvm2;
echo "LVM 설치가 완료 되었습니다."
else
echo "LVM 패키지가 설치 되어 있습니다.";
fi
#7. Root ssh
echo "7.Root ssh 허용";
sshconfig=`cat /etc/ssh/sshd_config | grep "PermitRootLogin no" | wc -l`;
if [ $sshconfig -gt 0 ];
then
sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config;
systemctl restart sshd;
echo "root 계정에 ssh 접근 허용하였습니다.";
cat /etc/ssh/sshd_config | grep "PermitRootLogin yes"
else
echo "root 계정에 대해 ssh 허용되어 있습니다.";
cat /etc/ssh/sshd_config | grep "PermitRootLogin yes"
fi
#8. cloud config
echo "8.hostname 보존"
cloudconfig=`cat /etc/cloud/cloud.cfg | grep "preserve_hostname: false" | wc -l`;
if [ $cloudconfig -gt 0 ];
then
sed -i 's/preserve_hostname: false/preserve_hostname: true/g' /etc/cloud/cloud.cfg;
echo "호스트네임 보존 설정하였습니다.";
cat /etc/cloud/cloud.cfg | grep "preserve_hostname: true"
else
echo "호스트네임 보존 설정이 되어 있습니다.";
cat /etc/cloud/cloud.cfg | grep "preserve_hostname: true"
fi
LVM 구성
pv 생성
pvcreate /dev/nvme1n1
pvcreate /dev/nvme2n1
pvcreate /dev/nvme3n1
pvcreate /dev/nvme4n1
pvs
vg 생성
vgcreate APPVG /dev/nvme1n1
vgcreate LOGVG /dev/nvme2n1
vgcreate SRCVG /dev/nvme3n1
vgcreate DATAVG /dev/nvme4n1
vgs
파티션 분리안되어있으면, 전체 용량 engn001 디렉토리로 할당
lvcreate -l 100%FREE -n engn001 APPVG
ls /dev/APPVG/
lvcreate -l 100%FREE -n logs001 LOGVG
ls /dev/LOGVG/
lvcreate -l 100%FREE -n sorc001 SRCVG
ls /dev/SRCVG/
lvcreate -l 100%FREE -n data001 DATAVG
ls /dev/DATAVG/
마운트
mkfs.xfs /dev/APPVG/engn001
mkfs.xfs /dev/LOGVG/logs001
mkfs.xfs /dev/SRCVG/sorc001
mkfs.xfs /dev/DATAVG/data001
LV 를 마운트할 디렉토리 생성
mkdir -p /engn001
ls /engn001
mkdir -p /logs001
ls /logs001
mkdir -p /sorc001
ls /sorc001
mkdir -p /data001
ls /data001
마운트한 디렉토리와 연결
mount /dev/APPVG/engn001 /engn001
mount /dev/LOGVG/logs001 /logs001
mount /dev/SRCVG/sorc001 /sorc001
mount /dev/DATAVG/data001 /data001
lsblk
fstab 설정
blkid /dev/APPVG/engn001
/dev/APPVG/engn001: UUID="4e937be5-63bd-45f5-9661-5715d0fe26e6" BLOCK_SIZE="512" TYPE="xfs"
blkid /dev/LOGVG/logs001
/dev/LOGVG/logs001: UUID="9d314094-cf28-4512-bfea-3ef551786237" BLOCK_SIZE="512" TYPE="xfs"
blkid /dev/SRCVG/sorc001
/dev/SRCVG/sorc001: UUID="7f1b3d94-cba5-4015-98ee-54acb4de3b7d" BLOCK_SIZE="512" TYPE="xfs"
blkid /dev/DATAVG/data001
/dev/DATAVG/data001: UUID="bdd8a06f-2ea5-4587-b006-bbe12dc60eb5" BLOCK_SIZE="512" TYPE="xfs"
EFS 마운트
데이트 이관 (os_move.sh)
SG: 소스서버 SG outbound, 대상서버 SG inbound 에 서로 IP 로 22 port 오픈
소스서버에 rsync 를 위한 move 스크립트 세팅
screen 세팅해서 백그라운드로 스크립트 실행
스크린 생성 (screen -S test1)
실행중인 스크린 목록 조회 (screen -ls)
스크린 세션 재연결 (screen -r <id>)
스크린 빠져나오기 (ctrl+a+d)
스크린 삭제 (ctrl+D)
서버 → 서버로 rsync 데이터 전송을 위해서는 root 로 접근해야되기 때문에, 대상서버의 sshd_config 설정에서 root 로 접근되도록 설정
# 대상서버 선작업
vi /etc/ssh/sshd_config
PermitRootLogin yes
sudo systemctl restart sshd
**# os_move.sh**
#!/bin/sh
echo "데이터 이전 할 대상 아이피 정보를 입력해주세요.";
read -a IPCONFIG;
echo "첫 번째 볼륨을 기입해주세요.(볼륨 없을 경우 엔터)";
read -a VOL1;
if [ -z "$VOL1" ];
then
echo "기입 할 볼륨이 없습니다."
else
echo "두 번째 볼륨을 기입해주세요.(볼륨 없을 경우 엔터)"
read -a VOL2;
if [ -z "$VOL2" ];
then
echo "기입할 볼륨이 없습니다."
else
echo "세 번째 볼륨을 기입해주세요.(볼륨 없을 경우 엔터)"
read -a VOL3;
if [ -z "$VOL3" ];
then
echo "기입할 볼륨이 없습니다."
else
echo "네 번째 볼륨을 기입해주세요.(볼륨 없을 경우 엔터)"
read -a VOL4;
if [ -z "$VOL4" ];
then
echo "기입할 볼륨이 없습니다."
else
echo "다섯 번째 볼륨을 기입해주세요.(볼륨 없을 경우 엔터)"
read -a VOL5;
if [ -z "$VOL5" ];
then
echo "기입할 볼륨이 없습니다."
fi
fi
fi
fi
fi
## sshpass 설치 ##
sshpass=`rpm -qa | grep sshpass | wc -l`;
if [ $sshpass -lt 1 ];
then
echo "sshpass 패키지 설치가 필요합니다.";
amazon-linux-extras install epel -y
yum install sshpass
echo "sshpass 패키지 설치가 완료 되었습니다.";
else
echo "sshpass 패키지가 설치 되어 있습니다.";
fi
# 데이터 이전
rsync -av --rsh='sshpass -p "{password}" ssh' /etc/sudoers "$IPCONFIG":/etc/sudoers >> /usr/local/src/sudoers.log
rsync -av --rsh='sshpass -p "{password}" ssh' /home/ "$IPCONFIG":/home/ >> /usr/local/src/home.log
if [ -n "$VOL1" ];
then
rsync -av --rsh='sshpass -p "{password}" ssh' /$VOL1/ "$IPCONFIG":/$VOL1/ >> /usr/local/src/$VOL1.log
fi
if [ -n "$VOL2" ];
then
rsync -av --rsh='sshpass -p "{password}" ssh' /$VOL2/ "$IPCONFIG":/$VOL2/ >> /usr/local/src/$VOL2.log
fi
if [ -n "$VOL3" ];
then
rsync -av --rsh='sshpass -p "{password}" ssh' /$VOL3/ "$IPCONFIG":/$VOL3/ >> /usr/local/src/$VOL3.log
fi
if [ -n "$VOL4" ];
then
rsync -av --rsh='sshpass -p "{password}" ssh' /$VOL4/ "$IPCONFIG":/$VOL4/ >> /usr/local/src/$VOL4.log
fi
if [ -n "$VOL5" ];
then
rsync -av --rsh='sshpass -p "{password}" ssh' /$VOL5/ "$IPCONFIG":/$VOL5/ >> /usr/local/src/$VOL5.log
fi
echo "데이터 이전이 완료 되었습니다."
echo "대상 서버 root계정에 대한 ssh 오픈 원복 작업 진행 부탁드립니다."
****
e. 작업 후 소스/대상 서버 파일 개수 확인
find /home/* -type f | wc -l
find /logs001/* -type f | wc -l
find /engn001/* -type f | wc -l
find /data001/* -type f | wc -l
f. 대상서버 sshd (작업 후 원복)
vi /etc/ssh/sshd_config
PermitRootLogin no
sudo systemctl restart sshd
최종 작업: AL2023 OS 마이그레이션 한 EC2 를 기존 IP 로 교체작업