2016-07-04 7 views
0

MySQLのプロキシとして機能する分散データベースミドルウェアを開発中です。複数のMySQL間のトランザクションに関しては、複数のMySQLをコミットまたはロールバックすることは困難です。分散トランザクションをmysqlプロキシとして実行する方法

2つのmysqlインスタンスがデータベースミドルウェアによってプロキシされていると、アプリケーション側で、両方のmysqlインスタンスで「準備コミット」アクションを実行したいとします。まず、ミドルウェアに "準備"要求を出し、ミドルウェアが2つのmysqlインスタンスに要求を転送した後、ミドルウェアを介してsqlを実行します。最後に、ミドルウェアに "コミット"要求を送信すると、ミドルウェアは要求を2つのmysqlインスタンスが混乱しています:

最初のmysqlインスタンスに送信された「コミット」リクエストが正常に実行され、2番目のインスタンスに送信された「コミット」リクエストが何とか失敗した場合、トランザクションはコミットされましたが、ロールバックすることはできませんが、このh 2つのmysqlインスタンスが矛盾した状態になったためです。

私はこの問題にどのように対処するのだろうと思っています、任意の助けに感謝します。

答えて

0

1人がコミットされ、1人が失敗した場合、コーディネーターはトランザクションの変更を記録し、成功をユーザーに返す必要があります。インスタンスの障害が復旧したら、コーディネーターからログを取得し、整合性を確認してください。コーディネータとしてmysql内部のbinlogと同様、ミドルウェアも同じ責任を負うべきです。

MySQL外部XAは、コーディネータがクライアントである分散トランザクションの例でもあります。

スパナは、1つのノードに障害が発生する可能性を減らすために2PC + Paxosを選択します。

関連する問題