Almacenamiento distribuido Introducción y construcción de Ceph

1: Tipos de almacenamiento
1. Dispositivo de almacenamiento independiente
DAS (almacenamiento conectado directamente, que está conectado directamente al bus de la placa base de la computadora)
IDE, SATA, SCSI, SAS, disco de interfaz USB
La llamada interfaz es un dispositivo de almacenamiento impulsado Un dispositivo de disco que proporciona almacenamiento a nivel de bloque

●NAS (almacenamiento conectado a la red, que es almacenamiento adjunto al sistema de archivos host actual a través de la red)
NFS, CIFS,
el almacenamiento a nivel de sistema de archivos FTP es en sí mismo un sistema de archivos bien hecho. , El cliente realiza una comunicación de red con el host remoto en función del módulo kernel y lo convierte para usarlo como un sistema de archivos local. Este tipo de servicio de almacenamiento no puede volver a formatearlo para crear un bloque de sistema de archivos.

●SAN (red de área de almacenamiento)
Protocolo SCSI (solo se usa para transmitir operaciones de acceso a datos, la capa física usa cables SCSI para la transmisión), FCSAN (la capa física usa fibra óptica para la transmisión), iSCSI (la capa física usa Ethernet para la transmisión)
También es un tipo de almacenamiento en red, pero la diferencia es que la interfaz proporcionada por SAN al host del cliente es almacenamiento a nivel de bloque.


Problemas con el almacenamiento independiente
● Capacidad de almacenamiento y procesamiento insuficiente
El valor de E/S del IDE tradicional es de 100 veces/s, el del disco de estado sólido SATA es de 500 veces/s y el de los discos duros de estado sólido alcanza de 2000 a 4000 veces /s. Incluso si la capacidad de E/S del disco es decenas de veces mayor, aún no es suficiente para resistir el acceso simultáneo de cientos de miles, millones o incluso cientos de millones de usuarios durante el período pico de acceso al sitio web, que también está limitado por la capacidad de E/S de la red host.

●Capacidad de almacenamiento insuficiente
No importa cuán grande sea la capacidad de un solo disco, no puede cumplir con el límite de capacidad de datos requerido por los usuarios para el acceso normal.

●Punto único de falla
Hay un único punto de falla para los datos almacenados en una sola máquina

Dos: Soluciones de almacenamiento comercial
EMC, NetAPP, IBM, DELL, Huawei, Inspur

Tres almacenamiento distribuido (SDS de almacenamiento definido por software)
Ceph, TFS, FastDFS, MooseFS (MFS), GlusterFS (GFS)

El mecanismo de almacenamiento dispersará y almacenará datos en varios nodos, lo que tiene las ventajas de una alta escalabilidad, un alto rendimiento y una alta disponibilidad.

#Tipos de almacenamiento distribuido

Almacenamiento en bloque (como un disco duro, generalmente un almacenamiento es montado por un servidor, adecuado para la asignación de volumen de almacenamiento de contenedores o máquinas virtuales, almacenamiento de registros, almacenamiento de archivos) el almacenamiento en bloque proporciona un volumen de almacenamiento que funciona como un disco duro, organizado en
bloques del mismo tamaño. Por lo general, el sistema operativo formatea un volumen de almacenamiento basado en bloques con un sistema de archivos o las aplicaciones (como las bases de datos) acceden directamente a él para almacenar datos.

● El almacenamiento de archivos (como NFS, resuelve el problema de que el almacenamiento en bloque no se puede compartir y varios servidores pueden montar un almacenamiento al mismo tiempo, adecuado para el almacenamiento de estructuras de directorios y el almacenamiento de registros) permite que los datos se organicen como un archivo
tradicional sistema. Los datos se guardan en un archivo que tiene un nombre y algunos metadatos asociados, como la marca de tiempo de modificación, el propietario y los permisos de acceso. Proporciona almacenamiento basado en archivos utilizando una jerarquía de directorios y subdirectorios para organizar cómo se almacenan los archivos.

●Almacenamiento de objetos (como OSS, varios servicios pueden acceder a un almacenamiento al mismo tiempo, tiene las capacidades de lectura y escritura de alta velocidad del almacenamiento en bloque, y también tiene las características de compartir el almacenamiento de archivos, adecuado para el almacenamiento de imágenes y video) almacenamiento) almacenamiento de archivos proporcionado en función de la interfaz API,
cada archivo A es un objeto, y el tamaño del archivo es diferente, y los metadatos y los datos reales del archivo se almacenan juntos.
El almacenamiento de objetos permite almacenar datos y metadatos arbitrarios como una unidad, etiquetados con un identificador único dentro de un grupo de almacenamiento plano. Almacene y recupere datos mediante API en lugar de acceder a los datos como bloques o en jerarquías de sistemas de archivos.

2 Introducción a Ceph
Ceph se desarrolló utilizando el lenguaje C++ y es un sistema de almacenamiento distribuido de código abierto que es abierto, autorreparable y autoadministrable. Tiene las ventajas de alta escalabilidad, alto rendimiento y alta confiabilidad.

Ceph actualmente es compatible con muchos proveedores de computación en la nube y se usa ampliamente. RedHat, OpenStack y Kubernetes se pueden integrar con Ceph para admitir el almacenamiento de back-end de imágenes de máquinas virtuales.
Se estima aproximadamente que entre el 70 % y el 80 % de las plataformas en la nube de mi país utilizan Ceph como plataforma de almacenamiento subyacente, lo que demuestra que Ceph se ha convertido en la configuración estándar de las plataformas en la nube de código abierto. En la actualidad, las empresas nacionales que utilizan Ceph para crear sistemas de almacenamiento distribuido tienen más éxito, como Huawei, Ali, ZTE, H3C, Inspur, China Mobile, Netease, LeTV, 360, Tristar Storage, Shanyan Data, etc. 

Tres ventajas de Ceph

● Alta escalabilidad: descentralizado, admite el uso de servidores X86 ordinarios, admite la escala de miles de nodos de almacenamiento y admite la expansión de TB a nivel EB.
●Alta confiabilidad: ningún punto único de falla, múltiples copias de datos, administración automática, reparación automática.
●Alto rendimiento: al abandonar el esquema de direccionamiento de metadatos de almacenamiento centralizado tradicional, se usa el algoritmo CRUSH, la distribución de datos es equilibrada y el grado de paralelismo es alto.
● Funciones potentes: Ceph es un sistema de almacenamiento unificado que integra una interfaz de almacenamiento de bloques (RBD), una interfaz de almacenamiento de archivos (CephFS) y una interfaz de almacenamiento de objetos (RadosGW), por lo que es adecuado para diferentes escenarios de aplicaciones.

Arquitectura de cuatro Ceph

De abajo hacia arriba, el sistema Ceph se puede dividir en cuatro niveles:


Sistema de almacenamiento básico RADOS (Reliab1e, Autonomic, Almacén de objetos distribuidos, es decir, almacenamiento de objetos confiable, automatizado y distribuido)
RADOS es el módulo funcional más bajo de Ceph, y es un servicio de almacenamiento de objetos infinitamente expandible que puede desensamblar archivos Se descompone en innumerables objetos (fragmentos) y almacenados en el disco duro, lo que mejora enormemente la estabilidad de los datos. Se compone principalmente de OSD y Monitor. Tanto OSD como Monitor se pueden implementar en varios servidores. Este es el origen de la distribución ceph y el origen de la alta escalabilidad.

● LIBRADOS La biblioteca básica
Librados proporciona una forma de interactuar con RADOS y proporciona interfaces API de servicio de Ceph para aplicaciones de capa superior. Por lo tanto, se accede a RBD, RGW y CephFS de capa superior a través de Librados. Actualmente, PHP, Ruby, Compatibilidad con Java, Python, Go, C y C++ para el desarrollo de aplicaciones cliente directamente en RADOS (en lugar de todo Ceph).

