docker sürüsü veritabanı bağlantısı eş tarafından sıfırlanır


12

Docker sürüsü ile bir bahar çizme uygulaması çalıştırıyorum ve veritabanı için postgres kullanıyorum. Her ikisini de docker hizmeti olarak çalıştırdığımda, veritabanı bağlantısı, günlüğün dediği gibi tutarlı ve rastgele (zaman damgasında görebileceğiniz gibi) başarısız oluyor:

2017-10-26T 17:14:15 .200415747Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: istemciden veri alınamadı: Bağlantı eş tarafından sıfırlandı

2017-10-26T 17:43:36 .481718562Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: istemciden veri alınamadı: Bağlantı eş tarafından sıfırlandı

2017-10-26T 17:43:56 .954152654Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: istemciden veri alınamadı: Bağlantı eş tarafından sıfırlandı

2017-10-26T 17:44:17 .434171472Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: istemciden veri alınamadı: Bağlantı eş tarafından sıfırlandı

2017-10-26T 17:49:04 .154174253Z app-db.1.1ayo6h8ro1og@scw-c2964a | LOG: istemciden veri alınamadı: Bağlantı eş tarafından sıfırlandı

Bunun nedenini anlayamadım veya keşfedemedim. Herhangi bir fikri takdir ediyorum.

Düzenle:

Uygulamayı test ederken bunun da hata verdiğini fark ettik:

SQLTransientConnectionException: HikariPool-1 - Bağlantı yok, istek 937517ms'den sonra zaman aşımına uğradı

Teşekkürler.

Yanıtlar:


10

Spring Boot uygulaması ve PostgreSQL Docker Swarm yığınını dağıtırken aynı hatayı aldım. Yaklaşık bir hafta boyunca bununla savaştıktan sonra, sorunun güvenlik duvarı kapsayıcılar arasında bağlantıların devre dışı kalması nedeniyle düştüğünü fark ettim. Hızlı cevap, linux makinesinde aşağıdaki cmd'yi çalıştırın:

sudo sysctl -w \
net.ipv4.tcp_keepalive_time=600 \
net.ipv4.tcp_keepalive_intvl=60 \
net.ipv4.tcp_keepalive_probes=3

Ayrıca, aşağıdaki tomcat bağlantı havuzu özelliklerini ekledim:

tomcat:
  max-active: 10
  initial-size: 5
  max-idle: 8
  min-idle: 5
  test-on-borrow: true
  test-while-idle: true
  test-on-return: false
  test-on-connect: true
  validation-query: SELECT 1
  validation-interval: 30000
  max-wait: 30000
  min-evictable-idle-time-millis: 60000
  time-between-eviction-runs-millis: 5000
  remove-abandoned: true
  remove-abandoned-timeout: 60

Çözüm bu blog yazısından geldi: ELASTİK ARAŞTIRMADA NODENOTAVAILABLE EXCEPTIONS İLE ÇIKARMA


Bunu mümkün olan en kısa sürede deneyeceğim.Yardımınız için teşekkürler!
Elifcan Çakmak

merhaba, çözümü denedim ve sadece ilk kısmı uyguladım. dünden beri var ve başarısız değil. i işe yarıyor :) çok teşekkürler!
Elifcan Çakmak

Çekirdek 4.13 veya sonraki bir sürümü çalıştıran kapsayıcılar artık tcp_keepalive_timeana bilgisayardan devralınmayacak (kaynak: success.docker.com/article/ipvs-connection-timeout-issue ), bu nedenle bu yaklaşım artık daha yeni kapsayıcılar ile çalışmayacak. Ancak, Docker 19.03'ten itibaren sysctlhizmetlere sağlanabilecek bir seçenek vardır (örneğin bir oluşturma dosyasında). Bu, yukarıdaki bayrakları ana bilgisayarla uğraşmadan doğrudan kaplara ayarlamak için kullanılabilir. docs.docker.com/compose/compose-file/#sysctls
avejidah

2

Boşta bağlantıyı kapatmayı önlemenin başka bir yolu daha vardır. Sorun, 15 dakika sonra boşta bağlantıyı kapatan varsayılan sürü hizmeti bulma ile ilgilidir. Son nokta modunun
açıkça belirtilmesi sorunu çözer, örneğin:dnsrr

version: '3.3'

services:
  foo-service:
    image: example/foo-service:latest
    hostname: foo-service
    networks:
      - foo_network
    deploy:
      endpoint_mode: dnsrr
      # ...

networks:
  foo_network:
    external: true
    driver: overlay
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.