수업 17일차 리눅스 업스트림을 이용한 로드밸런싱, 공개키 개인키

유동우·2022년 10월 16일
1

<nginx로 업스트림을 이용한 로드밸런싱>

■ 로드 밸런싱 기법

- 라운드로빈 방식 : 서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식
				Client가 요청한 순서대로 분배하기때문에 여러대가 동일한 스펙을 가지고있음
				서버와의 연결이 오래 지속되지않는경우 활용하기 적합

- 가중 라운드로빈 방식 : 각 서버마다 가중치를 매기고 가중치가 높은 서버 Client 요청을
					우선적으로 배분.
					주로 서버의 트래픽 처리능력이 상이한 경우 사용되는
					부하 분산 방식.


- IP 해시 방식 : Client의 IP주소를 특정 서버로 매핑하여 요청을 처리하는 방식.
			  사용자가 항상 동일한 서버로 연결되는 것을 보장함.

- 최소연결방식 : Client 요청이 들어온 시점에 가장 적은 연결상태를 보이는 서버에
			   우선적으로 트래픽 배분.
			   자주 세션이 길어지거나 서버에 분배된 트래픽들이 일정하지않을때 적합.

- 최소 응답 시간 방식 : 서버의 현재 연결 상태와 응답시간을 모두 고려하여 트래픽 배분
					가장 적은 연결 상태와 가장 짧은 응답시간을 보이는 서버 우선적으로 로드배분.

cd /var/log/nginx
ls
ll

[에러로그 보는 명령어]
sudo tail error.log

[실시간으로 보는 명령어]
sudo tail -f error.log

끌때는 컨트롤+c

[경로확인명령어]
pwd

==================================================

ASCII 텍스트 파일 - cat tail head 로 볼수있는 파일

이진파일 - 기계어로 된것

==================================================

include : 전처리기 // 모듈별로 처리하려고씀

nginx.conf mime.types

include : 포함시킬 외부파일을 정의한다.
mime.types란 파일에 작성되어진 내용들을 현재 파일
로 가져오는 것을 뜻한다.

default_type : 웹서버의 기본 Content-Type을 정의한다.

log_format : 로그 형식을 지정한다. 후술한 로그 형태에 따라 로그가 작성되고 기록된다.

access_log : 접속 로그가 쌓이는 경로이다.

sendfile : sendfile() 함수의 사용여부를 지정한다.
sendfile() 함수는 한 파일의 디스크립터와
다른 파일의 디스크립터 간에 데이터를 복사하는 것으로
커널 내부에서 복사가 진행된다.

====================================================

[설치명령어]
net-tools : 네트워크 관련 명령이 있는 패키지
netstat, ifconfig ...

bind-utils : 네임서버 관련 명령이 있는 패키지
nslookup

man netstat
netstat -ant
listen 접속 대기상태
established 접속 완료상태

cd /usr/share/nginx/html
vim index.html (잠깐확인)
vim hello.html (만든거)

Hello~~~~

===================================================

<default.conf>
sudo vim /etc/nginx/conf.d/default.conf

server {
listen 80;
server_name localhost;

#access_log  /var/log/nginx/host.access.log  main;

location / {
    root   /usr/share/nginx/html;			#root의 시작위치
    index  index.html index.htm;			#기본파일 위치
}

#error_page  404              /404.html;	#본인오류

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;	#서버오류
location = /50x.html {
    root   /usr/share/nginx/html;
}

-------------------------아래연관----------------------------

/etc/nginx/nginx.conf : nginx 환경설정

/etc/nginx/conf.d/default.conf : default 환경설정

include /etc/nginx/conf.d/.conf; : default에있는 .conf를 가져와서 실행

#include : 포함시킬 외부파일을 정의한다. mime.types란 파일에 작성되어진 내용들을 현재 파일
로 가져오는 것을 뜻한다.

==============================================================

로드밸런스 ex) 게임에서 업데이트를 해야할때 서버 일부분을 업데이트시키는중
나머지서버에 유저를 몰아넣고 나눠서 업데이트

<Upstream을 이용한 로드 밸런싱 중 라운드로빈 기법> : 한번씩 나눠서 트래픽을 보냄

■ Round Robin (라운드 로빈)
서버의 가중치를 고려해, 실제 서버들을 처음부터 차례로 선택해 가며 모든 서버로 균등하게
분산 됨 (default)
-장점 : 거의 균등하게 분산 가능
-단점 : 경로가 보장 되지 않음

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

upstream web {
    server 192.168.100.101:80;
    server 192.168.100.102:80;

}

server  {

    location / {
            root html;
            index index.html;
            proxy_pass http://web;
    }
}

==============================================================

■ ip_hash
Hasing key 를 사용하여 IP 별로 Index 를 생성하여 경로를 지정
요청이 전송되는 서버는 클라이언트 IP 주소에서 결정됨
IPv4 주소의 처음 세개의 octets 또는 전체 IPv6 주소가 해시 값을 계산하는 데 사용됨
-장점 : 경로 보장 가능
-단점 : 균등한 분산이 어려움

/etc/nginx/nginx.conf => vim nginx.conf에서 server위에 ip_hash; 쓰면 됨
새로고침해도 마지막 열었던 IP만 열림

===============================================================

<Nginx를 이용한 HTTP 부하분산> : 1번 2~3번으로 나눠서 트래픽을 보냄
-가중 라운드로빈 방식

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