●Interfaz de aplicación de alto nivel: incluye tres partes 1) Interfaz de almacenamiento de objetos La interfaz de puerta de enlace
RGW (RADOS Gateway) , basada en el sistema de almacenamiento de objetos desarrollado por Librados, proporciona una interfaz API RESTful compatible con S3 y Swift.

2) Interfaz de almacenamiento en bloque RBD (dispositivo de bloque fiable)
proporciona una interfaz de dispositivo de bloque basada en Librados, que se utiliza principalmente para Host/VM.

3) La interfaz de almacenamiento de archivos CephFS (Ceph File System)
El sistema de archivos Ceph proporciona un sistema de archivos compatible con POSIX que utiliza el clúster de almacenamiento de Ceph para almacenar datos de usuario en el sistema de archivos. Basado en la interfaz del sistema de archivos distribuidos proporcionada por Librados.

●Capa de aplicación: varias aplicaciones desarrolladas en base a interfaces de alto nivel o la biblioteca básica Librados, o muchos clientes como Host y VM
 

Cinco componentes principales de Ceph

Ceph es un sistema de almacenamiento basado en objetos que divide cada flujo de datos a administrar (como archivos y otros datos) en uno o más datos de objetos (Objeto) de tamaño fijo (predeterminado 4 megabytes) y los usa como una unidad atómica ( Atom es la unidad más pequeña de un elemento) para completar la lectura y escritura de datos.

●OSD (Object Storage Daemon, daemon process ceph-osd)
es un proceso responsable del almacenamiento físico y generalmente se configura para corresponder a los discos uno por uno, y un disco inicia un proceso OSD. La función principal es almacenar datos, copiar datos, equilibrar datos, restaurar datos y realizar comprobaciones de latidos con otros OSD, y es responsable del proceso de devolución de datos específicos en respuesta a las solicitudes de los clientes. Por lo general, se requieren al menos 3 OSD para lograr redundancia y alta disponibilidad.

●PG (Grupo de Colocación)
PG es un concepto virtual y no existe físicamente. Es similar al índice en la base de datos en el direccionamiento de datos: Ceph primero asigna los datos de cada objeto a un PG a través del algoritmo HASH y luego asigna el PG al OSD a través del algoritmo CRUSH.

●Pool
Pool es una partición lógica para almacenar objetos y funciona como un espacio de nombres. Cada Pool contiene un número determinado (configurable) de PG. El grupo se puede utilizar como un dominio de aislamiento de fallas, que no está uniformemente aislado según los diferentes escenarios de los usuarios.

#Pool admite dos tipos de almacenamiento de datos:
Replicado: similar a raid1, los datos de un objeto se guardan con 3 copias de forma predeterminada y se colocan en diferentes OSD
Código de borrado: similar a raid5, que consume menos CPU Ligeramente más grande, pero ahorra disco espacio, y solo se guarda una copia de los datos del objeto. Dado que algunas funciones de Ceph no admiten grupos de codificación de borrado, este tipo de grupo de almacenamiento no se usa mucho.

Relación #Pool, PG y OSD:
hay muchos PG en un Pool; un PG contiene un montón de objetos, y un objeto solo puede pertenecer a un PG; los PG se dividen en maestros y esclavos, y un PG se distribuye en diferentes OSD (para el tipo de copia triple)

●Monitor (el proceso daemon ceph-mon)
se utiliza para guardar los metadatos del OSD. Responsable de mantener las vistas de mapeo del estado del clúster (mapa del clúster: mapa OSD, mapa del monitor, mapa PG y mapa CRUSH), mantenimiento de varios gráficos que muestran el estado del clúster y administración de la autenticación y autorización del cliente del clúster. Un clúster de Ceph generalmente requiere al menos 3 o 5 (número impar) nodos Monitor para lograr redundancia y alta disponibilidad, y sincronizan datos entre nodos a través del protocolo Paxos.

● El administrador (daemon ceph-mgr)
es responsable de realizar un seguimiento de las métricas de tiempo de ejecución y el estado actual del clúster de Ceph, incluida la utilización del almacenamiento, las métricas de rendimiento actuales y la carga del sistema. Proporciona monitoreo e interfaces adicionales para sistemas de administración y monitoreo externos, como zabbix, prometheus, cephmetrics, etc. Un clúster de Ceph generalmente requiere al menos 2 nodos mgr para lograr una alta disponibilidad, y la sincronización de información entre nodos se realiza según el protocolo raft.

●MDS (Metadata Server, daemon process ceph-mds)
es un servicio de metadatos del que dependen los servicios de CephFS. Responsable de guardar los metadatos del sistema de archivos y administrar la estructura de directorios. El almacenamiento de objetos y el almacenamiento de dispositivos en bloque no requieren servicios de metadatos; si no está utilizando CephFS, no puede instalarlo.
 

Backend de almacenamiento de seis OSD

Los OSD tienen dos formas de administrar los datos que almacenan. En Luminous 12.2.z y versiones posteriores, el backend predeterminado (y recomendado) es BlueStore. Antes de que se lanzara Luminous, FileStore era la única y predeterminada opción.
● Filestore
FileStore es un método heredado para almacenar objetos en Ceph. Se basa en un sistema de archivos estándar (solo XFS) combinado con una base de datos clave/valor (tradicionalmente LevelDB, ahora BlueStore es RocksDB) para almacenar y administrar metadatos.
FileStore está bien probado y se usa ampliamente en producción. Sin embargo, debido a su diseño general y la dependencia de los sistemas de archivos tradicionales, tiene muchas deficiencias en el rendimiento.

● Bluestore
BlueStore es un backend de almacenamiento de propósito especial diseñado específicamente para la administración de carga de trabajo OSD de datos en disco. El diseño de BlueStore se basa en una década de experiencia en el soporte y la gestión de Filestores. En comparación con Filestore, BlueStore tiene un mejor rendimiento y seguridad de lectura y escritura.

Las funciones principales de #BlueStore incluyen:
1) BlueStore administra directamente los dispositivos de almacenamiento, es decir, utiliza directamente dispositivos de bloque sin procesar o particiones para administrar los datos en los discos. Esto evita la intervención de capas de abstracción (como sistemas de archivos locales como XFS), que pueden limitar el rendimiento o aumentar la complejidad.
2) BlueStore utiliza RocksDB para la gestión de metadatos. La base de datos clave/valor de RocksDB está integrada para administrar metadatos internos, incluida la asignación de nombres de objetos para bloquear ubicaciones en el disco.
3) Todos los datos y metadatos escritos en BlueStore están protegidos por una o más sumas de verificación. No se leen datos ni metadatos del disco ni se devuelven al usuario sin verificación.
4) Soporte para compresión en línea. Los datos pueden comprimirse opcionalmente antes de escribirse en el disco.
5) Admite capas de metadatos de múltiples dispositivos. BlueStore permite que su registro interno (registro de escritura anticipada de WAL) se escriba en un dispositivo de alta velocidad independiente (como SSD, NVMe o NVDIMM) para mejorar el rendimiento. Los metadatos internos se pueden almacenar en dispositivos más rápidos si hay mucho almacenamiento más rápido disponible.
6) Admite copia en escritura eficiente. Las instantáneas de RBD y CephFS se basan en el mecanismo de clonación de copia en escritura implementado de manera eficiente en BlueStore. Esto dará como resultado una E/S eficiente para instantáneas regulares y grupos codificados de borrado (que se basan en clones para una confirmación eficiente en dos fases).
 

Siete procedimientos almacenados de datos de Ceph

1) El cliente obtiene el mapa de clúster más reciente de mon

