IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Latència

Exemple: 1 latència

A typical Ethernet card has a latency less than 1ms. The Internet backbone as a whole also has very good latency. Here's a real-world example:

  • The distance from Stanford to Boston is 4320km.
  • The speed of light in vacuum is 300 x 10^6 m/s.
  • The speed of light in fibre is roughly 66% of the speed of light in vacuum.
  • The speed of light in fibre is 300 x 10^6 m/s * 0.66 = 200 x 10^6 m/s.
  • The one-way delay to Boston is 4320 km / 200 x 10^6 m/s = 21.6ms.
  • The round-trip time to Boston and back is 43.2ms.
  • The current ping time from Stanford to Boston over today's Internet is about 85ms:
  • So: the hardware of the Internet can currently achieve within a factor of two of the speed of light.

So the Internet is doing pretty well. It may get better with time, but we know it can never beat the speed of light. In other words, that 85ms round-trip time to Boston might reduce a bit, but it's never going to beat 43ms. The speed's going to get a bit better, but it's not going to double. We're already within a factor of two of the theoretical optimum. I think that's pretty good. Not many technologies can make that claim.

Compare this with a modem. Suppose you're 18km from your ISP (Internet Service Provider). At the speed of light in fibre (or the speed of electricity in copper, which is about the same) the latency should be:

18000 / (180 x 10^6 m/s) = 0.1ms 

The latency over your modem is actually over 100ms. Modems are currently operating at level that's 1000 times worse than the speed of light. They have a long way to go before they get close to what the rest of the Internet is achieving.

Of course no modem link is ever going to have a latency of 0.1ms. I'm not expecting that. The important issue is the total end-to-end transmission delay for a packet -- the time from the moment the software makes the call to send the packet to the moment the last bit of the packet arrives the destination and the packet delivered to the software at the receiving end. The total end-to-end transmission delay is made up of fixed latency (including the speed-of-light propagation delay), plus the transmission time. For a 36 byte packet the transmission time is 10ms (the time it takes to send 288 bits at a rate of 28800 bits per second). When the actual transmission time is about 10ms, working to make the latency 0.1ms would be silly. All that's needed is that the latency should not be so huge that it completely overshadows the transmission time. For a modem that has a transmission rate of 28.8kb/s, a sensible latency target to aim for is about 5ms.


Exemple: 2 latència

Quant temps tardaria en arribar un paquet en de Tortosa a Barcelona?

Jitter

Jitter És la variació de la latencia. Interessa que la latència sigue estable i baixa. No interessa un aument i que es colapse.

Throughput

Anar i tornar el paquet.

  • Maximum Segment Size (MSS): la quantitat de dades màxima per paquet.

El tpc es convenient perque:

  • S'asegura que arriva el paquet, ja que ha d'haver una resposta d'aquest.

EL utp:

  • no espera confirmacións, però al no esperar resposta anirà molt més ràpid.

Formula del càlcul del throughput

Depén de la latència i de la finestra.

TCP-Window-Size-in-bits / Latency-in-seconds = Bits-per-second-throughput


iperf

instal·lar

$ sudo apt-get install iperf

manual

$ man iperf

podem trobar opcions com:

  • -m, --print_mss
  • print TCP maximum segment size (MTU - TCP/IP header)
$ iperf -c 192.168.202.100 -m -P 10 -t 100


test amb nosaltres mateixos

$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

test udp

$ iperf -u -c 192.168.202.102
------------------------------------------------------------
Client connecting to 192.168.202.102, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size:   112 KByte (default)
------------------------------------------------------------
[  3] local 192.168.202.103 port 55113 connected with 192.168.202.102 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec
[  3] Sent 893 datagrams
[  3] Server Report:
[  3]  0.0-10.0 sec  1.25 MBytes  1.05 Mbits/sec  0.014 ms    0/  893 (0%)

lshw

bucar Bus PCI.

PCI-X


Smokeping

Fa gràfiques que mesuren la laténcia.

Somkepingggg.png

instal·lar

geany /etc/smokeping/config.d/Targets

*** Targets ***

probe = FPing

## You have to edit and uncomment all what you want below this.
# Please, refer to smokeping_config man page for more info
# The given adresses aren't real to avoid DoS.

