Kategoriarkiv: MySQL

Bloggys infrastruktur

Tänkte beskriva lite om hur Bloggy är uppbyggt rent tekniskt. En förfrågan till Bloggy går ungefär igenom följande lager:

MySQL <- Sphinx <- Memcached <- Apache <- Varnishd

Varnish är en högpresterande webb frontend-proxy utvecklat av ett norskt företag och används  exempelvis av Aftonbladet. Detta går att utläsa genom HTTP-headern X-Varnish.

Denna frontend-cache används för att hantera alla statiska filer såsom CSS och bilder. Apache behöver jag inte skriva så mycket om men sedan kommer en intressant del och det är memcached som är utvecklat av Facebook.

De flesta SQL-frågor går genom memcached för att cachas ett antal sekunder, varje SQL-fråga är noggrant studerad hur länge den behöver cachas.

Sphinx är också en intressant del eftersom den gör att fulltextsökningar mot olika tabeller i MySQL-databasen. Sphinx tar hand om runt 40 sökningar i sekunden.

Sedan så kommer MySQL som hanterar allt annat som inte fångas upp av något av ovanstående system. Alla frågor har optimerats så att filsorteringar (file sort) och dylikt används minimalt. Jag har även tidigare (2007) bloggat om hur du kan optimera din MySQL databas.

Felsökning Apache

En av mina servrar börjar gå på knäna och antalet Apache-processer låg runt 200 stycken vilket är det maxtak jag definerat med ”RLimitNPROC 200 200” i config-filen för Apache.

Jag började min felsökning  och som vanligt så undersökte jag MySQL-datbasen vad det kan vara som kan gå långsamt men hittade inget där (show processlist samt mysql-slow.log).

Men efter lite tips från Webmasters Network så la jag till ExtendedStatus On och där uppenbarade det sig vilken virtuell host som tog all kapacitet och vilket script.

Så jag la till en ”LIMIT 1” i slutet på en SQL-update och la en bild på ett CDN som ofta hämtades och vips så sjönk antelet Apache-processer till enbart 50 stycken:

Total accesses: 28353 – Total Traffic: 137.8 MB
CPU Usage: u6.84 s1.18 cu.39 cs0 – .249% CPU load
8.39 requests/sec – 41.7 kB/second – 5095 B/request
45 requests currently being processed, 7 idle workers

Test av SliceHost

Fick några minuter över i dag så testade den amerikanska VPS-tjänsten SliceHost som Rackspace äger. Det tog enbart 5 minter för mig att vara i gång och konfigurera den Ubuntu-version som jag valt. Ser lovande ut än så länge och avser att flytta download11.com dit inom en snar framtid då majoriteten av besökarna är från andra sidan atlanten (download11 använder sig av SimpleCDN sedan tidigare).

Jag återkommer med en utförligare rapport med eventuellt för och nackdelar.

Prissättningen ser ut enligt följande:

slicehost

Såg även att svenska Crystone startat en ny VPS-tjänst på Server.se

Avlasta din webbsajt med ett CDN

CDN står för Content Delievery Network och är namnet på en tjänst där en eller flera servrar tar hand om din lagring på webben. Exempelvis så har Microsoft använt sig av Akamai och liknande tjänster för att se till att uppdateringar till Windows alltid går snabbt att ladda hem.

Det finns ett antal CDN-leverantörer och priser och funktionalitet skiljer sig en hel del beroende på vilken man väljer men man brukar få betala per överförd gigabyte.

Så hur kan ett CDN hjälpa dig undrar du kanske? Jo du kanske har en webbsajt med massor av statisk information såsom CSS, bilder eller kanske tunga filmer och här kommer ett CDN in i bilden.

Jag gjorde en snabb koll på min sajt download11.com över vilka filer som laddades in oftast:

/style.css
/bg.gif
/navigation.css
/nifty.js
/header-bg.png
/images/feed16.png
/images/download.gif
/favicon.ico

Och samtliga av dessa filer kan avlasta min webbserver genom att överföras till en CDN-leverantör. Jag testar för tillfället SimpleCDN.com och det tog mig max 20 minuter innan jag var igång och de serverade filer åt mig.

Jag har nu ett CNAME för files.download11.com som går till files.simplecdn.net där mina statiska filer nu ligger (files är ett namn som jag själv valt för min ”upload bucket”).