2) En Ceph, todo es un objeto. Los datos almacenados por Ceph se dividirán en uno o más objetos de tamaño fijo (Objeto). El administrador puede ajustar el tamaño del objeto, generalmente 2M o 4M.
Cada objeto tendrá un OID único, que se compone de ino y ono:
ino: el FileID del archivo, que se utiliza para identificar de forma única cada archivo globalmente
ono: el número de la porción
Por ejemplo: un archivo FileID es A , se corta en dos objetos, uno tiene el número 0 y el otro tiene el número 1, entonces los oids de estos dos archivos son A0 y A1.
La ventaja de OID es que puede identificar de forma única cada objeto diferente y almacenar la afiliación entre el objeto y el archivo. Dado que todos los datos en Ceph se virtualizan en objetos uniformes, la eficiencia de lectura y escritura será relativamente alta.

3) Obtenga un código de característica hexadecimal usando el algoritmo HASH en el OID, tome el resto del código de característica y el número total de PG en el Pool, y el número de serie obtenido es PGID.
Es decir, Pool_ID + HASH(OID) % PG_NUM para obtener PGID

4) El PG se replicará de acuerdo con el número de copias establecidas y calculará las ID de los OSD primarios y secundarios de destino en el PG mediante el uso del algoritmo CRUSH en el PGID y las almacenará en diferentes nodos OSD (de hecho, todos los objetos en el PG se almacenan en el OSD) .
Es decir, a través de CRUSH (PGID), los datos en PG se almacenan en cada grupo OSD


Ciclo de vida de lanzamiento de ocho versiones de Ceph

A partir de la versión de Nautilus (14.2.0), Ceph tendrá una nueva versión estable lanzada cada año, que se espera sea lanzada en marzo de cada año. Cada año, la nueva versión tendrá un nuevo nombre (por ejemplo, "Mimic ") y un número de versión principal (por ejemplo, 13 para Mimic, ya que "M" es la letra número 13 del alfabeto).

El formato del número de versión es xyz, x indica el ciclo de lanzamiento (por ejemplo, 13 para Mimic, 17 para Quincy), y indica el tipo de versión de lanzamiento, es decir x.0.z: y es igual a 0, lo que indica el
desarrollo versión
x.1.z: y es igual a 1, lo que indica una versión candidata (para clústeres de prueba)
x.2.z: y es igual a 2, lo que indica una versión estable/de corrección de errores (para usuarios)

Implementación de nueve clústeres de Ceph


En la actualidad, Ceph proporciona oficialmente una variedad de métodos para implementar clústeres de Ceph. Los métodos comúnmente utilizados son ceph-deploy, cephadm y binary:

● cephadm: use cephadm para implementar clústeres de ceph desde Octopus y versiones más recientes, use contenedores y systemd para instalar y administrar clústeres de Ceph. No recomendado para entornos de producción en este momento.

●Binario: implementación manual, implemente el clúster de Ceph paso a paso, admita más personalización y comprenda los detalles de implementación, y la instalación es más difícil.

Diez experimentos: Implemente el clúster de Ceph según
la recomendación de entorno de producción de Ceph-deploy:
1. Todos los clústeres de almacenamiento utilizan una red de 10 Gigabit
2. Red de clúster (red de clúster, utilizada para la comunicación interna del clúster) y red pública (red pública, utilizado Acceso externo al clúster de Ceph)
3. Mon, mds y osd se implementan por separado en diferentes hosts (en el entorno de prueba, un nodo de host puede ejecutar varios componentes)
4. OSD también puede usar SATA
5. Planificación del clúster según la capacidad
6 Xeon E5 2620 V3 o superior CPU, 64 GB o superior de memoria
7. Implementación distribuida de hosts de clúster para evitar fallas en la fuente de alimentación o la red del gabinete

Planificación del entorno de Ceph

Nombre de host Red pública Función de red del clúster admin 192.168.50.25
admin (el nodo de administración es responsable de la implementación general del clúster) nodo 03 192.168.50.25 192.168.50.25 mon, osd clinet 192.168.50.20 cliente 1. Cierre selinux y firewall systemctl disabled --now firewalld setenforce 0 sed -i 's/enforcing/disabled/' /etc/selinux/config







2. Configure el nombre de host según el plan:
hostnamectl set-hostname admin
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03
hostnamectl set-hostname cliente

3, coloque hosts parse
cat >> /etc/hosts << EOF
192.168.50.25 admin
192.168.50.22 node01 192.168.50.23
node02
192.168.50.24 node03
192.168.50.20 cliente
EOF

4. Instalar software común y paquetes dependientes
yum -y install epel-release
yum -y install yum-plugin-priorities yum-utils ntpdate python-setuptools python-pip gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2 -devel bzip2 bzip2-devel zip descomprimir ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-devel nss_ldap openldap openldap-devel openldap-clients openldap-servers libxslt-devel libevent-de vel ntp libtool-ltdl bison libtool vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers pam-devel tcl tk cmake ncurses-devel bison setuptool popt-devel net-snmp screen perl-devel pcre-devel net-snmp screen tcpdump rsync sysstat man iptables sudo libconfig git bind-utils tmux elinks numactl iftop bwm-ng net-tools esperar snappy leveldb gdiskpython-argparse gperftools-libs conntrack ipset jq libseccomp socat chrony sshpass
 

5. Configure ssh en el nodo de administración de administración para iniciar sesión en todos los nodos sin contraseña
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking= no root@admin
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@node01
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@node02
sshpass -p '123' ssh- copy-id - o StrictHostKeyChecking=no root@node03

6. Configure la sincronización de tiempo
systemctl enable --now chronyd
timedatectl set-ntp true #Open NTP
timedatectl set-timezone Asia/Shanghai #Set time zone
chronyc -a makestep #Sincronizar a la fuerza el reloj del sistema
timedatectl status #Ver el estado de sincronización de tiempo
fuentes chronyc - v #Ver información del servidor de origen ntp
timedatectl set-local-rtc 0 #Escribir la hora UTC actual en el reloj del hardware

#Reiniciar servicios que dependen de la hora del sistema
systemctl restart rsyslog 
systemctl restart crond

#Cerrar servicios irrelevantes
systemctl disabled --ahora postfix
 

7. Configure la fuente de Ceph yum
wget https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm --no-check-certificate

rpm -ivh ceph-release-1-1.el7.noarch.rpm --force
 

En este momento, el archivo ceph.repo se genera en el almacén de yum, y la dirección de descarga interna es una fuente externa, que se puede modificar directamente a una fuente espejo nacional con sed.

sed -i 's#download.ceph.com#mirrors.aliyun.com/ceph#' ceph.repo

8. Reinicie todos los hosts después de realizar todas las operaciones anteriores (opcional)
sync #改盘
reboot #Reboot

Implementar clúster de Ceph

1. Cree un directorio de trabajo de Ceph para todos los nodos, y el trabajo de seguimiento se realizará en este directorio
mkdir -p /etc/ceph


2. Instale el cd de la herramienta de implementación ceph-deploy /etc/ceph
yum install -y ceph-deploy #Install en el nodo de administración

ceph-deploy --version

3. Instale el paquete de software de Ceph en el nodo de administración para otros nodos
#ceph-deploy 2.0.1 La implementación predeterminada es la versión mímica de Ceph. Si desea instalar otras versiones de Ceph, puede usar --release para especificar manualmente la versión
cd /etc/ceph
ceph -deploy install --release nautilus node0{1..3} admin

#ceph-deploy install básicamente ejecuta los siguientes comandos:
yum clean all
yum -y install epel-release
yum -y install yum-plugin-priorities
yum -y install ceph-release ceph ceph-radosgw

#También puede instalar manualmente el paquete de Ceph, ejecute el siguiente comando en otros nodos para implementar el paquete de instalación de Ceph:
yum install -y ceph-mon ceph-radosgw ceph-mds ceph-mgr ceph-osd ceph-common ceph

