Saltar al contenido principal
pdf?stylesheet=default
Blackboard Help

Caché de Redis

El building block Caché de Redis, junto con la recién publicada Consola de administración, ofrece a los administradores del sistema una forma nueva de administrar y supervisar el rendimiento de sus instancias de Learn. Este building block aporta mejoras en el rendimiento del sistema, la escalabilidad y la disponibilidad ofreciendo un tipo adicional de almacenamiento de memoria externo a la pila de JVM.

El building block Caché de Redis activa el marco de trabajo de la caché de Blackboard para usar redis como tipo adicional de almacenamiento de memoria fuera de la pila. Redis es un almacén en red avanzado, basado en claves-valores, de código abierto y de alto rendimiento. Otras empresas que usan Redis son Craigslist, Github, Stackoverflow e Instagram.

El building block Caché de Redis es compatible con Blackboard Learn 9.1 SP 11 y versiones posteriores. 

Requisitos

Service Pack 11 y posterior, y un servidor Redis

El building block Caché de Redis activa el marco de trabajo de la caché de Blackboard para usar Redis como tipo adicional de almacenamiento de memoria fuera de la pila. Redis es un almacén en red avanzado, basado en claves-valores, de código abierto y de alto rendimiento. Otras empresas que usan Redis son Twitter, Craigslist, Github, Stackoverflow e Instagram.

Ventajas de rendimiento, escalabilidad y disponibilidad

  • Aumenta los tiempos de respuesta y la producción de solicitudes

  • No hay riesgo de pérdida de rendimiento

  • La caché se almacena en todos los servidores de aplicación y el subconjunto de datos más activo se guarda localmente

  • La caché está disponible bajo presión de la pila de JVM

  • Permite al sistema escalar con un tamaño de pila de JVM manejable.

  • La caché es más grande y el almacenamiento de reserva es más rápido

  • Serialización de gráficos de objetos rápida y eficaz

  • Actualizaciones y funciones put asíncronas a través de la estrategia de escritura retrasada

  • Aumenta la oportunidad de almacenamiento en caché fuera de la pila

  • Reduce los gastos generales de invalidación de clúster en la pila

  • Almacena en caché los reinicios y los bloqueos de la aplicación de supervivencia

  • Funciones de supervisión enriquecida para mantenimiento preventivo y solución de problemas

Supervisión del servidor de caché de Redis

La supervisión del servidor de caché de Redis está disponible cuando está instalada la Consola de administración. Busque "Caché de Redis" en el menú principal de la Consola de administración.

¿Cuándo la necesita?

El building block Caché de Redis se recomienda cuando se observan una o varias de estas situaciones:

  • Índice alto de expulsión de caché
  • Presión de recursos del sistema en el servidor de base de datos
  • Presión en la utilización de la pila de JVM
  • Implementación de Blackboard Learn a gran escala horizontal para reducir el tráfico de invalidación de caché de clúster

Cómo instalar y activar el building block Caché de Redis

Puede utilizar las actualizaciones de software para instalar el building block Caché de Redis directamente desde el panel Administración del sistema. Si lo prefiere, puede visitar Descargas de Behind the Blackboard y buscar el building block Caché de Redis para descargarlo e instalarlo manualmente.

Actualizaciones de software

Las Actualizaciones de software se localizan en el panel del Administrador del sistema. Cuando haya un nuevo Building Block disponible, o haya sido actualizado, se le notificará mediante un cambio en los iconos. Haga clic en el icono Building blocks de función disponibles y busque el building block Caché de Redis. Haga clic en  Instalar. Después de instalarlo, tendrá que marcar el building block como disponible.

Descargas de Behind the Blackboard

