요약
- soc
본문
-
TCP 포트 field는 2x bytes 크기를 갖고 65536까지 가질 수 있음
-
이건 서버가 핸들링할 수 있는 최대 주소수임
-
64k까지는 제한되지 않음
-
각 TCP 패킷은 2개의 port field를 갖는데 하나는 destination, 하나는 source를 위한 port임
-
커널 옵션에는 socket 관련된 파라미터들을 fine tuning할 수 있는 옵션들이 있음
-
etc/security/limits.conf
- soft/hard nofile 설정
- soft는 지금 실제로 적용되는 기본값
- hard는 soft가 올라갈 수 있는 상한값
- ulimit -n 으로 설정하면 안되는 이유
- 셀 세션 단위 설정이기 때문에 로그아웃하거나 systemd로 실행되면 적용이 안됨
- soft/hard nofile 설정
-
/etc/sysctl.conf
- fs.file-max: 최대 파일 디스크립터 제한, 기본값이 꽤 낮기때문에 조절 되어야함
- net.ipv4.tcp_rmem, net.ipv4.tcp_wmem
- write, read 버퍼 크기임
- min, default, max를 설정할 수 있음
- sysctl -p 명령어를 이용해 확인 가능함
-
로드밸런서로는 HAProxy를 사용하는데 최신 Apache 2를 ws_tunnel module을 로드 밸런싱을 위해 사용
- HAProxy processors가 열 수 있는 파일수를 최대로 올리기 위해 /etc/systemd/system/multi-user.target.wants/haproxy.service 에서 LimitNoFile 100000 또는 무한으로 설정 했음
-
포트 고갈 문제(port exhaustion problem)
- 네트워크를 경유하는 다른 머신들 사이의 커뮤니케이션을 실패한게 하는 TCP Port 고갈 문제를 해결하기 위해. multiple virtual network interfaces 을 사용함
sudo ifconfig ens3:1 10.0.11.32 netmask 255.255.255.0 up
- 이 명령어는 인터넷 주소를 가상 네트워크 인터페이스 ens3:1에 bound 한는 명령어
- HAProxy가 이 새로운 ip들을 사용할 수 있겠금 config 가 필요함
참고
https://medium.com/@elliekang/scaling-to-a-millions-websocket-concurrent-connections-at-spoon-radio-bbadd6ec1901 https://github.com/edwardyoon/Heimdallr