Mysqlレプリケーションでマスターがダウンしているときにクライアントがスレーブを使用することは可能ですか?
私はすでにマスターとスレーブを持つ単純なmysqlレプリケーションをセットアップしました。
クライアントはマスターに接続してデータベースにアクセスします。マスターサーバーに加えられた変更はすべてスレーブに複製されます。マスターサーバーがダウンしたときにクライアントが自動的にスレーブサーバーに接続するように構成するにはどうすればよいですか?
MySQLサーバー5.1およびMySQLワークベンチ5.2 CEを使用しています。マスターとスレーブの両方のmy.iniファイルを編集しました。
クライアントはJ2EEアプリケーションを使用します。
変更を加えるために、マスターmy.iniファイルにどの追加コマンドを入力する必要がありますか?
また、レプリケーション間の時間間隔を増減する方法はありますか?
あなたはマスター/スレーブを持っているので、2つのものの使用を実装したいかもしれません
循環レプリケーションは、最初にマスター/スレーブをセットアップしてから、スレーブをマスターのマスターとして、マスターをスレーブのスレーブとして使用して同じ手順を実行することです。それはただ伴うだけです
DBVIPをセットアップするためにダウンロードしてインストールできる製品があります。私が使用するそのような製品の1つは ucarp
です。別の製品はLinux Heartbeatです。私は通常、MySQL循環レプリケーションまたはマスター/スレーブでそのようなものを使用しません。どうして?
これらの製品は自動フェイルオーバーを実行できるため、スレーブがレプリケーションラグで数秒遅れている場合は、これを実行する必要はありません。
手動フェイルオーバーを実行する必要があります。
DBVIP管理を実装するための貧乏人のアプローチを次に示します。
この設定があるとしましょう
このように/ usr/local/sbin/MyAppDBVIPというスクリプトを作成します
echo echo 10.1.2.50 > /usr/local/sbin/MyAppDBVIP
/ usr/local/sbin/dbvip-upというスクリプトを作成します
DBVIP=`/usr/local/sbin/MyAppDBVIP`
ip addr add ${DBVIP}/24 dev eth1
/ usr/local/sbin/dbvip-downというスクリプトを作成します
DBVIP=`/usr/local/sbin/MyAppDBVIP`
ip addr del ${DBVIP}/24 dev eth1
すべてのスクリプトが実行可能であることを確認してください
chmod +x /usr/local/sbin/MyAppDBVIP
chmod +x /usr/local/sbin/dbvip-up
chmod +x /usr/local/sbin/dbvip-down
これらのスクリプトが両方のDBサーバーに存在することを確認してください
選択したサーバーでdbvipを実行するだけです。 。
したがって、フェイルオーバープロセスとプロトコルは次のとおりです。
dbvip-down
を実行します。出来なければdbvip-up
を実行しますdbvip-up
を実行しないでください。dbvip-up
を実行した後、Apache、JBoss、または古いマスター経由でMySQLに接続しているその他のアプリサーバーを再起動します。「マスターがダウンしているときにスレーブを使用する」とはどういう意味ですか?マスターがダウンした場合、スレーブをマスターに切り替えるプロセスを「フェイルオーバー」と呼びます。
ただし、このフェイルオーバーシナリオでアプリケーションが古いスレーブの使用を開始すると、新しいスレーブになります。古いマスターを再びオンラインにすると、データが変更されているため、スレーブとして設定する必要があります。
状況(単一スレーブ)のフェイルオーバーは、主にアプリケーションで処理されます。アプリケーションが接続していることを確認するロジックを実装する必要があります。そうでない場合は、代わりにアプリケーションをスレーブに接続させます。
覚えておくべきいくつかのこと: