[ 작업 환경 ]
Centos 7
Flask 1.1
Python 3.8
Naver Cloud Platform 인스턴스 2ea
( 기존 정상 API 1ea & 추가된 장애 발생 원인인 API 1ea )
[ 문제 상황 ]
아래와 같은 로그 발생하면서 API 서버 비정상화
* Serving Flask app "app001" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
Traceback (most recent call last):
File "/flask/flask_server.py", line 16, in <module>
app.run(host="0.0.0.0", port=5000, ssl_context=ssl_context)
File "/root/.pyenv/versions/3.8.2/lib/python3.8/site-packages/flask/app.py", line 990, in run
run_simple(host, port, self, **options)
File "/root/.pyenv/versions/3.8.2/lib/python3.8/site-packages/werkzeug/serving.py", line 1052, in run_simple
inner()
File "/root/.pyenv/versions/3.8.2/lib/python3.8/site-packages/werkzeug/serving.py", line 996, in inner
srv = make_server(
File "/root/.pyenv/versions/3.8.2/lib/python3.8/site-packages/werkzeug/serving.py", line 847, in make_server
return ThreadedWSGIServer(
File "/root/.pyenv/versions/3.8.2/lib/python3.8/site-packages/werkzeug/serving.py", line 740, in __init__
HTTPServer.__init__(self, server_address, handler)
File "/root/.pyenv/versions/3.8.2/lib/python3.8/socketserver.py", line 452, in __init__
self.server_bind()
File "/root/.pyenv/versions/3.8.2/lib/python3.8/http/server.py", line 138, in server_bind
socketserver.TCPServer.server_bind(self)
File "/root/.pyenv/versions/3.8.2/lib/python3.8/socketserver.py", line 466, in server_bind
self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use
[ 문제 원인 ]
이미 사용중인 adress라서 사용 불가능하다는 문구입니다.
필자의 경우, 정상작동하는 API 서버 1ea 에 DNS로 특정 url에 연결한 상태였고, 동일 환경의 다른 API 서버 1ea를 올려 동일한 ssl 인증서를 토대로 API를 작동시켰습니다. DNS는 연결되지 않은 상태로!
하지만 네트워크 상에서의 충돌이 발생하였고 두 API 서버 모두 비정상화되어 마비되는 현상이 발생했습니다.
추가로 증설한 API 서버의 경우 서버 접속 자체가 불가능했으며 콘솔을 붙여서 확인해봤을때에도 이상한 에러 로그와 함께 로그인이 불가능한 상태였습니다. 동시에 정상이었던 기존 API 서버 또한 API 재시작을 해줘도 정상화되지 않았습니다.
해당 서버를 재부팅하더라도 본 문제가 해결되지 않아 아예 강제적으로 shutdown을 했으며, 일정 시간이 지난 후 기존 정상작동하던 API 서버의 Flask를 재시작해주어 정상화 작업을 해주었습니다.
어느정도 시간이 지난 후 다른 API 서버를 부팅해주었더니 정상 로그인/원격접속 가능하였습니다.
>>> 추정으로는, ncloud 자체에서 네트워크상의 요청 처리 과정에서 문제가 발생하여 API 서버가 비정상화된 것 같고, 이후에 동일 환경에서 테스트를 해보니 제가 커스터마이징하여 돌아가던 쉘 스크립트 파일이 접속비정상화된 서버에서 수십/수백개 작동하여 많은 프로세스를 점유하고, 이것이 곧 서버 부하로 이어져 비정상화 된 것으로 보입니다.
!!! 두 가지 장애가 동시에 발생한 것으로 보면 될 것 같습니다. !!!
[ 해결 방법 ]
접속 불가 서버 셧다운 후 대기했다가 다시 부팅해주고
기존 정상이었던 서버는 기다렸다가 다시 서버 정상화해줍니다.
이러한 네트워크상의 오류가 재발생하지 않도록 추가적으로 올린 API 서버에서는 ssl 인증서 컨텐츠를 활용하지 않도록 flask run 옵션 항목에서 해당 ssl_cont 부분 삭제해주었습니다.
'Development > Flask with Python' 카테고리의 다른 글
[Centos7][Flask1.1] 카카오 우편번호 서비스를 통해 주소 검색 기능 추가하기 (0) | 2020.06.02 |
---|---|
[Solved][Flask1.1] TypeError: object of type 'method' has no len() (0) | 2020.05.26 |
[Flask1.1][CORS] Flask CORS 3.0.8 : set header access-control-allow-origin (0) | 2020.03.30 |
[Solved][Python3] timedelta years, months 대안 (0) | 2020.03.29 |
[Flask1.1][openssl] HTTP -> HTTPS 변경 적용 방법 (안전하지 않음으로 이동 편) (0) | 2020.03.18 |