0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS × Docker × Spring Boot × PostgreSQL の TCP KeepAlive 設定完全ガイド

Posted at

AWS × Docker × Spring Boot × PostgreSQL の TCP KeepAlive 設定完全ガイド

AWS環境でSpring Boot(Java)とPostgreSQLをDockerで運用していると、**「タイムアウトで接続が切れる」「アプリが不安定になる」**といった問題が発生することがあります。

その原因の一つが、TCP接続がアイドル状態で切断されてしまうことです。

本記事では、その対策として有効な TCP KeepAlive の設定方法 を、以下の4レイヤーに分けて解説します。


設定すべき4つのレイヤー

レイヤー 内容
OS(ホスト) TCP KeepAliveのカーネルパラメータ設定
Docker コンテナ sysctlによるコンテナ内の設定
Javaアプリ JDBC URLでKeepAliveを有効にする
PostgreSQL側 サーバーのKeepAliveパラメータ設定

1. ホストOS(EC2など)での設定

LinuxカーネルのTCP KeepAlive設定を変更します。

/etc/sysctl.conf に追記:

net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 5

設定を反映:

sudo sysctl -p

2. Dockerコンテナの設定

Docker Compose で sysctl の値をコンテナに渡すことができます。

docker-compose.yml の例:

services:
  app:
    image: my-springboot-app
    sysctls:
      - net.ipv4.tcp_keepalive_time=60
      - net.ipv4.tcp_keepalive_intvl=10
      - net.ipv4.tcp_keepalive_probes=5

一部の環境では cap_add: SYS_ADMINprivileged: true が必要になることがあります。


3. Javaアプリ(Spring Boot)での設定

PostgreSQL JDBCドライバは、URLに tcpKeepAlive=true を指定することで、TCP KeepAliveを有効化できます。

application.properties の設定例:

spring.datasource.url=jdbc:postgresql://your-db-host:5432/yourdb?tcpKeepAlive=true
spring.datasource.username=your-username
spring.datasource.password=your-password

application.yml の場合:

spring:
  datasource:
    url: jdbc:postgresql://your-db-host:5432/yourdb?tcpKeepAlive=true
    username: your-username
    password: your-password

4. PostgreSQLサーバーの設定

PostgreSQLでも接続維持のためのパラメータが用意されています。

postgresql.conf の例:

tcp_keepalives_idle = 60
tcp_keepalives_interval = 10
tcp_keepalives_count = 5

注意:AWS RDS や Aurora PostgreSQL を利用している場合は、パラメータグループでの設定が必要です。RDS コンソールから該当インスタンスのパラメータグループを編集してください。


AWSでの追加考慮事項

  • セキュリティグループの設定:長時間接続があっても遮断されないように、セキュリティグループでタイムアウトやポート制限を確認しておきましょう。
  • RDSのパラメータグループ:上記のPostgreSQL設定は、RDSではDBパラメータグループで管理します。編集後はRDSの再起動が必要です。

まとめ

TCP KeepAlive を正しく設定することで、以下のようなメリットがあります。

  • コネクションが不意に切れる問題の防止
  • コネクションプールの安定運用
  • ネットワーク障害時の早期検知

各レイヤーでしっかりと設定を行い、安定した通信を確保しましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?