21일차) 2025-01-24 (port/firewall 실습, RAID 0/1/5/6/10 실습)
수업실습)
아무 서버나 켠 후, 211.183.3.77 /24로 IP를 변경해보자. 외부 통신이 가능하도록 만드세요!
client도 한대 켜서 211.183.3.100 /24 으로 IP를 설정한 후 외부통신 되게 만들어보세요.
GW: 211.183.3.2
DNS: 8.8.8.8
client: 211.183.3.100
[root@client ~]# yum install -y ftp vsftpd
server: 211.183.3.77
- httpd, ftp 설치
[root@server ~]# yum install -y httpd vsftpd
[root@server ~]# systemctl restart httpd vsftpd firewalld
[root@server ~]# systemctl enable httpd vsftpd firewalld
- 어떤 서비스가 어떤 포트를 사용하고 있는지 확인( ≒ netstat: 비추)
[root@server ~]# ss -tnlp


- 어떤 프로세스인지 확인
[root@server ~]# ps -p 911

- 80 tcp 열기
[root@server ~]# firewall-cmd --list-serviced
[root@server ~]# firewall-cmd --add-port=80/tcp
[root@server ~]# firewall-cmd --permanent --add-port=80/tcp
- 반영 후 확인
[root@server ~]# firewall-cmd --reload
[root@server ~]# firewall-cmd --list-port
80/tcp

- 서버에서 우리가 알고 있는 ftp 포트들을 허용
[root@server ~]# firewall-cmd --permanent --add-port=20/tcp
[root@server ~]# firewall-cmd --permanent --add-port=21/tcp
[root@server ~]# firewall-cmd --reload
- user1의 홈디렉토리에 간단한 테스트 파일 생성
[root@server ~]# touch /home/user1/ftp.txt
[root@server ~]# ls /home/user1
ftp.txt
[root@server ~]# firewall-cmd --reload


- 서버에서 ftp 서비스를 추가
[root@server ~]# firewall-cmd --permanent --add-service=ftp
[root@server ~]# firewall-cmd --reload


# ftp는 결국 20, 21 포트 이외에 사용자와의 파일 송수신시에 추가적으로 랜덤한 포트가 할당되기 때문이다. 하지만 그 포트를 일일이 제어하기 힘들다. 따라서 서비스 자체를 허용하면, 해당 서비스로 인해 파생되는(related, 연관되는) 다른 요인들도 허용해준다.
→ 포트만 열어서는 안된다
- 서버에서 서비스 제거
[root@server ~]# firewall-cmd --permanent --remove-service=ftp


- 클라이언트에서 위 서버로 ftp 접속
[root@client ~]# ftp 192.168.2.77

[root@http ~]# firewall-cmd --permanent --add-service=ftp

--add-port
--add-service
# 서비스, 포트 추가
--remove-port=
--remove-service
# 제거
--permanent
# 영구적으로
--list-all
--reload
# 확인, 반영
서버에서 안정성이 제일 중요!
SCSI 비싸지만 안정성 높음, 고가용성(높은 확률로 사용 가능하게)
디스크 관리
RAID(Redundant Array Inexpensive/Independent Disk)
저렴한 디스크를 중복되게 배열
용량을 늘리거나, 데이터를 중복으로 저장함으로써 속도를 늘리거나 데이터를 안전하게 저장할 수 있는 디스크 관리 방식
※ 두가지 명령어 필요
- fdisk: 파티션을 관리
- mdadm(Multi Disk ADMin): 레이드 명령어
[root@client ~]# yum -y install mdadm

- client에 RAID를 구성할 디스크를 추가해보자!




RAID 0
+) striping, 속도↑, 공간효율 그대로(100%)
-) 디스크가 하나라도 문제 발생 시 모든 데이터 유실: 안정성↓

RAID 0 실습)
[root@client ~]# ls -al /dev/sd*

- sdb에 파티션 추가
[root@client ~]# fdisk /dev/sdb

- 파티션 추가됐는지 확인
[root@client ~]# ls -al /dev/sd*

- sdc에 파티션 추가
[root@client ~]# fdisk /dev/sdc

- 파티션 추가됐는지 확인
[root@client ~]# ls -al /dev/sd*

