클러스터링을 지원하는 고성능 데이터베이스가 필요합니다.

elfs의 이미지

현재 mysql replication 으로 master-slave1-slave2 로 디비 서비스를 하고 있습니다.

그런데 워낙 사용자가 많고 또 디비쿼리가 엄청나다 보니 데이터가 심할때는 한시간 후에 slave 에 갱신되는 경우고 있고 그러네요.. repli 가 끊어지는 경우도 많습니다.

그래서 아예 클러스터링이 지원되는 디비로 바꿀까 하는데 어떤 것이 가격대 성능비가 좋은지 좀 조언 부탁드립니다. mysql cluster 는 아직 나오려면 한참을 더 기다려야 할것 같고 서비스는 자꾸 문제가 되고 그래서요..

상용 데이터베이스들은 클러스터링까지 지원하게 되면 비용은 대략 어느정도 할까요?

larycho의 이미지

억...
몇 억정도 들죠.
오라클의 경우.....
S/W만 ....

mycluster의 이미지

DB 클러스터링을 할려는 목적이 뭔지요? 그것이 궁금하군요...
1. Parallel DB를 이용해서 2대의 DB서버가 동시에 서비스를 해서 성능을 두배로 올려보겠다...
- 물론 이론적으로는 2대가 Active-Active로 돌고 있으므로 2배가 될 것 같지만... 아마 Query에서는 한 30% 정도 성능업이 될겁니다. 이목적으로 사용할 생각이라면 Oracle RAC(이전의 Enterprise버전) 혹은 IBM DB2를 사용하시면 됩니다.

2. Failover를 위해서 두대의 DB서버가 Active Standby로 돌리고 싶다....
- 아마 이목적이라고 생각이 드는데, 이럴 경우에는 MySQL을 그대로 사용하셔도 됩니다. 제일 저렴한 방법은 공유스토리지(2Channel S-ATA SCSI RAID 혹은 2Channel Fibre Channel Storage)를 달고, Redhat AS안에 들어있는 Cluster 시스템을 사용하시면 됩니다. 물론 돈들이기 싫으면 oss.missioncriticallinux.com 에서 kimberlite 클러스터를 받아서 사용해도 됩니다. Kimberlite클러스터의 상용버전이 Convolo Cluster이고 이게 Redhat안에 들어있는 Redhat Cluster 입니다.
물론 HA의 목적으로 Oracle RAC를 구매하면 Parallel DB용보다는 옵션이 쌉니다. (이전에 Standard 버전으로도 가능했었읍니다.)

Replication해서 현재 사용하는것이 Master와 Slave가 동시에 서비스를 하고 싶으신것인가요? 그럼 1번으로 가는거 이외에는 답 없다고 보이네요...

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

elfs의 이미지

MyCluster wrote:
DB 클러스터링을 할려는 목적이 뭔지요? 그것이 궁금하군요...
1. Parallel DB를 이용해서 2대의 DB서버가 동시에 서비스를 해서 성능을 두배로 올려보겠다...
- 물론 이론적으로는 2대가 Active-Active로 돌고 있으므로 2배가 될 것 같지만... 아마 Query에서는 한 30% 정도 성능업이 될겁니다. 이목적으로 사용할 생각이라면 Oracle RAC(이전의 Enterprise버전) 혹은 IBM DB2를 사용하시면 됩니다.

2. Failover를 위해서 두대의 DB서버가 Active Standby로 돌리고 싶다....
- 아마 이목적이라고 생각이 드는데, 이럴 경우에는 MySQL을 그대로 사용하셔도 됩니다. 제일 저렴한 방법은 공유스토리지(2Channel S-ATA SCSI RAID 혹은 2Channel Fibre Channel Storage)를 달고, Redhat AS안에 들어있는 Cluster 시스템을 사용하시면 됩니다. 물론 돈들이기 싫으면 oss.missioncriticallinux.com 에서 kimberlite 클러스터를 받아서 사용해도 됩니다. Kimberlite클러스터의 상용버전이 Convolo Cluster이고 이게 Redhat안에 들어있는 Redhat Cluster 입니다.
물론 HA의 목적으로 Oracle RAC를 구매하면 Parallel DB용보다는 옵션이 쌉니다. (이전에 Standard 버전으로도 가능했었읍니다.)

