Couchbase Server 4.0 introdujo los Índices Secundarios Globales (GSI) para soportar el motor de consultas N1QL. Ahora, con Couchbase Server 5.0 (a partir de la versión para desarrolladores de abril), hemos añadido la posibilidad de replicar y reequilibrar automáticamente estos índices.
Al principio, las IGE se gestionaban de forma muy manual:
- Para garantizar la alta disponibilidad, el usuario final configuraba manualmente varios índices con la misma definición y especificaba en qué nodos del clúster debían desplegarse. Si fallaba un nodo, el usuario final tenía que volver a crear manualmente el índice que se había perdido.
- Cuando se añadían y eliminaban nodos para ampliar, actualizar o tras un fallo, el usuario final tenía que mover y volver a crear manualmente los índices en los nodos que entraban y salían.
Estoy muy orgulloso de informar que estas dos tareas operativas clave están ahora incorporadas automáticamente a Couchbase Server y te guiaré a través de ellas aquí.
Replicación GSI
Una de las peticiones más frecuentes que escuchamos de los clientes tras la introducción de los GSI en la versión 4.0 fue la gestión automática de la replicación: "Sólo quiero decirle cuántas réplicas y que lo resuelva".
Ahora puedes:
1 |
CREAR ÍNDICE `idx_nombre_aeropuerto` EN `viaje-muestra`(`nombre del aeropuerto`) CON {"num_replica":1}; |
Con un simple comando, Couchbase lo hará:
- Crear dos índices idénticos
- Despliega y construye esos índices en nodos separados
- Respetar la configuración Rack-Zone Awareness
Si no hay suficientes nodos disponibles, aparecerá rápidamente un mensaje de error:
1 2 3 4 5 6 7 |
[ { "código": 5000, "msg": "GSI CreateIndex() - causa: No se puede crear el índice. No hay suficientes nodos indexadores para crear un índice con un número de réplicas de 2"., "query_from_user": "CREATE INDEX `idx_airportname` ON `travel-sample`(`airportname`) WITH {\"num_replica\":2};" } ] |
Muy guay, ¿eh?
Al usar "num_replica", estás confiando en Couchbase para determinar la distribución adecuada del índice dentro del cluster. Para un control aún más preciso, especifica los nodos exactos en los que deseas que se replique un único índice:
1 |
CREAR ÍNDICE `idx_nombre_aeropuerto` EN `viaje-muestra`(`nombre del aeropuerto`) CON {"nodos":["ec2-35-167-251-49.us-west-2.compute.amazonaws.com:8091", "ec2-54-69-121-55.us-west-2.compute.amazonaws.com:8091"]}; |
¡Voilà!
A partir de ahora, el motor de consulta equilibrará automáticamente la carga de estos índices y cualquier fallo (siempre que quede al menos un índice coincidente) no causará ninguna interrupción en las consultas.
Reequilibrio GSI
No basta con tener una réplica automática creaciónTambién necesitábamos añadir la gestión automática en forma de reequilibrio.
De nuevo, a partir de la versión para desarrolladores de abril de Couchbase Server 5.0, el servicio de índices es ahora "consciente del reequilibrio":
- Cuando se elimina un nodo de índice del clúster, sus índices se redistribuirán automáticamente a los nodos restantes. Sin embargo, si se añade un nuevo nodo de índices al clúster, los índices no se redistribuirán. Esto es así para evitar el movimiento excesivo de índices y también para preservar la ubicación que un administrador haya especificado. Esta redistribución es algo que podría añadirse en una versión posterior si fuera necesario.
- Si un nodo de índice falla y se sustituye, se volverán a crear las réplicas correspondientes. Del mismo modo, esas réplicas de índices se vuelven a crear en los nodos restantes de un clúster si se realiza un reequilibrio sin sustituir el nodo que ha fallado.
Te animo a que pruebes todo esto y descubras que "simplemente funciona". Haga clic aquí para descargar Couchbase Server.
Q1:
CON {"num_replica":1};
¿significa esto que este índice tendrá una réplica?
P2: ¿Y el clúster CB debe tener al menos 2 nodos Index Service?
P3: ¿Qué pasa si el cluster CB tiene más de 2 nodos Index Service? ¿Cómo elige el nodo Index Service (si un nodo tiene más de un servicio (servicio de índice/servicio de datos/servicio de consulta))?
P4: ¿Este índice 2 funciona en modo Maestro-Esclavo o Maestro-Maestro?
P5: si el índice funciona como modo Maestro-Maestro, ¿qué algoritmo elige el servicio de consulta para el índice? ¿algoritmo aleatorio o algoritmo más complicado?
P6: Si quiero añadir más réplicas del índice para escalarlo, ¿debo volver a crear el índice con otra
num_replica
¿valor?
Hola @atom992, ¡grandes preguntas! Voy a responder a ellos aquí y ver lo que tiene sentido añadir de nuevo en el blog principal:
1 –
"num_replica"
indica cuántas copias _adicionales_ del índice quieres que se creen (de forma similar a como funciona el servicio de datos). Así,
CON {"num_replica":1};
creará dos copias del índice solicitado.
2 - Sí, el clúster debe tener al menos ese número de nodos de servicios de índice. Si no tiene suficientes nodos, el comando devolverá un error inmediatamente.
3 - Con más nodos, Couchbase elegirá automáticamente en qué nodos colocar el índice y su(s) réplica(s). Por el momento sólo tiene en cuenta que una réplica no puede estar en el mismo nodo que el otro índice, y también tiene en cuenta la configuración Rack-Zone Awareness de los nodos para asegurarse de que un índice y su réplica(s) están repartidos en diferentes grupos también. Si se quiere ser más específico sobre dónde se colocan los índices, el administrador puede utilizar
CON {"nodos": [nodo1,nodo2]}
4 - Todos los índices y sus réplicas son maestro-maestro.
5 - El algoritmo para equilibrar la carga entre réplicas mejora constantemente. En la primera versión era sólo round-robin, últimamente hemos añadido algunas heurísticas de latencia para que si un índice es más lento que otro se utilice menos. En el futuro esto seguirá mejorando, así que no me atrevo a describir _exactamente_ lo que es hoy. Lo ideal sería que fuera transparente para ti.
6 - Sí, hoy tendrá que volver a crear el índice con una mayor
num_replica
y luego soltar el anterior (a
DROP
elimina un índice y todas sus réplicas, por lo que no es necesario gestionarlo manualmente). Estamos trabajando en un
ALTER_INDEX
pero puede que no esté listo para la versión 5.0, así que no he escrito sobre ello aquí.
Espero que esto le ayude a resolver sus dudas. Si desea más información, póngase en contacto conmigo.
¿hay fecha de lanzamiento para couchbase 5.0?
Hola, Greg. Estamos trabajando en la beta en este momento, y por lo general son capaces de llegar a GA unos meses después de que por lo que definitivamente debería estar allí a finales de año y probablemente un poco antes de eso.
¿Podremos ajustar el número de réplicas tras la creación del índice? Un caso de uso sería ampliar un MOI grande con un campo adicional. Dado que la RAM del índice podría ser demasiado pequeña para el nuevo índice ampliado y el índice antiguo al mismo tiempo, utilizamos este flujo de trabajo en tales situaciones:
- eliminado la réplica de índice "manual" en el primer nodo de índice. El otro nodo de índice con la segunda copia sigue siendo capaz de responder a las peticiones de índice.
- Construye el nuevo índice en el primer nodo de índice. Una vez completado, este nodo es capaz de responder a las peticiones a este índice.
- borrar y reconstruir el índice en el segundo nodo.
Sin poder ajustar el número de réplicas, tendríamos que aceptar un tiempo de inactividad en estas situaciones o proporcionar mucha RAM de repuesto que en realidad no necesitamos.
Hola Klaus, la primera iteración de esta mejora no permite modificar un índice después de su creación. Sin embargo, estamos trabajando en una sentencia ALTER INDEX para una próxima versión que te permitirá hacerlo.
Todavía puede aprovechar un control manual mucho más estricto de sus índices, aunque sólo sea temporalmente al realizar este tipo de mantenimiento/ampliación.
Digamos que tienes un índice con una réplica y quieres migrarlo/cambiarlo. Usted "podría" crear un nuevo índice temporal sin una réplica, eliminar el antiguo, a continuación, crear otro nuevo con la réplica y la caída de la temporal. Admito que no es particularmente elegante, pero mantiene tu aplicación en funcionamiento sin requerir el doble de RAM.
[...] Con Couchbase 5.0 Beta, no sólo puedes crear índices para acelerar y escalar las consultas a un nuevo nivel, sino también disfrutar de una mejor disponibilidad y manejabilidad de los índices. Sólo tienes que especificar el número de réplicas de índice a crear, y el sistema gestionará dinámicamente la colocación de las réplicas de índice a través de diferentes nodos, grupos de servidores y zonas de disponibilidad. Couchbase Server 5.0 también ofrece soporte para el reequilibrio de índices sin tiempo de inactividad del sistema. Para más información, consulte aquí. [...]