고성능 부하분산
nginx 는 고성능 부하분산 기능을 제공한다.
리버스 프록시 서버라고도 한다.
upstream 블록
그냥 안에 서버 블록 여러개랑 가중치 해서 분산해준다.
stream{
upstream backend{
server 10.10.12.45:80 weight = 1;
server app.example.com:80 weight = 2;
}
server {
location / {
proxy_pass https://backend;
}
}
}
server 블록
listen이랑 root이랑 location 그런거 설정하는 블록
http TCP UDP 에서 차이점
기본 디폴트를 http로 해놔서 upstream 이랑 server 블록만 하면 됨 다른애들은 stream 블록으로 감싸줘야됨
그리고 각각 server 블록 설정이 조금씩 다름 포트가 다르니까 당연한건가
결국 상황에 맞는 부하분산 알고리즘을 채택하는 것이 중요하다.
라운드 로빈 - 디폴트 부하분산 알고리즘임 / 그냥 가중치에 따라 서버로 던짐
리스트 커넥션 - 연결 수가 가장 적은 업스트림 서버로 보냄 가중치는 서버마다 연결되는 수 인듯
제네릭 해시 - 서버의 요청을 해시해서 그 값으로 뭔가 하는 듯하다.
요청을 처리할 서버를 선택할 때 깊게 관여해야할 경우 간단하게 해시해서 사용하면 좋다함
그리고 캐시가 있는 서버를 확률적으로 잘 찾아가게하는 알고리즘이다.
랜덤 - 서버를 가중치에 따라 임의로 선택해서 보냄 / 매개변수로 two [method] 를 사용하면 2차 부하분산이 가능함
IP 해시 - IP 주소를 이용해서 해시하는데 어떻게하는지는 몰라도될듯함, 사용자는 거의 같은 서버만 사용하게됨 IP 해시는 항상 같은 값이라 그런듯
세션 상태과 관리되지 않는 환경이나 세션 상태가 어플리케이션의 공유 메모리를 통해 공유 되지않을 때 좋다. >> 첫 접속은 세션으로 느려도 두 번째 부터는 세션있는 서버로 간다