08/06/2010
Automatyzacja
infrastruktury
Gadu-Gadu
Michał Gruchała
m.gruchala@gadu-gadu.pl
2
□
Specyfika / Zasady
□
Platforma/Wirtualizacja
□
DNS
□
Konfigurator
□
Nagios
□
collectd
□
Podsumowanie
3
Specyfika / Zasady
4
Specyfika/Zasady
□
KISS/Brzytwa Okchama
◊ Tak prosto jak sie da
◊ Proste struktury shardowanie→ danych
□
Skalowalność
□
...
5
Specyfika/Zasady
□
Dużo projektów/funkcjonalności
◊ Codename
◊ vlan
◊ prefix maszyn
◊ grupy dostępowe
◊ Każdy projekt ma...
6
Specyfika/Zasady
□
Typowy projekt www
◊ LB (haproxy/varnish)
◊ Cache (memcached)
◊ Workery (lighttpd, PHP5 fcgi)
◊ Stora...
7
Wirtualizacja
8
Platforma/Wirtualizacja
□
Typowy serwer
◊ 1U
◊ 8-12 core (2-2.5GHz)
◊ 24-48 GB RAM
◊ 4 dyski (SATA, SAS, SSD)
◊ 2 x 1Ge ...
9
Platforma/Wirtualizacja
□
Xen (dom0)
◊ Maszyna fizyczna
◊ Overbooking CPU
◊ ... i tak w szczycie ¼ core'ów “nic nie robi...
10
Platforma/Wirtualizacja
□
Problemy
◊ Narzut wirtualizacji?
◊ Obawy developerów
◊ “Szkiełko I oko”
◊ Obserwuj steal
◊ Ry...
11
Platforma/Wirtualizacja
□
Dane
◊ 05/2010 – około 2700 systemów
◊ ~350 xenów
◊ ~2300 guestów
◊ Systemy
◊ Debian 99.5%
◊ ...
12
konfigurator
13
konfigurator
□
Konfiguracja aplikacji
◊ Oparty o repozytorium subversion
◊ Historia zmian
◊ Blokowanie update/Selektywn...
14
konfigurator
□
Profile
◊ Podstawowe
◊ Dodawane do każdej maszyny
◊ Obejmują dużo maszyn
◊ Domyślnie ~20 profili per mas...
15
konfigurator
□
Propagacja zmian
◊ User
◊ commit
◊ Serwer SVN
◊ hooks/post-commit
◊ Maszyna kliencka
◊ → webservice
◊ ← ...
16
konfigurator
□
Przykładowy profil
◊ Obsługa sysctl
sysctl.client.prod/.scripts/konfigurator­postinstall.sh
sysctl.clien...
17
konfigurator
□
Dane
◊ Stała w czasie propagacja (2-3 minuty)
◊ ~ 1300 profili
□
Plany
◊ Rozproszenie serwera subversion...
18
DNS
# host 91.197.14.147
147.14.197.91.in­addr.arpa domain name pointer ip­91­197­14­147.gadu­gadu.pl.
 