Replication해서 현재 사용하는것이 Master와 Slave가 동시에 서비스를 하고 싶으신것인가요? 그럼 1번으로 가는거 이외에는 답 없다고 보이네요...

첫번째 질문답.
한대의 mysql 서버 프로세스가 감당하는 cpu 사용량이 너무 높기 때문입니다.
물론 cpu 10개가 넘어가는 특수장비를 쓴다면 문제가 해결될지 모르지만 비용이 문제가 되기때문입니다.

두번째 질문답.
알려주신 사이트는 db 자체의 공유가 아니라 HA 서비스를 말씀하시는 것인지요? 현재 ipvsadm 으로 이미 패킷요청에 대한 active-active 분산처리는 되어있는 상태입니다.

말씀하시는 공유스토리지의 내용은 즉 mysql 의 데이터파일을 각기 다른 데이터베이스 서버에서 공유하라는 말씀이신가요?

만약 그것이라면 각각의 데이터베이스 서버에서 동시에 파일을 읽고 쓸때 일어나는 문제들은 어찌해결이 되는지요?

mysql 의 데이터베이스 폴더를 NFS 로 read, write 가능하게 마운트 시켰을 경우에 바로 데이터베이스 파일이 깨지더군요..

즉 [db1]-------[nfs]----------[db2]
                |
                |
               [db3]

으로 되어있을경우에 db파일이 양쪽에서 동시에 접근하려 하자 바로 깨져버렸습니다.

mycluster의 이미지

Quote:
말씀하시는 공유스토리지의 내용은 즉 mysql 의 데이터파일을 각기 다른 데이터베이스 서버에서 공유하라는 말씀이신가요?

만약 그것이라면 각각의 데이터베이스 서버에서 동시에 파일을 읽고 쓸때 일어나는 문제들은 어찌해결이 되는지요?

mysql 의 데이터베이스 폴더를 NFS 로 read, write 가능하게 마운트 시켰을 경우에 바로 데이터베이스 파일이 깨지더군요..

코드:
즉 [db1]-------[nfs]----------[db2]
|
|
[db3]

으로 되어있을경우에 db파일이 양쪽에서 동시에 접근하려 하자 바로 깨져버렸습니다.

NFS의 read/write의 문제는 다음링크의 박원규님이 올리신 글을 참조하시면 도움이 될 것 같읍니다.
http://bbs.kldp.org/viewtopic.php?t=40278

현재와 같이 두개의 Active-Active MySQL 서버를 동작시키는데 있어서는 두대의 DB서버에서 발생한 query에 대한 데이타를 공유하는 것이 필요하겠지요.
이를 위해서 제일 좋은 방법으로 생각되는 것이(실제로는 해봐야할 것 같지만...) GFS나 Sanique등 두대의 DB서버가 동시에 Read/Write가 발생할때 데이타를 보존해줄 방법이 필요할 것으로 생각됩니다. 흔히 말하는 SAN 솔루션이 이를 가능하게 해주겠지요. 물론 이를 위해서는 상당한 비용투자가 필요할 것이고, 결국 이게 Oracle RAC가 하는 일과 유사하다고 생각하시면 될 것 같읍니다.
NFS로 사용할 경우에 발생하는 문제도 마찬가지 일것입니다. 박원규님의 글에 두번째 링크가 Oracle RAC에서 공유스토리지를 NFS로 사용할때 발생하는 문제를 해결하기 위한 방법입니다. 통상 DB의 경우 write가 일어나면 메모리에 caching을 하지 않고 바로 스토리지에 write가 기록되도록 raw partition을 사용하는데, NFS의 경우에도 이와같이 cache를 거치지 않고 write하도록 directIO를 적용해야한다고 합니다.
따라서, 제 생각에 MySQL도 마찬가지로 NFS로 물릴려면 두대의 DB에서 발생한 write를 바로 공유스토리지에(NFS던, SAN이던...)에 반영되도록 해야 데이타가 깨지는 문제를 해결할 수 있을 것으로 생각이 듭니다.

DB1----DB2----DB3
|-------------------|
|
공유스토리지

의 형태로 만들고 각각의 DB와 공유스토리지를 SAN으로 구축한 후에 세개의 DB에서 동시에 마운트해서 사용할 수 있는 솔루션으로 Sistina의 GFS, IBM의 GPFS, MacroImpact의 Sanique 등을 설치하면 굳이 MySQL을 걷어내지 않고서도 데이타 공유는 가능할 것이라고 보입니다.

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

