복수 배열 독립 디스크(Redundant Array of Independent Disks 혹은 Redundant Array of Inexpensive Disks)는 여러 개의 하드디스크에 일부 중복된 데이터를 나눠서 저장하는 기술이다. 

여러 개의 디스크를 하나로 묶어 하나의 논리적 디스크로 작동하게 하는데, 하드웨어적인 방법과 소프트웨어적인 방법이 있다. 하드웨어적인 방법은 운영체제에 이 디스크가 하나의 디스크처럼 보이게 한다. 소프트웨어적인 방법은 주로 운영체제 안에서 구현되며, 사용자에게 디스크를 하나의 디스크처럼 보이게 한다.

초기에는 HDD 업그레이드 후 폐기하기엔 아깝고 그렇다고 쓰기에는 성능이 떨어져서 계륵과 같은 HDD를 재활용할 목적으로 사용했다. 그래서 초기에는 Inexpensive로 사용하였는데 현재는 Independent 의미로 사용한다.

RAID는 저장장치의 가용성과 성능 향상에 의미를 두고 있다. 단순히 데이터 백업의 용도로 사용되는 기술이 아니다. 디스크의 고장나도 고장난 디스크만 교체해주면 서버 정지 하지 않아도 복구가 가능하다. 이런 기능을 보고 백업에 의미만 생각하지 않았으면 좋겠다. 요즘 같은 경우는 미러링 서버나 다른 데이터 백업 솔루션을 마련해 둔다.


1. RAID 0 - Striping, 스트라이핑(부르는 사람 맘인듯하다...난 스트리핑이라고 부름...)

여러 개의 멤버 하드디스크를 병렬로 배치하여 거대한 하나의 디스크처럼 사용한다. 데이터 입출력이 각 멤버 디스크에 공평하게 분배되며, 디스크의 수가 N개라면 입출력 속도 및 저장 공간은 이론상 N배가 된다. 다만 멤버 디스크 중 하나만 손상 또는 분실되어도 전체 데이터가 파손되며, 오류검출 기능이 없어 멤버 디스크를 늘릴수록 안정성이 떨어지는 문제가 있다. 따라서 장착된 하드디스크의 개수가 RAID-5 구성 조건에 충족되지 않는 등의 불가피한 경우가 아니라면 절대로 RAID 0으로 구성하지 않는 걸 추천한다.

 

2. RAID 2 - Mirroring

RAID로 묶인 디스크끼리 같은 데이터를 기록한다. RAID로 묶인 디스크 중 하나만 살아남으면 데이터는 보존되며 복원도 1:1 복사로 매우 간단하기 때문에, 서버에서 끊김 없이 지속적으로 서비스를 제공하기 위해 사용한다.

디스크를 늘리더라도 저장 공간은 증가하지 않으며, 대신 가용성이 크게 증가하게 된다. 상용 환경에서는 디스크를 2개를 초과해서 쓰는 경우가 드물지만, 극한 환경에서는 3개 이상의 디스크를 사용하기도 한다. 읽기 성능이 향상되기도 하지만 쓰기를 시도할 때에는 약간의 성능 저하가 뒤따른다.

 

3. RAID 2~4

오류정정부호(ECC)를 기록하는 전용의 하드디스크를 이용해서 안정성을 확보한다. RAID 2는 비트 단위에 Hamming code를 적용하며, RAID 3, 4는 각각 바이트, 워드 단위로 패리티를 저장한다. 하나의 멤버 디스크가 고장나도 ECC를 이용하여 정상적으로 작동할 수 있지만, 추가적인 연산이 필요하여 입출력 속도가 매우 떨어진다. 예를 들어서 디스크 1에 3, 디스크 2에 6을 저장하면 디스크 3에는 1+2의 값인 9를 저장한다. 이렇게 저장하면 디스크 1이 사라지더라도 디스크 2의 6의 값을 읽고, 디스크 3의 9의 값에서부터 디스크 1의 값 3을 읽을 수 있기 때문에 저장소 하나가 파손되더라도 데이터를 읽을 수 있는 것이다. 용량을 약간 희생하지만 하드 하나만 뻑가도 망할 수 있는 일부 레이드 시스템에 비해 매우 높은 가용성과 저장용량 효율을 보인다.