Agregar disco duro y tarjeta de red al nodo01 nodo02 nodo03

Actualice la interfaz del disco y actualice el disco recién agregado

echo "- - -" >/sys/class/scsi_host/host0/scan

echo "- - -" >/sys/clase/scsi_host/host1/escanear

echo "- - -" >/sys/class/scsi_host/host2/scan

o reiniciar directamente

Modificar el archivo de configuración de la tarjeta de red de la intranet

cd /etc/sysconfig/network-script/

cp ifcfg-ens33 ifcfg-ens35

4. Genere la configuración inicial
#Ejecute el siguiente comando en el nodo de administración para decirle a ceph-deploy cuál es el nodo de monitoreo mon
cd /etc/ceph
ceph-deploy new --public-network 192.168.50.0/24 --cluster-network 192.168 .100.0 /24 nodo01 nodo02 nodo03

#Después de que el comando se ejecute correctamente, el archivo de configuración se generará en /etc/ceph
ls /etc/ceph
ceph.conf #archivo de configuración
de ceph ceph-deploy-ceph.log #monitor log
ceph.mon.keyring #monitor key ring documento
 

5. Inicialice mon node
cd /etc/ceph en el nodo de administración

 #Crear un nodo mon. Dado que el monitor usa el algoritmo Paxos, la cantidad de nodos de clúster de alta disponibilidad requiere un número impar mayor o igual a 3. ceph
-deploy mon create node01 node02 node03    

 #Configure el nodo mon inicial y sincronice la configuración con todos los nodos     

ceph-deploy --overwrite-conf mon create-initial      
                                                # --overwrite-conf parámetro se usa para indicar el archivo de configuración de sobrescritura obligatorio

ceph-deploy collectkeys node01 #Operación opcional, recopile todas las claves en el nodo node01
 

 #Ver el proceso mon abierto automáticamente en el nodo mon
ps aux | grep ceph


#Ver el estado del clúster de Ceph en el nodo de administración
cd /etc/ceph
ceph -s

#Comprobar la elección del clúster mon
ceph quorum_status --format json-pretty | líder grep

#Expand mon node
ceph-deploy mon add <nombre de nodo>

6. Implementar nodos capaces de administrar clústeres de Ceph (opcional)
#Puede implementar comandos de ceph en cada nodo para administrar el clúster
cd /etc/ceph
ceph-deploy --overwrite-conf config push node01 node02 node03 #Sincronizar la configuración con todos los nodos mon, Asegúrese de que el contenido de ceph.conf en todos los nodos mon sea consistente

ceph-deploy admin node01 node02 node03 #Este libro es para copiar el archivo de autenticación del clúster ceph.client.admin.keyring en cada nodo


#Ver ls /etc/ceph en el nodo mon

7. Implementar nodos de almacenamiento osd

#No particione el host después de agregar el disco duro, use
lsblk  directamente


#Si es un disco duro antiguo, primero debe borrar (eliminar la tabla de particiones) el disco (opcional, no se puede hacer un disco duro nuevo sin datos)
cd /etc/ceph
ceph-deploy disk zap node01 /dev/sdb
ceph-deploy disk zap node02 /dev/sdb
ceph-deploy disk zap node03 /dev/sdb

#Agregar nodo osd (agregar en nodo adimin)
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdb
ceph-deploy - -overwrite-conf osd crear nodo03 --data /dev/sdb
 

 Ver estado de osd ceph osd stat

 Instale la operación anterior y agregue el disco duro /dev/sdc /dev/sdd de node01 node02 node03

8. Implemente el nodo mgr

El demonio #ceph-mgr se ejecuta en modo Activo/En espera, lo que garantiza que cuando falla el nodo activo o su demonio ceph-mgr, una de las instancias en espera puede asumir sus tareas sin interrumpir el servicio. De acuerdo con los principios de la arquitectura oficial, mgr debe tener al menos dos nodos para funcionar.

manager节点
cd /etc/ceph
ceph-deploy mgr create node01 node02

#Solución Problema HEALTH_WARN en la figura anterior: mons está permitiendo un problema de recuperación de global_id inseguro:
deshabilite el modo inseguro: configuración de ceph establecida mon auth_allow_insecure_global_id_reclaim falso

#Expandir nodo de administrador
ceph-deploy administrador crear <nombre de nodo>
 

9. ¡Encienda el módulo de monitoreo
y primero verifique qué nodo es el nodo activo de administrador!

cef -s | administrador de grep

 #Ejecute el comando node01
yum install -y ceph-mgr-dashboard en el nodo activo ceph-mgr

cd /etc/ceph

ceph mgr módulo ls | tablero grep

#Abrir el módulo del panel de instrumentos
ceph mgr module enable dashboard --force

#Deshabilitar la función ssl del tablero
ceph config set mgr mgr/dashboard/ssl false

#Configure la dirección y el puerto monitoreados por el panel de control
ceph config set mgr mgr/dashboard/server_addr 0.0.0.0
ceph config set mgr mgr/dashboard/server_port 8000

#重启 tablero
ceph mgr módulo deshabilitar tablero
ceph administrador módulo habilitar tablero --force

#Confirme el acceso a
los servicios de administrador de ceph de la URL del tablero

#Establecer cuenta y contraseña del panel
echo "12345678" > dashboard_passwd.txt
ceph dashboard set-login-credentials admin -i dashboard_passwd.txt 

Acceso al navegador: http://192.168.50.22:8000, la contraseña de la cuenta es admin/12345678

Gestión de grupos de recursos

Arriba hemos completado la implementación del clúster de Ceph, pero ¿cómo almacenamos datos en Ceph? Primero, debemos definir un grupo de recursos Pool en Ceph. Pool es un concepto abstracto para almacenar objetos Object en Ceph. Podemos entenderlo como una partición lógica en el almacenamiento de Ceph. Pool está compuesto por múltiples PG; los PG se asignan a diferentes OSD a través del algoritmo CRUSH; al mismo tiempo, Pool puede establecer el tamaño de la réplica y el número predeterminado de réplicas es 3 .

El cliente de Ceph solicita el estado del clúster desde el monitor y escribe datos en el Pool. De acuerdo con la cantidad de PG, los datos se asignan a diferentes nodos OSD a través del algoritmo CRUSH para realizar el almacenamiento de datos. Aquí podemos entender Pool como una unidad lógica para almacenar datos de Objetos; por supuesto, el clúster actual no tiene un grupo de recursos, por lo que debe definirse.
 

Cree un grupo de recursos de Pool, su nombre es mypool, y la cantidad de PG se establece en 64. Al configurar PG, también debe configurar PGP (por lo general, los valores de PG y PGP son los mismos): PG (Grupo de ubicación ), pg es un concepto virtual
, se usa para almacenar objetos, PGP (Grupo de ubicación con fines de ubicación), es equivalente a un arreglo osd y una combinación almacenada en pg


cd /etc/ceph
ceph osd pool crear mypool 64 64

¿Cómo calcular cuántos pg debe tener la piscina pobre?
Si el número de OSD es inferior a 5, establezca el número de páginas en 128;

El número de OSD es de 5 a 10 y el número de páginas se establece en 512;

El número de OSD es de 10 a 50 y el número de páginas se establece en 4096;

El número de OSD es superior a 50, consulte la fórmula

      (PG de destino por OSD) x (N.° de OSD) x (%Datos)/(Tamaño)

Significado: Targeter Pgs per osd # y cuántos PG se asignan a cada OSD

             osd # El número de osd

          %data #pool porcentaje del espacio total

          tamaño: número de duplicados  

Para obtener más información, consulte el sitio web oficial de Ceph
Ceph Homepage - Ceph

