서버 성능 테스트..

kim109의 이미지

안녕하세요!

서버 증설 시점에 대한 고민이 있습니다.

동시접속자 수 체크는 어떻게 하나요?

그리고 Mysql의 부하 테스트는 어떻게하나요?

물론 상황상황 마다 하드웨어의 사양에 따라 다르겠지만,

벤치마킹하는 프로그램 같은건 없는지요..

참고로 지금 운영하는 서버가

CPU : 펜4 3.4G (듀얼은 아닌데 HT로 2개로 인식)
MEM : 512MB
HDD : SCSI 80G 이렇습니다.

SQL 질의 통계를 보니까 초당 0.74번의 퀴리가 왔군요!

좋은 연말보내세요~~~

김정균의 이미지

kim109 wrote:
안녕하세요!

서버 증설 시점에 대한 고민이 있습니다.

동시접속자 수 체크는 어떻게 하나요?

웹에서의 동시 접속자는 의미가 없습니다. 서비스에서의 동시 접속자는 로그인 해 있는 사람이 얼마냐는 관점에서 성립될지 모르지만, 서버 입장에서는 웹의 특성상 세션이 바로 끊어지는 관계로 동시 라는 말은 성립이 되지 않습니다. 그냥 초당 몇개의 query 를 처리할 수 있느냐로 귀결이 되며, 이는 web application 의 알고리즘에 따라 동일한 사양, 동일한 수의 query 에 엄청난 영향을 미칩니다.

kim109 wrote:

그리고 Mysql의 부하 테스트는 어떻게하나요?
물론 상황상황 마다 하드웨어의 사양에 따라 다르겠지만,
벤치마킹하는 프로그램 같은건 없는지요..
참고로 지금 운영하는 서버가

CPU : 펜4 3.4G (듀얼은 아닌데 HT로 2개로 인식)
MEM : 512MB
HDD : SCSI 80G 이렇습니다.

SQL 질의 통계를 보니까 초당 0.74번의 퀴리가 왔군요!
좋은 연말보내세요~~~

일단, web 과 db 를 동일 machine 에서 운영할 경우, 서로 resource 를 나눠 쓰기 때문에 처리하기가 쉽지 않습니다. 분리를 해 보신 후에, 님의 서비스가 어느정도인지를 파악하시는 것이 낳을 겁니다.

보통 서비스는 서버가 swap 을 사용하는가 하지 않는가 시점을 잘 보시면 되며, top 에서 cpu 사용량을 보시면 됩니다. cpu 사용량이 50 ~ 60% 정도면 더 버티셔도 괜찮을 듯 싶습니다. (swap 사용 여부와 cpu 사용량은 or 연산으로 보셔야 합니다.)

kim109의 이미지

답변 감사합니다. ㅎㅎ

아직 Web과 DB가 같은 머신에 있습니다.

Cpu(s):  0.2% us,  0.0% sy,  0.0% ni, 99.8% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:    514020k total,   265120k used,   248900k free,    26720k buffers
Swap:  1052248k total,      160k used,  1052088k free,   102760k cached

Top 연산 결과 위와 같이 나옵니다. 아직 여유가 많은 걸로 봐도 되겠군요.ㅎ

이번에 회사에서 유해사이트 차단하는 프로그램을 기획중입니다.

저희가 망사업자가 아니기에 클라이언트 프로그램을 설치하고
유해사이트 리스트 DB서버에 그 클라이언트 프로그램이 쿼리하는
방안을 생각중입니다.

그래서 퀴리가 비번하게 들어올 경우를 대비해서 질문 드린겁니다.

그리고 서버가 죽으면 곤란하니까 자동 복구 이중화 같은거 알아보고 있는데,
Mysql에 Cluster 기능이 있더군요.. 한번 테스트 해볼려고 생각중입니다.

Mysql Cluster 구축해보신분 계시면 경험담 듣어 보고 싶네요~

좋은 연말~~~ 보내세요! 솔로 만세~

아싸~ 오늘도 화이팅!

문태준의 이미지

여기는 참고자료
http://tunelinux.pe.kr/wikix/index.php?display=%BD%C3%BD%BA%C5%DB%C0%CF%B9%DD

* http://www.javaservice.net/
* http://www.javaservice.net/~java/bbs/read.cgi?m=appserver&b=was&c=r_p&n=985764595 Performance Tuning QuickGuide for BenchmarkTest
* http://www.javaservice.net/~java/bbs/read.cgi?m=resource&b=consult&c=r_p&n=1008701211 웹기반시스템하에서의 성능에 관한 이론적 고찰
* http://www.javaservice.net/~java/bbs/index.cgi?m=resource&b=consult 프로젝트 실무 컨설팅

