Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Skonfiguruj pulę połączeń GlassFish JDBC do obsługi przełączania awaryjnego Amazon RDS Multi-AZ

Jak skomentowałem wcześniej, dzieje się tak dlatego, że gniazda, które są otwarte i połączone z bazą danych, nie zdają sobie sprawy, że połączenie zostało utracone, więc pozostawały połączone do momentu wyzwolenia limitu czasu gniazda systemu operacyjnego, co może trwać zwykle około 30 minut .

Aby rozwiązać ten problem, musisz zastąpić limit czasu gniazda w ciągu połączenia JDBC lub w konfiguracji/właściwościach połączenia JDNI, aby zdefiniować socketTimeout param do mniejszego czasu.

Pamiętaj, że każde połączenie dłuższe niż zdefiniowana wartość zostanie zabite, nawet jeśli jest używane (nie byłem w stanie tego potwierdzić, przeczytałem).

Pozostałe dwa parametry, o których wspominam w moim komentarzu, to connectTimeout i automatyczne ponowne połączenie .

Oto moje parametry połączenia JDBC:

jdbc:(...)&connectTimeout=15000&socketTimeout=60000&autoReconnect=true 

Wyłączyłem również pamięć podręczną DNS Javy, wykonując

 java.security.Security.setProperty("networkaddress.cache.ttl" , "0"); 
 java.security.Security.setProperty("networkaddress.cache.negative.ttl" , "0"); 

Robię to, ponieważ Java nie honoruje TTL, a kiedy następuje przełączenie awaryjne, DNS jest taki sam, ale zmienia się adres IP.

Ponieważ używasz serwera aplikacji, parametry wyłączające pamięć podręczną DNS muszą zostać przekazane do JVM podczas uruchamiania glassfisha za pomocą -Dnet, a nie samej aplikacji.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyświetlić status i zmienne systemowe w MySQL Workbench za pomocą GUI?

  2. Zagnieżdżone relacje z Sequelize

  3. Formularz PHP nie wstawia się do bazy danych mySQL

  4. Używanie Gita do śledzenia schematu mysql - kilka pytań

  5. Ponowne ładowanie zmiennych .env bez restartu serwera (Laravel 5, hosting współdzielony)