upstream web {
    server 192.168.100.101:80 weight=1;
    server 192.168.100.102:80 weight=2;
    server 192.168.100.103:80 backup;     #103서버가없어서 참고용
}

server  {
    listen 80;
    server_name www.ryu.com;

    location / {
            root html;
            index index.html;
            proxy_pass http://web;
    }
}

==================================================================

Proxy Server

클라이언트측

프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게
해주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 서버와 클라이언트 사이에 중계기로서 대리로
통신을 수행하는 것을 가리켜 '프록시', 그 중계 기능을 하는것을 프록시 서버라고 부른다.

캐싱 : 클라이언트가 요청한 내용을 캐싱해 두어 여러가지 부가적인 효과를 나타내게 한다.

익명성 : 클라이언트측에서 서버에 포워드 프록시를 거치면 서버는 프록시가 요청을 보낸것으로 인식

Reverse Proxy

서버측

캐싱 : 포워드 프록시와 동일

보안 : 서버의 정보를 클라이언트로부터 숨길 수 있다

====================================================================

■ 대칭키

암호화, 복호화 할 때 사용하는 키가 동일한 경우, 1개의 키 사용
어떤 키로 암호화 했다면, 수신자도 같은 키가 있어야 복호화 가능
말 그대로 대칭시켜 봐서 맞을 시 자물쇠가 열리는 개념

■ 비대칭키

암호화 할 때 사용하는 키와 복호화할 때 사용하는 키가 다른 경우
2개의 키를 사용하며, 비밀키(개인키)와 비밀키를 토대로 만든 공개키가 쌍을 이룬 형태
공개키(Public key): 사람들에게 공개된 키, 정보를 암호화 가능
비밀키(Private key): 사용자만 알고 있는 암호를 풀 수 있는 키

====================================================================

cd ~/.ssh

[공개키 참조사이트]
https://velog.io/@lehdqlsl/SSH-%EA%B3%B5%EA%B0%9C%ED%82%A4-%EC%95%94%ED%98%B8%ED%99%94-%EB%B0%A9%EC%8B%9D-%EC%A0%91%EC%86%8D-%EC%9B%90%EB%A6%AC-i7rrv4de

[putty ssh 키 생성 검색][client로 dns 원격 접속하기]

dns 에서 netstat -ant 로 확인

[centos@dns~] mkdir .ssh
[centos@dns~] cd .ssh
chmod 700 .ssh
[centos@dns~] vim authorized_keys

puttygen 들어가서 비밀키 생성한뒤에 비밀키 복사

vim /etc/ssh/sshd_config

38번째줄에있는 Permitroot 주석제거하면 root접속 허용하게할수있음

sudo systemctl restart sshd

putty 가서
connection -> ssh -> auth

client key 삽입

data -> username : centos

다시 dns가서 vim /etc/ssh/sshd_config 들어가서
65번째줄에있는 passwordauthentication yes 이부분 주석처리제거하면
패스워드 안치고 들어갈수있음

DNS - 공개키 : ~/.ssh/authorized_keys
ubuntu 공개키 : ~/.ssh/ubuntu_key.pub

win(Putty) - 개인키 : client-key.ppk
ubuntu 개인키 : ubuntu_key

==================================================

[client 키 생성해서 원격접속하기]

ssh-keygen -t rsa #현재 폴더에 개인키 공개키 만드는 명령어

ssh-copy-id centos@192.168.100.10

dns로가서 ls로 authorized_keys 확인하고

rm -rf authorized_keys 지웠다가 다시 client로가서 카피한뒤에

dns에서 ll쳐서 authorized_keys확인

dns에서는 cat authorized_keys

client에서는 cat id_rsa.pub

dns에서 ssh-keygen -t rsa : 파일만들어주고 개인키를 client에 전달

client에서 vim dns-key만들고 dns가서 cat id_rsa 치고 나온값복사해서
client에 vim dns-key 붙혀넣고 저장하고나와서 ll확인
client에서 ssh -i dns-key centos@192.168.100.10치면
dns로 원격접속하는데 패스워드 없어져야됨

========================================

[수정]
client에서 ~/.ssh 상태에서 ls해보면 dns-key id_rsa.pub known_hosts 삭제
dns에서 ll -al 해보면 .ssh 나오는거 삭제

=======================================

client에서 ssh-keygen -t rsa 만들고 ll
ssh-copy-id centos@192.168.100.10 // figer나오면 yes하고 password입력

==========================================

known_hosts : 서버와 클라이언트간 메시지 암호화
authorized_keys : 공개키

서버 : DNS

[클라이언트]

Ubuntu : ssh-keygen -t rsa -> ~/.ssh/id_rsa, id_rsa.pub(개인키,공개키)
ssh-copy-id centos@192.168.100.10 : id_rsa.pub => DNS의 ~/.ssh/authorized_keys로 복사

Win10(Putty) : Puttygen => Generate => private_key 저장 => Key 복사해서 DNS의
~/.ssh/authorized_keys로 복사

서버에서 키만들고 폴더이름을 다르게 저장할때는
client에서 키만들고 dns에서 따로 키만들고
dns 키설정 복사해서 client파일따로만들어서 복사저장

profile
클라우드 엔지니어가 되고싶은 클린이

0개의 댓글