menu = Top
title = Network Latency Grapher
remark = Welcome to the SmokePing website of 'A poorly \
    mantained site running Debian.'

+ Local

menu = Local
title = Local Network

++ LocalMachine

menu = Local Machine
title = This host
host = localhost


explicació

3AS3352 last 10800.png

  • Aquesta gràfica gestiona totes les ip que esta gestionan Telefonica.
  • RTT Round Trip Time (El temps que tarda el ping en anada i tornada)
  • Els pings verds són els correctes (per anar be sol tendriem de tenir pings verds)
  • Els pings blaus diuen que la conexió comença esta congestionada
  • Els pings vermells és el pitjor, són errors que vol dir que no arriva el ping.
  • El millor valor ha estat 43.4ms
  • El pitjor 47.8 ms
  • La mitjana del temps ha estat 44.0ms
Els cuadradets grisos son els Jitter, variació important de la laténcia.


fping

proba:

$ fping 8.8.8.8
  8.8.8.8 is alive

manual:

$ man fping

enviar varios pings:

$ fping -c 5 8.8.8.8
  8.8.8.8 : [0], 84 bytes, 68.0 ms (68.0 avg, 0% loss)
  8.8.8.8 : [1], 84 bytes, 62.4 ms (65.2 avg, 0% loss)
  8.8.8.8 : [2], 84 bytes, 62.6 ms (64.3 avg, 0% loss)
  8.8.8.8 : [3], 84 bytes, 71.1 ms (66.0 avg, 0% loss)
  8.8.8.8 : [4], 84 bytes, 86.5 ms (70.1 avg, 0% loss)
  
  8.8.8.8 : xmt/rcv/%loss = 5/5/0%, min/avg/max = 62.4/70.1/86.5

enviar varios pings en menys temps (cada 20ms):

$ fping -c 400 -p 20 8.8.8.8
8.8.8.8 : [0], 84 bytes, 63.8 ms (63.8 avg, 66% loss)
8.8.8.8 : [2], 84 bytes, 62.5 ms (63.2 avg, 50% loss)
8.8.8.8 : [3], 84 bytes, 62.6 ms (63.0 avg, 40% loss)
8.8.8.8 : [4], 84 bytes, 76.3 ms (66.3 avg, 42% loss)
...
8.8.8.8 : xmt/rcv/%loss = 400/332/17%, min/avg/max = 62.2/98.0/216

canviar la mida del paquet

$ fping -b 10000 -c 20 -p 20 192.168.0.8
  192.168.0.8 : [0], 4096 bytes, 0.99 ms (0.99 avg, 0% loss)
  192.168.0.8 : [1], 4096 bytes, 0.98 ms (0.98 avg, 0% loss)
  192.168.0.8 : [2], 4096 bytes, 0.99 ms (0.98 avg, 0% loss)
  ...
  192.168.0.8 : xmt/rcv/%loss = 20/20/0%, min/avg/max = 0.97/1.00/1.03

Path MTU Discovery

[[1]]
[2]

Export tem221.png

exemple

$ ping -M do -s 1900 www.upc.edu
From sergiBSF.local (192.168.111.2) icmp_seq=1 Frag needed and DF set (mtu = 1500)
From sergiBSF.local (192.168.111.2) icmp_seq=1 Frag needed and DF set (mtu = 1500)

en canvi

$ ping -M do -s 1472 www.upc.edu
PING www.upc.es (147.83.2.135) 1472(1500) bytes of data.
1480 bytes from barcelonatech-upc.eu (147.83.2.135): icmp_req=1 ttl=245 time=80.8 ms
1480 bytes from demoweb.upc.edu (147.83.2.135): icmp_req=2 ttl=245 time=79.0 ms

La capçalera IP minima es 20 bits, per aix+o 8 del icmp i 20 del ip envia 1500 bits.

mtu es la mida màxima del paquet que pots enviar, sinó tocarà fragmentarlo en dos o mes parts.


Veureu que 1932 és 40 bytes més petit i per això aquest paquet passa sense fragmentació.

Oco amb l'opció -s que no indica la mida total del paquet ping, cal sumar-li els 8bytes de ICMP.


