Článek přečtěte do 2 min.

Vaše dlouhotrvající relace mohou selhat poté, co jste nasadili Vertica na Elastic Kubernetes Cluster (EKS) s Load Balancer jako typem služby.

dbadmin@v-sc-0:/$ /opt/vertica/bin/vsql -h internal-acc1a79a37984458b9930acd01cba3f5-782667786.us-east-1.elb.amazonaws.com -c "select sleep(70);"
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
connection to server was lost

Pokud není typ nástroje pro vyrovnávání zatížení v yaml specifikován, ve výchozím nastavení EKS vygeneruje klasický nástroj pro vyrovnávání zatížení s výchozím časovým limitem nečinnosti připojení 60 sekund. Časový limit aws-load-balancer-connection-idle-timeout lze nastavit až na 4000 sekund, podle dokumentace. Co by se však mělo dělat, pokud dotaz trvá déle než 4000 sekund?

dbadmin@v-sc-0:/$ /opt/vertica/bin/vsql -h internal-acc1a79a37984458b9930acd01cba3f5-782667786.us-east-1.elb.amazonaws.com -c "select sleep(4001);"
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
connection to server was lost

Existuje na to řešení. Namísto nástroje Class Load Balancer můžete použít Network Load Balancer (NLB). Pro nejlepší výkon Vertica doporučuje používat Network Load Balancer.

Při nasazování databáze zahrňte do souboru yaml následující anotaci, abyste zajistili, že bude vygenerován nástroj pro vyrovnávání zatížení NLB.

serviceName: LoadbalancerService
serviceType: LoadBalancer
serviceAnnotations:
service.beta.kubernetes.io/aws-load-balancer-type: "nlb-ip"

AWS však nastavuje hodnotu časového limitu nečinnosti toku TCP ve výchozím nastavení na 350 sekund. Tuto hodnotu nelze změnit. Od verze Vertica 11.x je podporována sada podobných parametrů keepalive, které mohou nahradit hodnoty parametrů TCP keepalive. Ve výchozím nastavení jsou všechny parametry udržování Vertica nastaveny na 0, což znamená použití nastavení udržování TCP. Je třeba upravit nastavení udržování v databázi tak, aby se udržovací živly odesílaly s odstupem kratším než 350 sekund. Ke změně nastavení zachování databáze použijte následující dotazy:

ALTER DATABASE DEFAULT SET KeepAliveIdleTime = 300;
ALTER DATABASE DEFAULT SET KeepAliveProbeInterval = 60;
ALTER DATABASE DEFAULT SET KeepAliveProbeCount = 20;

Nyní uvidíte, že Vertica úspěšně dokončí test spánku po jeho spuštění po dobu 400 sekund, což je déle než obvyklý časový limit NLB 350 sekund.

dbadmin@v1-sc-0:/$ date;vsql -h a21a604ba68664737b89a5bf267147f5-7d71000035490e9f.elb.us-east-1.amazonaws.com -c 'select sleep(355)';date
Tue Feb 21 21:17:18 UTC 2023
sleep
-------
0
(1 row)

Tue Feb 21 21:23:13 UTC 2023
dbadmin@v1-sc-0:/$

Zdroj: Vertica