Bra CDN-leverantörer använder sig även av anycast-teknik vilket även innebär att de är mindre känsliga för belastningsattacker då samma IP-nummer återfinns på flera ställen.

Tips på några fler CDN-leverantörer förutom Akamai och SimpleCDN:

Övervaka din server med Munin

Munin är en trevlig klient/server mjukvara som övervakar din servers prestanda och visar denna på ett antal fina grafer. Enligt dem själva:

Munin the monitoring tool surveys all your computers and remembers what it saw. It presents all the information in graphs through a web interface. Its emphasis is on plug and play capabilities. After completing a installation a high number of monitoring plugins will be playing with no more effort.

Så jag tog mig tid för några dagar sedan och installerade server-delen på en av mina servrar samt klient-delen på ett antal andra servrar där jag ville övervaka prestandan och här kommer ett axplock med några av de grafer som genereras:

Servern där bloggy.se ligger:

Severn där bloggz.se, bloggvarde.se, bloggbackup.se mfl. ligger:

Antalet MySQL-frågor per sekund

Installation av Munin

Installationen är tämligen trivial iallafall under Unbutu och installationen sker enligt följande på server-delen:

$ sudo apt-get install munin

Och på klienterna (noderna):

$ sudo apt-get install munin-node

Efter detta så skapas en katalog /etc/munin/ där munin.conf finns på servern och munin-node.conf finns på klienterna (server och klient-del kan så klart köras på samma server).

På klienterna behövs enbart en rad läggas till i munin-node.conf och det är vilket IP-nummer som ska få behörighet att hämta statistik-data, exempelvis:

allow ^83\.23\.91\.1$

På servern så läggs följande rader till:

[bloggy]
    address 79.99.2.33
    use_node_name yes

Efter några minuter bör filer skapas i katalogen /var/www/munin/ som du sedan måste göra tillgänlig för din webbserver.

Om du som jag skulle sakna någon av graferna så kontrollera symlänkarna i katalogen /etc/munin/plugins. Jag var tvungen att lägga till så att /etc/munin/plugins/apache_processes symlänkades till /usr/share/munin/plugins/apache_processes för att få graferna för antalet apache-processer.

Övervaka dina tjänster med Monit

Jag har haft lite problem med Apache2 + PHP5 och en nödlösning just nu är att använda en mjukvara som håller koll på om Apache inte svarar som den ska. Och i mina sökningar efter en mjukvara som är kompetent och kan göra detta så hittade jag Monit.

Monit installeras och konfigureras på under 10 minuter enligt följande:

# apt-get install monit

editera /etc/monit/monitrc och lägg dit exempelvis följande rader:

check process apache2 with pidfile /var/run/apache2.pid
group apache
start program = ”/etc/init.d/apache2 start”
stop program = ”/etc/init.d/apache2 stop”
if failed host 127.0.0.1 port 80
protocol http then restart
if 5 restarts within 5 cycles then timeout

set mailserver localhost

set mail-format { from: [email protected]
subject: $SERVICE $EVENT at $DATE
message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
}

set alert [email protected]
set logfile syslog facility log_daemon

Så var det klart! Nu övervakas tjänsten och lirar den inte så startas den om automagiskt (om nu en omstart hjälper problemet i fråga). Andra tjänster såsom sshd och mysql kan så klart också övervakas av monit.

Monit hittas: http://www.tildeslash.com/monit/

Bloggkoll, värderingar, brevspam, fonter och slumptal

Markus Jalmerot har gjort en trevlig och grundlig utvärdering av två svenska modebloggare och en vacker dag så kanske jag tar och anammar vissa av dessa parametrar till BloggVärde.se:s värdering. IDG skriver även om detta.

**

Mattias Swenson som enligt mig är en av Sveriges yngsta och hetaste entreprenörer som bl.a står bakom forumet Swedish Startups berättar att BloggKoll nu finns en en alldeles ny fräsch version. Även Christian RudolfDisruptive har bloggat om detta.

**

Dan Nilsson slutar aldrig att förvånas och tar till nya guerilla marknadsföringsmetoder för att få ut budskapet om sin nya E-butik RoligaPrylar.se

**