Descargue el building block Caché de Redis desde el inicio de Descargas de Behind the Blackboard, que está en Building blocks de funciones para Learn. Guarde el archivo en una unidad local. Descomprima el paquete para acceder al archivo .war.

  1. Vaya al panel Administración del sistemaBuilding Blocks.
  2. Haga clic en  Herramientas instaladas.
  3. Haga clic en Cargar Building Blocks en la barra de acciones.
  4. Busque el archivo .war del building block Caché de Redis.
  5. Haga clic en  Enviar.
  6. Verá un mensaje de confirmación cuando el building block se haya instalado. Establezca el building block como Activo y haga clic en Aprobar.

Cómo activar la caché de Redis

  1. Instale un servidor Redis. Consulte los pasos en Cómo instalar un servidor Redis.
  2. Vaya a la página de ajustes del building block Caché de Redis del panel de administración del sistema.
  3. Seleccione la lista de cachés para activar Redis.
  4. Indique los ajustes de conexión de Redis en los campos Host, Puerto y Contraseña.
  5. Haga clic en Enviar.
  6. Asegúrese de que el puerto del servidor Redis y los puertos RMI estén abiertos entre el servidor Redis y los servidores de la aplicación Learn.
  7. Reinicie todos los servidores de la aplicación Learn (se recomienda el reinicio cíclico en producción).
  8. Vaya a la página de estado de la conexión de Redis en el panel de administración del sistema.
  9. Compruebe que todos los servidores de la aplicación estén conectados a Redis.

Cómo instalar un servidor Redis

En este proceso se presupone que va a instalar Redis en Red Hat Enterprise Linux 6.

  1. Prepare un servidor Linux. Es muy recomendable usar una máquina dedicada o una instancia de máquina virtual. No ejecute Redis en Windows ni en Solaris. Blackboard Learn en Windows y Solaris puede usar Redis en Linux.
    1. Establezca el ajuste de memoria de sobreasignación del núcleo de Linux en 1 añadiendo vm.overcommit_memory=1 en /etc/sysctl.conf. Reinicie el servidor o ejecute el comando sysctl.vm.overcommit_memory=1 para que el cambio surta efecto. Consulte Preguntas frecuentes sobre Redis para ver el motivo.

      Redis es un servidor de secuencia única. Favorece las CPU rápidas con cachés grandes en lugar de muchos núcleos. Actualmente, las CPU de Intel son la mejor opción. En la documentación de Redis se indica que no es raro observar solo la mitad del rendimiento en una CPU AMD Opteron en comparación con otras CPU parecidas de Nehalem EP, Westmere EP o Sandy bridge Intel.

    2. La producción de Redis está limitada por la red mucho antes que por la CPU. Use NIC rápidos o múltiples.
    3. (Opcional) Redis se ejecuta más despacio en una máquina virtual, por lo que se recomienda ejecutar Redis en una caja física.
  2. Descargue y cree la última versión estable de Redis.

    wget http://redis.googlecode.com/files/redis-x.x.xx.tar.gz
    tar xzf redis-x.x.xx.tar.gz
    mv redis-x.x.xx /usr/local/redis
    cd /usr/local/redis
    make

  3. Prepare el archivo de configuración del servidor Redis copiando $REDIS_HOME/redis.conf. Establezca las propiedades siguientes:

    daemonize yes # Use "no" cuando se ejecute en daemontools.
    pidfile /var/run/redis/redis_6379.pid
    port 6379
    timeout 300 # Reclamar conexiones inactivas (segundos).
    tcp-keepalive 0 # Mantener las conexiones activas desde herramientas de red, como cortafuegos.
    loglevel notice # Mantenerlo moderadamente detallado.
    logfile /var/log/redis/redis_6379.log
    databases 1
    #save 900 1 # Desactivar instantáneas.
    #save 300 10 # Desactivar instantáneas.
    #save 60 10000 # Desactivar instantáneas.
    requirepass xxxx # Usar al menos 16 caracteres en mayúscula y minúscula
    # caracteres, números y símbolos. Intentar no usar palabras ni
    # frases en la contraseña.
    maxclients 100000
    maxmemory xxxx # Asegurarse de que Redis no use intercambio (bytes).
    maxmemory-policy volatile-lru # Usamos expirar.
    maxmemory-samples 3
    appendonly no
    slowlog-log-slower-than 50000 # Umbral de tiempo de ejecución (microsegundos).
    slowlog-max-len 128 # Longitud del registro Slow Log.

  4. Añada un directorio principal de Redis a la raíz.

    # Redis
    export REDIS_HOME=/usr/local/redis

  5. Cree un usuario de Redis.

    useradd -d /home/redis -s /bin/sh redis
    chown -R redis:redis $REDIS_HOME
    chmod 700 $REDIS_HOME

  6. Prepare la secuencia de comandos init de Redis.

    cp utils/redis_init_script /etc/init.d/redis_6379

  7. Configure la secuencia de comandos init de Redis.

    # chkconfig: - 85 15
    # description: Redis es una base de datos de claves-valores permanentes
    # processname: redis
    REDISUSER="redis"
    REDISPORT=6379
    EXEC=/usr/local/redis/src/redis-server
    CLIEXEC=/usr/local/redis/src/redis-cli
    PIDFILE=/var/run/redis/redis_6379.pid
    CONF="/usr/local/redis/6379.conf"
    $EXEC $CONF ==change to==> /bin/su - $REDISUSER -c "$EXEC $CONF"

  8. Active el servicio Redis.

    mkdir /var/run/redis/var/log/redis
    chown redis:adm /var/run/redis /var/log/redis
    sudo chmod 750 /var/log/redis
    cd /etc/init.d
    chkconfig --add redis_6379

  9. Inicie el servicio Redis.

    service redis start

