Michał Gruchała

Transkrypt

Michał Gruchała
Automatyzacja
infrastruktury
Gadu-Gadu
Michał Gruchała
[email protected]
08/06/2010
□
Specyfika / Zasady
□
Platforma/Wirtualizacja
□
DNS
□
Konfigurator
□
Nagios
□
collectd
□
Podsumowanie
2
Na przebudzenie
3
Statystyki
□
2700 systemów
◊
3000 core, 1500 dysków, 10TB pamięci
□
~20 TB danych wysłanych w ciągu dnia
□
W szczycie
□
◊
30 tysięcy requestów HTTP/s
◊
2 miliony pakietów w warstwie access
◊
2.5 miliona sesji TCP
◊
3x9 tyś insert, 28 tyś select (MySQL)
~40 projektów
4
Specyfika / Zasady
5
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
6
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
7
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
8
Wirtualizacja
9
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
10
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
11
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
12
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
13
konfigurator
14
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
15
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
16
konfigurator
□
Propagacja zmian
◊
User
◊
◊
Serwer SVN
◊
◊
commit
hooks/post-commit
Maszyna kliencka
◊
→ webservice
◊
← rsync do $tmp
◊
ᴐ Podmiana zmiennych
◊
Preinstall, cp $tmp /, Postinstall
17
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
18
konfigurator
□
□
Dane
◊
Stała w czasie propagacja (2-3 minuty)
◊
~ 1300 profili
Plany
◊
Rozproszenie serwera subversion
◊
Profile stabilne
◊
upgrade aplikacji
19
# 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.
DNS
@ 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.
20
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)
21
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
22
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
23
DNS
□
Dane
◊
◊
LAN
◊
8k zapytań/s
◊
10k wpisów
WAN
◊
500 domen
◊
800 zapytań/s
24
nagios
25
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
26
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
27
collectd
28
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-*
29
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
30
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
31
12:57:05 bozar NetworkManager: <info> (wlan0): supplicant connection state: group handshake ­>
syslog
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
32
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 ;/
33
Podsumowanie
34
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
35
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
36
Dziękuję za uwagę
37