Barcamp 08/06/2010

35
08/06/2010 Automatyzacja infrastruktury Gadu-Gadu Michał Gruchała [email protected]

description

 

Transcript of Barcamp 08/06/2010

Page 1: Barcamp 08/06/2010

08/06/2010

Automatyzacja infrastruktury Gadu-Gadu

Michał Gruchała

[email protected]

Page 2: Barcamp 08/06/2010

2

□ Specyfika / Zasady□ Platforma/Wirtualizacja□ DNS□ Konfigurator□ Nagios□ collectd□ Podsumowanie

Page 3: Barcamp 08/06/2010

3

Specyfika / Zasady

Page 4: Barcamp 08/06/2010

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

Page 5: Barcamp 08/06/2010

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

Page 6: Barcamp 08/06/2010

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

Page 7: Barcamp 08/06/2010

7

Wirtualizacja

Page 8: Barcamp 08/06/2010

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

Page 9: Barcamp 08/06/2010

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

Page 10: Barcamp 08/06/2010

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

Page 11: Barcamp 08/06/2010

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

Page 12: Barcamp 08/06/2010

12

konfigurator

Page 13: Barcamp 08/06/2010

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

Page 14: Barcamp 08/06/2010

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

Page 15: Barcamp 08/06/2010

15

konfigurator

□ Propagacja zmian◊ User

◊ commit◊ Serwer SVN

◊ hooks/post-commit

◊ Maszyna kliencka◊ → webservice◊ ← rsync do $tmp◊ ᴐ Podmiana zmiennych◊ Preinstall, cp $tmp /, Postinstall

Page 16: Barcamp 08/06/2010

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 aplikacjiggportal.web.lighttpd.prod/etc/sysctl.d/10­lighttpd.conf

Page 17: Barcamp 08/06/2010

17

konfigurator

□ Dane◊ Stała w czasie propagacja (2-3 minuty)◊ ~ 1300 profili

□ Plany◊ Rozproszenie serwera subversion◊ Profile stabilne◊ upgrade aplikacji

Page 18: Barcamp 08/06/2010

18

DNS

# host 91.197.14.147147.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.plgadu­gadu.pl has address 91.197.14.141gadu­gadu.pl has address 91.197.14.140gadu­gadu.pl mail is handled by 5 mail.gadu­gadu.pl.

Page 19: Barcamp 08/06/2010

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)

Page 20: Barcamp 08/06/2010

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

Page 21: Barcamp 08/06/2010

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

Page 22: Barcamp 08/06/2010

22

DNS

□ Dane◊ LAN

◊ 8k zapytań/s◊ 10k wpisów

◊ WAN◊ 500 domen◊ 800 zapytań/s

Page 23: Barcamp 08/06/2010

23

nagios

Page 24: Barcamp 08/06/2010

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

Page 25: Barcamp 08/06/2010

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

Page 26: Barcamp 08/06/2010

26

collectd

Page 27: Barcamp 08/06/2010

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-*→

Page 28: Barcamp 08/06/2010

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

Page 29: Barcamp 08/06/2010

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

Page 30: Barcamp 08/06/2010

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

Page 31: Barcamp 08/06/2010

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 ;/

Page 32: Barcamp 08/06/2010

32

Podsumowanie

Page 33: Barcamp 08/06/2010

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

Page 34: Barcamp 08/06/2010

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

Page 35: Barcamp 08/06/2010

35

Dziękuję za uwagę