Postgres의 Pooling 미들웨어로 pgpool2를 사용하고 있었는데 설정이 문제였

 
최상호

Postgres의 Pooling 미들웨어로 pgpool2를 사용하고 있었는데 설정이 문제였는지는 모르겠지만 종종 “DatabaseError: connection terminated due to client idle limit reached” 문제가 발생했습니다. 해결책을 찾다보니 좋은 포스팅을 찾았네요. 결론은, Pgbouncer로 옮겨탔습니다. 저희 서비스가 단시간에 쓰기가 많다보니 아무래도 제대로 튜닝을 하기가 쉽지 않네요 ㅎㅎ

근데 가만보면, 여러가지 문제의 해결책을 찾다가 선택한 솔루션을 보면 가능한 부분에서는 대부분 non-blocking single-thread 더군요…. 사실 제대로 알지 못하고 사용하고 있는데 좀 더 파볼 필요가 있을 것 같습니다… node.js도 그렇고…..

  • Sukchen Kang

    pooling 미들웨어(pgpool, pgbouncer)의 경우 미들웨어들이 해당 DB에 대한 커넥션들을 관리하는지라 커넥션 수 제한을 미들웨어에서 설정하게 됩니다. pgbouncer 도 default_pool_size 등의 설정변수가 있고 이보다 커넥션 수가 많을 경우 접속이 되지 않습니다.

    최상호

    설정을 이리저리 바꿔봐도 잘 안되더라구요;; idle in transaction 문제가 계속 발생했는데 아무래도 커넥션이 바로바로 끊기지 않아서 그런가도 싶구요. pgbouncer는 non-blocking 방식이고 transaction 기반으로 pooling 하도록 하니 연결도 바로바로 끊겨서 커넥션도 보장되고 좋은 것 같아요….

    Sukchen Kang

    근데 커넥션 풀 미들웨어를 쓰는 이유가 접속 유지를 통한 퍼포먼스 향상도 있어서요 (커넥션 비용 감소, 상황에 따라 런타임 튜닝들) 근데 저도 결론적으로 pgbouncer를 쓰긴 합니다.(다른것보다, pgpool보다 관리하기 간편하고, 버그도 더 적어서요. pgpool은 과거 버전엔 메모리 릭 문제가 있었고, 최근 버전도 설정 reload시 부모프로세스가 죽고 자식 프로세스 좀비되는 현상이 있는 등 불안) 다만 pgbouncer 도 파라메터들을 적절히 맞춰주지 않으면 커넥션 풀 미들웨어 특성 상 생기는 문제들이 발생합니다.

    최상호

    Sukchen Kang 아… 접속 유지를 통한 퍼포먼스 향상도 고려를 해야겠군요.. DB쪽은 많이 부족해서 더 열심히 공부해야겠네요.. 튜닝은 경험의 산물인데 경험이 부족하니 경험도 더 쌓구요! 감사합니다 ^^

DJango개발 하실때 Modeling은 어떻게 진행하시나요 ? 모델링 툴을 사용하신다면

 
I-chul Lee

DJango개발 하실때 Modeling은 어떻게 진행하시나요 ?
모델링 툴을 사용하신다면 어떤것이 좋은지 추천 부탁 드립니다

안녕하세요. 가입하고 덧글만 썼지 글을 쓰는건 처음인 것 같습니다. 조언을 좀 구하고자 이

 
Taeyoung Jang

안녕하세요. 가입하고 덧글만 썼지 글을 쓰는건 처음인 것 같습니다. 조언을 좀 구하고자 이렇게 글을 씁니다!
이번에 Django를 이용한 서비스 하나를 오픈하게 되었습니다. 사실 Django를 오래 공부한 것은 아닌데, 박현우님 회사에서 한 Django 초보자용 세미나를 참가해서 처음 접했는데, 쉬운게 협업하는 사람들에게 알려주기 편하겠다. 라고 생각해서 해봤습니다. 이 자리를 빌어 다시한번 감사드립니다 (__)