- RAID 0 디스크 배열 md0을 생성
[root@client ~]# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1

성공했다면 아래처럼 뜸


- 실패했다면 아래처럼 하기
# 둘다 같음, 편한쪽으로
1. --소문자
[root@client ~]# mdadm --detail /dev/md0
2. -대문자
[root@client ~]# mdadm -D /dev/md0
# --detail : 자세한 정보 확인
[root@client ~]# yum remove -y mdadm
# 혹시 디테일을 쳐도 아무것도 안뜨면 mdadm을 삭제했다가 다시 설치
[root@client ~]# yum install -y mdadm
[root@client ~]# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1

# 파티셔닝이 된 상태(/dev/sdb1)와 디스크(/dev/sdb)는 엄연히 다른 상태
- 파일시스템 만들기(mkfs = MaKe File System)
[root@client ~]# mkfs -t ext4 /dev/md0
# 어떤 디스크나 장치, 파티션을 사용하려면 꼭 파일시스템을 만들어야 한다
- /dev/md0 에 접근하기 위한 마운트포인트 생성
[root@client ~]# mkdir /raid0
- 마운트
[root@client ~]# mount /dev/md0 /raid0
# 테스트를 위해 아무 파일이나 /raid0 에 복사
- 마운트 유지
[root@client ~]# vi /etc/fstab
# 아래 내용 추가
/dev/md0 /raid0 ext4 defaults 0 0

- 확인
[root@client ~]# df -h | grep -i raid0
/dev/md0 2.0G 6.0M 1.9G 1% /raid0

[root@client ~]# cp anaconda-ks.cfg /raid0
RAID 0_디스크삭제)


# 장치의 이름 ‘Hard Disk 3’이 때에 따라서 순서나 이름이 바뀔 수 있기 때문에 내가 지우고 싶은 장치의 순번을 명확하게 확인하고 싶다면 advanced를 보면 된다.




→ 마운트도 안되고 당연히 데이터도 살릴 수 없다!
1. 마운트에서 문제가 생기니, 그 부분을 가려보자!
[root@client ~]# vi /etc/fstab

RAID 0_디스크생성)
2. 혹시라도 디스크를 추가해서 레이드를 재구성하면, 데이터를 살릴 수도 있으니까
전원을 종료 후 디스크를 한개 추가해보자.
- sdc 파티션 추가
[root@client ~]# fdisk /dev/sdc

[root@client ~]# mdadm --stop /dev/md0

[root@client ~]# mdadm --add /dev/md0 /dev/sdc1

- 레이드 디스크 실행
[root@client ~]# mdadm --run /dev/md0

→ 원래 문제가 있던 장치였기 때문에 stop을 하는 순간 /dev/md0 자체가 사라져버렸다.
※ 결론 = 살릴 수 없다!
RAID 1)

RAID 1 실습)
- 디스크 2개 추가

- sdd1과 sde1 파티션 추가
[root@client ~]# fdisk /dev/sdd
[root@client ~]# fdisk /dev/sde


- RAID 1 디스크 배열 md1을 생성
[root@client ~]# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1

- 잘 만들어졌는지 확인
[root@client ~]# mdadm --detail /dev/md1
- 파일시스템 생성
[root@client ~]# mkfs -t ext4 /dev/md1

- 테스트 파일을 복사
[root@client ~]# cp ~/anaconda-ks.cfg /raid1
- 마운트 유지
[root@client ~]# vi /etc/fstab
# 아래 내용 추가
/dev/md1 /raid1 ext4 defaults 0 0

[root@client ~]# init 0
RAID 1_디스크삭제)


딜레이는 조금 되지만, raid0 때와는 다르게 이머전시 모드로 가진 않는다.

- 자세한 정보 확인
[root@client ~]# mdadm -D /dev/md1

RAID 1_디스크생성)
서버 전원 종료후 새로운 디스크를 한개 추가한 다음 파티션을 잡아주자.
- sde 파티션 추가
[root@client ~]# fdisk /dev/sde


RAID 5

RAID 5 실습)



- sdf ~ sdi 파티션 추가
[root@client ~]# fdisk /dev/sdf
[root@client ~]# fdisk /dev/sdg
[root@client ~]# fdisk /dev/sdh
[root@client ~]# fdisk /dev/sdi
- RAID 5 디스크 배열 md5를 생성
[root@client ~]# mdadm --create /dev/md5 --level=5 --raid-devices=4 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1
명령이 안끝났지만, 줄을 바꾸고 싶을때 → \ 사용!
- 자세한 정보 확인
[root@client ~]# mdadm -D /dev/md5

- 파일시스템 생성
[root@client ~]# mkfs.ext4 /dev/md5
- 마운트 포인트 생성
[root@client ~]# mkdir /raid5
- 마운트
[root@client ~]# mount /dev/md5 /raid5
- 테스트 파일 복사
[root@client ~]# cp ~/anaconda-ks.cfg /raid5
- 마운트 유지
[root@client ~]# vi /etc/fstab
# 아래 내용 추가
/dev/md5 /raid5 ext4 defaults 0 0

[root@client ~]# init 0
RAID 5_디스크삭제1)


살짝 문제가 있긴하지만 정상부팅이 된다.

※ 디스크 하나를 더 생성한다면 RAID 1과 같이 정상 복구될것이다.
RAID 5_디스크삭제2)



이머전시 모드로 들어가는걸 확인 가능


# mdadm --run 을 해도 동작을 하지 않는다. (옵션에 명시된 장치 부족)
※ 2개의 디스크를 삭제하면, 다시 디스크를 생성해주더도 복구가 불가능하다.
RAID 5_디스크생성)

- sdg, sdi 파티션 추가
[root@client ~]# fdisk /dev/sdg
[root@client ~]# fdisk /dev/sdi




※ 2개의 디스크를 삭제하면, 다시 디스크를 생성해주더도 장애가 생긴다.

RAID 6)
한쌍의 패리티 비트 사용
두개의 디스크에 문제가 생겨도 복구 가능
RAID 6 실습)
1GB짜리 4개의 디스크(10~13, j k l m)를 추가 후 raid6를 구성한 다음
디스크를 두개 삭제(11,13 삭제)해도 데이터가 보존되는지 확인해보세요
디스크 추가
- sdj ~ sdm 파티션 추가
[root@client ~]# fdisk /dev/sdj
[root@client ~]# fdisk /dev/sdk
[root@client ~]# fdisk /dev/sdl
[root@client ~]# fdisk /dev/sdm
- RAID 6 디스크 배열 md6를 생성
[root@client ~]# mdadm --create /dev/md6 --level=6 --raid-devices=4 /dev/sdj1 /dev/sdk1 /dev/sdl /dev/sdm
- 자세한 정보 확인
[root@client ~]# mdadm -D /dev/md6
- 파일시스템 생성
[root@client ~]# mkfs.ext4 /dev/md6
- 마운트 포인트 생성
[root@client ~]# mkdir /raid6
- 마운트
[root@client ~]# mount /dev/md6 /raid6
- 테스트 파일 복사
[root@client ~]# cp ~/anaconda-ks.cfg /raid6
- 마운트 유지
[root@client ~]# vi /etc/fstab
# 아래 내용 추가
/dev/md6 /raid6 ext4 defaults 0 0

- 초기화
[root@client ~]# init 0
디스크 삭제
- Disk 11, 13 삭제


혹시 레이드가 풀려있다면 mdadm --run /dev/md6으로 레이드장치를 재시작하고 마운트를 다시 한 다음 확인!

RAID 10)

RAID 10 실습)
- 새로운 서버에 패키지 설치
[root@http ~]# yum install -y mdadm


- sdb1 과 sdc1을 묶어서 md1을 구성
[root@http ~]# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
- sdd1 과 sde1을 묶어서 md2를 구성
[root@http ~]# mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1
- 위에서 만든 md1과 md2를 갖고 새로운 레이드0 장치인 md10을 구성
[root@http ~]# mdadm --create /dev/md10 --level=0 --raid-devices=2 /dev/md1 /dev/md2
입력을 잘못한 경우, --stop으로 삭제하고 다시 만든다.
→ mdadm --stop /dev/md1
이머전시 모드로 들어가더라도 /dev/md10만 잘 살아 있다면 재 마운트를 하면 되므로 큰 문제는 없다.
→ [root@http ~]# mount /dev/md10 /raid10
- 파일시스템 생성
[root@http ~]# mkfs.ext4 /dev/md10
- 마운트 포인트 생성
[root@http ~]# mkdir /raid10
- 마운트
[root@http ~]# mount /dev/md10 /raid10
- 테스트 파일 복사
[root@http ~]# cp ~/anaconda-ks.cfg /raid10