Antalet bloggar som blivit värderade på BloggVärde.se överstiger när som helst 10 000! Det är helt sjukt vilken genomslagskraft sajten har fått. Testade att göra några slagningar i databasen och kom fram till att ungefär 300 svenskar skulle kunna blogga på heltid (räknat på medellön 222 520/år). Men som vanligt så ska man nog inte lita allt för mycket på mina hemmatränade apor!

**

Gillar du Naive Bayes, NGram analys eller kanske bygga dataminingplattformar tillsammans med Marcus Herou som är en av Sveriges främsta utvecklare? Då är Tailsweep rätt ställe för dig.

**

Read Write Web skriver att FontStruct är en ny webbtjänst som låter dig bygga egna fonter direkt på webben och sedan dela med dig av dessa. Jag gillar’t! Är du en riktig design nörd så kan du även gå direkt till överkursen och ladda hem FontForge:

An outline font editor that lets you create your own postscript, truetype, opentype, cid-keyed, multi-master, cff, svg and bitmap (bdf, FON, NFNT) fonts, or edit existing ones. Also lets you convert one format to another. FontForge has support for many macintosh font formats.

**

Lita inte för mycket på dina slumptal, speciellt inte om du använder OpenSSL tillsammans med Debian, Ubuntu eller Knoppix. Luciano Bello har nämligen hittat en brist som gör det möjligt att förutse genererat nyckelmaterial. Testa om du har dåliga nycklar med följande program. Beskrivning:

# Debian/OpenSSL Weak Key Detector
#
# Written by Florian Weimer <[email protected]>, with blacklist data
# from Kees Cook, Peter Palfrader and James Strandboge.

Update: Detta gäller så klart även SSH-nycklar. Se metasploit.com/users/hdm/tools/debian-openssl

When creating a new OpenSSH key, there are only 32,767 possible outcomes for a given architecture, key size, and key type.

**

Du glömmer väl inte heller att gå på det event som Swedish Startups samt Booli håller i? Jag kan tyvärr inte närvara.

**

Puust, så här mycket text som inte varit kod har jag inte skrivit på länge.

Uppgradering av Ubuntu

Den Co-Location server som har hand om nästan samtliga av mina projekt körde tidigare Ubuntu 6.04 LTS så jag kände att det var dags att uppgradera till den nyare versionen Ubuntu 8.04 LTS Server Edition. LTS står för Long Term Suport och betyder att det kommer att släppas patchar till denna version fram till år 2013.

Genom att följa uppgraderingsförfarandet som presenteras på Ubuntu:s sida så gick uppgraderingen näst intill smärtfritt:

Steg 1, uppgradera till version 7.10

sudo aptitude install update-manager-core
sudo do-release-upgrade

Svara på frågor, starta om.

Steg 2, uppgradera till version 8.04

sudo do-release-upgrade

Svara på frågor, starta om.

De problem jag stötte på var enligt följande:

AppArmor

AppArmor är påslaget standard i version 8.04 och aktiverat i ”complain” mode för exempelvis MySQL och har du annat än standarsökvägar till filerna där databaserna ligger så får du följande felmeddelande:

audit(1210329486.124:240): type=1502 operation=”inode_permission” requested_mask=”r::” denied_mask=”r::” name=”/u0/mysql/domaintool/title.frm” pid=10822 profile=”/usr/sbin/mysqld” namespace=”default”

Genom att lägga till en rad /etc/apparmor.d/usr.sbin.mysqld som förklarar att även sökvägen /u0/mysql/ skall innefattas så slutar felmeddelandet att dyka upp.

Vill du läsa mer om AppArmor kan du göra det här:

Memcache

Av någon konstig anledning så försvinner raden extension=memcache.so som återfinns längst ner i /etc/php5/apache2/php.ini vilket resulterar i att memcache inte fungerar och följande felmeddelande dyker upp i webbserver loggarna:

PHP Fatal error: Class ‘Memcache’ not found in /var/www/bloggnytt.se/docs/memcacheAPI.inc.php on line 33

Klart!

Uppgraderingen genomfördes med en knacklig 3G-uppkoppling över ssh.

Populäraste inläggen

Till Er nya bloggläsare och gamla rävar så tänkte jag skriva en liten lista över de inlägg som är populärast här på bloggen:

Och av någon anledning så är sidan ”Om mig” mycket populär.