PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 →...

29
PostgreSQL v prostředí rozsáhlých IPTV platforem

Transcript of PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 →...

Page 1: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

PostgreSQL v prostředí rozsáhlých IPTV platforem

Page 2: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Kdo jsme?

Vyvíjíme a provozujeme IPTV a OTT řešeníKlíčový zákazníci

– O2 (O2TV, iVysílání České Televize)

– Orange

– T-Mobile

– Swisscom Broadcast

End-to-end multiscreen řešení vyvinuté in-house

– STB, Mobile, PC, SmartTV

– Streamers, Video storage

– Media aquisition

– Middleware

Page 3: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

PostgreSQL v nangu.TV

Hlavní databázová technologiePoužíváme od prvních verzí platformy, začátky na PostgreSQL 8.060 provozních instancí PostgreSQLVětšina PostgreSQL 9.4, částečně ještě PostgreSQL 9.2Připravujeme se na přechod na PostgreSQL 9.6Middleware – billing, provisioning, reportingBackend – informace o uložení dílčích video chunků, metadata, video objektyKeystore – uložení klíčů pro DRMOauth – centrální SSO, repozitář aplikací, tokeny

Page 4: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Dopady růstu zákazníků na DB

Původní zákazníci cca 20 tisíc uživatelů, jedno datové centrum, databáze běží na serverech společně s aplikacemi, stovky TPSNyní zákaznické báze o velikosti stovek tisíc uživatelůDedikované databázové servery pro každou z aplikací20,000 transakcí za sekundu ve špičkáchWrite heavy - aplikace 1,2TB zápisů denněVysoká citlivost na latenceClustery s geografickou redundancíPlány na 1,000,000 uživatelů v blízké budoucnostiPotřeba škálovat do šířky

Page 5: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Evoluce DB stacku

Přechod na dedikované DB servery, každá aplikace má samostatný clusterRAID1 → RAID10 → enterprise SSDUpgrade a optimalizace DRBDPřechod od DRBD ke asynchronní streaming replikaciPřechod na PostgreSQL 9.4Samostatné repliky pro analytické dotazyZavedení centrálního connection poolingu

Page 6: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Optimalizace aplikací

Optimalizace klíčových dotazů (low-hanging fruit)Zavedení lepšího cachování na všech přístupových úrovníchOdsun netransakčních dat do vhodnějších úložišť

– Cassandra – úložiště aplikačních logů, obrázků

– Elasticsearch – search API

– RabbitMQ – Messaging

– Syslog – logování STB boxů

Partitioning dat

Zavedení connection poolů pro aplikace

Lepší využití prepared statementů

Využití partial indexů

Page 7: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Problémy spojené s růstem báze

Problémy s lock contention (spin locks)

– Patch „Use SnapshotDirty rather than an active snapshot to probe index endpoints.“ pro 9.2

– „FOR KEY SHARE and FOR NO KEY UPDATE“ v 9.3

– Další optimalizace v 9.4, 9.5

Latence způsobené Extension locks

Problémy s IO spiky check pointu

Problémy se statistikami

Komplikovaná údržba DB

Page 8: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Na cestě k 1,000,000 uživatelů

Rozšíření používání partitioninguImplementace shardinguRozdělení monolitických aplikací na menší samostatné servisyModel Eventual consistencyAnalytické dotazy směřovány na samostatnou replikuOchrana proti Thundering herd

Page 9: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Hardware

X10DRH-CLN42x Intel E5-2650v4256 GB RAM2x 300GB C10K900 SAS – OS a logyIntel SSD DC P3700 Series (PCI-E, NVMe)(optional) 2x 300GB C10K900 SAS – WAL

Page 10: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Konfigurace PostgreSQL

max_connections = 120shared_buffers = 5GBtemp_buffers = 128MBwork_mem = 12MB (22MB)maintenance_work_mem = 6400MBeffective_io_concurency = 32checkpoint_segments = 256checkpoint_timeout = 15mincheckpoint_completion_target = 0.9hot_standby_feedback = offstats_temp_directory = '/mnt/pg_stat_tmp'synchronous_commit = onautovacuum_max_workers = 6autovacuum_naptime = 6

