복습
HTTPD
- 서버는 끄면 안된다. 즉, 실무에서는 서버는 꺼지면 안된다.
- 하나의 머신에는 동일 포트를 하나만 쓰게 되어있다.
- 아파치, nginx 둘다 외부에서 들어오는 사용자는 80번 포트에서 받아들이게 되는데, httpd(아파치), nginx를 동시에 키려면 포트 충돌이 일어나게 된다.
- (systemctl start | stop | restart | status | enable | disable| enable --now | disable --now httpd)
Storage 추가 (Mount; Block Storage 다루기 - sda(root volume) - OS, App)
- 새로운 가상디스크를 생성하고
mkfs -t xfs /dev/sdb
: 생성한 디스크를 먼저 포맷해준다.
- 생성된 디스크는 리눅스에서는
파일
로 인식 되기때문에 바로 사용할 수 없다.
- 즉,
mount
해서 사용해야 한다.
mkdir /data
: 마운트할 폴더 생성
mount dev/sdb /data
: deb/sdb장치파일을 /data에 mount해준다.
SAMBA(Server Message Block; file storage -> 네트워크 파일 공유 -> 윈도우용 파일시스템) - Amazon FSx 유사 - 완전 관리형 서비스
- SAMBA를 설치함으로써, 윈도우에서 파일을 공유할 수 있는 서비스를 만들었다.
- NET BIOS를 사용한다.
NFS (Network File System; file sttorage -> 네트워크 파일 공유 -> 리눅스용 파일 시스템) -AWS EFS - 완전 관리형 서비스
- 1984년에 썬 마이크로시스템즈가 개발한 프로토콜이다.
- NFS자체 프로토콜을 사용한다.
Object File System(우리가 사용했던 WebShare가 OFS, 객체 파일 시스템이다.)
- 구글 드라이브, My Box등 이 닮았다.
- 공유된 파일을 클릭하면 실행해버린다.(HTTP기능)이미지를 누르면 이미지가 확대되어 보인다. 각 파일이 객체이기 때문이다.
- 이는, 객체 파일 시스템의 특징이다.
- HTTP 프로토콜을 사용하여 파일을 공유하게 된다.
- 공유된 이미지를 클릭하면 바로 실행된다. (HTTP기능) 이는 웹 페이지로 띄워져 HTTP에서 보인다.
- HTML에서 img태그의 src에, 내 컴퓨터가 아닌, 웹서버의 이미지주소를 올려서 이미지를 올릴 수 있다.
- 이것은 Amazon이 상품의 이미지를 빠르게 업로드 및 서비스 하기위해 이 방법을 사용하여S3를 만들게 되었다.
- 단점으로 이미지 서버가 꺼지면, 서비스에서 이미지가 깨지는 것이 단점이다. 이미지를 볼 수 없다.
- google드라이브에서 업로드하고, 링크를 공유하여 이미지를 보면, 그냥 이미지를 보는것이 아니라, 구글 자체의 프레임 안에 이미지가 보인다.
- 구글은 무료라 안된다... 라고 생각하면 된다. S3로 비교해보자
- Amazon S3도 된다.
- 이렇게 링크를 만들어서 이미지를 웹에 올리면, 트래픽에 대한 걱정을 해야한다. S3에 아무 생각없이 올리면, 다음날에 몇십만원이 깨질 것이다.
실습
NFS 사용하기
서버
yum install -y nfs-utils
: nfs-utils 설치
mkdir /share && cd $_
: 공유폴더이동
- &&
앞명령과 동시에 뒤 명령을 진행한다.
_
는 직전에 만든 폴더를 뜻한다
- 기존
|
파이프 명령어랑 거의 비슷하다.
- 그러나 현재 명령어
mkdir && cd
는 실행되지 않는다. 무슨차이가 있는지는 확인 필요
- echo "Hello~ U R in NFS." > test.txt
vi /etc/exports
: 보안설정, 접근할 수 있는 IP주소 범위를 설정한다.
- share 192.168.56.0/24(rw,sync)
IP
- IPv4 주소는, 점3개를 기준으로 4개의 숫자로 표현된다.
- VM들의 HostOnly주소를 보면, 앞 3개의 숫자가 똑같다.
- 192.168.56.xxx 중 앞 세자리가 같으면, 같은 네트워크에 있다는 것이고, 끝숫자만 다르게 구별되어있다.
- 앞 세자리는 아파트로 가정하면 101동 같은 동 수 이고, 뒤 한자리는 303호와 같은 호 수 이다.
- 이 앞 세자리를 network영역이라 하고,
- 뒤 한자리를 host영역이라 한다.
- 또, 0~255까지 부여할 수 있다.
- 그러나 2개의 특수한 목적이 있는 고정된 IP가 존재하여 실제 사용가능 ip는 254개 이다.
192.168.56.0
: 네트워크 주소 (고정적으로 정의되어있음), 이는 IP범위에서의 호스트주소가 0일 때, 고정되어 사용한다.
192.168.52.255
: 브로드캐스트 주소(고정 정의), 모든 ip에게 내 pc가 켜졌음을 알린다.
- 0과 같이 고정된 네트워크영역외의 수정할 수 있는 host영역에서의 최대값이 이 역할을 한다.
- 즉,
192.168.56.0/24
는 ip주소의 network영역이 192.168.56.이고 host영역이 서로다른 사용자만 허용하겠다는 뜻이다.
서버 실행
chmod 707 /share
systemctl start nfs-server
systemctl enable nfs-server
systemctl enable --now nfs-server
: 위 start, enable명령을 한번에 해결할 수 있다.
exportfs -v
: 우리가 설정한 접근 주소 설정을 볼 수 있다. 우리는 rw, sync만 입력했지만 다른 디폴트 설정들이 들어감을 볼 수 있다.
추가적으로 firewall설정이 필요함
firewall-cmd --permanent --add-service=nfs
: nfs 추가
firewall-cmd --permanent --add-service=rpc-bind
: rpc-bind 추가
firewall-cmd --permanent --add-service=mountd
: mountd 추가
firewall-cmd --reload
: firewalld 새로고침
클라이언트 (Minimal)
rpm -qa | grep nfs-utils
: rpm
은 redhat의 패키지 매니저이다.
- rpm -qa
: 는 모든 설치된 패키지를 출력한다.
- 너무 많아 파이프명령으로 grep을 사용하여 찾아본다.
yum install -y nfs-server
: 클라이언트 PC에도 nfs-server를 설치해준다.
showmount -e [server IPaddress]
: showmount 명령어는 NFS Server에 NFS Client가 접속해서 사용하고 있는 상태를 체크한다.
mkdir share
sestatus
: enforce 가 설정되어 있다면
setenforce 0
: 해서 해제해야한다.
vi /etc/sysconfig/selinux
: 이곳에서 setenforce를 disabled로 설정해준다.
sestatus
: 해서 disabled 되어 있어야 한다.
mount -t nfs 192.168.56.120
항상연결되어있도록 한다.
df -h
: 디스크 사용량 확인
cp /etc/fstab /etc/fstab.dek
: 백업을 하기위해 사본을 만들어 놓는다.
vi /etc/fstab
- [서버 IP]:/share /root/share nfs defaults 0 0
: 껐다가 켜도 연결되어 있도록 설정한다. 어제와 달리 오늘은 nfs방식을 사용하기 떄문에 nfs로 바뀌었다.
DB서버(Database Management System; MariaDB) AWS RDS - 완전 관리형 서비스
- 관계형 데이터베이스 관리 시스템 (RDMS)
- SQL언어를 사용하는 데이터베이스가 SQLDB라고 한다.
- 또, SQL을 사용하지 않는 데이터베이스는 NoSQL이라 한다.
DB서버설치(MariaDB)
vi /etc/yum.repos.d/MariaDB.repo
: repo(Repository, 저장소), MariaDB를 설치하기 위해 저장소를 정의 한 후 설치한다. 패키지에 마다 다르다.
- 편집기에서 아래 명령어를 넣어준다.
- 또, 아래 baseurl에서 버전을 넣어줄 수 있다. (현재 10.4)버전이다.
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
cat > /etc/yum.repos.d/MariaDB.repo
하고 바로 붙혀넣기 해도 된다.
yum install -y MariaDB
: MariaDB 설치
rpm -qa | grep MariaDB
: 패키지가 잘 설치됬는지 확인
mariadb --version
: 버전을 확인하며 설치되었는지 확인
systemctl enable --now mariadb
: mariadb 시작 및 자동실행 설정
ss -ant
: 현재 리스닝중인 포트 정보를 보여준다.
- 또, IPv6, IPv4, port번호, peer Address등 의 다양한 정보를 볼 수 있다.
- 80번 포트, 2049(NFS포트), 139(NetBIOS포트), 3306(MariaDB 포트)
- 또, 연결된 IP로 연결된 정보를 볼 수 있다.
mysql_secure_installation
: db서버의 보안설정하는 명령어
- root passwd를 물어보지만 엔터를 눌러본다.
- 이후 여러 질문을 하는데 Y를 넣을 것이다.
- root passwd를 바꾼다. Y
- anonymous 사용자를 제거한다. Y
- root의 원격접속을 허락하지 않는다. Y
- remote(원격) <-> local(내부)
- 결국 보안이 문제이다.
- remote에서 root계정을 사용할 수 있다면, 만약 root계정을 다른 사람이 획득하게 된다면 어디서든지 root계정으로 들어올 수 있다.
- 이런 일을 막기위해 local, 물리적 한계를 두어 계정을 빼앗겨도 물리접으로 접촉하지 않으면 보안을 지킬 수 있다.
- test database 굳이 필요없다.
systemctl restart mariadb
: 재시작
mysql -u root -p
: 마리아DB를 실행시킨다.
SQL 명령어
CREATE USER 'wpuser'@'%' IDENTIFIED BY 'wppass'
: wpuser
사용자는 뚫려봤자 루트까지 들어오지 못한다. 즉, wpuser (외부 사용자)는 외부에서 remote로 접속 할 수 있도록 허용한다.
- CREATE USER
'사용자 닉네임
' iNDETIFIED BY '비밀번호
- GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%';
클라이언트
yum install mysql -y
mysql -h 172.30.1.55 -u 비밀번호 -p
firewall-cmd --list-all
: maria db를 새로 추가해줘야 한다.
firewall-cmd --permanent --add-service=mysql
firewall-cmd --reload
공유기 만들기
사설 IP
- RFC 1918 (가능한 IP의 범위)
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0 ~ 192.168.255.255
NAT
- 사설 IP가 공인 IP로 바뀌어 나가고, 반대로 공인 IP로 들어올 때, 사설IP로 변환되서 들어오는 것이 NAT(Network Address Translation, 네트워크 주소 변환)이다.
- NAT를 사용하는 이유는 대개 사설 네트워크에 속한 여러개의 호스트가 하나의 공인 IP주소를 사용하여 인터넷에 접속하기 위함이다.
vbox 설정
- VM의 네트워크 설정을 어댑터1 : 어댑터에 브릿지, 어댑터2 : 내부네트워크로 설정한다.
- 내부네트워크의 이름은 vSwitch로 한다.
- VM에서
ip a
를 실행해보고 브릿지 환경은 잡히고, 내부 네트워크는 안잡히는게 정상이다. 또, ping google.com
했을 때 ping이 나가야 한다.
Diagram
- XFCE VM을 NAT gateway처럼 사용하고, Minimal들을 복제하여 각 서버를 만들 것이다.
- XFCE VM의 이름을
NAT GW_DHCP_HAproxy
로 변경, 스냅샷 찍어놓은 것으로 돌아간다.
- Minimal VM의 이름을 WEB01_SAMBA로 바꾸고 위 그림처럼 2개를 더 복사해 만들어준다. (완전복제)
- NAT GW~~ 의 네트워크를 다시 설정해준다.(스냅샷으로 돌아가며 설정 변경됨)
- 어댑터 1: 어댑터에 브릿지
- 나머지 Minimal VM 이었던 VM들은
- 어댑터 1: 내부네트워크 (vSwitch)