ㅡ,.ㅡ;;의 이미지

질문과 관계없는 내용입니다만..

제일저렴한건 프로세스 성능개선입니다.ㅡ,.ㅡ;;
대부분 잘살펴보면 더욱개선할점이있고..
하드웨어적인 투자나 패키지도입보다도 월등히 성능향상 가능성이
있습니다.
DB와 관련되었으면.. 첫째,로직튜닝, 둘째,DB튜닝. 셋째,sql튜닝 을 고려해보세요.(영번째: 정책튜닝 ㅡ,.ㅡ;;)


----------------------------------------------------------------------------

elfs의 이미지

모든 분들 감사드립니다.

같은 파일공유 시스템이라도 그런 부분에 문제를 처리해 주는 다른 것들이 있었군요. 미처 몰랐습니다. my cluster 님 감사드리구요..

그리고 'ㅡ,.ㅡ;;' 님 조언도 고맙습니다만 에지간한 업체에서 튜닝하지 않고 쓰는 업체는 별로 없다고 생각이 듭니다. 제 경우도 상당한 테스트를 거쳐 mysql 의 설정파일을 수정해놓은 상태이고요..하지만 그렇다고 해도 그런것들이 하드의 물리적인 속도나 cpu 클럭수 차이, 메모리 업글등에 비하면 매우매우 조금의 성능향상이 있을 뿐이 아닐까 합니다.

elfs의 이미지

MyCluster wrote:
Quote:
말씀하시는 공유스토리지의 내용은 즉 mysql 의 데이터파일을 각기 다른 데이터베이스 서버에서 공유하라는 말씀이신가요?

만약 그것이라면 각각의 데이터베이스 서버에서 동시에 파일을 읽고 쓸때 일어나는 문제들은 어찌해결이 되는지요?

mysql 의 데이터베이스 폴더를 NFS 로 read, write 가능하게 마운트 시켰을 경우에 바로 데이터베이스 파일이 깨지더군요..

코드:
즉 [db1]-------[nfs]----------[db2]
|
|
[db3]

으로 되어있을경우에 db파일이 양쪽에서 동시에 접근하려 하자 바로 깨져버렸습니다.

NFS의 read/write의 문제는 다음링크의 박원규님이 올리신 글을 참조하시면 도움이 될 것 같읍니다.
http://bbs.kldp.org/viewtopic.php?t=40278

현재와 같이 두개의 Active-Active MySQL 서버를 동작시키는데 있어서는 두대의 DB서버에서 발생한 query에 대한 데이타를 공유하는 것이 필요하겠지요.
이를 위해서 제일 좋은 방법으로 생각되는 것이(실제로는 해봐야할 것 같지만...) GFS나 Sanique등 두대의 DB서버가 동시에 Read/Write가 발생할때 데이타를 보존해줄 방법이 필요할 것으로 생각됩니다. 흔히 말하는 SAN 솔루션이 이를 가능하게 해주겠지요. 물론 이를 위해서는 상당한 비용투자가 필요할 것이고, 결국 이게 Oracle RAC가 하는 일과 유사하다고 생각하시면 될 것 같읍니다.
NFS로 사용할 경우에 발생하는 문제도 마찬가지 일것입니다. 박원규님의 글에 두번째 링크가 Oracle RAC에서 공유스토리지를 NFS로 사용할때 발생하는 문제를 해결하기 위한 방법입니다. 통상 DB의 경우 write가 일어나면 메모리에 caching을 하지 않고 바로 스토리지에 write가 기록되도록 raw partition을 사용하는데, NFS의 경우에도 이와같이 cache를 거치지 않고 write하도록 directIO를 적용해야한다고 합니다.
따라서, 제 생각에 MySQL도 마찬가지로 NFS로 물릴려면 두대의 DB에서 발생한 write를 바로 공유스토리지에(NFS던, SAN이던...)에 반영되도록 해야 데이타가 깨지는 문제를 해결할 수 있을 것으로 생각이 듭니다.

DB1----DB2----DB3
|-------------------|
|
공유스토리지

의 형태로 만들고 각각의 DB와 공유스토리지를 SAN으로 구축한 후에 세개의 DB에서 동시에 마운트해서 사용할 수 있는 솔루션으로 Sistina의 GFS, IBM의 GPFS, MacroImpact의 Sanique 등을 설치하면 굳이 MySQL을 걷어내지 않고서도 데이타 공유는 가능할 것이라고 보입니다.