random_page_cost = 1.5effective_cache_size = 200GBgeqo_threshold = 20log_min_duration = 500log_checkpoints = onlog_line_prefix = '%t:%r:%u@%d:[%p]: 'log_lock_waits = on log_temp_files = 0track_activity_query_size = 10240deadlock_timeout = 2srestart_after_crash = off

Page 11: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Konfigurace OS

Debian GNU/Linux Jessie, Kernel 3.16Ext4 s noatimeSysctl

– vm.dirty_background_ratio = 5

– vm.dirty_ratio = 10

– vm.swapiness = 1

– net.ipv4.tcp_keepalive_time=300

– net.ipv4.tcp_keepalive_intvl=60

– net.ipv4.tcp_keepalive_probes=10

Page 12: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Vysoká dostupnost

Původní řešení nad Pacemaker/CorosyncDRBD resource – síťový RAID1Filesystem resourcePlovoucí IP adresaLSB PostgreSQLNevýhody:– Dlouhý čas failoveru (zejména při nekorektním ukončení primary

node)

– DRBD nad SSD disky výrazně degraduje výkon (značné zlepšení DRBD 8.4.3)

– Pro více jak 2 nody příliš komplikovaná konfigurace

– Cluster musí být v jednom L2 segmentu

Page 13: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Pacemaker se Streaming replikací

Odpadá overhead DRBDRychlejší failoverBezproblémové zapojení více jak 2 nodůPacemaker pgsql resource (nebo PAF)Slave nodes lze využít v hot standby režimu pro offload části čtecích dotazůStále nutnost provozu na společném L2 segmentuProblémy při vyšších latencích mezi nodySituace s balíčkováním v Debianu není ideální

Page 14: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Patroni a HAProxy

Patroni – bootstrap, monitoring, failoverConsul – quorum, distributed configuration storeHAProxy – monitoruje stav jednotlivých nodes přes patroni, směřuje provoz na aktuální master nodeTolerantní vůči vyšším latencím mezi nodyNení závislé na jedom L2 segmentu a společné VIP adrese

Page 15: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

PgPool-II slepá cesta

Vysoké HW nároky (ve srovnání s pg bouncerem)Nepodporuje transaction/statement poolingZnačná degradace výkonu při použití JDBCNepodporuje multistatement queriesLoadbalancing aplikace využívající JDBC/Hibernate přinášela řadu problémůTěžkopádná konfigurace

Page 16: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Connection pooling - pgbouncer

Pro backend connection pool na DB serverech či dedikovaných poolerechPůvodních 400 connections zredukováno na 50Použití v transaction režimuSnížení zátěže DB o 1/5Minimální paměťové a CPU nárokyMožnost aktivace rezervního poolu při překročení nastaveného času odezvyVelmi dobrá dokumentace a tooling

Page 17: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Údržba - Autovacuum

Pro malé a statické tabulky defaultní nastaveníPro často modifikované tabulky nastavení per tabulka

alter table T set (autovacuum_vacuum_cost_delay = 10);

alter table T set (autovacuum_vacuum_cost_limit=1000);

alter table T set (autovacuum_vacuum_scale_factor=0.02);

alter table T set (autovacuum_analyze_scale_factor=0.01);

Stále je však nutné příležitostné provedení VACUUM FULLPro často modifikované tabulky je finálním řešením partitioning

Page 18: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Údržba - reindexace

Od 9.2 podpora CREATE INDEX Concurrently, nad 9.2 ale problémy se zámky na extrémně často modifikovanými tabulkamiOd 9.4 již bez problémů možné prováděť za plnného provozuJe třeba mít dostatek prostoru pro další kopii indexu

create index CONCURRENTLY tmp_tabulka_klic on chunk using btree (chunk_day);

begin; drop index tabulka_klic; alter index tmp_tabulka_klic rename to tmp_tabulka; commit;

Page 19: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Monitoring - Grafování

Na DB serverech collectd pro sběr datData přeposílání na centrální servery kde jsou uloženy v RRDJednoduchý frontend Collection3/CactiFrontend je pomalý, z povahy RRD data postupně méně přesnáPostupný přechod na InfluxDB/GrafanaZvažujeme Prometheus

