web-dev-qa-db-ja.com

MySQLレプリケーションを監視する

スレーブを監視して、それが正しいことを確認するためのベストプラクティスは何ですか

a)まだ実行中b)マスターであることはそれほど遠くない

コマンドラインアプリケーションに接続するためのスクリプトを1つか2つ書いて、遅れている場合はメールで警告したいと思います。

6
johnwards

1

maatkitの mk-heartbeat を使用できます

2

あなたはの結果を見ることができます

show slave status;

sQLスレーブで実行されますが、Seconds_Behind_Masterが不穏に不正確になることがあります。

3

あなたは私のものと同じようにあなた自身の解決策をハックすることができます-私はそれを nagios 監視と給餌の両方に使用します munin 「マスターからの秒数」を示すチャート。

マスターサーバーでは、単純なcronジョブがあります。

* * * * * root /usr/local/bin/repltest

repltestは次のとおりです。

#!/bin/bash
start=`date +%s`
d=0
while [ $d -lt 60 ] ; do
        echo "update repl_test set t= NOW(); " |mysql --defaults-file=/etc/mysql/debian.cnf repl_test
        sleep 3
        d=$(( `date +%s` - $start ))
done

スレーブでは、次の値によって返される値を監視します。

echo "select UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(t) from repl_test" |  mysql --defaults-file=/etc/mysql/debian.cnf -N repl_test

すべてのサーバーの現地時間は、ntpを介して同期されます。

repl_testデータベースに含まれるもの:

CREATE TABLE IF NOT EXISTS `repl_test` (`t` datetime NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `repl_test` (`t`) VALUES(NOW());

レプリケーションを実行する場合-SQLサーバーのコンテンツを時々比較するように mk-table-checksum も設定することをお勧めします。

8
pQd

pQdにはそれがあり、「スレーブステータスの表示」をチェックするのが最も簡単な方法です。 Seconds_behind_masterが不正確であることに関して、値はスレーブSQLスレッドによってリレーログから読み取られるステートメントのタイムスタンプの差であることに言及したいと思います。追いつくのにかかる時間の見積もりとは関係ありません。たとえば、実行に1時間かかる単一の長時間実行アップデートでは、スレーブはマスターから最大1時間遅れて表示されますが、ステートメントが完了すると、残りの作業は1秒になります。追いつく。

また、スレーブステータスを取得するために、監視対象のユーザーに「REPLICATIONCLIENT」を付与する必要があります。

4
charstar

他の人が言っているように明白な答えは、SHOW SLAVESTATUSにいくつかのバリエーションを使用することです。私はNagiosに組み込まれているチェッカーを個人的に使用していますが、それは私がすでにnagiosを介して他のあらゆる種類の監視を行っているためです。ただし、問題があります。SHOWSLAVESTATUSで、実行中の両方のプロセスが表示されても、スレーブがハングしている可能性があります。私たちが知ることができることから(問題があり、それを調べたため)、問題は、スレーブを完全に殺すには短すぎるが、適切に回復するには長すぎる期間のネットワークのげっぷがある場合に発生します。定期的に変更されるテーブル内の最新のエントリのタイムスタンプを確認し、それをマスターとスレーブの間で比較して、「遅すぎる」場合はアラートをスローするという回避策を考え出しました。完璧ではなく、特定の状況でのみ機能しますが、警告されていると考えてください。

3

オープンソースおよびコマーシャルのすべてのツールについて言及しているこのブログ投稿を参照してください http://blog.webyog.com/2012/11/20/how-to-monitor-mysql-replication/

通常、このブログには、pt-heartbeat:スレーブラグをリアルタイムで監視するための便利なツールなどのツールが含まれています。 pt-slave-restart:エラー時にスレーブを監視して再起動します。 pt-slave-find:スレーブのレプリケーション階層を検索します。 pt-table-checksum:スレーブ上のデータベースがマスターと同期しているかどうかを確認します。

MySQL Enterprise Monitor:Oracleの「VirtualDBA Assistant」は、きちんとしたWebベースのGUIを備えたエージェントベースの監視ツールです。 SHOW SLAVESTATUSおよびSHOWMASTER STATUSの出力とともに、すべてのマスターとそのスレーブのトポロジビューを提供する[Replication]タブ。

MONyog-MySQLモニターおよびアドバイザー:レプリケーションの監視と管理をサポートします-「レプリケーション」タブ。すべてのマスターとそのスレーブのトポロジビューを、SHOW SLAVESTATUSおよびSHOWMASTERSTATUSとともに表示します。

クエリを実行する必要がありますSHOW SLAVE STATUSそして両方がSlave_IO_RunningおよびSlave_SQL_Runningの値はYesです。そうでない場合、スレーブは自動的に回復できません。両方がYesの場合、遅延が発生する可能性がありますが、レプリケーションは引き続き機能します(Seconds_Behind_Master)。

1
Cheatah

かなり良いツールはrep_monで、 MyCat スイートの一部です。基本的にはpQdの3番目のオプションのスタイルのPerlスクリプトですが、簡単に構成でき、十分にテストされています。構成したら、自分でクイックテストとして実行するか、問題が発生した場合にメールを送信するようにcronでスケジュールすることができます。

実行すると、基本的に「OK」またはエラーが何であるかを出力するだけです。秒遅れが特定のしきい値(ユーザーが設定)に達した場合にアラートを出すこともできます。

ただし、必要なしきい値の監視だけの場合は、maatkitを使用することをお勧めします。これは、SHOW SLAVE STATUSの不正確な出力ではなく、実際に挿入し、後で実際のSQLを使用してクエリを実行することで機能します。

1
JamesHannah

使用する

mysql_config_editor set --login-path=local --Host=<< your slave >> --user=username --password

そして

mysql_config_editor set --login-path=remote --Host=<< your master >> --user=username --password

回避するために事前定義されたログイン値を設定するには警告:コマンドラインインターフェイスでのパスワードの使用は安全でない可能性があります。

これらを使用して、両方のMySqlサーバーにクエリを実行します。

  1. マスターのログ位置をスレーブのExec_Master_Log_Posと比較します。

    master_log = $(mysql --login-path = remote -e "show master status" | grep -v File | awk '{print $ 2}')

    slave_exec = $(mysql --login-path = local -e "show slave status\G" | grep Exec_Master_Log_Pos | awk '{print $ 2}')

    diff = $(($ master_log- $ slave_exec))

  2. スレーブIOステータスをチェックして、実行されているかどうかを確認します。

    IO_Status = $(mysql --login-path = local -e "show slave status\G" | grep Slave_IO_Running | awk '{print $ 2}')

  3. スレーブSQLステータスをチェックして、問題がないかどうかを確認します。

    SQL_Status = $(mysql --login-path = local -e "show slave status\G" | grep "Slave_SQL_Running:" | awk '{print $ 2}')

次に、$ diff、$ SQL_Status、および$ IO_Statusの値を使用して、好みに応じて特定の値と一致しなかった場合に警告メールを送信できます。

1
minniux

Zenossでそれを行う方法は次のとおりです。 リンクテキスト

0
mray