위 사이트는 주로 자바 및 WAS와 관련된 정보를 다루는 사이트입니다. 벤치마킹 관련하여 자료를 찾으면서 많이 참고를 하였습니다. 가장 큰 장점이라고 하면 실제 현업에서 부딪치는 상황에 대하여 상세한 자료와 설명이 있다는 것입니다. 웹서비스를 준비할 경우 현재 어떻게 사이징을 하며 또 부하가 늘어나는 것에 대비를 하나요? 보통 동시사용자가 몇명이다라고 말하지만 인터넷 환경에서 동시사용자를 산정하는 것 자체가 쉽지 않은 일입니다. 튜닝을 할 경우에도 무엇을 가지고 튜닝을 할 것입니까. 단지 순간적인 동시접속자만 많아지면 좋을까요? 아니면 처리시간이 빠르면 될까요? 한가지는 동시접속(물론 이에 대해서도 좀더 깊숙히 고민을 해보아야 할 것입니다)에 따라 얼마나 많은 요청사항을 처리하는지, 그리고 동시접속이 늘어남에 따라 응답시간이 어떻게 변화하는지에 대해서 조사를 해야 할 것입니다. 예를 들어 동시접속이 적을때는 뛰어난 퍼포먼스를 내다가 사용자가 늘어나면 퍼포먼스가 떨어지는 것보다는 사용자가 늘어나더라도 지속적으로 성능을 내는 것이 더 중요할 것입니다.

다양한 정보들이 있으며 비록 WAS가 아니라고 하더라도 서비스를 운영하는데 많은 참고가 될 것입니다.

======================================
위는 제가 전에 제홈피에 써놓았던 자료이구요.

우리서버의 동시접속자는 얼마나 되냐는 질문들 정말 많습니다. 근데 알고보면 이게 참 애매모호한 질문입니다. 프로그램이 잘되었던 서버가 엄청나게 빵빵하든 처리속도가 빠르면 오히려 동시접속자수는 줄어듭니다.

적절한 벤치마킹을 통하여 동시접속자수에 따라 처리량과 응답시간을 측정해야 합니다. 일반적인 벤치마킹 프로그램들이 다 이것을 테스팅합니다. 여기서 나오는 결과를 가지고 무엇을 튜닝할 것인지 결정해야 합니다. 이 두가지 그래프를 그리면 동시접속이 어느정도 늘어났을때 성능이 급격히 저하하는지가 나옵니다. 이 지점이 튜닝지점이지요.

위에서 OS쪽의 상태를 보고 튜닝하는것은 기본 튜닝을 한 결과를 가지고 참조할때 쓰는 것이지 처음부터 그걸 보는것은 아니라 생각합니다. 물론 일반적으로는 DB연결하는 애플리케이션에 문제가 많은 경우가 대부분이긴 합니다만. 잘못된 sql이나 너무 지나치게 실행되는 프로그램때문에 문제가 생기는 경우가 허다하지요.

튜닝관련한 툴은 아래 자료에서 참고하시면 됩니다. (위 url에서도 소개하고 있음)
http://people.redhat.com/mbehm/RHEL_Tuning_Guide.pdf

apache에 기본 들어있는 ab부터 상용툴까지 다양하지요. 제 생각엔 계속 웹서비스를 하는 곳이라면 상용툴을 하나 구매하는것도 괜찮지 않을까 생각합니다. 여러가지 처리가 편해서요. 어떤 툴이 좋다고 말을 하지는 못하겠지만.

ㅇ 다시 재정리 :
벤치마킹 작업을 진행한다
-> 나오는 결과를 가지고 db, os 자원등을 점검한다
-> 세팅값을 한번에 하나씩만 변경하고 다시 벤치마킹을 진행한다.

이렇게 하여 동시접속이 늘어나도 더 많은 처리량과 일정한 응답시간을 보장할 수 있도록 바꾸어나가시면 됩니다.

---------------------------
문태준
http://groups.google.co.kr/group/sysadminstudy 시스템어드민 공부모임
http://tunelinux.pe.kr
http://database.sarang.net

문태준의 이미지

kim109 wrote:

그리고 서버가 죽으면 곤란하니까 자동 복구 이중화 같은거 알아보고 있는데,
Mysql에 Cluster 기능이 있더군요.. 한번 테스트 해볼려고 생각중입니다.

Mysql Cluster 구축해보신분 계시면 경험담 듣어 보고 싶네요~

좋은 연말~~~ 보내세요! 솔로 만세~

Mysql 자체적으로 replication을 지원하는데 이것은 master에서 받아서 slave(여러개 구성가능)로 로그를 보내 읽기서버로 구성하는 방식입니다. 이건 ha는 아니죠.