Page 20: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Monitoring – Grafované metriky

Počet commitů a rollbacků za sekunduPro klíčové tabulky počet zvakouvaných řádek za sekunduStatistika bg writeruUtilizace autovacuum workersPočet connectionsZpoždění streaming replikaceVelikost klíčových tabulekCelková disk usageDisk IOPS, Latency, Traffic, percent utilizationSíťový bandwitdhLoad, CPU, Swap, vmstat

Page 21: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Vyhodnocení logů

Analyzátor logů pgBadgerVyhodnocení na týdenní bázi, při řešení incidentůČastější kontroly po upgradech DB, aplikačního SWNejčastější Slow queriesNejdelší individuální slow queriesZámkyCheckpointyTemp filesCentralizované logování přes ELK

Page 22: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Alerting

Přecházíme na Icingu s distribuovanou architekturouAktuálně většina instalací nad Nagios3Několik metod alertingu – SMS, E-mail, Jabber konference, Kibana dashboardHistorie uložená v Elasticsearch, frontend KibanaVětšinu sledovaných metrik přes check_posgres

Page 23: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Alerting - metriky

Idle in transactionsLast vacuum klíčových tabulekLast analyze klíčových tabulekVelikost tabulekPříliš dlouhé queriesPočet zámkůPočet konexí / backendůTable bloatIndex bloatStav replikaceReplikační zpožděníMaximální čekání v pgbounceruPočet čekajících klientů v pgbounceru

Page 24: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Zálohování

Základní metoda pg_dump

– Zálohy v custom formátu na denní bázi

– Throttling - nice, ionice, bwlimit

– Přes rsync na dedikovaný server

Pro velké platformy používáme PG Barman

– Kontinuální záloha přes WAL archiving

– PITR až na úrovni konkrétního XID

– Zálohování po síťi či na dedikovanou SAN

– Monitoring stavu zálohování přes Nagios/Icinga

– Připravujeme přechod na 2.0 a zálohování pře Streaming replikaci

Nepodceňovat pravidelné testování záloh

Page 25: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Upgrade - Scénář

Obvyklá doba integrace nové verze PostgreSQL – 6 měsícůZajištění kompatibility s novou verzí, výměna JDBC driverů, příprava balíčků s pluginyTestovací provoz v interním QA – funkční a integrační testyZátěžové testyNasazení na staging platformy zákazníkůNasazení na menší produkční platformyNasazení na klíčové produkční platformy

Page 26: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Upgrade - Zátěžové testy

Jako zdroj dat použity provozní data velkých platforemIdentické HW prostředí jako v produkciStav databáze převzat přímo z produkce (data z barmana), nikoliv čistý dumpCustom aplikace na přehrávání aplikačních logůPřehrávání provozu zachyceného pgsharkemZrychlené přehrání provozu pro simulaci zvýšené záťěžePro některé aplikace syntetické scénáře pro GattlingVyhodnocujeme pg_stat_statements, pg_buffercache, slow queries, locks, temp files, errorsVyhodnocují se aplikační latence a chyby

Page 27: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Upgrade – Produkční platformy

Simulace upgrade v lokálním labuZískání dat produkce z barmana (nikoliv čistý dump/restore)Stejná verze, konfigurace a prostředí jako na produkciSleduje se celkový čas, obsazené místo v průběhu i po upgrade, chybyZáloha pro případný rollback a rollback scénářNa produkci následně upgrade přes pg_upgrade s využitím hardlinkůNasazení optimalice konfigurace podle výsledků záťěžových testůSpuštění analyze nad všemi tabulkamiAktuálně testujeme bezvýpadkové upgrady přes pg_logical

Page 28: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

Otázky

Otázky ?

Page 29: PostgreSQL v prostředí rozsáhlých IPTV platforem · samostatný cluster RAID1 → RAID10 → enterprise SSD Upgrade a optimalizace DRBD Přechod od DRBD ke asynchronní streaming

[email protected], a.s. | U Plynarny 1002/97 | 101 00 Praha 10 | Czech Republic |

www.nangu.tv

We are hiring!

Roman Fišer2nd level Support Team Leader