#Ver información de la agrupación de clúster
ceph osd pool ls o rados lspools
ceph osd lspools

#Ver el número de copias del grupo de recursos
ceph osd pool get mypool size

#Verifique el número de PG y PGP
ceph osd pool get mypool pg_num
ceph osd pool get mypool pgp_num

#Modificar el número de pg_num y pgp_num a 128
ceph osd pool set mypool pg_num 128
ceph osd pool set mypool pgp_num 128

ceph osd pool obtener mypool pg_num
ceph osd pool obtener mypool pgp_num

#Modificar el número de copias de Pool a 2
ceph osd pool set mypool size 2

ceph osd pool obtener el tamaño de mypool

#Modificar el número predeterminado de copias a 2
vim ceph.conf
......
osd_pool_default_size = 2

ceph-deploy --overwrite-conf config push node01 node02 node03 #Sincronización de la configuración del nodo de administración con los nodos de datos

 Una vez completada la modificación, los nodos del nodo 1, nodo 2, nodo 3 deben reiniciar el servicio.


#Eliminar grupo de recursos del grupo

1) Existe el riesgo de pérdida de datos en el comando de eliminación del grupo de almacenamiento. Ceph prohíbe este tipo de operación de manera predeterminada. El administrador debe habilitar la operación de eliminación del grupo de almacenamiento en el archivo de configuración ceph.conf vim ceph.conf …
[
mon
]
mon permitir eliminar grupo = verdadero

2) Inserte el archivo de configuración ceph.conf en todos los nodos mon
ceph-deploy --overwrite-conf config push node01 node02 node03

3) Todos los nodos mon reinician el servicio ceph-mon
systemctl restart ceph-mon.target

4) Ejecute el comando delete Pool
ceph osd pool rm pool01 pool01 --yes-i-really-really-mean-it

Ver el estado de OSD ceph osd status

 Ver uso de OSD

Dos: Crear la interfaz MDS del sistema de archivos CephFS 
//operación del servidor

1) Cree el
cd del servicio mds /etc/ceph
ceph-deploy mds create node01 node02 node03 en el nodo de administración

2) Ver el servicio mds de cada nodo
ssh root@node01 systemctl status ceph-mds@node01
ssh root@node02 systemctl status ceph-mds@node02 ssh
root@node03 systemctl status ceph-mds@node03

3) Cree un grupo de almacenamiento y habilite el sistema de archivos ceph
El sistema de archivos ceph requiere al menos dos grupos rados, uno para almacenar datos y otro para almacenar metadatos. En este momento, el grupo de datos es similar al directorio compartido del sistema de archivos.
grupo ceph osd crear cephfs_data 128 #Crear grupo de datos

ceph osd pool create cephfs_metadata 128 #Crear grupo de metadatos

#Crear cephfs, formato de comando: ceph fs new <NOMBRE_FS> <NOMBRE_METADATA_CEPHFS> <NOMBRE_DATOS_CEPHFS>
ceph fs new mycephfs cephfs_metadata cephfs_data #Habilite ceph, el grupo de metadatos está al frente y el grupo de datos está al final

ceph fs ls #Ver cephfs

4) Compruebe el estado de mds, uno está activo y los otros dos están en espera. El trabajo actual es el
ceph del servicio mds en node01
-s mds: mycephfs:1 {0=node01=up:active} 2 up:standby

ceph mds stat
mycephfs:1 {0=node01=activo:activo} 2 activo:en espera

5) Crear
formato de sintaxis de usuario: ceph fs Authorize <fs_name> client.<client_id> <path-in-cephfs> rw

#La cuenta es client.zhangsan, el nombre de usuario es zhangsan y zhangsan tiene permisos de lectura y escritura en el directorio raíz / del sistema de archivos ceph (no en el directorio raíz del sistema operativo) ceph fs Authorize mycephfs client.zhangsan /
rw | tee /etc/ceph/ zhangsan.llavero

# La cuenta es client.lisi, el nombre de usuario es lisi, lisi solo tiene permiso de lectura en el directorio raíz / del sistema de archivos y tiene permiso de lectura y escritura en el subdirectorio /test del directorio raíz del sistema de archivos ceph fs autorizar mycephfs client.lisi / r /
test rw | tee /etc/ceph/lisi.keyring

//operacion cliente

1) El cliente debe estar en la red pública


2) Cree un directorio de trabajo mkdir /etc/ceph en el cliente

3) Copie el archivo de configuración de ceph ceph.conf y los archivos de llavero de cuenta zhangsan.keyring, lisi.keyring
scp ceph.conf zhangsan.keyring lisi.keyring root@client:/etc/ceph en el nodo de administración de ceph al cliente

4) Instale el paquete ceph en el lado del cliente
cd /opt
wget https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm --no-check - certificado
rpm -ivh ceph-release-1-1.el7.noarch.rpm
yum install -y ceph 

5) Cree un archivo de clave secreta en el
cd del lado del cliente /etc/ceph
ceph-authtool -n client.zhangsan -p zhangsan.keyring > zhangsan.key #Exportar la clave secreta del usuario zhangsan a zhangsan.keyl
ceph-authtool - n cliente.lisi -p lisi.llavero > lisi.clave

6) montaje del cliente


●Método 1: formato de sintaxis basado en el kernel
: mount -t ceph node01:6789,node02:6789,node03:6789:/ <directorio de punto de montaje local> -o name=<nombre de usuario>,secret=<clave secreta> mount
- t ceph node01:6789,node02:6789,node03:6789:/ <directorio de punto de montaje local> -o name=<nombre de usuario>,secretfile=<archivo de clave secreta>

示例一:
mkdir -p /data/zhangsan
mount -t ceph node01:6789,node02:6789,node03:6789:/ /data/zhangsan -o name=zhangsan,secretfile=/etc/ceph/zhangsan.key

Ejemplo:
mkdir -p /data/lisi
mount -t ceph node01:6789,node02:6789,node03:6789:/ /data/lisi -o name=lisi,secretfile=/etc/ceph/lisi.key

#Verificar permisos de usuario
cd /data/lisi
echo 123 > 2.txt
-bash: 2.txt: permisos insuficientes

echo 123 > prueba/2.txt
gato prueba/2.txt
123

Ejemplo 3:
#Detener el servicio mds en node02
ssh root@node02 "systemctl stop ceph-mds@node02"

cefalograma -s

#Pruebe que el punto de montaje del cliente aún está disponible, si detiene todos los mds, el cliente no estará disponible

●Método 2: Basado en la herramienta de fusión
1) Copie el archivo de configuración de ceph ceph.conf y los archivos de llavero de cuenta zhangsan.keyring, lisi.keyring
scp ceph.client.admin.keyring root@client en el nodo de administración de ceph al cliente :/etc/cefalograma

2) Instale ceph-fuse en el lado del cliente
yum install -y ceph-fuse

3) Client mount
cd /opt/test
ceph-fuse -m node01:6789,node02:6789,node03:6789 /data/aa [-o nonempty] #Al montar, si el punto de montaje no está vacío, se montará Failed para cargar, especifique -o nonempty puede ignorarse

Cree la interfaz RBD del sistema de almacenamiento de bloques de Ceph 
1. Cree un grupo de almacenamiento denominado rbd-demo dedicado a RBD (operación de nodo de administración)
grupo ceph osd create rbd-demo 64 64

2. Convierta el grupo de almacenamiento al modo RBD
aplicación de grupo ceph osd habilitar rbd-demo rbd

3. Inicialice el grupo de almacenamiento
rbd pool init -p rbd-demo # -p es equivalente a --pool

4. Cree un espejo
rbd create -p rbd-demo --image rbd-demo1.img --size 10G

Se puede abreviar como:
rbd create rbd-demo/rbd-demo2.img --size 10G

 5. Administración de espejos
