同じ物理サーバーでレプリケーションを実行するのは賢明ではありませんか?


13

データベースのマスタースレーブレプリケーションのセットアップを検討しています。スレーブサーバーは冗長性のために使用され、場合によってはレポートサーバーとして使用されます。しかし、私が直面している最大の問題の1つは、データセンターのパワーがすでに限界に達していることです。そのため、別の物理サーバーを追加することはオプションではありません。

既存のデータベースサーバーは、CPUに関しては十分に活用されていません(クアッドコアで平均負荷が1を超えることはありません)。そのため、主要なアイデアは、いくつかの新しいドライブをトスし、メモリを2倍(8GBから16)にして、同じ物理マシンで2番目のmysqlインスタンスを実行することです。各インスタンスには、データベース用に個別のディスクがあります。

この考えに何か問題はありますか?

編集(詳細):私は(幸運にも)サーバーを停止するほど悪いことは一度もありませんでしたが、前もって計画しようとしています。もちろん、夜間にバックアップを作成して、そこから回復できます。ただし、マスターサーバーのドライブに障害が発生した場合(マシン全体が停止した場合は明らかにそうではない)、冗長データを別のディスクに保存すると、より迅速なソリューションが得られると考えました。

レポートの側面に関しては、レポートするテーブルはすべてMyIsamです。そのため、書き込み中の同じテーブルで高価な読み取りを行うと、サーバーが動かなくなる可能性があります。私の想定では、CPU負荷がまだ問題になっていないため、十分なRAMを投入する限り、スレーブサーバーがメインサーバーに影響を及ぼさないと報告していました。

回答:


11

システムの信頼性とデータの安全性の観点から冗長性を確保するために、マスターと同じマシンでスレーブを実行しても何も提供されない(またはほとんど提供されない)。マスターをダウンさせるのに十分な悪いことが起こると、おそらくスレーブもダウンさせるでしょう。

アクセス権の理由でユーザーを純粋に分離するために、優れたRDBMSはそれを行うより効果的な方法を提供します。

同じマシンで2つのデータベースを実行すると、2つのデータベースがさまざまなバッファーとキャッシュを保持するためにスペースを奪い合うため、同じ効率で実行するにはより多くのRAMが必要になります。スレーブのデータファイルがマスターとは異なる物理ドライブ上にある場合、IO-負荷分離を介してもパフォーマンス上の利点があります。この場合、マスターがドライブIO帯域幅を奪い合うことなく、スレーブに対して多くのディスク読み取りを必要とする複雑なレポートを実行できます。

編集:DTestが彼のコメントで言及しているように、スレーブDBのもう1つの考えられる利点は(マスターと同じドライブ上であっても)スレーブでの複雑な長時間実行クエリです。マスターでの日中実行クエリはより安全です。ただし、このような重要なクエリはIO競合の問題を引き起こす可能性が高いため、異なるドライブにスレーブを配置することをお勧めします。


1
私の考えでは、マスターが書き込まれているとき、スレーブはmyIsamのテーブルロックと競合しません(複雑なレポートの場合)。
デレクダウニー

@DTest:それは確かに可能なボーナスになるでしょう、はい(+1)。複雑なレポートクエリによって大きなロック(テーブルロックなど)が要求される可能性がある場合、他のテーブルタイプについても同様です。回答にメモを追加して、コメントが増えてもカットフォームが表示される可能性を低くします。
デビッドスピレット

7

これがあなたの問題をどのように解決するかは私には明らかではありません。同じ物理ハードウェア、同じOSカーネル、同じMySQLバイナリ、多分異なるディスクですが、同じストレージコントローラーなどにあるため、冗長性はありません。また、レポートDBの理由は、OLTP DBからクエリをオフロードするためです。すべて同じキットにありますが、余分なパワーはどこから来ますか?または、この設定から取得しようとしている何か他のものがありますか?

これの考えられる用途の1つは、おそらく何らかの方法でユーザーを分離することですが、再び、を使用してこれを行うことができると考えましたGRANT


私の質問にいくつかのメモを追加しました。ユーザーの分離は、私が達成しようとしていることではありませんが、
デレクダウニー

2

それは確かに賢明ではないと考えられています、あなたはより多くのコアを利用しようとしていますか?新しい設計検討の目標は何ですか?

(会話スレッドの焦点を維持するために、コメントではなく回答として投稿されました)


ドライブ障害に対するわずかな保護を提供すると同時に、マスターにアクセスする実稼働サイトの速度を低下させない複雑なレポート用のサーバーを提供します。
デレクダウニー

彼らは同じディスクコントローラーを使用しますか、または新しいスピンドルに加えて新しいディスクコントローラーをインストールできますか?
jcolebrand

1
これに出会ったばかりです。複数のコアを活用するという修辞的な質問に気づきました。実際に、あなたがこれを言ってから2ヶ月後の答えでそれを議論しました。私の前にあなたの洞察力のために+1。ところで、これはMySQLを複数回実行することに関する素晴らしいビデオです:youtu.be/5uKBg9prA1A
RolandoMySQLDBA

ところで、私の雇用主には、このアーキテクチャをアレンジしたクライアントがいます。マスターはすべてInnoDBですが、1つのマシンに3つの読み取りスレーブがあります(すべてMyISAMにあります)。
-RolandoMySQLDBA

1

これは両刃の剣にすることができます

MySQLの各インスタンスが異なるディスクに存在する場合、mysqlの複数のインスタンスをマスターと同じサーバー上で読み取り専用スレーブとして実行できます。これは、複数のコア(CPU)を利用しない古いバージョンのMySQLを実行している場合にのみ望ましいです。MySQLの最新バージョンは、複数のCPUを実際に使用するように調整でき、MySQLの複数のインスタンスを実行することで複数のコアにアクセスする必要がなくなります。

同時に、それは非常に悪い考えでもあります。私の多くのクライアントは、ベアメタルサーバーまたはVMサーバーの購入にかかる費用を節約するためにこれを行っています。サーバー負荷の急上昇は、1つのMySQLインスタンスでのクエリの不良、クエリの遅延、接続の過剰、メモリ使用量の過多、サーバーメモリの不足、キャッシュスラッシングなどにより、実行中のすべてのMySQLインスタンスに影響を与える可能性があります。また、ポート番号を介してさまざまなMySQLインスタンスにアクセスする必要があるため、アプリケーションの複雑さが増します。また、TCP / IPに翻弄されることになります。


0

私は別のサーバー、つまりAのB上のスレーブとBのA上のスレーブでレプリケーションを交差させます。サーバーで複数のインスタンスを実行し、MySQLサーバーが容量不足であるため問題はありませんでした。実行中のサーバーへのフェールオーバーは、バックアップからの復元よりもはるかに高速です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.