지금 현재 EC2 도쿄 서버쪽을 테스트용으로 이용중인데, 국내 수요가 문제가 될 것 같습니다. 일단 서비스 자체는 4~5MB의 이미지를 대량으로 제공을 하는 일이 생길 것 같습니다. 사용자가 SVG를 통해서 그림을 꽤나 크게(3000×3000 정도의 사이즈)생성하기도 하고 해서 CPU도 제법 잡아먹는 편이고, 트래픽도 엄청날 것 같습니다.

사실 제가 웹서비스는 자체IDC를 갖고 있는 대기업용이나, 아니면 내부망용으로 밖에 제작해본 경험밖에 없어서, 국내에서 어떤 호스팅 서비스를 이용해야할지, 어떻게 셋팅해야할지 참 걱정됩니다. 전에 다니던 게임 회사에서는 스마일서브라는 호스팅을 썼었는데, 하루 트래픽 50G 정도였어서 아무 신경을 안쓰다가, 새 서비스는 트래픽을 많이 먹을 것 같아서 걱정입니다.
게다가 결제가 참 머리를 아프게 해서, 내부에 PHP를 따로 돌려서 결제 모듈을 띄워야할지도 걱정이되지만 .. ㅜㅜ

일단 제 EC2 서버 테스트 환경은 이렇습니다.
OS: Ubuntu 12.04 LTS Server
웹서버: Apache2, Django 1.4.1, Python 2.7
DB서버: mySQL 5.5

입니다. 정식 서비스를 하게 되면, 서버를 옮겨야 될 것 같고.. 곧 베타서비스도 시작할 것 같은데 어디다 어떻게 서버를 구축해야할지 참 고민입니다. 실 서버는 Ngnix랑 Gunicorn을 이용해서 Django와 연동해볼 예정입니다.

추천해주실만한 국내 호스팅업체가 있으신가요? EC2를 개인적으로 정말 좋아하는데, 제가 프로젝트에서 곧 손을 뗄 예정인데 다른 사람들은 EC2 인스턴스도 생성할 줄 몰라서 좀 꺼려집니다..ㅜㅜ

  • JuHong Jeong

    댓글이…. Window Azure 보셨어요?

    Taeho Kim

    AWS 도쿄 리전 – 한국 사이 회선 상황은 갈수록 나아지고 있는 것 같긴 합니다. 게임처럼 작은 데이터가 자주 왔다갔다해야 하는 상황이 아닌 듯 한데 레이턴시는 크게 문제가 안되지 않을까요?

    박영록

    저는 채팅 서비스를 AWS 도쿄로 쓰고 있는데, 레이턴시 문제는 거의 없더군요. 괜찮을 듯. 그리고 곧 한국 리전도 오픈할 듯 합니다. 근데 서버 세팅할 사람이 없다면 그냥 webfaction 쓰는 것도 괜찮은 듯.

간단하게 IT/게임동아 서버세팅 상태를 공유해봅니다. 참고로 저는 리눅스를 레바님한테 개

 
Jung Kyoung Up

간단하게 IT/게임동아 서버세팅 상태를 공유해봅니다.

참고로 저는 리눅스를 레바님한테 개인 강의 살짝 듣고 회사 서비스 운영하느니라 끄적거린지 2년이 정도밖에 안되었습니다. 리눅스랑 관련 없는 삶을 살다가 Django를 서비스하겠다는 일념하에 찾고 찾고 찾아서 세팅한겁니다. ㅠㅠ 우분투는 쉬웠는데, CentOS는… 으아아… 어쨌든 적어봅니다.

회사 사정으로 호스트웨이 클라우드 서비스 사용중입니다.
OS : CentOS 5.8
웹서버 : Nginx(80, 443), Gunicorn(8000), Django 1.4.1, Python 2.7
DB서버 : Mysql 5.5
파일서버 : Nginx (웹서버 – 파일서버 nfs 공유 폴더 사용)
관리서버 : Nginx, phpmyadmin, Munin-server

아파치를 아에 안쓰고 Nginx로 대동단결 해놨습니다.

아파치 쓰다가 prefork 방식으로 메모리 먹는게 너무 싫어서 worker 방식으로 바꾸고 삽질을 해봤으나 mod_wsgi보다 Gunicorn이 훨씬 좋다는 말에(특히 인스타그램이 쓴다는 말에 혹해서) 옮겨탔습니다. 게다가 Nginx 서버 세팅이 개인적으로 아파치보다 직관적이고 쉽다고 생각합니다.

