barcamp 08/06/2010
DESCRIPTION
TRANSCRIPT
08/06/2010
Automatyzacja infrastruktury Gadu-Gadu
Michał Gruchała
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ść □ Redundancja
◊ Wirtualne maszyny “są tanie”◊ Awaria węzła nie stanowi problemu
□ Master-Master
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
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
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 intefejs (WAN, LAN)◊ 2 x Raid1◊ … troche lepszy PC
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
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
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
konfigurator
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
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
konfigurator
□ Propagacja zmian◊ User
◊ commit◊ Serwer SVN
◊ hooks/post-commit
◊ Maszyna kliencka◊ → webservice◊ ← rsync do $tmp◊ ᴐ Podmiana zmiennych◊ Preinstall, cp $tmp /, Postinstall
16
konfigurator
□ Przykładowy profil◊ Obsługa sysctl
sysctl.client.prod/.scripts/konfiguratorpostinstall.sh
sysctl.client.prod/etc/rcS.d/S31sysctl.sh
sysctl.client.prod/etc/init.d/sysctl.sh
sysctl.client.prod/etc/sysctl.d/00default.conf
◊ Ustawienia dla konkretnych aplikacjiggportal.web.lighttpd.prod/etc/sysctl.d/10lighttpd.conf
17
konfigurator
□ Dane◊ Stała w czasie propagacja (2-3 minuty)◊ ~ 1300 profili
□ Plany◊ Rozproszenie serwera subversion◊ Profile stabilne◊ upgrade aplikacji
18
DNS
# host 91.197.14.147147.14.197.91.inaddr.arpa domain name pointer ip9119714147.gadugadu.pl. $TTL 1200$ORIGIN gg.pl.@ IN SOA ns1.gadugadu.pl. root.gadugadu.pl. ( $GG_KONFIGURATOR_TIMESTAMP 3601 1800 1800000 3600 )
IN NS ns1.gadugadu.pl. IN NS ns2.gadugadu.pl.
@ IN MX 10 mx1@ IN MX 10 mx2
@ IN TXT "v=spf1 ip4:91.197.14.64/26 mx all"
# host gadugadu.plgadugadu.pl has address 91.197.14.141gadugadu.pl has address 91.197.14.140gadugadu.pl mail is handled by 5 mail.gadugadu.pl.
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
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
DNS
□ Gdzie jest lb portalu gadu-gadu.pl ?$ host gadugadu.pl
gadugadu.pl has address 91.197.14.141
$ host 91.197.14.141
141.14.197.91.inaddr.arpa domain name pointer ggportallb2eth01.atm.
$ host ggportallb2.xen
ggportallb2.xen is an alias for xen8.atm.
$ host ggportallb2.cat
ggportallb2.cat is an alias for switch2szafa9kolokacja1.atm.
... kolokacja1, szafa9, switch9, xen-8
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, Disk Util, RAM
◊ Specyficzne ◊ na podstawie profili◊ If profil ~= lighttpd.prod then check_http
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
collectd
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
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
Jun 8 11:52:54 bozar kernel: [ 3.648120] Console: switching to colour frame buffer device 160x50Jun 8 11:52:54 bozar kernel: [ 4.549613] REISERFS (device sda6): found reiserfs format "3.6" with standard journalJun 8 11:52:54 bozar kernel: [ 4.549631] REISERFS (device sda6): using ordered data modeJun 8 11:52:54 bozar kernel: [ 4.568333] REISERFS (device sda6): journal params: device sda6, size 8192, journal first block 18, max trans len 1024, max batch 900, max commit age 30, max trans age 30Jun 8 11:52:54 bozar kernel: [ 4.568597] REISERFS (device sda6): checking transaction log (sda6)Jun 8 11:52:54 bozar kernel: [ 4.626498] REISERFS (device sda6): Using r5 hash to sort namesJun 8 11:52:54 bozar kernel: [ 11.393141] Adding 979924k swap on /dev/sda1. Priority:1 extents:1 across:979924k Jun 8 11:52:54 bozar kernel: [ 11.523889] udev: starting version 151Jun 8 11:52:54 bozar kernel: [ 11.835781] lp: driver loaded but no devices foundJun 8 11:52:54 bozar kernel: [ 12.138927] Linux video capture interface: v2.00Jun 8 12:03:34 bozar su[1926]: + /dev/console root:michalJun 8 12:03:34 bozar su[1926]: pam_unix(su:session): session opened for user michal by (uid=0)Jun 8 12:03:34 bozar su[1926]: pam_unix(su:session): session closed for user michalJun 8 12:04:02 bozar su[1689]: pam_unix(su:session): session closed for user rootJun 8 12:39:03 bozar kernel: [ 2785.402576] wlan0: authenticatedJun 8 12:39:03 bozar kernel: [ 2785.420303] wlan0: associate with AP 00:0f:61:88:a7:41 (try 1)Jun 8 12:39:03 bozar kernel: [ 2785.421997] wlan0: RX AssocResp from 00:0f:61:88:a7:41 (capab=0x431 status=0 aid=10)Jun 8 12:39:03 bozar kernel: [ 2785.422001] wlan0: associatedJun 8 12:43:03 bozar kernel: [ 3025.379449] wlan0: direct probe to AP 00:0f:61:89:84:e1 (try 1)Jun 8 12:43:03 bozar kernel: [ 3025.385053] wlan0: direct probe respondedJun 8 12:57:05 bozar NetworkManager: <info> (wlan0): supplicant connection state: group handshake > completedJun 8 12:57:12 bozar sudo: pam_sm_authenticate: CalledJun 8 12:57:12 bozar sudo: pam_sm_authenticate: username = [michal]Jun 8 12:57:12 bozar sudo: pam_sm_authenticate: /home/michal is already mountedJun 8 12:03:34 bozar su[1926]: + /dev/console root:michalJun 8 12:03:34 bozar su[1926]: pam_unix(su:session): session opened for user michal by (uid=0)Jun 8 12:03:34 bozar su[1926]: pam_unix(su:session): session closed for user michalJun 8 12:04:02 bozar su[1689]: pam_unix(su:session): session closed for user rootJun 8 12:39:03 bozar kernel: [ 2785.402576] wlan0: authenticatedJun 8 12:39:03 bozar kernel: [ 2785.420303] wlan0: associate with AP 00:0f:61:88:a7:41 (try 1)Jun 8 12:39:03 bozar kernel: [ 2785.421997] wlan0: RX AssocResp from 00:0f:61:88:a7:41 (capab=0x431 status=0 aid=10)Jun 8 12:39:03 bozar kernel: [ 2785.422001] wlan0: associatedJun 8 12:43:03 bozar kernel: [ 3025.379449] wlan0: direct probe to AP 00:0f:61:89:84:e1 (try 1)Jun 8 12:43:03 bozar kernel: [ 3025.385053] wlan0: direct probe respondedJun 8 12:57:05 bozar NetworkManager: <info> (wlan0): supplicant connection state: group handshake > completedJun 8 12:57:12 bozar sudo: pam_sm_authenticate: CalledJun 8 12:57:12 bozar sudo: pam_sm_authenticate: username = [michal]Jun 8 12:57:12 bozar sudo: pam_sm_authenticate: /home/michal is already mounted
syslog
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
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
Podsumowanie
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
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
Dziękuję za uwagę