추가적인 질문입니다.
directIO 는 커널에서 이미 설정되어져 커널컴파일을 한 상태입니다.
바로적용되는것이 아닌가요? 어떠한 설정을 해야 directIO로 nfs 를 사용할 수 있습니까?

mycluster의 이미지

Quote:
To enable uncached I/O, follow this procedure:

Become root
Start your favorite editor on /etc/modules.conf
Add this line anywhere: "options nfs nfs_uncached_io=1"

Uncached I/O will take effect after you reboot your client. Only mount points that use the "noac" mount option will be effected by this change.

NFS클라이언트에서 nfs모듈을 올릴때 위와같이 옵션을 주고, fstab에서 마운트 할때 noac 옵션을 사용하면 된다는것 같군요... 그냥 noac만을 사용하면 write가 엄청.... 느려지더군요. 같이 사용하면 어떤지는 이번주에 테스트해야합니다.... ^^

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

wkpark의 이미지

MyCluster wrote:
Quote:
To enable uncached I/O, follow this procedure:

Become root
Start your favorite editor on /etc/modules.conf
Add this line anywhere: "options nfs nfs_uncached_io=1"

Uncached I/O will take effect after you reboot your client. Only mount points that use the "noac" mount option will be effected by this change.

NFS클라이언트에서 nfs모듈을 올릴때 위와같이 옵션을 주고, fstab에서 마운트 할때 noac 옵션을 사용하면 된다는것 같군요... 그냥 noac만을 사용하면 write가 엄청.... 느려지더군요. 같이 사용하면 어떤지는 이번주에 테스트해야합니다.... ^^


Direct IO 패치가 되어있다는 글이 있길래 커널 2.6.7 소스를 찾아봤지만, nfs_uncached_io=1 옵션은 커널 2.4.x에 적용되는 예전 옵션 같더군요.
그냥 make menuconfig에서 NFS_DIRECTIO를 체크하면 되는 것으로 생각됩니다.

http://www.netapp.com/tech_library/3183.html
이 문서 마지막 부분을 잘 보면 O_DIRECT와 uncached IO를 구분지어 놓은 내용이 있는데, O_DIRECT는 파일 한개 한개에 대해 적용되는 것이고, uncached I/O는 nfs마운트된 파일 시스템 전체에 direct i/o를 하는 것인데,
RHEL AS 3.0에는 O_DIRECT가 있고, RHEL 2.1에는 uncached I/O가 되어있다고 써있습니다.

그런데, fs/nfs/direct.c 소스를 보면 위 문서를 제공하는 netapp회사에서(<cel@netapp.com>)만든 것임을 알 수 있고, direct.c의 설명 문구에는 uncached I/O에 관한 내용입니다. 즉, NFS_DIRECTIO를 체크하면 uncached I/O가 된다는 뜻이겠죠. (31 Mar 2004 날짜로 최신 업데이트) 그러나 nfs_uncached_io 옵션은 없습니다.

정리하면 최신 2.6.7 커널에는 nfs_uncached_io 옵션 대신에 그냥 커널 옵션 NFS_DIRECTIO를 선택하면 uncached I/O를 쓸 수 있게 된다는 것이고, MyCluster님의 위 설명대로 "noac"옵션을 줘서 nfs 마운트하면 비로소 uncached I/O가 활성화 되는 것 같습니다.

온갖 참된 삶은 만남이다 --Martin Buber

elfs의 이미지

테스트 해 보신 결과좀 알려주실 수 있으실까요? :)

MyCluster wrote:
Quote:
To enable uncached I/O, follow this procedure:

Become root
Start your favorite editor on /etc/modules.conf
Add this line anywhere: "options nfs nfs_uncached_io=1"

Uncached I/O will take effect after you reboot your client. Only mount points that use the "noac" mount option will be effected by this change.

NFS클라이언트에서 nfs모듈을 올릴때 위와같이 옵션을 주고, fstab에서 마운트 할때 noac 옵션을 사용하면 된다는것 같군요... 그냥 noac만을 사용하면 write가 엄청.... 느려지더군요. 같이 사용하면 어떤지는 이번주에 테스트해야합니다.... ^^

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.