Gunicorn용 Start-stop-daemon init.d script를 CentOS에서 돌아가는 버전으로 적당히 구글링한뒤 고쳐서 적용했습니다. 구현된 기능은 start, stop, reload입니다. restart를 안해놨었네요 =_=;;(이거 만들때 이수겸님의 uwsgi 스크립트도 참고해서 보고 그랬습니다.)

Nginx에서 아파치용으로 발급받은 ssl 인증서를 돌리는데 삽질좀 했습니다. 구글신 만세.

예약작업은 crontab으로 해결하고 있습니다.
포인트 리셋(Django command), 세션 정리(manage 기본), DB 최적화(Mysql 기본 기능), 백업파일 업로드 스크립트가 돌아가고 있습니다. 스크립트들은 예전에 레바님이 짜주신것을 바탕으로 근성으로 고쳐쓰고 있습니다.

백업 : DB 덤프가 새벽에 1회 회사 백업 서버로 업로드 됩니다.(리플리케이션 해놔야하는데 다른 개발을 먼저하고 있네요.) 파일은 lsyncd로 사용해 회사 백업 서버로 동기화 중입니다.
문서화 : 서버 세팅 과정을 구글 문서로 코드를 복붙하기 쉽게끔 정리해두고 쓰고 있습니다. 안적어두면 까먹더라고요.

안되는 실력으로 발악을 해놨습니다.(….) 작업하면서 느낀건 전 서버랑 잘 안맞는거 같아요. 뭔가 만지작 거릴때마다 재미보단 스트레스가 앞서네요. 으으…

  • Kwon-Han Bae

    그런건 저에게 외주를..

    Jung Kyoung Up

    배권한 다즐링님은 비싸다는 소문이(….)

    Kwon-Han Bae

    저 쌉니다. ^^ 동접 5만까지는 쉽게 해드려요 ㅋㅋ

    Jung Kyoung Up

    배권한 무려 동접 5만..! 나중에 개인적으로 상담부탁드립니다.

    Kwon-Han Bae

    청구는 어디로..

    Chae Hyo Chul

    gunicorn 이 정말 좋나요? 저희는 mod_uwsgi 로 갈아탈까 생각중이었는데 ㅎㅎ

    Jung Kyoung Up

    Chae Hyo Chul 제가알아봤을때에는 유니콘이 설정이 더 간편하고 빠르다는 이야기를 구글링으로 대강 주워들은게 다입니다. 성능비교자료가 있는건 아니고요 더 쉬워보여서 그냥 썼어요.

    Kyoungchan Lee

    예전에 벤치마크 자료를 찾아본 적이 있었는데, uwsgi가 pure C 로 구현되어서 성능이 더 좋은 건 맞지만 gunicorn도 만만치 않게 성능이 좋더군요. 이 둘은 거의 비슷한 거 같습니다.

    Kyoungchan Lee

    자료의 신뢰도는 보장할 수 없지만, http://www.peterbe.com/plog/fcgi-vs-gunicorn-vs-uwsgi 이 자료를 참고해 보셔도 좋을 것 같습니다. 제가 보았던 자료들은 대체로 이 링크와 비슷한 결과를 보여주었던 것 같습니다.

    Sukchen Kang

    이경찬 그 자료 마지막 부분엔 “Since this was publish we, in my company, have changed all Djangos to run over uWSGI. It’s proven faster than any alternatives and extremely stable.” 이고, 다른 벤치마크 자료도 전반적으로 uWSGI쪽이 높게 나왔던걸로 기억합니다. 저의 경우 gunicorn 의 장점으로 생각하는게 ‘정말정말 세팅이 쉬워서’ 첫 세팅용으로 mod_wsgi 대신 쓰고 있습니다.

    Kenial Lee

    http://nichol.as/benchmark-of-python-web-servers
    이것 좀 시간이 오래 지난 자료라서 큰 도움이 될지는 모르겠습니다만, wsgi 서버에 대해 위 자료보다는 좀 더 다양한 항목을 테스트하고 있습니다. (django를 타겟으로 테스트한 것은 아니고요)