모든 I/O에서 ECC 계산이 필요하므로 입출력 병목 현상이 발생하며, ECC 기록용으로 쓰이는 디스크의 수명이 다른 디스크들에 비해 짧아지는 문제가 있어 현재는 사용하지 않는다.

 

4. RAID 5 

 

RAID 0처럼 데이터를 블록 단위로 디스크에 저장을 하는데 에러로 인한 손실 방지 패리티가 같이 저장된다, RAID 1처럼 디스크 1개가 고장이나도 고장난 디스크만 교체하면된다. 그런데 디스크가 두 개 이상 고장 나면 데이터가 모두 손실된다. 데이터베이스 서버 등 큰 용량과 무정지 복구 기능을 동시에 필요로 하는 환경에서 주로 쓰인다.

주의할점

(1) RAID 0보단 안전하다는 인식과 달리 오히려 많은 량(보통 8개 이상)의 디스크를 스토리지로 묶으면, 패리티 연산오류 발생 확률이 높아져서 인해 RAID 0으로 묶은 것보다 깨질 확률이 높아진다고 한다. 그러므로 대단위로 스토리지를 만드려면 RAID 6 또는 RAID 1+0을 권한다. 다만, 이는 레이드 대상 HDD가 7개 이하일 경우에는 해당되지 않는다.

(2) 고장난 장비를 교체하려다 고장 없는 하드디스크를 뽑는다면 RAID 전체가 망가진다. 동일 상황에서 RAID 6는 문제가 없다.

(3) 한 개의 디스크가 고장 났을 경우 고장난 하드를 교체하면 복구가 가능하지만 2개 이상의 디스크 고장이 나면 복구가 불가능하다.

즉 RAID 0에서 성능과 용량을 조금씩 줄이는 대신 안정성을 높인 레벨이라고 볼 수 있다.

 

RAID 6

RAID 5와 원리는 같다. 서로 다른 방식의 패리티 2개를 동시에 사용한다. 성능과 용량을 희생해서 가용성을 높인 셈. N개의 디스크를 사용하면 (N-2)배의 저장 공간을 사용할 수 있다. 비용이 RAID 5보다 더 비싸고, 디스크도 기본 4개 이상 확보해야 하므로 초기 구축 비용이 비싸다. 하드디스크를 대단위로 물려야 하고, 가용성의 필요성이 RAID 5보다 높아야 하는 상황에서 쓰인다.

 

6. Nested RAID

(1) RAID 0+1 

RAID 0로 구성된 하드디스크들을 RAID 1로 미러링 한다. 하드디스크 2개를 RAID 0로 구성 한 후 다른 하드디스크 2개에 RAID 1 미러링을 합니다. 이럴 경우 같은 데이터가 저장된 디스크 0 , 2 또는 디스크 1 , 3 가 같이 고장 또는 다운이 된다면 복구 할 수 없다. 

 

(2) RAID 1+0

 RAID 1로 미러링 된 디스크를 RAID 0으로 구성한다. RAID 0+1에 비해 디스크 장애 발생 시 복구가 수월하다.

 

더 많은 Nested RAID 가 있지만 그 부분은 내가 하지 않을 것 같아 직접 찾아보기 바란다.

728x90

회사 서버 잘 쓰다가 갑자기 방화벽 설치한다고 한다.

그래서 방화벽 내가 설치하고 NAT 설정 했는데 문제는 파일질라로 FTP 잘만 되던게 안되기 시작했다. 

방화벽이 없었을때는 NAT 설정해서 사용했는데 지금은 해결이 안되기 때문에 FTP 설정을 다시 했다.

 

vsftpd 설치

# apt install vsftpd

vsftpd가 설치가 되고 실행된다. 실행이 잘 되고 있는지 상태를 확인해야한다.

service vsftpd status

ftp 포트가 LISTEN 중인지 확인해보자

# netstat -natp | grep ftp

이제 환경설정을 해야한다.

# vi /etc/vsftpd.conf

나의 경우엔 아무것도 안써있었다. 그래서 자신에 상황에 맞게 아래의 링크에서 참고하여 설정했다.

