AWS Aurora データベースクラスターの使用
このページでは、TeamCity データベースサーバーとして Amazon Aurora クラスターを使用する方法について詳しく説明します。
TeamCity がデータベースサーバーとして クラスターエンドポイント を指す AWS Aurora クラスターを使用する場合、AWS Aurora クラスターがフェイルオーバーすると何が起こるかを理解しておくことが重要です。
両方の AWS Aurora DB インスタンスが再起動され(そのため、短時間 TeamCity はクラスターへの接続を完全に失い)、
元の DB インスタンスは読み取り専用モードで起動されます(新しいリーダーインスタンス)。
前のフェールオーバーインスタンスは新しいライターであり、クラスターエンドポイント DNS レコードは新しいライターインスタンスを指すように変更されます。
デフォルトでは、TeamCity JVM は DNS 名のルックアップをキャッシュします。つまり、DNS キャッシュの有効期限が切れるまで、TeamCity は元の DB インスタンスに接続されたままになります。 その結果、TeamCity 側のデータベース接続プールに、新しいリーダーへの接続が追加されます。
TeamCity の JVM 固有のキャッシュの有効期限が切れ、無効な接続がプールから削除されるまでには、しばらく時間がかかります。
一般的な推奨事項
フェイルオーバークラスターを使用する場合は、TeamCity での JVM 固有の DNS キャッシュ時間を TTL を 60 に設定して 短縮することをお勧めします:
環境変数に
-Dsun.net.inetaddr.ttl=60JVM オプションを追加します。変更を有効にするには、TeamCity を再起動します。
TeamCity を新しいライターに強制的に接続する
TeamCity を新しいライターに手動または自動で強制的に接続させることができます。
手動で で接続を強制するには:
新しい DB リーダーインスタンスをもう一度再起動します。再起動には最大 2 分かかりますが、これは DNS キャッシュの有効期限が切れ、無効な接続がプールから削除されるのに十分な時間です。
または、TeamCity を手動で再起動すると、すべての接続が新たに作成されます。
新しいプライマリインスタンスがアップして実行中になり次第、TeamCity に 自動的に 接続させるには:
データベース接続プールが特別な検証クエリを使用するように設定します。これにより、DB インスタンスへの接続は使用前、使用後、またはその両方でテストされ、読み取り専用データベースへの接続が検出された場合は、その接続がプールから削除されます。
そのため、次の行を<TeamCity データディレクトリ>/config/database.propertiesに追加します:
Aurora MySQL の場合:testOnBorrow=true testOnReturn=true testWhileIdle=true timeBetweenEvictionRunsMillis=60000 validationQuery=select case when @@read_only + @@innodb_read_only \= 0 then 1 else (select table_name from information_schema.tables) end as `1`Aurora PostgreSQL の場合:
testOnBorrow=true testOnReturn=true testWhileIdle=true timeBetweenEvictionRunsMillis=60000 validationQuery=select case when not pg_is_in_recovery() then 1 else random() / 0 endTeamCity サーバーを再起動します。 その後、指定された検証クエリは、すべての接続がプールから借り出されるか返却されるたび、およびアイドル状態の接続については 1 分ごと(60000 ミリ秒)に実行され、読み取り専用データベースへの接続ごとにエラーを発生させます。
Aurora MySQL クラスターへの SSL 接続の使用
Amazon Aurora MySQL バージョン 2(MySQL 5.7 以降と互換性あり)以降では、 対応するクエリ を実行することで、TeamCity が DB クラスターへの安全な SSL 接続を使用しているかどうかを確認できます。 必要に応じて、Amazon サーバー側で 接続モード(英語)を変更できます。
Amazon Aurora MySQL バージョン 1(MySQL 5.6 以前と互換性あり)を使用している場合、 tcpdump のようなパケットアナライザーでトラフィックを調べることで、TeamCity と DB クラスター間の接続が安全かどうかを確認できます。
SSL 接続のモードを変更するには(たとえば、強制または無効にする場合)、対応する sslMode パラメーターを MySQL Connector/J JDBC ドライバーに渡します。そのためには、 <TeamCity データディレクトリ>/config/database.properties ファイルに追加します:
別の行を追加します。
connectionProperties.sslMode=<value>または
接続文字列に
?sslMode=<値>引数を追加します。 例:connectionUrl=jdbc:mysql://<hostname>:3306/<dbname>?sslMode=<value>
Connector/J リファレンス / 構成プロパティ(英語)のサポートされている接続モード値のリストを参照してください。