//Verifique qué espejos existen en el grupo de almacenamiento
rbd ls -l -p rbd-demo

//Ver los detalles de la imagen
rbd info -p rbd-demo --image rbd-demo1.img

rbd image 'rbd-demo.img':
    tamaño 10 GiB en 2560 objetos #El tamaño de la imagen especular y el número de tiras se divide en
    orden 22 (4 objetos MiB) #El número de tiras, el rango efectivo es 12 a 25, correspondiente a 4K a 32M, y 22 representa 2 elevado a 22, que es exactamente 4M
    snapshot_count: 0
    id: 5fc98fe1f304 # ID de la imagen reflejada
    block_name_prefix: rbd_data.5fc98fe1f304 #Formato de prefijo de nombre
    : 2 #Formato de imagen utilizado , el valor predeterminado es 2
    funciones: capas, bloqueo exclusivo, mapa de objetos, diferencia rápida, aplanamiento profundo        
    #Características de la imagen actual
    op_features:                                                                 
    #Características opcionales
    indicadores: 


//Modificar el tamaño de la imagen
rbd resize -p rbd-demo --image rbd-demo1.img --size 20G

rbd info -p rbd-demo --image rbd-demo1.img

#Use el cambio de tamaño para ajustar el tamaño de la imagen. Generalmente se recomienda solo aumentar pero no disminuir. Si es para disminuir, debe agregar la opción --allow-shrink rbd resize
-p rbd-demo --image rbd -demo1.img --tamaño 5G --permitir-reducir

//Eliminar espejo
#Eliminar espejo directamente
rbd rm -p rbd-demo --image rbd-demo2.img
rbd remove rbd-demo/rbd-demo2.img

#Se recomienda usar el comando de basura. Este comando elimina la imagen a la papelera de reciclaje. Si desea recuperarla, puede restaurar
rbd trash move rbd-demo/rbd-demo1.img

rbd ls -l -p rbd-demostración

lista de basura de rbd -p rbd-demo
5fc98fe1f304 rbd-demo1.img

#Restaurar imagen
rbd basura restaurar rbd-demo/5fc98fe1f304

rbd ls -l -p rbd-demostración

6. Uso del cliente Linux

Hay dos formas para que el cliente use RBD:
● Asigne la imagen al dispositivo de bloque local del sistema a través del módulo del kernel KRBD, generalmente el archivo de configuración es: /dev/rbd* ● La otra es
a través de la interfaz librbd, generalmente la máquina virtual KVM utiliza este tipo de interfaz.

Este ejemplo usa principalmente el cliente Linux para montar la imagen RBD como un disco local. Antes de comenzar, debe instalar el paquete ceph-common en los nodos de cliente requeridos, ya que el cliente debe llamar al comando rbd para asignar la imagen de RBD al disco duro local como un disco duro común. Y también debe copiar el archivo de configuración ceph.conf y el archivo de claves de autorización en el nodo correspondiente.
 

Administrar operaciones de nodo

//Cree y autorice a un usuario en el nodo de administración para acceder al grupo de almacenamiento RBD
especificado
o bien, cree client.osd-mount osd "permitir * pool=rbd-demo" mon "permitir r" > /etc/ceph/ceph.client.osd-mount.keyring

//Modifique las funciones de imagen RBD, CentOS7 solo admite funciones de capas y bandas de forma predeterminada, debe desactivar otras funciones
rbd función deshabilitar rbd-demo/rbd-demo1.img object-map,fast-diff,deep-flatten

//Envíe el archivo de llavero del usuario y el archivo ceph.conf al directorio /etc/ceph del cliente
cd /etc/ceph
scp ceph.client.osd-mount.keyring ceph.conf root@client:/etc/ceph
 

// operación del cliente linux

#Instalar paquete ceph-common
yum install -y ceph-common

#Ejecutar asignación de cliente
cd /etc/ceph
rbd map rbd-demo/rbd-demo1.img --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mount
 

#Ejecutar asignación de cliente
cd /etc/ceph
rbd map rbd-demo/rbd-demo1.img --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mount

#Ver mapeo
rbd mostrar
lista de dispositivos rbd mapeados

#Desconectar mapeo
rbd unmap rbd-demo/rbd-demo1.img

#Formatear y montar
mkfs.xfs /dev/rbd0

mkdir -p /datos/bb
montaje /dev/rbd0 /datos/bb

#Expansión en línea
Ajuste el tamaño de la imagen en el nodo de administración
rbd resize rbd-demo/rbd-demo1.img --size 30G

Actualizar el archivo del dispositivo
xfs_growfs /dev/rbd0 en el lado del cliente #Actualizar la capacidad del sistema de archivos xfs
resize2fs /dev/rbd0 #Actualizar la capacidad del sistema de archivos de tipo ext4

7. Administración de instantáneas
Tomar una instantánea de la imagen rbd puede preservar el historial de estado de la imagen y también puede usar la tecnología de capas de la instantánea para clonar la instantánea en una nueva imagen.

//Escribir un archivo en el cliente
echo 1111 > /data/bb/11.txt
echo 2222 > /data/bb/22.txt
echo 3333 > /data/bb/33.txt

//Cree una instantánea de la imagen en el nodo de administración
rbd snap create --pool rbd-demo --image rbd-demo1.img --snap demo1_snap1

Se puede abreviar como:
rbd snap create rbd-demo/rbd-demo1.img@demo1_snap1

//Enumerar todas las instantáneas de la imagen especificada
rbd snap list rbd-demo/rbd-demo1.img

# Salida en formato json:
rbd snap list rbd-demo/rbd-demo1.img --format json --pretty-format

//Revertir espejo a especificado
Antes de revertir la instantánea, debe desasignar el espejo y luego retroceder.