Seguridad

Refuerzo del servidor Redis

Existen dos formas de proteger el servidor Redis:

  • Añadir configuraciones de seguridad adecuadas a la aplicación Redis.
  • Añadir configuraciones seguras al servidor que ejecuta Redis.

Al añadir ajustes seguros a Redis, hay que garantizar que la aplicación Redis sea lo más segura posible internamente. Las configuraciones seguras del servidor son ajustes y configuraciones del servidor que se puedan usar para proteger el servidor y la aplicación Redis sin implicar a la propia aplicación Redis. En las secciones siguientes se describen dos tipos de configuraciones:

Ajustes seguros de Redis

Los dos ajustes importantes del propio servidor Redis son:

  • Usar una contraseña segura para Redis.
  • Bloquear el acceso a algunos comandos de Redis.

Para obtener más información sobre la configuración de seguridad recomendada de Redis, consulte Seguridad de Redis.

Contraseña de Redis

El servidor Redis es muy eficaz al hacer búsquedas de cadenas en serie, y esto es exactamente una solicitud de búsqueda de contraseña de Redis. Además, la contraseña de Redis solo es necesaria para la aplicación Blackboard. Los usuarios no tienen que recordarla, así que debería ser una contraseña mucho más fuerte que las normales. Aunque, normalmente, se deberían seguir las pautas de complejidad y longitud de contraseñas owasp para establecer la longitud de la contraseña, como los usuarios no tienen que recordar esta contraseña, la convención para elegir contraseñas según la capacidad del usuario para recordarlas se puede pasar por alto.

Pauta Motivo
Usar, al menos, 16 caracteres en lugar de 8 Un ataque de fuerza bruta elevaría n a la octava potencia cuando la contraseña tuviese 8 caracteres, que es el mínimo normal
Mezclar caracteres en mayúscula y minúscula, números y símbolos Como con las contraseñas normales, combinar mayúsculas y minúsculas, números y símbolos reduce la probabilidad de que un ataque de diccionario descifre la contraseña y añade complejidad a un ataque de fuerza bruta, ya que es necesario comprobar todos los tipos de caracteres.
Intentar no usar palabras o frases en la contraseña Como no hay que recordar esta contraseña, puede impedir los ataques de diccionario por completo evitando usar palabras o frases.