일반적으로 ha구성을 하려면 san storage 를 이용하여 데이타를 공유하고 여기에 cluster 프로그램을 하나 이용하면 됩니다. active/standby 구성으로 하여 평상시에는 active에서 스토리지를 잡고 있다가 active에 문제가 생기면 standby로 넘어가는 방식입니다. 이런 툴은 redhat cluster suite 등 여러가지가 있습니다. 갑자기 다른 이름이 기억나지 않는군요.

---------------------------
문태준
http://groups.google.co.kr/group/sysadminstudy 시스템어드민 공부모임
http://tunelinux.pe.kr
http://database.sarang.net

kim109의 이미지

좋은 자료 감사합니다.. 많은 참고가 되겠네요..

그런데 Mysql Cluster가 단순 Replication 이라는 말씀이신지요?

http://dev.mysql.com/doc/refman/5.0/en/ndbcluster.html

여기에 메뉴얼을 한번 쭉 읽어 봤는데,

Data Node와 SQL Node그리고 MGM Node의 구성으로

쿼리는 SQL Node가 받고 Data Node에서 데이타를 가지고 오며

Data Node 들은 서로 공유하지 않는 단독 구조로

1대가 죽어도 다른한대가 대신 Data를 전달하는 방식으로 이해 했습니다.

Mysql 메뉴얼에서 주장하는 바로는 99.999%의 가동율을 자랑하더군요..

Replication과는 다른건 같다는 생각을 했었는데, 제가 틀린건가요? ㅎㅎ

현재시스템에도 Replication은 적용해서 밀러링은 하고 있습니다.

무지한 저에게 가르침을~~~ 감사~ 꾸벅~

아싸~ 오늘도 화이팅!

문태준의 이미지

제가 막상 mysql 클러스터에 대해서는 한마디도 하지 않았네요. 저도 이에 대해서는 잘 모르지만 위의 올려주신 그림을 보니 이해가 가는군요.

당연히 리플리케이션과는 틀리는데 여러개의 활성화된 노드가 있는 경우이니 GFS같은 공유파일시스템을 사용하는군요. oracle rac같은 경우도 이러한 형식으로 구성을 합니다. 그렇지만 특정 시점에 특정 데이타에 대해서는 하나만 접근을 해야 하기 때문에 공유파일시스템을 이용하여 데이타에 대한 락을 처리해주는 것이지요.

그런데 저런 구성을 하면 국내에 지원하는 업체가 있나요? 무엇보다 이것이 가장 중요할 것인데요? 직접 알아서 구현을 해야하나?

이것을 구현하는데 있어서 특정한 장비등이 필요한지도 확인을 해 보아야겠네요. 예를 들어 앞에서 말을 한대로 SAN같은 것이 필요한지. 어떤 식으로든 nbd cluster가 돌아가려면 데이타를 공유해야할 건데요. 데이타는 스토리지에 저장이 되지만 nbd cluster를 이용하여 개별 서버에서 데이타를 공유하는 것이겠지요.

---------------------------
문태준
http://groups.google.co.kr/group/sysadminstudy 시스템어드민 공부모임
http://tunelinux.pe.kr
http://database.sarang.net

wertyu의 이미지

taejun wrote:

이것을 구현하는데 있어서 특정한 장비등이 필요한지도 확인을 해 보아야겠네요. 예를 들어 앞에서 말을 한대로 SAN같은 것이 필요한지. 어떤 식으로든 nbd cluster가 돌아가려면 데이타를 공유해야할 건데요. 데이타는 스토리지에 저장이 되지만 nbd cluster를 이용하여 개별 서버에서 데이타를 공유하는 것이겠지요.

태준형을 여기서도 뵙다니 반갑습니다.

저도 MySQL Cluster 환경을 직접 구축해 보진 않았지만, MySQL AB 사에서 MySQL Cluster와 Oracle RAC와 비교하길 MySQL Cluster는 Oracle RAC와 다르게 "Shared Nothing"인 것을 장점으로 말합니다. (Oracle에서는 "Shared everything"(맞던가)이 Share nothing보다 좋다고 말을 하더군요)

MySQL Cluster를 구축하는데 특별한 H/W 적 환경은 필요없고, MySQL Cluster management process가 알아서 동기화를 해줍니다. 공유 파일시스템을 쓰지는 않습니다.

MySQL Cluster 부분은 database.sarang.net의 장홍창님이 많은 테스트를 해 보셨으니 그 쪽 게시판에 질문을 올리시면 좋을 것입니다.

또한 원래 질문 하신 분께서 성능 테스트에 대한 말씀을 하셨는데, 웹 환경을 떠나 성능 테스트는 태준님께서 말씀하신 것처럼 쉽게 이야기할 수 있는 분야가 아닙니다.

http://www.mysqlguru.com/tt/index.php?pl=13&ct1=3

여기에 웹 환경에서 용량 산정(Capacity planning)에 관한 책을 한권 소개해 두었습니다. 여유가 되신다면 구매하셔서 읽어 보시구요.