https://security.appspot.com/vsftpd/vsftpd_conf.html

 

Manpage of VSFTPD.CONF

VSFTPD.CONF Section: File Formats (5) Index Return to Main Contents   NAME vsftpd.conf - config file for vsftpd   DESCRIPTION vsftpd.conf may be used to control various aspects of vsftpd's behaviour. By default, vsftpd looks for this file at the location

security.appspot.com

이제부터 환경설정인데 두가지다.

1. 방화벽 없이 PC 통신일 경우

액티브 모드만으로도 충분할 겁니다. 근데 파일 리스트라던지 데이터 통신이 안된다면 아래 2번 방법을 해보자.

listen=YES
listen_ipv6=NO		// 1, 2번은 주석이 아니니 설정 변경하세요

listen_port=21		// 주석해제

2. 만약 방화벽 같은 게 있다면 아래의 방법을 참조

패시브 모드가 필요하다. 액티브와 패시브 모드는 나도 잘 모른다. 대충 알아만봤다.

그리고 처음 두 줄은 주석이 해체되어있다. 그러니 아래처럼 변경해주고 listen_port 부터는 그냥 귀찮으니 맨 밑에 쓰자.

listen=YES
listen_ipv6=NO		// 1, 2번은 주석이 아니니 설정 변경하세요

listen_port=21		// 주석해제
pasv_min_port=60020
pasv_max_port=60030

 

공통적으로 1번 방법은 포트포워딩에서 TCP 21, 2번 방법은 TCP 21. 60020~60030을 같이 열어줘야 한다. 

 

* 로그인 및 파일전송 로그는 /var/log/vsftpd.log 파일에 기록

/etc/ftpusers 파일에 쓰여진 사용자는 FTP 로그인이 거부

 

아직까지 잘 모르겠지만 서비스 재시작하면 완료다.

# service vsftpd restart

* 보통 접속시 active mode로 하며 접속은 되는데 파일리스트가 제대로 안보이거나 파일 전송이 안되는데 대부분 방화벽이 주 원인이다. 서버에서는 클라이언트가 알려준 포트로 접속을 했는데 방화벽에서 차단을 하기 때문이다. 그래서 passive mode 포트를 입력하고 방화벽에서 해당 포트를 열어주면된다.

728x90

우분투서버로 파일질라를 통해 FTP 접속하여 파일을 옮기려는 중에 에러가 생겨서 파일이 정상적으로 옮겨지지 않았습니다.

Response: 553 Could not create file.

Error: Critical file transfer error

왠지 바로 느낌이 왔습니다. ROOT 권한에 때문이란 것을요

파일질라에서는 root 로그인이 안되더라고요

일반 계정에 root 권한을 주거나 아니면 일반 계정도 폴더나 파일을 수정할 수 있는 권한을 줘야하는 것 같습니다.

답은 생각보다 간단했습니다.

여기서 username은 계정 명을 써주시면 됩니다.

sudo chown -R username /경로,폴더명/...

 

728x90

 

Broker(Mosquitto)설치 하는데 그렇게 어렵지 않습니다.

Mosquitto 설치 명령어

sudo apt-get install mosquitto

잘 설치 됐나 확인하는 방법도 있습니다.

mosquitto

port 번호가 나옵니다. 

백그라운드에서 잘 실행되고 있나 확인도 해보겠습니다.

netstat -anv | grep LISTEN

0.0.0.0:1883이 바로 mosquitto 입니다.

client는 우분투서버에서 같이 할 수 있지만 Node.js나 다른 걸로 조금 더 보기 편한 걸로 하겠습니다.

728x90

nodemon은 디렉토리의 파일 변경이 감지되면 노드 애플리케이션을 자동으로 다시 시작하여 node.js 기반 애플리케이션을 개발하는 데 도움이되는 도구입니다.

그렇기 때문에 소스를 변경하면 다시 끄고 시작하지 않아도 됩니다. 

npm install -g nodemon

https://www.npmjs.com/package/nodemon

 

nodemon

Simple monitor script for use during development of a node.js app.

www.npmjs.com

 

728x90

+ Recent posts