Solución 1:
En las versiones más recientes de DRBD (8.3.9 y posteriores) hay un controlador de resincronización dinámica que necesita ajuste. En versiones anteriores de DRBD configurando el syncer {rate;}
fue 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 se sintoniza con la "configuración c" en la sección de disco de la configuración de DRBD (ver $ man drbd.conf
para obtener detalles sobre cada una de estas configuraciones).
Con 10 Gbe entre estos nodos y suponiendo una latencia baja ya que se usa el protocolo C, la siguiente configuración debería hacer que las cosas se muevan más rápido:
resource rd0 { protocol C; disk { c-fill-target 10M; c-max-rate 700M; c-plan-ahead 7; c-min-rate 4M; } 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; } }
Si aún no está satisfecho, intente cumplir max-buffers
hasta 12k. Si aún no está satisfecho, puede intentar subir c-fill-target
en incrementos de 2M.
Solución 2:
Alguien en otro lugar me sugirió que usara esta configuración:
disk {
on-io-error detach;
c-plan-ahead 0;
}
net {
max-epoch-size 20000;
max-buffers 131072;
}
Y el rendimiento es excelente.
Editar: Según @Matt Kereczman y otras sugerencias, finalmente cambié a esto:
disk {
on-io-error detach;
no-disk-flushes ;
no-disk-barrier;
c-plan-ahead 0;
c-fill-target 24M;
c-min-rate 80M;
c-max-rate 720M;
}
net {
# max-epoch-size 20000;
max-buffers 36k;
sndbuf-size 1024k ;
rcvbuf-size 2048k;
}
La velocidad de resincronización es alta:
cat /proc/drbd
version: 8.4.5 (api:1/proto:86-101)
srcversion: EDE19BAA3D4D4A0BEFD8CDE
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-
ns:133246146 nr:0 dw:2087494 dr:131187797 al:530 bm:0 lo:0 pe:5 ua:106 ap:0 ep:1 wo:d oos:4602377004
[>....................] sync'ed: 2.8% (4494508/4622592)M
finish: 1:52:27 speed: 682,064 (646,096) K/sec
La velocidad de escritura es excelente durante la resincronización con esta configuración (80 % de la velocidad de escritura local, velocidad de cable completa):
# dd if=/dev/zero of=./testdd bs=1M count=20k
20480+0 enregistrements lus
20480+0 enregistrements écrits
21474836480 octets (21 GB) copiés, 29,3731 s, 731 MB/s
La velocidad de lectura está bien:
# dd if=testdd bs=1M count=20k of=/dev/null
20480+0 enregistrements lus
20480+0 enregistrements écrits
21474836480 octets (21 GB) copiés, 29,4538 s, 729 MB/s
Edición posterior:
Después de una resincronización completa, el rendimiento es muy bueno (escritura a velocidad de cable, lectura a velocidad local). La resincronización es rápida (5/6 horas) y no daña demasiado el rendimiento (lectura a velocidad de cable, escritura a velocidad de cable). Definitivamente me quedaré con c-plan-ahead en cero. Con valores distintos de cero, la resincronización es demasiado larga.
Solución 3:
c-plan-ahead tiene que establecer un valor positivo para habilitar la velocidad de sincronización dinámica controller.disk
c-plan-ahead 15; // 5 * RTT / 0.1s unit,in my case is 15
c-fill-target 24;
c-max-rate 720M;