간단히 설명 드리자면 성능 테스트를 위해서는 Workload Model을 만드셔야 하구요. 웹 환경에서 Workload를 어떻게 Model화 해야할지가 문제인데, CBMG(Customer Behavior Model Graph)가 웹 환경에서 Workload를 Model화하는데 좋은 방법이라 생각됩니다.
(제가 석사 졸업 논문으로 CBMG에 대한 논문을 쓰긴 했는데 요즘 유행하는 말로 "인위적 실수"가 있기 때문에 공개하긴 힘들겠군요 ㅎㅎ;)

이런 내용들이 성능 공학에 나오는 내용들인데 쉽지많은 않은 내용들이라 관련 서적을 참고하시라는 말씀 밖에 못 드리겠네요.

기초적인 것들은 태준님께서 올려주신 링크에 있는 내용만으로도 충분하다고 생각됩니다. 저도 초기에 많은 도움을 받았던 글이구요.

문태준의 이미지

Shared Everything과 Shared Nothing은 HA 클러스터의 디스크 모델을 어떤 식으로 구생했느냐를 말합니다.

Shared Everything은 두 노드가 같은 디스크를 공유해서 쓰는 방식으로 여기서는 외부 소프트웨어가 한번에 하나의 노드만 접근할 수 있도록 제어합니다.

Shared Nothing 은 가장 많이 사용되는 모델로 하나의 하드웨어 리소스는 하나의 노드에서만 사용할 수 있습니다. 클러스터 소프트웨어에서 한 노드에서 쟁애발생시 다른 노드로 넘겨주는 역할만 하면 되는 구조이지요.

Oracle RAC는 클러스터링 파일시스템을 이용하여 여러개의 노드에서 데이타에 접근할 수 있도록 해주고 일반적인 클러스터링 파일시스템도 이런 역할을 합니다.

그런데 위의 mysql 클러스터는 이러한 구조가 아니라 다르게 구현을 하나보네요? 저도 간단하게 매뉴얼만 보았는데 잘 모르겠군요. ndb 클러스터가 여기서는 중요한 역할을 하나보군요. 음. 잠시 dsn검색해보았지만 여기에도 이에 대해서는 자세히 정보가 없는듯.

음. 이에 대해서는 궁금해하시는 분이 좀더 알아보시고 나중에 자료를 올려주시면 다른 사람들에게 좋은 정보가 되겠네요.

---------------------------
문태준
http://groups.google.co.kr/group/sysadminstudy 시스템어드민 공부모임
http://tunelinux.pe.kr
http://database.sarang.net

정태영의 이미지

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

supply의 이미지

mysql 클러스터는 메모리에 데이터베이스를 저장하기 때문에 디스크 요구량은 적은 반면 메모리 요구량은 매우 높습니다..

mysql 클러스터 faq를 보시면,

Q: What are the minimum system requirements for MySQL Cluster?
A: You can run the whole cluster on a single computer:
OS: Linux (RedHat, SUSE), Solaris, AIX, HP-UX, Mac OS X
CPU: Intel/AMD x86
Memory: 512MB RAM
HDD: 3GB
Network: 1+ nodes (Standard Ethernet - TCP/IP)

Q: What are the preferred system requirements for MySQL Cluster?
A: Each Cluster Node:
OS: Linux (RedHat, SUSE), Solaris, AIX, HP-UX, Mac OS X
CPU: 2x Intel Xeon, Intel Itanium, AMD Opteron, Sun SPARC, IBM PowerPC
Memory: 16GB RAM
HDD: 4x 36GB SCSI (RAID 1 Controller)
Network: 1-8 Nodes (Gigabit Ethernet); 8+ Nodes (Dedicated Cluster Interconnect e.g. SCI)

클러스터 노드당 16GB의 메모리를 권장합니다..

더불어 노드가 몇개가 되었든 데이터베이스의 용량이 1노드의 메모리 용량을 넘을 수 없습니다..

즉 위와 똑같은 시스템으로 8노드를 구성해도 전체 데이터베이스 용량은 16GB를 넘을 수 없죠..

대신 데이터베이스 처리 속도는 엄청나겠지만요..

물론 데이터베이스 용량이 1GB 미만이라면 노드당 2GB면 충분하겠습니다..

저는 16GB 서버 견적을 내보고 포기했던 기억이 납니다..

kim109의 이미지

데이타 노드들은 메모리 방식인건 알고있었고

최소사양 FAQ는 봤었는데, 추천사양 FAQ는 못 봤군요..

이런 16G라니... 좌절....

어렵겠네요.. 지금 테스트로 구축해볼 컴퓨터 4대도 못구하고 있는 마당에.. ㅎ

아싸~ 오늘도 화이팅!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.