$TTL    1200
$...
19
DNS
□
WAN
◊ Domeny typu gadu-gadu.pl
◊ 2 x Master (bind)
◊ View internal/external
◊ Dodawane “z konfiguratora”
◊ Serial...
20
DNS
□
TLD wewnętrzne
◊ Atm – serwery, guesty, switche
(wszystko co “jest w sieci”)
◊ Cat – powiązanie maszyna-switch
◊ ...
21
DNS
□
Gdzie jest lb portalu gadu-gadu.pl ?
$ host gadu­gadu.pl
gadu­gadu.pl has address 91.197.14.141
$ host 91.197.14....
22
DNS
□
Dane
◊ LAN
◊ 8k zapytań/s
◊ 10k wpisów
◊ WAN
◊ 500 domen
◊ 800 zapytań/s
23
nagios
24
nagios
□
Rozproszony
◊ Mastery (front)
◊ Workery
□
Maszyny dodaje na podstawie DNS
□
Testy
◊ Podstawowe
◊ CPU, Load, Di...
25
nagios
□
Dane
◊ 30k testów
◊ Co minutę wykonywanych jest 10k testów
□
Plany
◊ Waga testów
◊ Własny interfejs
◊ Jako fro...
26
collectd
27
collectd
□
Maszyny zgłaszają się same
◊ Przesyłają dane co 30 sekund
◊ Podstawowe wykresy (około 30)
◊ CPU, RAM, Load, ...
28
collectd
□
Dane
◊ 2 maszyny (oczywiście wirtualne)
◊ Dyski SSD
◊ 3000 IO/s na maszynę
◊ 80GB danych (rrd)
◊ 300k źródeł...
29
11:52:54 bozar kernel: [    3.648120] Console: switching to colour frame buffer device 160x50
11:52:54 bozar kernel: [ ...
30
syslog
□
Maszyny
◊ Serwerowe - rsyslog
◊ Klienckie syslog-ng (migracja na rsyslog)
□
Konfiguracja
◊ Wstępna
◊ w profilu...
31
syslog
□
Dane
◊ syslog-server-*
◊ logi z aktualnego dnia
◊ 4 guesty, SAS, raid0
◊ Dziennie (razem) 250GB logów
◊ syslog...
32
Podsumowanie
33
Podsumowanie
□
Automatyzuj
◊ Powtarzalność czynności = nuda = błędy
◊ Kontrola automatów (człowiek)
□
Wirtualizuj
◊ Two...
34
Podsumowanie
□
Typowy dzień
◊ Nie:
◊ oglądamy logów
◊ oglądamy wykresów
◊ logujemy się na maszyny
◊ Tak:
◊ Zaglądamy do...
35
Dziękuję za uwagę
Upcoming SlideShare
Loading in …5
×

Barcamp 08/06/2010

1,407 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,407
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Barcamp 08/06/2010

  1. 1. 08/06/2010 Automatyzacja infrastruktury Gadu-Gadu Michał Gruchała m.gruchala@gadu-gadu.pl
  2. 2. 2 □ Specyfika / Zasady □ Platforma/Wirtualizacja □ DNS □ Konfigurator □ Nagios □ collectd □ Podsumowanie
  3. 3. 3 Specyfika / Zasady
  4. 4. 4 Specyfika/Zasady □ KISS/Brzytwa Okchama ◊ Tak prosto jak sie da ◊ Proste struktury shardowanie→ danych □ Skalowalność □ Redundancja ◊ Wirtualne maszyny “są tanie” ◊ Awaria węzła nie stanowi problemu □ Master-Master
  5. 5. 5 Specyfika/Zasady □ Dużo projektów/funkcjonalności ◊ Codename ◊ vlan ◊ prefix maszyn ◊ grupy dostępowe ◊ Każdy projekt ma swój vlan ( ~60) ◊ Każdy projekt ma swoje maszyny ◊ każda ma swoją (jedną) rolę ◊ Separacja projektów ◊ komunikacja przez API
  6. 6. 6 Specyfika/Zasady □ Typowy projekt www ◊ LB (haproxy/varnish) ◊ Cache (memcached) ◊ Workery (lighttpd, PHP5 fcgi) ◊ Storage ◊ MogileFS lub NFS+DRDB ◊ Sphinx ◊ Bazy (MySQL 5.x) ◊ Master - Master slave→ ◊ HA zapewnia wackamole, pacemaker
  7. 7. 7 Wirtualizacja
  8. 8. 8 Platforma/Wirtualizacja □ Typowy serwer ◊ 1U ◊ 8-12 core (2-2.5GHz) ◊ 24-48 GB RAM ◊ 4 dyski (SATA, SAS, SSD) ◊ 2 x 1Ge intefejs (WAN, LAN) ◊ 2 x Raid1 ◊ … troche lepszy PC
  9. 9. 9 Platforma/Wirtualizacja □ Xen (dom0) ◊ Maszyna fizyczna ◊ Overbooking CPU ◊ ... i tak w szczycie ¼ core'ów “nic nie robi” ◊ vlany (bridge) dodawane z automatu ◊ Storage lokalnie □ Guest (domU) ◊ Maszyna wirtualna ◊ / swap /var jako partycje LVM na xenie
  10. 10. 10 Platforma/Wirtualizacja □ Problemy ◊ Narzut wirtualizacji? ◊ Obawy developerów ◊ “Szkiełko I oko” ◊ Obserwuj steal ◊ Rysuj wszystko (naucz czytania wykresów) ◊ Rozłożenie guestów ◊ Charakterysytka (CPU, dysk, pamięć) ● … i tak wąskim gardłem są dyski ◊ Padł xen – nic się nie stało
  11. 11. 11 Platforma/Wirtualizacja □ Dane ◊ 05/2010 – około 2700 systemów ◊ ~350 xenów ◊ ~2300 guestów ◊ Systemy ◊ Debian 99.5% ◊ CentOS 0.4 % (z reguły fizyczne) ◊ Windows 2 sztuki (wirtualne) □ Plany ◊ PXE, iSCSI, dm-cache/flashcache
  12. 12. 12 konfigurator
  13. 13. 13 konfigurator □ Konfiguracja aplikacji ◊ Oparty o repozytorium subversion ◊ Historia zmian ◊ Blokowanie update/Selektywny upgrade ◊ Profil ◊ konfiguracja aplikacji X dla grupy maszyn Y w ramach projektu Z PROJEKT.FUNKCJA.APP.(PROD|TEST|DEV) ◊ Pliki, katalogi względem / ◊ Skrypty preinstall postinstall
  14. 14. 14 konfigurator □ Profile ◊ Podstawowe ◊ Dodawane do każdej maszyny ◊ Obejmują dużo maszyn ◊ Domyślnie ~20 profili per maszyna ● syslog-ng ,monit, ssh-server ● collectd , nrpe, dns-client ◊ Specyficzne ◊ Obejmują wąskie grupy maszyn ◊ Dodawane do maszyn z rolą ● Na przykład ggportal.web.lighttpd.prod
  15. 15. 15 konfigurator □ Propagacja zmian ◊ User ◊ commit ◊ Serwer SVN ◊ hooks/post-commit ◊ Maszyna kliencka ◊ → webservice ◊ ← rsync do $tmp ◊ ᴐ Podmiana zmiennych ◊ Preinstall, cp $tmp /, Postinstall
  16. 16. 16 konfigurator □ Przykładowy profil ◊ Obsługa sysctl sysctl.client.prod/.scripts/konfigurator­postinstall.sh sysctl.client.prod/etc/rcS.d/S31sysctl.sh sysctl.client.prod/etc/init.d/sysctl.sh sysctl.client.prod/etc/sysctl.d/00­default.conf ◊ Ustawienia dla konkretnych aplikacji ggportal.web.lighttpd.prod/etc/sysctl.d/10­lighttpd.conf
  17. 17. 17 konfigurator □ Dane ◊ Stała w czasie propagacja (2-3 minuty) ◊ ~ 1300 profili □ Plany ◊ Rozproszenie serwera subversion ◊ Profile stabilne ◊ upgrade aplikacji
  18. 18. 18 DNS # host 91.197.14.147 147.14.197.91.in­addr.arpa domain name pointer ip­91­197­14­147.gadu­gadu.pl.   $TTL    1200 $ORIGIN gg.pl. @       IN      SOA     ns1.gadu­gadu.pl. root.gadu­gadu.pl. (                                                    $GG_KONFIGURATOR_TIMESTAMP                                                    3601                                                    1800                                                    1800000                                                    3600 )                                 IN      NS      ns1.gadu­gadu.pl.                                 IN      NS      ns2.gadu­gadu.pl. @        IN      MX     10       mx­1 @        IN      MX     10       mx­2 @         IN    TXT     "v=spf1 ip4:91.197.14.64/26 mx ­all" # host gadu­gadu.pl gadu­gadu.pl has address 91.197.14.141 gadu­gadu.pl has address 91.197.14.140 gadu­gadu.pl mail is handled by 5 mail.gadu­gadu.pl.
  19. 19. 19 DNS □ WAN ◊ Domeny typu gadu-gadu.pl ◊ 2 x Master (bind) ◊ View internal/external ◊ Dodawane “z konfiguratora” ◊ Serial “podbija” konfigurator (zmienne) □ LAN ◊ Domeny wewnętrzne ◊ 2 x Master (powerdns) ◊ 2 x Slave (bind)
  20. 20. 20 DNS □ TLD wewnętrzne ◊ Atm – serwery, guesty, switche (wszystko co “jest w sieci”) ◊ Cat – powiązanie maszyna-switch ◊ Xen – powiązanie guest-xen ◊ ... □ Rekordy ◊ dodawane automatycznie ◊ Usuwane automatycznie
  21. 21. 21 DNS □ Gdzie jest lb portalu gadu-gadu.pl ? $ host gadu­gadu.pl gadu­gadu.pl has address 91.197.14.141 $ host 91.197.14.141 141.14.197.91.in­addr.arpa domain name pointer ggportal­lb­2­eth0­1.atm. $ host ggportal­lb­2.xen ggportal­lb­2.xen is an alias for xen­8.atm. $ host ggportal­lb­2.cat ggportal­lb­2.cat is an alias for switch2­szafa9­kolokacja1.atm. ... kolokacja1, szafa9, switch9, xen-8
  22. 22. 22 DNS □ Dane ◊ LAN ◊ 8k zapytań/s ◊ 10k wpisów ◊ WAN ◊ 500 domen ◊ 800 zapytań/s
  23. 23. 23 nagios
  24. 24. 24 nagios □ Rozproszony ◊ Mastery (front) ◊ Workery □ Maszyny dodaje na podstawie DNS □ Testy ◊ Podstawowe ◊ CPU, Load, Disk Util, RAM ◊ Specyficzne ◊ na podstawie profili ◊ If profil ~= lighttpd.prod then check_http
  25. 25. 25 nagios □ Dane ◊ 30k testów ◊ Co minutę wykonywanych jest 10k testów □ Plany ◊ Waga testów ◊ Własny interfejs ◊ Jako front do API nagiosa ◊ Powiązanie z CMDB
  26. 26. 26 collectd
  27. 27. 27 collectd □ Maszyny zgłaszają się same ◊ Przesyłają dane co 30 sekund ◊ Podstawowe wykresy (około 30) ◊ CPU, RAM, Load, Procesy, Sieć, TCP ◊ HDD: zajętość, obciążenie (io, util, svctm,..) ◊ Wykresy specyficzne ◊ Konfiguracja w profilach ◊ Najczęściej jako plugin exec □ Mapowanie maszyna collectd-server-*→
  28. 28. 28 collectd □ Dane ◊ 2 maszyny (oczywiście wirtualne) ◊ Dyski SSD ◊ 3000 IO/s na maszynę ◊ 80GB danych (rrd) ◊ 300k źródeł danych, 100k wykresów □ Plany ◊ Własny panel ◊ Agregacja wykresów
  29. 29. 29 11:52:54 bozar kernel: [    3.648120] Console: switching to colour frame buffer device 160x50 11:52:54 bozar kernel: [    4.549613] REISERFS (device sda6): found reiserfs format "3.6" with s 11:52:54 bozar kernel: [    4.549631] REISERFS (device sda6): using ordered data mode 11:52:54 bozar kernel: [    4.568333] REISERFS (device sda6): journal params: device sda6, size  11:52:54 bozar kernel: [    4.568597] REISERFS (device sda6): checking transaction log (sda6) 11:52:54 bozar kernel: [    4.626498] REISERFS (device sda6): Using r5 hash to sort names 11:52:54 bozar kernel: [   11.393141] Adding 979924k swap on /dev/sda1.  Priority:­1 extents:1 a 11:52:54 bozar kernel: [   11.523889] udev: starting version 151 11:52:54 bozar kernel: [   11.835781] lp: driver loaded but no devices found 11:52:54 bozar kernel: [   12.138927] Linux video capture interface: v2.00 12:03:34 bozar su[1926]: + /dev/console root:michal 12:03:34 bozar su[1926]: pam_unix(su:session): session opened for user michal by (uid=0) 12:03:34 bozar su[1926]: pam_unix(su:session): session closed for user michal 12:04:02 bozar su[1689]: pam_unix(su:session): session closed for user root 12:39:03 bozar kernel: [ 2785.402576] wlan0: authenticated 12:39:03 bozar kernel: [ 2785.420303] wlan0: associate with AP 00:0f:61:88:a7:41 (try 1) 12:39:03 bozar kernel: [ 2785.421997] wlan0: RX AssocResp from 00:0f:61:88:a7:41 (capab=0x431 st 12:39:03 bozar kernel: [ 2785.422001] wlan0: associated 12:43:03 bozar kernel: [ 3025.379449] wlan0: direct probe to AP 00:0f:61:89:84:e1 (try 1) 12:43:03 bozar kernel: [ 3025.385053] wlan0: direct probe responded 12:57:05 bozar NetworkManager: <info>  (wlan0): supplicant connection state:  group handshake ­> 12:57:12 bozar sudo: pam_sm_authenticate: Called 12:57:12 bozar sudo: pam_sm_authenticate: username = [michal] 12:57:12 bozar sudo: pam_sm_authenticate: /home/michal is already mounted 12:03:34 bozar su[1926]: + /dev/console root:michal 12:03:34 bozar su[1926]: pam_unix(su:session): session opened for user michal by (uid=0) 12:03:34 bozar su[1926]: pam_unix(su:session): session closed for user michal 12:04:02 bozar su[1689]: pam_unix(su:session): session closed for user root 12:39:03 bozar kernel: [ 2785.402576] wlan0: authenticated 12:39:03 bozar kernel: [ 2785.420303] wlan0: associate with AP 00:0f:61:88:a7:41 (try 1) 12:39:03 bozar kernel: [ 2785.421997] wlan0: RX AssocResp from 00:0f:61:88:a7:41 (capab=0x431 st 12:39:03 bozar kernel: [ 2785.422001] wlan0: associated 12:43:03 bozar kernel: [ 3025.379449] wlan0: direct probe to AP 00:0f:61:89:84:e1 (try 1) 12:43:03 bozar kernel: [ 3025.385053] wlan0: direct probe responded 12:57:05 bozar NetworkManager: <info>  (wlan0): supplicant connection state:  group handshake ­> syslog
  30. 30. 30 syslog □ Maszyny ◊ Serwerowe - rsyslog ◊ Klienckie syslog-ng (migracja na rsyslog) □ Konfiguracja ◊ Wstępna ◊ w profilu syslog.client.syslog-ng.prod ◊ podstawowe ustawienia ◊ szczegółowa ◊ w profilach aplikacji □ Mapowanie klient-serwer
  31. 31. 31 syslog □ Dane ◊ syslog-server-* ◊ logi z aktualnego dnia ◊ 4 guesty, SAS, raid0 ◊ Dziennie (razem) 250GB logów ◊ syslog-storage-* ◊ Logi archive ◊ 2 guesty, SATA ◊ storage DRDB ◊ Miesięcznie ~ 1TB logów ◊ Starsze niż … zgrywane na dyski ;/
  32. 32. 32 Podsumowanie
  33. 33. 33 Podsumowanie □ Automatyzuj ◊ Powtarzalność czynności = nuda = błędy ◊ Kontrola automatów (człowiek) □ Wirtualizuj ◊ Tworzenie guesta (“odpal i zapomnij”) ◊ pojawi się w DNS, nagios ◊ Pojawią się wykresy ◊ Gotowy do specjalizacji (rola) ◊ Optymalne wykorzystanie zasobów ◊ Nie naprawiaj, stawiaj od nowa
  34. 34. 34 Podsumowanie □ Typowy dzień ◊ Nie: ◊ oglądamy logów ◊ oglądamy wykresów ◊ logujemy się na maszyny ◊ Tak: ◊ Zaglądamy do nagiosa ● na bieżąco ● raporty ◊ Pomaga nam collectd ● Raporty na podstawie rrd
  35. 35. 35 Dziękuję za uwagę

×