Codificación de borrado
Ceph puede cargar uno de los muchos algoritmos de borrado de código. El más antiguo y utilizado con más frecuencia es el algoritmo Reed-Solomon . Un código de borrado es un código de corrección de errores de reenvío (FEC). El código FEC transforma un mensaje de fragmentos K en un mensaje más largo que se denomina palabra de código de fragmentos N , de modo que Ceph puede recuperar el mensaje original de un subconjunto de fragmentos N .
Más específicamente, N = K+M donde la variable K es el número original de fragmentos de datos. La variable M representa los fragmentos adicionales o redundantes que el algoritmo de código de borrado añade para proporcionar protección contra anomalías. La variable N es el número total de fragmentos que se crean después del proceso de codificación de borrado. El valor de M es N-K , lo que significa que el algoritmo calcula N-K fragmentos redundantes de K fragmentos de datos originales. Este enfoque garantiza que Ceph pueda acceder a todos los datos originales. El sistema es resistente a errores arbitrarios de N-K . Por ejemplo, en una configuración de 10 K de 16 N , o codificación de borrado 10/16, el algoritmo de código de borrado añade seis fragmentos adicionales a los 10 fragmentos base K. Por ejemplo, en una configuración de M = K-N o 16-10 = 6 , Ceph distribuirá los 16 fragmentos N entre 16 OSD. Es posible que el archivo original se reconstruya a partir de los 10 fragmentos de N verificados incluso si fallan 6 OSD, lo que garantiza que el clúster de IBM Storage Ceph no perderá datos y, por lo tanto, garantiza un alto nivel de tolerancia a errores.
Al igual que las agrupaciones replicadas, en una agrupación codificada por borrado, el OSD primario del conjunto activo recibe todas las operaciones de grabación. En las agrupaciones replicadas, Ceph realiza una copia profunda de cada objeto del grupo de colocación en los OSD secundarios del conjunto. Para la codificación de borrado, el proceso es un poco diferente. Una agrupación codificada de borrado almacena cada objeto como fragmentos K+M . Se divide en K fragmentos de datos y M fragmentos de codificación. La agrupación está configurada para tener un tamaño de K+M para que Ceph almacene cada fragmento en un OSD en el conjunto activo. Ceph almacena el rango del fragmento como un atributo del objeto. El OSD primario es responsable de codificar la carga útil en fragmentos K+M y los envía a los otros OSD. El OSD primario también es responsable de mantener una versión autorizada de los registros de grupo de colocación.
Por ejemplo, en una configuración típica, un administrador del sistema crea una agrupación codificada de borrado para utilizar seis OSD y soportar la pérdida de dos de ellos. Es decir, (K+M = 6) tales que (M = 2).
Cuando Ceph escribe el objeto NYAN que contiene ABCDEFGHIJKL en la agrupación, el algoritmo de codificación de borrado divide el contenido en cuatro fragmentos de datos simplemente dividiendo el contenido en cuatro partes: ABC, DEF, GHIy JKL. El algoritmo rellenará el contenido si la longitud del contenido no es un múltiplo de K. La función también crea dos fragmentos de codificación: el quinto con YXY y el sexto con QGC. Ceph almacena cada fragmento en un OSD en el conjunto activo con un shard_id correspondiente a la posición del conjunto activo, donde almacena los fragmentos en objetos que tienen el mismo nombre, NYAN, pero residen en distintos OSD. Por ejemplo, el fragmento 1 contiene ABC y Ceph lo almacena en OSD5 mientras que el fragmento 5 contiene YXY y Ceph lo almacena en OSD4.

En un escenario de recuperación, el cliente intenta leer el objeto NYAN de la agrupación codificada por borrado leyendo los fragmentos del 1 al 6. El OSD informa al algoritmo de que faltan los fragmentos 2 y 6. Por ejemplo, es posible que el OSD primario no lea el fragmento 6 porque el OSD6 está fuera, y es posible que no lea el fragmento 2, porque OSD2 era el más lento y su fragmento no se tenía en cuenta. Sin embargo, cuando el algoritmo tiene cuatro fragmentos, lee los cuatro fragmentos: el fragmento 1 que contiene ABC, el fragmento 3 que contiene GHI, el fragmento 4 que contiene JKLy el fragmento 5 que contiene YXY. A continuación, vuelve a crear el contenido original del objeto ABCDEFGHIJKLy el contenido original del fragmento 6, que contenía QGC.
lrc) en el perfil de código de borrado, se crean fragmentos adicionales y se necesitan menos OSD para recuperarse. Por ejemplo, en una lrc configuración de perfil K=4 M=2 L=3, el algoritmo crea seis fragmentos (K+M), tal como lo haría el plug-in jerasure , pero el valor de localidad (L=3) requiere que el algoritmo cree 2 fragmentos más localmente. El algoritmo crea los fragmentos adicionales como tales, (K+M)/L. Si el OSD que contiene el fragmento 0 falla, este fragmento se puede recuperar utilizando los fragmentos 1, 2 y el primer fragmento local. En este caso, el algoritmo sólo requiere 3 fragmentos para la recuperación en lugar de 5.Referencia
Para obtener más información sobre CRUSH, los perfiles de codificación de borrado y los plugins, consulte Estrategias de almacenamiento.
Para obtener más detalles sobre la correlación de objetos, consulte Correlación de objetos de cliente Ceph.