El ajuste de la contraseña hay que añadirlo al archivo de configuración de Redis usando la directiva requirepass, por ejemplo:

requirepass ^a@$4J0|-|k!4P+f%

Bloquear comandos de Redis

Como Blackboard usa Redis solo como caché, algunos comandos no se usan. Un usuario malintencionado podría usar algunos de estos comandos para causar una negativa de servicio a través de errores de caché, negativas de servicio dejando el servidor sin espacio y exposición de información permitiendo a usuarios malintencionados obtener todo el conjunto de datos de la caché. Redis ofrece una interfaz para modificar o excluir estos comandos completamente, algo que Blackboard recomienda para determinados comandos:

Tecla Motivo de la recomendación de eliminación
APPEND Permite modificar claves para forzar errores de caché
BGSAVE Comando que guarda el conjunto de datos en el disco, lo que podría permitir la exposición de información si el usuario consigue el archivo
RENAME Cambia el nombre de una clave, lo que forzaría errores de caché
SAVE Igual que BGSAVE
SPOP "Elimina un miembro al azar del conjunto"
SREM "Elimina uno o varios miembros del conjunto"

Para bloquear estos comandos, edite el archivo de configuración de Redis y añada lo siguiente:

rename-command APPEND ""
rename-command BGSAVE ""
rename-command RENAME ""
rename-command SAVE ""
rename-command SPOP ""
rename-command SREM ""

Al cambiar el nombre del comando por una cadena vacía, se bloquea y se impide el acceso a él. Además, los comandos nuevos de Redis que se crean también deberían bloquearse de esta forma porque el building block no los va a usar.

Proteger la configuración del servidor

Para proteger el servidor que ejecuta Redis, hay que seguir unos pasos para asegurar que solo los usuarios que necesiten acceder al servidor Redis puedan hacerlo, así como impedir el acceso no autorizado a la aplicación Redis mediante permisos de archivo y red.

Ejecutar Redis sin contexto raíz

La raíz del usuario, en las máquinas Linux, tiene acceso total a cualquier archivo del sistema independientemente de los permisos o el control de acceso. Por eso es peligroso utilizar el usuario raíz para ejecutar aplicaciones, porque los ataques bien planeados podrían permitir a un usuario malintencionado controlar la cuenta que ejecuta esa aplicación. Como Redis no necesita ese nivel de acceso al sistema, para instalar y ejecutar la aplicación Redis se debería usar una cuenta de usuario con permisos reducidos que solo pueda ejecutar Redis.

Blackboard recomienda usar esta cuenta exclusivamente para ejecutar el servidor Redis. No debe tener ningún permiso en el sistema operativo ni en otras aplicaciones o demonios que se ejecuten en este servidor.

Proteger el archivo de configuración de Redis

La contraseña que usa el servidor Redis, descrita en una sección anterior, se almacena como texto sin formato dentro del archivo de configuración. Esto queda fuera del control de Blackboard porque es el modo en que Redis funciona en este momento. Por lo tanto, hay que limitar los usuarios que tienen acceso al archivo. Debería limitarse solo al usuario que ejecuta la aplicación Redis.

Esto se puede hacer usando el comando siguiente siempre que el archivo de configuración de Redis sea redis.conf:

chown 600 redis.conf

Bloquear tráfico innecesario al servidor Redis

El servidor Redis, suponiendo que la única aplicación que se ejecute en él sea Redis, no debería estar accesible en Internet. Solo debería ser posible acceder a él en las circunstancias siguientes:

  • Cuando un administrador tenga que trabajar en el servidor Redis
  • Cuando las comunicaciones de Blackboard se transmitan a través del puerto de Redis

Esto impedirá que los usuarios no autorizados intenten colapsar el servidor Redis, ejecutar comandos no autorizados en Redis, etc. Suponiendo que el puerto predeterminado de Redis, 6379, esté en uso, añada los siguientes tipos de reglas al cortafuegos para este servidor:

Regla Explicación
Bloquear todo el tráfico que sale y entra al servidor Este debería ser el comportamiento predeterminado salvo en el caso de las excepciones siguientes.
Crear una excepción para las solicitudes de bucle invertido El servidor debe poder acceder por sí mismo para, entre otras cosas, supervisar las solicitudes que entran a Redis usando redis-cli commandmonitor.
Crear una excepción para el tráfico que sale y entra a los servidores Blackboard solo a través del puerto de Redis El servidor Blackboard debe poder comunicarse con Redis a través del puerto 6397 y Blackboard debe poder recibir respuestas del servidor Redis.
Crear una excepción que permita la administración remota desde una máquina determinada Los administradores pueden tener que acceder al servidor para actualizar Redis, comprobar registros, supervisar el rendimiento, etc. Si no tienen acceso directo a la máquina, tienen que poder acceder al servidor de forma remota. El tráfico SSH se debe limitar a una máquina única o un conjunto pequeño de máquinas, así que los usuarios normales no se pueden comunicar con el servidor a través del puerto 22.

Los administradores también tendrán que crear excepciones para los elementos de cada entorno, como los recursos compartidos necesarios. Estos dependen de cada institución.

Implementar la supervisión del tráfico

Para evitar ataques al servidor Redis procedentes de una fuente externa, debería existir alguna forma de detección de intrusiones. Algunos elementos se pueden supervisar para marcar el tráfico como posiblemente malintencionado o excluir el tráfico por completo:

  1. Si otro componente que no sea un servidor de la aplicación Blackboard o un servidor de administración del sistema trata de acceder al servidor Redis, debería marcarse.
  2. Si se introduce una contraseña incorrecta, debería marcarse.
  3. Si se hacen demasiadas solicitudes al servidor Redis desde una sola ubicación, marque ese tráfico. Supervisar patrones de uso típicos, así como especular sobre casos límite (por ejemplo, en las últimas semanas) puede ayudar a determinar cuántas solicitudes se esperan por minuto.

Implementar estas reglas de detección de intrusiones puede servir para averiguar si alguien está intentando entrar en la aplicación o el servidor Redis.

Permisos de Building Block

Tipo de Java Nombre Acciones ¿Por qué se necesita este permiso?
persist * *
  • La página Ajustes tiene que almacenar y cargar datos de configuración en la tabla SYSTEM_REGISTRY.
  • Almacena y carga estadísticas de caché y del servidor Redis para la duración especificada en la base de datos estadísticos para el análisis de tendencias.
java.io.FilePermission 1. BB_HOME/-

2. BB_CONTENT/-

3. "${java.home}/-

1. leer, escribir, eliminar

2. leer, escribir, eliminar

3. leer

  • Lee archivos de propiedades que están en el directorio principal de Blackboard Learn.
  • Guarda un valor hash único de una instancia de Learn que comparten todos los servidores de la aplicación Learn dentro de un clúster. Se usa en claves de caché de Redis para evitar la colisión de otros usos de caché de Redis por parte de la instancia de Learn u otras aplicaciones.
  • Función de reserva del disco Ehcache
java.lang.reflect.
ReflectPermission
suppressAccessChecks * Lo usan el marco de trabajo Spring y el marco de trabajo de serialización de gráficos de objetos Kryo.
java.lang.
RuntimePermission
* * Lo usan varios componentes de Blackboard Learn, incluidos los servicios de registro y los administradores de servicios.
java.net.
SocketPermission
* conectar, aceptar, resolver, escuchar Conexión al servidor Redis y a los nodos pares de la aplicación Blackboard Learn.
javax.management.
MBeanServerPermission
* * Para exponer las estadísticas de caché en MBean.
javax.management.
MBeanPermission
* * Para exponer las estadísticas de caché en MBean.
attribute user.authinfo obtener Obtiene roles de usuario para las operaciones.