- 마운트 유지
[root@client ~]# vi /etc/fstab
# 아래 내용 추가
/dev/md10 /raid10 ext4 defaults 0 0

[root@client ~]# init 0
RAID 10_디스크삭제)
지울 수 있는 최대한의 디스크를 삭제한 다음 정상동작하는지 확인하세요.

- 확인
[root@server ~]# ls /raid10
[root@server ~]# mdadm -D /dev/md10



※ 서로 다른 곳에 묶인 디스크(3+5, 2+4)를 하나씩 삭제한다면, 장애가 생기지 않는다.
RAID 16)

RAID 16 실습)
stg1 , stg2 을 만드세요!
stg1 은 nfs-client , stg2는 nfs-server 입니다.
클라이언트는 엄청나게 안정적인 디스크 2GB를 원합니다. 따라서 서버관리자는 raid16으로 구성된 스토리지를 통해 nfs-server를 구성하기로 했다. 구성한 다음 최대한 많은 디스크를 삭제하여 클라이언트가 만족할 수 있도록 하세요.
제출할 내용
1. 최대 몇개를 삭제할 수 있는지? /dev/md16의 자세한 정보
2. client와 server에서의 df -h 정보.
- 디스크 8개 추가 후 nfs-server 설정
[root@nfs-server ~]# fdisk /dev/sdb
...
[root@nfs-server ~]# fdisk /dev/sdi
[root@nfs-server ~]# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
[root@nfs-server ~]# mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1
[root@nfs-server ~]# mdadm --create /dev/md3 --level=1 --raid-devices=2 /dev/sdf1 /dev/sdg1
[root@nfs-server ~]# mdadm --create /dev/md4 --level=1 --raid-devices=2 /dev/sdh1 /dev/sdi1
[root@nfs-server ~]# mdadm --create /dev/md16 --level=6 --raid-devices=4 /dev/md1 /dev/md2 /dev/md3 /dev/md4
[root@http ~]# mkfs.ext4 /dev/md16
[root@http ~]# mkdir /raid16
[root@http ~]# mount /dev/md16 /raid16
[root@http ~]# cp ~/anaconda-ks.cfg /raid16
[root@client ~]# vi /etc/fstab
/dev/md16 /raid16 ext4 defaults 0 0
[root@client ~]# init 6
- 디스크 6개 제거 후 nfs-server 설정
[root@server ~]# ls /raid16
[root@server ~]# mdadm --run /dev/md16
[root@server ~]# mdadm -D /dev/md16
[root@server ~]# df -h | grep -i raid16


- nfs-server NFS 설정
[root@nfs-server ~]# yum install -y nfs-utils
[root@nfs-server ~]# systemctl start nfs-server
[root@nfs-server ~]# systemctl enable nfs-server
[root@nfs-server ~]# chmod -R 777 /raid18
[root@nfs-server ~]# vi /etc/exports
/raid16 211.183.3.*(rw)
[root@nfs-server ~]# exportfs -r
[root@srv1 ~]# yum install -y nfs-utils
[root@srv1 ~]# mkdir /remote
[root@srv1 ~]# mount -t nfs 211.183.3.77:/raid16 /remote

RAID 레벨별 정리표
RAID 레벨 | 내결함성 | 허용 장애 디스크 수 | 복구 가능 여부 | 추가 디스크로 복구 |
RAID 0 | 없음 | 0 | 복구 불가 | 불가능 |
RAID 1 | 있음 | 1 | 1개 복구 가능 | 가능 |
RAID 5 | 있음 | 1 | 1개 복구 가능, 2개 복구 불가 | 가능 |
RAID 6 | 있음 | 2 | 2개 복구 가능, 3개 복구 불가 | 가능 |
RAID 10 | 있음 | 쌍별 1개 | 쌍별 1개 복구 가능 | 가능 |