La capçalera ICMP comença després del bit 160 de la capçalera IP (llevat que s'usin opcions IP).

Bits 160-167 168-175 176-183 184-191
160 Tipus Codi Checksum
192 ID Seqüència
  • Tipus - Tipus ICMP especificat a sota.
  • Codi - més concreció del tipus ICMP; i.e: un ICMP Destination Unreachable pot tenir aquest camp amb valor des del 1 al 15, amb diferent significat cadascun.
  • Checksum - Codi de comprovació d'error calculat a partir de la capçalera ICMP+dades, amb valor 0 per aquest camp.
  • ID - Conté el valor de l'ID, hauria de ser retornat en cas de ECHO REPLY.
  • Seqüència - Conté el valor de seqüència, hauria de ser retornat en cas de ECHO REPLY.

Llista de missatges de control permesos (Llista incompleta)

Alguns missatges de control permesos són (llista incompleta):
0 - Echo Reply
1 - Reservat
2 - Reservat
3 - Destination Unreachable
4 - Source Quench
5 - Redirect Message
6 - Direcció Alterna de Host
7 - Reservat
8 - Echo Request
9 - Anunci de Router
10 - Solicitud de Router
11 - Temps Excedit
12 - Problema de Parámetre
13 - Marca de temps
14 - Resposta de Marca de temps
15 - Petició d'Informació
16 - Resposta d'Informació
17 - Petició de Máscara de Direcció
18 - Resposta de Máscara de Direcció
19 - Reservat per a seguretat
20-29 - Reservat per a experiments de resistència
30 - Traceroute
31 - Error de Conversión de Datagrama
32 - Redirecció de Host Mòbil
33 - IPv6 On estàs?
34 - IPv6 On estic?
35 - Petició de Registre de Mòbil
36 - Resposta de Registre de Mòbil
37 - Petició de Nom de Domini
38 - Resposta de Nom de Domini
39 - SKIP Protocol d'Algorisme de Descobrimient
40 - Photuris, Errors de Seguretat
41-255 - Reservat
(Font: IANA ICMP Parameters)

opcions avançades

/proc/sys/net/ipv4


Aquesta comanda efectuara 4 pings per segon

$ sudo bash -c "echo 10 > icmp_ratelimit"

$ cat icmp_ratelimit
  12

La comanda següent limita la velocitat que et faran els pings. (bash -c serveix per a que la part de la dreta sigue superusuari).

$ sudo bash -c "echo 6169 > icmp_ratemask"

pàgina d'interés

[3]

ntop

instal·lar

$ sudo apt-get install ntop

configuració

$ sudo dpkg-reconfigure ntop

Export tem222.png

Export tem223.png

Executar ntop des de la línia de comande

$ sudo ntop
...................
ntop startup - waiting for user response!

Pressioneu Enter

ntop startup - waiting for user response!
Please enter the password for the admin user:

Introduïu la contrasenya. Cancel·leu l'execució amb Ctrl+C

$ sudo /etc/init.d/ntop start|stop|reload|restart

multiget

explicar


High Availability

http://acacha.org/mediawiki/index.php/HA


DRDB

DRBD és l'abreviació de Distributed Replicated Block Device. DRBD és un dispositiu de blocs (block device) dissenyat per a crear clusters HA (high-availability). L'Alta Disponibilitat s'aconsegueix creant un mirror entre dos dispositius de blocs utilitzant una xarxa que sol estar dedicada a aquesta tasca.

També es pot veure com un RAID 1 per xarxa (network RAID 1)

Pràctica

El que farem serà crear un Raid 1 a través de xarxa.

Montar dos maquines virtuals, una a cada company, fer 1 partició igual a cadascuna (ex3). Després seguir el exemple ubuntu.El fitxer de configuració será igual al dos llocs.


El primer que hem fet és crear dos discs durs idèntics a les màquines virtuals de cada ordinador, es a dir, a la màquina física 1 tenim instal·lada una màquina virtual amb una Ubuntu 12.04 amb el disc dur sdb1 de 2GB i a la màquina física 2 tenim instal·lada una màquina virtual amb una Ubuntu 11.04 amb el disc dur sdb1 de 2GB. Hem donat format a cadascun dels discs, en aquest cas ho hem fet amb el sistema de fitxers ext3. Finalment hem modificat el nom de les màquines virtuals per a posteriorment poder identificar-los amb un nom mes identificatiu mitjançant la xarxa.

Instal·lem el paquet amb la següent comanda a les dos màquines virtuals:

$ sudo apt-get install drbd8-utils

Els fitxers instal·lats son els següents:

$ [[sudo]] [[dpkg -L]] drbd8-utils
/.
/etc
/etc/init.d
/etc/init.d/drbd
/etc/ha.d
/etc/ha.d/resource.d
/etc/ha.d/resource.d/drbddisk
/etc/ha.d/resource.d/drbdupper
/etc/udev
/etc/udev/rules.d
/etc/udev/rules.d/65-drbd.rules
/etc/drbd.conf
/etc/drbd.d
/etc/drbd.d/global_common.conf
/etc/xen
/etc/xen/scripts
/etc/xen/scripts/block-drbd
/etc/bash_completion.d
/etc/bash_completion.d/drbdadm
/sbin
/sbin/drbdsetup
/sbin/drbdmeta
/sbin/drbdadm
/var
/var/lib
/var/lib/drbd
/var/lock
/usr
/usr/lib
/usr/lib/drbd
/usr/lib/drbd/outdate-peer.sh
/usr/lib/drbd/snapshot-resync-target-lvm.sh
/usr/lib/drbd/notify.sh
/usr/lib/drbd/crm-fence-peer.sh
/usr/lib/ocf
/usr/lib/ocf/resource.d
/usr/lib/ocf/resource.d/linbit
/usr/lib/ocf/resource.d/linbit/drbd
/usr/sbin
/usr/sbin/drbd-overview
/usr/share
/usr/share/cluster
/usr/share/cluster/drbd.sh
/usr/share/cluster/drbd.metadata
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/drbd.8.gz
/usr/share/man/man8/drbdmeta.8.gz
/usr/share/man/man8/drbddisk.8.gz
/usr/share/man/man8/drbdsetup.8.gz
/usr/share/man/man8/drbdadm.8.gz
/usr/share/man/man5
/usr/share/man/man5/drbd.conf.5.gz
/usr/share/doc
/usr/share/doc/drbd8-utils
/usr/share/doc/drbd8-utils/copyright
/usr/share/doc/drbd8-utils/changelog.Debian.gz
/usr/lib/drbd/unsnapshot-resync-target-lvm.sh
/usr/lib/drbd/notify-split-brain.sh
/usr/lib/drbd/notify-io-error.sh
/usr/lib/drbd/notify-pri-on-incon-degr.sh
/usr/lib/drbd/notify-pri-lost.sh
/usr/lib/drbd/notify-pri-lost-after-sb.sh
/usr/lib/drbd/notify-emergency-reboot.sh
/usr/lib/drbd/notify-emergency-shutdown.sh
/usr/lib/drbd/notify-out-of-sync.sh
/usr/lib/drbd/crm-unfence-peer.sh
  • Modifiquem el fitxer /etc/hosts per tal de poder establir una correcta comunicació amb el nom de les màquines.
  • Configuració de la primera màquina virtual que tindrà el nom de drbd02 (ubuntu 12.04):
127.0.0.1	localhost
127.0.1.1	drbd02
192.168.202.202	drbd02

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
  • Configuració de la segona màquina virtual que tindrà el nom de drbd01 (ubuntu 11.04):
127.0.0.1	localhost
127.0.1.1	drbd01
192.168.202.208	drbd01

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
  • Ara modifiquem el fitxer /etc/drbd.conf per tal que els discs durs es vegin per la xarxa. Configuració del fitxer a la primera màquina virtual (ubuntu 12.04 - drbd02) i configuració del fitxer a la segona màquina virtual (ubuntu 11.04 - drbd01):
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

#include "drbd.d/global_common.conf";
#include "drbd.d/*.res";
global { usage-count no; }
common { syncer { rate 100M; } }
resource r0 {
        protocol C;
        startup {
                wfc-timeout  15;
                degr-wfc-timeout 60;
        }
        net {
                cram-hmac-alg sha1;
                shared-secret "secret";
        }
        on drbd01 {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 192.168.202.208:7788;
                meta-disk internal;
        }
        on drbd02 {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 192.168.202.202:7788;
                meta-disk internal;
        }
}
  • Desprès de de modificar l'anterior fitxer hem de iniciar el servei amb la següent comanda:
sudo /etc/init.d/drbd start

IMPORTANT: Cal ficar alguna dada al disc per a poder continuar. Ho podem fer amb la següent comanda:

dd if=/dev/zero of=/dev/sdb1
  • A continuació executem la següent comanda als dos hosts drbd01 - drbd02 per tal d'iniciar el metadata storage:
sudo drbdadm create-md r0
  • Executem al host drbd02, el secundari, amb la 12.04 la següent comanda i la deixem executant-se:
cat /proc/drbd

Watch-drbd.png

  • Ara al host drbd01, el primari, amb la Ubuntu 11.04 executem la següent comanda:
sudo drbdadm -- --overwrite-data-of-peer primary all
  • Finalment afegim el sistema de fitxers a /dev/drbd0 i el montem:
sudo mkfs.ext3 /dev/drbd0
sudo mount /dev/drbd0 /srv

Proves de sincronisme

  • Primer hem de copiar fitxers aleatoris a la partició muntada anteriorment:
sudo cp -r /etc/default /srv
  • A continuació desmuntem la partició amb la següent comanda:
sudo umount /srv
  • Es l'hora de canviar el primari pel secundari i el secundari pel primari amb les següents comandes:
sudo drbdadm secondary r0
sudo drbdadm primary r0
  • Ara ja podem muntar la partició:
sudo mount /dev/drbd0 /srv
  • Finalment mirem el fitxer /proc/drbd del drbd01 (secundari):
[email protected]:/$ cat /proc/drbd
Every 5,0s: cat /proc/drbd                                                    Tue May  8 20:36:16 2012

version: 8.3.9 (api:88/proto:86-95)
srcversion: CF228D42875CF3A43F2945A 
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:2148020 nr:4 dw:66488 dr:2082206 al:25 bm:144 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
  • Per últim mirem el fitxer /proc/drbd del drbd02 (primari):
[email protected]:/$ cat /proc/drbd
Every 5,0s: cat /proc/drbd                                                    Tue May  8 20:40:16 2012

version: 8.3.11 (api:88/proto:86-96)
srcversion: 71955441799F513ACA6DA60
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:4 nr:8 dw:12 dr:1025 al:1 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

HighlyAvailableNFS

https://help.ubuntu.com/community/HighlyAvailableNFS

Después de la instalación de Ubuntu en ambos servidores, vamos a instalar los paquetes necesarios para configurar una interfaz de red enlazado, y en el giro asignar direcciones IP estáticas a bond0 del nodo 1 y nodo 2. Utilizando una interfaz vinculada a evitar que un único punto de fallo si el usuario de la red no accesible. A medida que va a utilizar round-robin para la interfaz en condiciones de servidumbre, esto también proporcionar equilibrio de carga en la interfaz.

apt-get install ifenslave

Añada lo siguiente a / archivo / etc modprobe.d / aliases.conf:

alias bond0 bonding
opciones modo de enlace = 0 miimon = 100 downdelay = 200 = 200 updelay

Modificar la configuración de nuestra red y asignar eth0 y eth1 como esclavos de bond0. Ejemplo de / etc / network / interfaces:

# La interfaz de red de bucle invertido
Lo automático
iface inet loopback he aquí 

# El accesible al usuario de interfaz de red
auto bond0
iface bond0 inet static
        la dirección 10.10.1.251
        máscara de red 255.255.255.0
        difusión 10.10.1.255
        la red 10.10.1.0
        puerta de entrada 10.10.1.1
        a / sbin / ifenslave bond0 eth0
        a / sbin / ifenslave bond0 eth1

No necesitamos definir eth0 o eth1 en interfaces / etc / network /, ya que va a ser educado cuando el bono sube. Si para fines de documentación, que desea incluir en las interfaces de / etc / network / lo siguiente debe ser la configuración:

Número de miembros de la interfaz de red en régimen de servidumbre
auto eth0
iface eth0 inet manual de
auto eth1
iface eth1 inet manual de

Usted puede ver el estado actual de nuestra interfaz vinculada por:

cat / proc/net/bonding/bond0

Tenga en cuenta: Una interfaz de red que se soporta múltiples modos. En este ejemplo eth0 y eth1 están en una configuración de round-robin.

Enllaços externs

  • iperf
  • Latència
  • Throughput