#Operar en el lado del cliente
rm -rf /data/bb/*
umount /data/bb
rbd unmap rbd-demo/rbd-demo1.img

#Operar
reversión instantánea de rbd en el nodo de administración rbd-demo/rbd-demo1.img@demo1_snap1

#Reasignar y montar
el mapa rbd en el lado del cliente rbd-demo/rbd-demo1.img --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mount mount
/dev/rbd0 /data / bb
ls /data/bb # Se encontró que los datos han sido restaurados

//Limite el número de instantáneas que puede crear el espejo
rbd snap limit set rbd-demo/rbd-demo1.img --limit 3

#Eliminar el límite:
rbd snap limit clear rbd-demo/rbd-demo1.img

//Eliminar instantánea
#Eliminar la instantánea especificada:
rbd snap rm rbd-demo/rbd-demo1.img@demo1_snap1

#Eliminar todas las instantáneas:
rbd snap purge rbd-demo/rbd-demo1.img

// capas de instantáneas

La estratificación de instantáneas admite el uso de clones de instantáneas para generar nuevas imágenes, que son casi idénticas a las imágenes creadas directamente y admiten todas las operaciones de imágenes. La única diferencia es que la imagen clonada hace referencia a una instantánea ascendente de solo lectura, y esta instantánea debe estar protegida.

#snapshot clon
1) Configure la instantánea ascendente en modo protegido:
rbd snap create rbd-demo/rbd-demo1.img@demo1_snap666

rbd snap proteger rbd-demo/rbd-demo1.img@demo1_snap666

2) Clonar la instantánea como una nueva imagen
rbd clone rbd-demo/rbd-demo1.img@demo1_snap666 --dest rbd-demo/rbd-demo666.img

rbd ls -p rbd-demostración

3) Comando para ver el subespejo
rbd children rbd-demo/rbd-demo1.img@demo1_snap666 de la instantánea después de completar la clonación


// instantánea aplanada

Por lo general, la imagen obtenida mediante la clonación de instantáneas conserva una referencia a la instantánea principal. En este momento, la instantánea principal no se puede eliminar, de lo contrario, se verá afectada.
rbd snap rm rbd-demo/rbd-demo1.img@demo1_snap666
#error La instantánea 'demo1_snap666' está protegida contra eliminación.

Si desea eliminar una instantánea pero quiere conservar su subespejo, primero debe aplanar su subespejo, y el tiempo de aplanamiento depende del tamaño del espejo 1)
Aplanar el subespejo
rbd aplanar rbd-demo/rbd-demo666.img

2) Desproteger la instantánea
rbd snap desproteger rbd-demo/rbd-demo1.img@demo1_snap666

3) Eliminar la instantánea
rbd snap rm rbd-demo/rbd-demo1.img@demo1_snap666

rbd ls -l -p rbd-demo #Después de eliminar la instantánea, verifique que el espejo secundario aún exista

8. Exportación e importación de imágenes espejo

//Exportar imagen
rbd exportar rbd-demo/rbd-demo1.img /opt/rbd-demo1.img

//Importar imagen
#Desinstalar el montaje del cliente y desasignar
umount /data/bb
rbd unmap rbd-demo/rbd-demo1.img

#Borrar todas las instantáneas debajo del espejo y eliminar el espejo
rbd snap purge rbd-demo/rbd-demo1.img
rbd rm rbd-demo/rbd-demo1.img

rbd ls -l -p rbd-demostración

#importar espejo
rbd import /opt/rbd-demo1.img rbd-demo/rbd-demo1.img

rbd ls -l -p rbd-demostración

Cree la interfaz RGW del sistema de almacenamiento de objetos Ceph 
1. Concepto de almacenamiento de objetos
El almacenamiento de objetos (objeto de almacenamiento) es un método de almacenamiento para datos no estructurados. Cada pieza de datos en el almacenamiento de objetos se almacena como un objeto separado con una dirección única para identificar los datos. objeto Por lo general, se utiliza en un entorno de computación en la nube.
A diferencia de otros métodos de almacenamiento de datos, el almacenamiento basado en objetos no utiliza árboles de directorios.

Aunque existen diferencias en el diseño y la implementación, la mayoría de los sistemas de almacenamiento de objetos presentan tipos de recursos básicos similares al mundo exterior. Desde la perspectiva del cliente, se divide en las siguientes unidades lógicas:
Amazon S3:
Proporciona
1. Usuario (User)
2. Storage bucket (Bucket)
3. Object (Object)

La relación entre los tres es:
1. El usuario almacena objetos en el depósito del sistema
2. El depósito pertenece a un determinado usuario y puede alojar objetos. Un depósito se utiliza para almacenar varios objetos
3. El mismo usuario puede tener varios depósitos. diferentes usuarios pueden usar depósitos con el mismo nombre, por lo que el nombre de usuario se puede usar como el espacio de nombres del depósito
 

●OpenStack Swift: 
proporciona usuario, contenedor y objeto correspondientes a usuarios, cubos de almacenamiento y objetos respectivamente, pero también proporciona una cuenta de componente principal para el usuario, que se utiliza para representar un proyecto o usuario, por lo que una cuenta puede contener de uno a varios usuarios. , pueden compartir el mismo conjunto de contenedores y proporcionar espacios de nombres para contenedores

● RadosGW:
proporciona usuario, subusuario, depósito y objeto. El usuario corresponde al usuario de S3 y el subusuario corresponde al usuario de Swift. Sin embargo, ni el usuario ni el subusuario admiten espacios de nombres para depósitos, por lo que los depósitos de almacenamiento de diferentes usuarios No se permite el mismo nombre; sin embargo, desde la versión joya, RadosGW ha introducido un inquilino (inquilino) para proporcionar espacios de nombres para usuarios y depósitos, pero es un componente opcional.


De lo anterior se puede ver que los tipos de recursos principales de la mayoría del almacenamiento de objetos son similares, como Amazon S3, OpenStack Swift y RadosGw. Entre ellos, S3 y Swift no son compatibles entre sí. Para ser compatible con S3 y Swift, Ceph proporciona una capa de abstracción de datos RGW (RadosGateway) y una capa de administración sobre la base del clúster RadosGW, que puede ser compatible de forma nativa con S3 y Swift. API rápida.
S3 y Swift pueden completar el intercambio de datos basado en http o https, y el Civetweb integrado de RadosGW brinda servicios. También puede admitir servidores proxy, incluidos nginx, haproxy, etc., para recibir solicitudes de usuarios en forma de proxies y luego reenviarlas. al proceso RadosGW.
La función de RGW depende de la implementación del daemon de la puerta de enlace de objetos, que es responsable de proporcionar la interfaz REST API al cliente. Para los requisitos de balanceo de carga redundante, generalmente hay más de un demonio RadosGW en un clúster de Ceph.
 

2. Cree una interfaz RGW.
Si necesita usar una interfaz como S3 o Swift, debe implementar/crear una interfaz RadosGW. RadosGW generalmente se usa como almacenamiento de objetos, similar a Alibaba Cloud OSS.
 

//Cree un proceso daemon RGW en el nodo de administración (este proceso generalmente requiere alta disponibilidad en un entorno de producción, que se presentará más adelante)
cd /etc/ceph
ceph-deploy rgw create node01

cefalograma -s

#Después de una creación exitosa, de forma predeterminada, se creará automáticamente una serie de grupos de almacenamiento para RGW
ceph osd pool ls
rgw.root 
default.rgw.control #Información
del controlador default.rgw.meta #Registrar metadatos
default.rgw.log #Información de registro
default.rgw.buckets.index #es la información del depósito rgw, generada después de que se escriben los datos
default.rgw.buckets.data #es la información real de los datos almacenados, que se genera después de que se escriben los datos
 

#Por defecto, RGW escucha el puerto 7480
ssh root@node01 netstat -lntp | grep 7480
 

curl node01:7480
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <
ListAllMyBucketsResult xmlns= "http://s3.amazonaws.com/doc/2006-03-01/">
  <Propietario>
    <ID>anónimo</ID>
    <DisplayName/>
  </Owner>
  <Cubos/>
</ListAllMyBucketsResult>

//Habilite http+https, cambie el
demonio de puerto de monitoreo RadosGW implementado internamente por Civetweb, a través de la configuración de Civetweb puede completar la administración básica de RadosGW.

#Para habilitar SSL en Civetweb, primero necesita un certificado y generar un certificado en el nodo rgw

nodo1 operación de nodo
1) Generar clave privada de certificado de CA:
openssl genrsa -out civetweb.key 2048

2) Generar clave pública de certificado de CA:
openssl req -new -x509 -key civetweb.key -out civetweb.crt -days 3650 -subj "/CN=192.168.80.11"

# 3. Combinar el certificado generado en pem
cat civetweb.key civetweb.crt > /etc/ceph/civetweb.pem

#Cambie el puerto de escucha
Civetweb escucha en el puerto 7480 de manera predeterminada y proporciona el protocolo http.Si necesita modificar la configuración, debe editar el archivo de configuración ceph.conf en el nodo de administración cd /etc/
ceph

vim ceph.conf
......
[client.rgw.node01]
rgw_host = node01
rgw_frontends = "civetweb port=80+443s ssl_certificate=/etc/ceph/civetweb.pem num_threads=500 request_timeout_ms=60000"

-------------------------------------------------- ----------
●rgw_host: el nombre o la dirección IP de RadosGW correspondiente
●rgw_frontends: configure aquí el puerto de escucha, si usar https y algunas configuraciones comunes:
•port: si es un puerto https, debe estar detrás del puerto Agregue un s.
• ssl_certificate: especifica la ruta al certificado.
• num_threads: el número máximo de conexiones simultáneas, el valor predeterminado es 50, ajustado según los requisitos; por lo general, este valor debe ser mayor en el entorno del clúster de producción • request_timeout_ms: tiempo de espera de
envío y recepción, en ms, el valor predeterminado es 30000
• access_log_file: acceso ruta de registro, el valor predeterminado está vacío
error_log_file: ruta de registro de errores, el valor predeterminado está vacío
--------------------------------- --- ------------------------

# Después de modificar el archivo de configuración ceph.conf, debe reiniciar el servicio RadosGW correspondiente y, a continuación, enviar el archivo de configuración
ceph-deploy --overwrite-conf config push node0{1..3}

ssh root@node01 systemctl reiniciar ceph-radosgw.objetivo

#Ver puerto en el nodo rgw
netstat -lntp | grep -w 80
netstat -lntp | grep 443

#Verificación de acceso en el lado del cliente
curl http://192.168.80.11:80
curl -k https://192.168.80.11:443
 

//Crear una cuenta de RadosGW
Use el comando radosgw-admin en el nodo de administración para crear una cuenta de RadosGW

radosgw-admin user create --uid="rgwuser" --display-name="rgw test user"
......
    "keys": [
        {             "user": "rgwuser",             "access_key": "ER0SCVRJWNRIKFGQD31H" ,             "clave_secreta": "YKYjk7L4FfAu8GHeQarIlXodjtj1BXVaxpKv2Nna"         }     ],





#Después de que la creación sea exitosa, se generará la información básica del usuario, y las dos informaciones más importantes son access_key y secret_key. Una vez que el usuario se haya creado correctamente, si olvida la información del usuario, puede usar el siguiente comando para ver
la información del usuario de radosgw-admin --uid="rgwuser"
 

//Prueba de acceso a la interfaz S3
1) Instale python3 y python3-pip en el lado del cliente
yum install -y python3 python3-pip

python3 -V
Python 3.6.8

pip3 -V
pip 9.0.3 de /usr/lib/python3.6/site-packages (python 3.6)

2) Instale el módulo boto para probar la conexión a S3
pip3 install boto

3) Pruebe el acceso a la interfaz S3
echo 123123 > /opt/123.txt

vim test.py
#codificación: utf-8
import ssl
import boto.s3.connection
from boto.s3.key import Key
try:
    _create_unverified_https_context = ssl._create_unverified_context
excepto AttributeError:
    pass
else:
    ssl._create_default_https_context = _create _unverified_https_context
    
#test user's keys information
access_key = "ER0SCVRJWNRIKFGQD31H" #Ingrese la clave_de_acceso de la cuenta de RadosGW
secret_key = "YKYjk7L4FfAu8GHeQarIlXodjtj1BXVaxpKv2Nna" #Ingrese la clave_secreta de la cuenta de RadosGW

#rgw's ip and port
host = "192.168.80.11" #Ingrese la dirección de red pública de la interfaz RGW

#Si usa el puerto 443, el siguiente enlace debe configurarse is_secure=True
port = 443
#Si usa el puerto 80, el siguiente enlace debe configurarse is_secure=False
#port = 80
conn = boto.connect_s3(
    aws_access_key_id=access_key,
    aws_secret_access_key =clave_secreta,
    host =host,
    puerto=puerto,
    is_secure=Verdadero,
    validar_certs=Falso,
    formato_llamada=boto.s3.conexión.OrdinaryCallingFormat()
)

#1: Cree un depósito
#conn.create_bucket(bucket_name='bucket01')
#conn.create_bucket(bucket_name='bucket02')

#2: Determine si existe, devuelva No
existe ninguno = conn.lookup('bucket01')
print(exists)
#exists = conn.lookup('bucket02')
#print(exists)

#3: Obtener un cubo
#cubo1 = conn.get_bucket('cubo01')
#cubo2 = conn.get_bucket('cubo02')

#4: Ver archivos en un depósito
#print(list(bucket1.list()))
#print(list(bucket2.list()))

#5: almacenar datos en s3, la fuente de datos puede ser un archivo, una secuencia o una cadena
#5.1, cargar archivos
#bucket1 = conn.get_bucket('bucket01')
# El valor de name es la clave de los datos
#key = Key (bucket= bucket1, name='myfile')
#key.set_contents_from_filename('/opt/123.txt')
# Lea el contenido del archivo en s3, devuelva la cadena que es el contenido del archivo 123.txt
#print(key .get_contents_as_string())

#5.2, cargue la cadena
# Si ya obtuvo el objeto antes, no necesita obtenerlo repetidamente
cubo2 = conn.get_bucket('cubo02')
clave = Clave(cubo=cubo2, nombre='mystr')
clave. set_contents_from_string('hola mundo')
print(key. get_contents_as_string())

#6: Para eliminar un depósito, todas las claves del depósito deben eliminarse al eliminar el propio depósito
bucket1 = conn.get_bucket('bucket01')
for key in bucket1:
    key.delete()
bucket1.delete()


4) Siga los pasos anteriores para ejecutar la prueba de script de python
python3 test.py

Simulación y recuperación de fallas de OSD 
1. Simular falla de OSD
Si hay miles de osd en el clúster ceph, es normal que haya 2 o 3 fallas por día, podemos simular una osd

#Si el demonio osd se ejecuta normalmente, el osd inactivo volverá rápidamente a la normalidad, por lo que debe apagar el demonio
ssh root@node01 systemctl stop ceph-osd@0

#abajo 掉 osd
ceph osd abajo 0

árbol cefalométrico osd


2. Saque el osd roto del clúster
//Método 1:
#Mueva osd.0 fuera del clúster, el clúster comenzará a sincronizar automáticamente los datos
ceph osd out osd.0

#Eliminar osd.0 de crushmap
ceph osd aplastar eliminar osd.0

#Eliminar la información de la cuenta correspondiente al proceso daemon
ceph auth rm osd.0

lista de autenticación cefalométrica

#Borrar osd.0
ceph osd rm osd.0

ceph osd estadística
ceph -s

//Método 2:
ceph osd out osd.0

#Usando los pasos integrales, elimine la configuración para el osd roto en el archivo de configuración
ceph osd purge osd.0 --yes-i-really-mean-it

3. Vuelva a unirse al clúster después de reparar el osd roto original
#Crear osd en el nodo osd, no es necesario especificar el nombre, generará automáticamente
cd /etc/ceph según el número de serie

ceph osd crear

#创建账户
ceph-authtool --create-keyring /etc/ceph/ceph.osd.0.keyring --gen-key -n osd.0 --cap mon 'permitir perfil osd' --cap mgr 'permitir perfil osd ' --cap osd 'permitir *'

#Importar nueva clave de cuenta
ceph auth import -i /etc/ceph/ceph.osd.0.keyring

lista de autenticación cefalométrica

#Actualice el archivo de llavero en la carpeta osd correspondiente
ceph auth get-or-create osd.0 -o /var/lib/ceph/osd/ceph-0/keyring

#Únete a crushmap
ceph osd crush add osd.0 1.000 host=node01 #1.000 representa el peso

#Únase al clúster
ceph osd en osd.0

árbol cefalométrico osd

#Reiniciar osd daemon
systemctl reiniciar ceph-osd@0

 ceph osd tree #Después de un tiempo, el estado de osd está activo    

//如果重启失败
报错:
El trabajo para [email protected] falló porque el inicio del servicio se intentó con demasiada frecuencia. Consulte "systemctl status [email protected]" y "journalctl -xe" para obtener más información.
Para forzar un inicio, use "systemctl reset-failed [email protected]" seguido de "systemctl start [email protected]" nuevamente.

#运行
systemctl reset-failed [email protected] && systemctl restart [email protected]

Supongo que te gusta

Origin blog.csdn.net/zl965230/article/details/131043357
Recomendado
Clasificación