Ceph es una de las tecnologías de almacenamiento de código abierto más interesantes de los últimos años. Escalable a exabytes y extensible a múltiples centros de datos, los desarrolladores de Ceph han facilitado a los administradores de sistemas y arquitectos de infraestructura la implementación de su software. Este artículo ofrecerá una guía paso a paso sobre cómo crear un clúster básico de almacenamiento de Ceph. Esto ha sido probado en Ubuntu 16.04. Tenga en cuenta que, a menos que se indique lo contrario, todos los comandos se ejecutan como root. También tenga en cuenta que cuando este documento menciona "todos los nodos de Ceph", también incluye el nodo de administración.
Configuración general
En nuestro ejemplo, crearemos un clúster Ceph básico de tres nodos, cada uno con dos OSD. Usaremos la convención de nombre de host "Storage-x ", donde "x" es un número del 1 al 3, que se usa para referirse a nodos específicos. Usaremos una computadora externa (podría ser su propia computadora o computadora portátil) como el nodo de administración ceph.
Configuración de red
Cada nodo estará en la misma red privada, con una puerta de enlace a través de la cual se puede acceder a Internet.
El nodo de administración también debe estar en la misma red, pero no es necesario que esté disponible para la red todo el tiempo. En consecuencia, su computadora de trabajo puede ser el nodo de administración y puede usar una VPN para conectarse a la red de los nodos de Ceph.
Ceph usa los puertos TCP 6789 para los nodos de Ceph Monitor y los puertos 6800-7100 para los OSD de Ceph en la zona pública. Por ejemplo en iptables:
sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT
Preparar nodos
Cada nodo de almacenamiento debe estar sincronizado, por lo que instalaremos ntp en ellos y nos aseguraremos de que podamos acceder a ellos a través de SSH a través de la red.
sudo apt install ntp ssh
Asegúrese de que el nombre de host de cada nodo de Ceph se pueda resolver desde todos los nodos de Ceph. En cada nodo de Ceph, edite el archivo /etc/hosts y agregue lo siguiente:
[Admin Node IP Address] admin-node
[Storage-1 IP Address] Storage-1
[Storage-2 IP Address] Storage-2
[Storage-3 IP Address] Storage-3
Sustituya la dirección IP de cada nodo según corresponda.
Para probar si la resolución funciona, haga lo siguiente:
ping admin-node
ping Storage-1
ping Storage-2
ping Storage-3
Asegúrese de que el admin-node hostname se resuelve en la dirección IP de la red externa del nodo de administración, no en la dirección IP de loopback (127.0.0.1).
En cada nodo de Ceph (es decir, el nodo de administración y todos los nodos de almacenamiento), agregaremos el repositorio de paquetes de Ubuntu de Ceph a apt, luego actualizaremos el caché local con el contenido del nuevo repositorio:
wget -q -O- 'https://download.ceph.com/keys/release.asc' | apt-key add -
echo deb http://download.ceph.com/debian-{ceph-stable-release}/ $(lsb_release -sc) main | tee /etc/apt/sources.list.d/ceph.list
apt-get update
Crear un cephadmin usuario en todos los nodos de Ceph. Este usuario se utilizará para instalar y administrar Ceph en todo el clúster de nodos, así que asegúrese de maximizar la seguridad de las credenciales de este usuario.
ssh-keygen -t rsa
useradd cephadmin
Configurar SSH sin contraseña
Las herramientas y los scripts de instalación de Ceph del nodo Admin deberán poder acceder a todos los miembros del clúster sin contraseña.
En el nodo de administración, cambie a cephadmin usuario y cree una clave SSH:
Copie la clave ssh que generó en los tres nodos de almacenamiento:
ssh-copy-id Storage-1
ssh-copy-id Storage-2
ssh-copy-id Storage-3
Como usuario cephadmin en su nodo de administración, pruebe si el ssh sin contraseña en los nodos de almacenamiento ahora funciona correctamente:
ssh Storage-1
ssh Storage-2
ssh Storage-3
Configurar Sudo sin contraseña
Ahora que está configurado el acceso sin contraseña a través de SSH, configure sudo sin contraseña para el usuario cephadmin en todos los nodos de Ceph:
visudo
Debería ver lo siguiente:
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Agregue la siguiente línea en la parte inferior:
cephadmin ALL=(ALL) NOPASSWD: ALL
Esto ahora debería permitir sudo sin contraseña para el cephadmin usuario en todos los nodos de Ceph.
Instalar ceph-deploy
Ceph-deploy es una herramienta creada por los desarrolladores de Ceph para facilitar implementaciones rápidas de clústeres de Ceph mediante la secuencia de comandos de los pasos individuales necesarios para implementar un nodo. Aprovecharemos esto instalando la herramienta en nuestro nodo Admin.
apt install ceph-deploy
En el nodo Admin, cambie a cephadmin usuario que creamos en la Parte 1 del tutorial, cambie al directorio de inicio y cree un subdirectorio que se usará para contener todos los archivos necesarios para la implementación y administración de nuestro clúster de Ceph:
su cephadmin
cd
mkdir my-first-ceph-cluster
cd my-first-ceph-cluster
En este punto, todos los comandos de implementación a ejecutar deben realizarse solo desde /home/cephadmin/my-first-ceph-cluster . Los comandos de administración también deben realizarse desde el mismo directorio.
Configuración de Ceph
Asigne todos los nodos de almacenamiento como nodos de supervisión:
ceph-deploy new Storage-1 Storage-2 Storage-3
Dentro de su directorio de trabajo, debería ver que los archivos han sido generados por ceph-deploy, incluidos los archivos de llavero y el archivo de configuración de Ceph.
Agregue la siguiente línea a ceph.conf archivo:
osd pool default size = 2
Dado que solo tenemos dos OSD por nodo de almacenamiento en nuestro clúster, esto permitirá que Ceph esté satisfecho con tener solo una copia adicional de todos los datos que almacenamos en él.
Agregue la siguiente línea a ceph.conf también:
public network = {ip-address}/{netmask}
Donde reemplazará la parte de la red con los valores reales. Por ejemplo, si sus nodos de almacenamiento están en la red 192.168.1.0/24, ese debería ser el valor. No se confunda cuando menciona "red pública"; solo hace referencia a una red externa al clúster de Ceph. Las redes de replicación interna no están cubiertas por este tutorial.
Implementar Ceph
El software y los archivos de configuración ahora se instalarán y se copiarán en los nodos de Ceph.
ceph-deploy install admin-node Storage-1 Storage-2 Storage-3
Esto instalará todos los paquetes básicos de Ceph en los nodos.
Instale y configure el software Ceph Monitor en los nodos de almacenamiento:
ceph-deploy mon create-initial
Ceph OSD
Si bien es posible utilizar directorios como OSD, no se recomienda en una configuración de producción. Suponiendo que los OSD de Ceph que se utilizarán en cada uno de los nodos de almacenamiento son /dev/sda y /dev/sdb , hacemos que Ceph prepare los discos para su uso.
ADVERTENCIA: El siguiente comando destruirá los datos existentes en los OSD especificados, por lo que se debe tener cuidado de que no haya errores al ejecutar el comando.
ceph-deploy osd prepare Storage-1:/dev/sda
ceph-deploy osd prepare Storage-1:/dev/sdb
ceph-deploy osd prepare Storage-2:/dev/sda
ceph-deploy osd prepare Storage-2:/dev/sdb
ceph-deploy osd prepare Storage-3:/dev/sda
ceph-deploy osd prepare Storage-3:/dev/sdb
Si los comandos anteriores se ejecutan sin errores, los OSD están listos y ahora podemos activarlos como un recurso en ejecución en el clúster:
ceph-deploy osd activate Storage-1:/dev/sda
ceph-deploy osd activate Storage-1:/dev/sdb
ceph-deploy osd activate Storage-2:/dev/sda
ceph-deploy osd activate Storage-2:/dev/sdb
ceph-deploy osd activate Storage-3:/dev/sda
ceph-deploy osd activate Storage-3:/dev/sdb
Finalización
Copie los conjuntos de claves de administración en cada nodo de Ceph para que sea posible la administración de Ceph en cada nodo:
ceph-deploy admin admin-node Storage-1 Storage-2 Storage-3
Compruebe el estado de todos los OSD en todos los nodos de almacenamiento:
ceph osd tree
Verifique el estado general de su clúster de Ceph:
ceph health
Si obtienes un
HEALTH_OK
significa que el clúster está funcionando correctamente.
Si desea ver más estadísticas del clúster, el siguiente comando debería funcionar:
ceph status
Conclusión
Ahora tenemos un clúster de Ceph de tres nodos en funcionamiento. Con esta configuración, el clúster puede perder un nodo, no sufrir pérdida de datos y continuar atendiendo solicitudes. Los servicios de supervisión de alta disponibilidad también están disponibles en cada nodo de almacenamiento. Esta es una configuración de nivel de producción muy básica. Si desea obtener más información, diríjase a la documentación oficial de Ceph para obtener información adicional.