He configurado un par de servidores idénticos con matrices RAID (8 núcleos, 16 GB de RAM, 12x2 TB RAID6), 3 interfaces 10GigE, para alojar algunos servicios altamente disponibles.
Actualmente, los sistemas ejecutan Debian 7.9 Wheezy oldstable (porque corosync / pacemaker no está disponible en 8.x estable ni prueba).
- El rendimiento del disco local es de aproximadamente 900 MB / s de escritura, 1600 MB / s de lectura.
- El rendimiento de la red entre las máquinas supera los 700 MB / s.
- A través de iSCSI, cada máquina puede escribir en el almacenamiento de la otra a más de 700 MB / s.
Sin embargo, no importa la forma en que configuro DRBD, el rendimiento está limitado a 100 MB / s. Realmente parece un límite codificado. Puedo reducir el rendimiento de manera confiable ajustando la configuración, pero nunca supera 1 Gbit (se alcanzan 122 MB / s durante un par de segundos a la vez). Realmente estoy tirando de mi pelo en este caso.
- grano de vainilla simple 3.18.24 amd64
- drbd 8.9.2 ~ rc1-1 ~ bpo70 + 1
La configuración se divide en dos archivos global-common.conf
:
global {
usage-count no;
}
common {
handlers {
}
startup {
}
disk {
on-io-error detach;
# no-disk-flushes ;
}
net {
max-epoch-size 8192;
max-buffers 8192;
sndbuf-size 2097152;
}
syncer {
rate 4194304k;
al-extents 6433;
}
}
y cluster.res
:
resource rd0 {
protocol C;
on cl1 {
device /dev/drbd0;
disk /dev/sda4;
address 192.168.42.1:7788;
meta-disk internal;
}
on cl2 {
device /dev/drbd0;
disk /dev/sda4;
address 192.168.42.2:7788;
meta-disk internal;
}
}
Salida del cat /proc/drbd
esclavo:
version: 8.4.5 (api:1/proto:86-101)
srcversion: EDE19BAA3D4D4A0BEFD8CDE
0: cs:SyncTarget ro:Secondary/Secondary ds:Inconsistent/UpToDate C r-----
ns:0 nr:4462592 dw:4462592 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:16489499884
[>....................] sync'ed: 0.1% (16103024/16107384)M
finish: 49:20:03 speed: 92,828 (92,968) want: 102,400 K/sec
Salida desde vmstat 2
el maestro (ambas máquinas están casi completamente inactivas):
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 14952768 108712 446108 0 0 213 254 16 9 0 0 100 0
0 0 0 14952484 108712 446136 0 0 0 4 10063 1361 0 0 99 0
0 0 0 14952608 108712 446136 0 0 0 4 10057 1356 0 0 99 0
0 0 0 14952608 108720 446128 0 0 0 10 10063 1352 0 1 99 0
0 0 0 14951616 108720 446136 0 0 0 6 10175 1417 0 1 99 0
0 0 0 14951748 108720 446136 0 0 0 4 10172 1426 0 1 99 0
Salida de iperf
entre los dos servidores:
------------------------------------------------------------
Client connecting to cl2, TCP port 5001
TCP window size: 325 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.42.1 port 47900 connected with 192.168.42.2 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 6.87 GBytes 5.90 Gbits/sec
Aparentemente, se supone que la sincronización inicial es algo lenta, pero no tan lenta ... Además, en realidad no reacciona a ningún intento de acelerar la velocidad de sincronización como drbdadm disk-options --resync-rate=800M all
.
fuente
Respuestas:
En las versiones más recientes de DRBD (8.3.9 y más recientes) hay un controlador de resincronización dinámica que necesita ajuste. En versiones anteriores de DRBD, la configuración
syncer {rate;}
era suficiente; ahora se usa más como un punto de partida ligeramente sugerido para la velocidad de resincronización dinámica.El controlador de sincronización dinámica está sintonizado con la "configuración c" en la sección del disco de la configuración de DRBD (consulte los
$ man drbd.conf
detalles sobre cada una de estas configuraciones).Con 10Gbe entre estos nodos, y suponiendo baja latencia desde que se usa el protocolo C, la siguiente configuración debería hacer que las cosas se muevan más rápido:
Si todavía no estás contento, intenta
max-buffers
subir a 12k. Si todavía no estás contento, puedes intentar subirc-fill-target
en incrementos de 2M.fuente
Alguien en otro lugar me sugirió que usara esta configuración:
Y el rendimiento es excelente.
Editar: según @Matt Kereczman y otras sugerencias, finalmente he cambiado a esto:
La velocidad de resincronización es alta:
La velocidad de escritura es excelente durante la resincronización con estos ajustes (80% de la velocidad de escritura local, velocidad de cable completa):
La velocidad de lectura está bien:
Edición posterior:
Después de una resincronización completa, el rendimiento es muy bueno (escritura a velocidad de cable, lectura de velocidad local). La resincronización es rápida (5/6 horas) y no perjudica demasiado el rendimiento (lectura de velocidad de cable, escritura de velocidad de cable). Definitivamente me quedaré con c-plan-ahead en cero. Con valores distintos de cero, la resincronización es demasiado larga.
fuente
c-plan-ahead tiene que establecer un valor positivo para habilitar el controlador de velocidad de sincronización dinámica. disco
c-plan-ahead 15; // 5 * RTT / 0.1s unit,in my case is 15 c-fill-target 24; c-max-rate 720M;
fuente