AWS Aurora データベースクラスターの使用
このページには、Amazon Aurora(英語) クラスターを TeamCity データベースサーバーとして使用する方法の詳細が記載されています。
TeamCity がデータベースサーバーとしてクラスターのエンドポイント(英語)を指す AWS Aurora クラスターを使用する場合、AWS Aurora クラスターがフェイルオーバーすると何が起こるかを理解することが重要です。
両方の AWS Aurora DB インスタンスが再起動され(そのため、短時間 TeamCity はクラスターへの接続を完全に失います)
元の DB インスタンスは読み取り専用モードで起動されます(新しいリーダーインスタンス)。
前のフェールオーバーインスタンスは新しいライターであり、クラスターエンドポイント DNS レコードは新しいライターインスタンスを指すように変更されます。
デフォルトでは、TeamCity JVM は DNS 名のルックアップをキャッシュします。これは、本質的に、TeamCity が DNS キャッシュが期限切れになるまで元の DB インスタンスに接続されたままになることを意味します。これにより、TeamCity 側のデータベース接続プールに新しいリーダーへの接続が読み込まれます。
TeamCity の JVM 固有のキャッシュが期限切れになり、無効な接続がプールから削除されるまでに時間がかかります。
一般的な推奨事項
フェールオーバークラスターを使用する場合は、TeamCity TTL を 60 に設定することにより(英語)の JVM 固有の DNS キャッシュを減らすことをお勧めします。
環境変数に
-Dsun.net.inetaddr.ttl=60JVM オプションを追加します。変更が有効になるように TeamCity を再起動します。
TeamCity に新しいライターへの接続を強制する
TeamCity を強制的に新しいライターに手動または自動で接続できます。
手動で接続を強制するには:
新しい DB リーダーインスタンスを再度再起動します。再起動には最大 2 分かかります。これは、DNS キャッシュの有効期限が切れるだけでなく、無効な接続がプールから削除されるのに十分です。
または、TeamCity を手動で再起動すると、すべての接続が新しく作成されます。
TeamCity が起動して実行されたらすぐに新しいプライマリインスタンスに自動的に接続するように強制するには、次の手順を実行します。
特別な検証クエリを使用するようにデータベース接続プールを構成します。これにより、DB インスタンスへの接続が使用の前後にテストされ、読み取り専用データベースへの接続が検出された場合、プールから削除されます。
このためには、<TeamCity Data Directory>/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 Cluster への SSL 接続の使用
Amazon Aurora MySQL バージョン 2(MySQL 5.7 以降と互換性がある)以降、それぞれのクエリ(英語)を実行することで、TeamCity が DB クラスターへの安全な SSL 接続を使用しているかどうかを判断できます。必要に応じて、Amazon サーバー側で接続モード(英語)を変更できます。
Amazon Aurora MySQL バージョン 1 (MySQL 5.6 以下と互換性あり) を使用している場合は、tcpdump などのパケットアナライザーを使用してトラフィックをインスペクションすることで、TeamCity と DB クラスター間の接続が安全かどうかを確認できます。
SSL 接続のモードを変更するには (たとえば、SSL 接続を強制または無効にする)、それぞれの sslMode パラメーターを <TeamCity data directory>/config/database.properties ファイルに追加して、MySQL Connector/J JDBC ドライバに渡します。
別の行を追加します。
connectionProperties.sslMode=<value>または
接続文字列に
?sslMode=<value>引数を追加します。例:connectionUrl=jdbc:mysql://<hostname>:3306/<dbname>?sslMode=<value>
Connector/J リファレンス / 構成プロパティ(英語)のサポートされている接続モード値のリストを参照してください。
関連ページ:
TeamCity サーバー起動プロパティの設定
TeamCity サーバーの動作のさまざまな側面は、起動時に渡されるオプションを介してカスタマイズできます。TeamCity 自体に影響を与える内部プロパティ、Java 仮想マシン(JVM)のプロパティ、TeamCity の内部プロパティ:TeamCity には、内部ロジックのさまざまな側面に影響を与える内部構成プロパティがあります。これらは通常、デバッグ、内部定数の変更、実験的な動作の有効化を目的としています。TeamCity サポートチームからの要請がない限り、内部プロパティを変更しないで...
高可用性のためのマルチノードセットアップ
TeamCity サーバーは、高可用性と柔軟な負荷分散のために複数のノード (またはサーバー) を使用するように構成できます。TeamCity ノードのクラスターをセットアップすることが可能です。各ノードは、ビルドからのデータの処理や VCS リポジトリからの変更の収集など、さまざまなタスクを担当します。または、すべての作業を行うメインノードを 1 つと、読み取り専用インターフェースを提供するセカンダリノードを 1 つ保持します。メインノードがダウンした場合、最小限のダウンタイムですべてのデータ...