API Gateway: サービス メトリックおよび監査テーブルに関する MySQL レプリケーションの問題
search cancel

API Gateway: サービス メトリックおよび監査テーブルに関する MySQL レプリケーションの問題

book

Article ID: 270968

calendar_today

Updated On:

Products

CA API Gateway

Issue/Introduction

この記事では、サービス メトリックのレプリケーションが有効になっている場合に発生するいくつかの一般的な問題と、Broadcom からの推奨事項について説明します。

よく見られる問題:

  • ssg バックアップの実行中にレプリケーションが中断される (データベースに対するクエリが遅いため)。

  • エントリの重複によりレプリケーションが中断される。
Error 'Duplicate entry '20c25295fdfc4e81bcf84945596e4543-\x00\x00\x00\x00\x00\x00\x00\x0' for key 'nodeid'' on query. Default database: 'ssg'. Query: 'insert into service_metrics (nodeid, end_time, interval_size, back_max, front_max, back_min, front_min, attempted, authorized, completed, period_start, resolution, published_service_goid, service_state, start_time, back_sum, front_sum, goid) values ('20c25295fdfc4e81bcf84945596e4543', 1573200430000, 5000, null, null, null, null, 0, 0, 0, 1573200425000, 0, x'0000000000000000FFFFFFFFFFFFFFFF', null, 1573200425000, 0, 0, x'D201C5A7A9D6517C4C31A18990B76F22')'​
  • キーの制約によりレプリケーションが中断される:
Error 'Cannot add or update a child row: a foreign key constraint fails (`ssg`.`service_metrics_details`, CONSTRAINT `service_metrics_details_ibfk_1` FOREIGN KEY (`mapping_values_goid`) REFERENCES `message_context_mapping_values` (`goid`) ON DELETE NO ACTION ON UPD)' on query. Default database: 'ssg'. Query: 'insert into service_metrics_details (back_max, front_max, back_min, front_min, attempted, authorized, completed, back_sum, front_sum, mapping_values_goid, service_metrics_goid) values (27, 29, 27, 29, 1, 1, 1, 27, 29, x'BD0182D9CE24D1A3AE79E38B9ADF2B95', x'BD0182D9CE24D1A3AE79E38B9ADF62C6')'​

Environment

この記事は、サポートされているすべての API Gateway バージョンに適用されます。

Cause

さまざまなレプリケーションエラーには多くの根本原因がありますが、共通のテーマはサービス メトリックのレプリケーションであり、これにより追加のオーバーヘッドが発生し、新たな問題が発生します。

Resolution

Broadcom では、本番システムの MySQL で service_metrics および service_metrics_details と audit 関連のテーブルのレプリケーションを無効にすることをお勧めします。以下の解決策は、MySQL レプリケーションからサービス メトリクス関連のテーブルを除外します。

1. MySQL 構成ファイル /etc/my.cnf を編集します。

2. 次の 3 行を追加して、service_metrics の複製を無視します。

replicate-ignore-table=ssg.service_metrics
replicate-ignore-table=ssg.service_metrics_details
replicate-ignore-table=ssg.service_usage

3. 次の 6 行を追加して、監査レコードの複製を無視します。

replicate-ignore-table=ssg.audit_admin
replicate-ignore-table=ssg.audit_main
replicate-ignore-table=ssg.audit_detail
replicate-ignore-table=ssg.audit_detail_params
replicate-ignore-table=ssg.audit_message
replicate-ignore-table=ssg.audit_system

4. 必要に応じて、次の行を追加して、カウンターの複製を無視します。

replicate-ignore-table=ssg.counters


これらの変更は、/etc/my.cnf ファイルの「Slave reliability items」セクションに追加する必要があります。

以下に例を示します。

# Slave reliability items:
slave-skip-errors=126,1053,1105,1129,1158,1159,1160,1161
slave-net-timeout=30
slave_exec_mode=IDEMPOTENT
#Add replication ignores here 
replicate-ignore-table=ssg.service_metrics
replicate-ignore-table=ssg.service_metrics_details
replicate-ignore-table=ssg.service_usage
replicate-ignore-table=ssg.audit_admin
replicate-ignore-table=ssg.audit_main
replicate-ignore-table=ssg.audit_detail
replicate-ignore-table=ssg.audit_detail_params
replicate-ignore-table=ssg.audit_message
replicate-ignore-table=ssg.audit_system

4. MySQL 構成ファイル /etc/my.cnf を編集するときに、以下の既存の行を 1 から 0 に変更して次のように編集します。

innodb_flush_log_at_trx_commit=0

5. mysqld サービスを再起動します。 

$ service mysqld restart


上記の手順は、クラスター内の各データベース ノードで完了する必要があります。

Additional Information

これらの変更を加えた、mysqld サービスを再起動した後にレプリケーションが中断した場合は、restart_replication.sh スクリプトを使用してレプリケーションを再開します。

#

この文書は以下の英文技術情報を翻訳したものです。

[英語文書] API Gateway: MySQL replication issues with the service_metrics and service_metrics_details and audit tables