Résumé du déploiement de Minio

présentation officielle

MinIO est un service de stockage d'objets basé sur le protocole open source Apache License v2.0. Il est compatible avec l'interface de service de stockage en nuage Amazon S3 et convient parfaitement au stockage de données non structurées de grande capacité , telles que des images, des vidéos, des fichiers journaux, des données de sauvegarde et des images de conteneur/machine virtuelle, etc., et un fichier objet. peut être de n'importe quelle taille, de plusieurs ko à 5T maximum

MinIO peut être déployé en un seul point, déploiement de cluster distribué, facile à utiliser et à déployer, et peut prendre en charge l'expansion. Le SDK est similaire à Ali OSS, ce qui répond juste à mes besoins. Le seul défaut est qu'il ne prend pas en charge l'expansion dynamique.

Déploiement Docker à nœud unique

Tirez d'abord le miroir et téléchargez la dernière version du miroir

docker pull minio/minio

Démarrez le conteneur, le port de démarrage est 9000 "-v /mnt/data:/data", spécifiez l'adresse de stockage de l'hôte pointant vers le conteneur, le fichier téléchargé est stocké ici, la commande pour démarrer "server /data", spécifiez l'adresse de stockage interne du conteneur en tant que / data

docker run -p 9000:9000 --name minio1 \
 --restart=always \
 --net=host \
  -e MINIO_ACCESS_KEY=minioadmin \
   -e MINIO_SECRET_KEY=minioadmin \
  -v /mnt/data:/data \
  -v /mnt/config:/root/.minio \
  minio/minio server /data


Une fois le démarrage réussi, le navigateur visite http://{ip}:9000, accessKey et secretKey sont requis pour la connexion, et le conteneur docker commence par "minioadmin" par défaut, qui sera affiché après le démarrage

Déploiement binaire Linux à nœud unique

télécharger

mkdir /home/minio/{app,config,data,logs} -p
cd /home/minio/app
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio

Créer un répertoire de données

mkdir /minio_data

script de démarrage

min_server_start.sh

chmod 755 min_server_single.sh

#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/home/minio/app	
nohup ${MINIO_HOME}/minio server /minio_data  --address :9000 --console-address :8000 > ${MINIO_HOME}/minio.log 2>&1 &

script de démarrage

bash min_server_single.sh

 Une fois le démarrage réussi, le navigateur visite http://{ip}:9000, accessKey et secretKey sont requis pour la connexion, qui sont respectivement admin/12345678 dans le script

Déploiement distribué Linux

Introduction officielle : Distributed Minio nécessite au moins 4 disques durs , et l'utilisation de Distributed Minio introduit automatiquement la fonction de code d'effacement.

Avantages du Minio distribué

Protection des données
Distributed Minio utilise des codes d'effacement pour empêcher l'indisponibilité de plusieurs nœuds et la pourriture des bits.
Le Minio distribué nécessite au moins 4 disques durs, et l'utilisation du Minio distribué introduit automatiquement la fonction de code d'effacement.

Il existe un point de défaillance unique dans le service Minio autonome hautement disponible
, au contraire, s'il s'agit d'un Minio distribué avec N disques durs, tant qu'il y a N/2 disques durs en ligne, vos données sont en sécurité. Mais vous avez besoin d'au moins N/2+1 disques durs pour créer de nouveaux objets .
Par exemple, un cluster Minio à 16 nœuds avec 16 disques durs par nœud, même si 8 serveurs sont en panne, le cluster est toujours lisible, mais vous avez besoin de 9 serveurs pour écrire des données.

Cohérence
Minio en mode distribué et autonome, toutes les opérations de lecture et d'écriture respectent strictement le modèle de cohérence lecture après écriture
 

préparer l'environnement

192.168.10.159 minion-2
192.168.10.153 minion-1

4 disques durs par nœud

Remarque : Il doit y avoir quatre disques durs et le disque dur est vide, sinon une erreur sera signalée.

#创建挂载点
mkdir /mnt/mongo1
mkdir /mnt/mongo2
mkdir /mnt/mongo3
mkdir /mnt/mongo4
#分区
fdisk /dev/sdc
fdisk /dev/sdd
fdisk /dev/sde
fdisk /dev/sdf
#格式化
mkfs.ext4 /dev/sdc1
mkfs.ext4 /dev/sdd1
mkfs.ext4 /dev/sde1
mkfs.ext4 /dev/sdf1
#加载
mount /dev/sdc1 /mnt/mongo2/
mount /dev/sdd1 /mnt/mongo3/
mount /dev/sde1 /mnt/mongo4/
mount /dev/sdf1 /mnt/mongo1/
#写入系统配置
echo "/dev/sdc1 /mnt/mongo2 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdd1 /mnt/mongo3 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sde1 /mnt/mongo4 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdf1 /mnt/mongo1 ext4 defaults 0 0" >> /etc/fstab

df-h

 Assurez-vous que les horloges sont synchronisées

​​​​​​Synchronisation automatique de l'heure de réglage du serveur Centos

scénario de mise en page

Remarque : ignorez ici les méthodes de déploiement non évolutives et les méthodes de déploiement pseudo-distribué.

Démarrez d'abord le cluster à nœud unique minio-1 (vous devrez essayer d'étendre le cluster ultérieurement)

minio_cluster.sh

chmod 755 minio_cluster.sh

#!/bin/bash
  
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/home/minio/app
nohup ${MINIO_HOME}/minio server --address :9000 --console-address :8000  \
        http://minio-1/mnt/mongo{1...4} > ${MINIO_HOME}/minio.log 2>&1 &

Démarrer le cluster

bash chmod 755 minio_cluster.sh

vérifier

Méthode d'expansion de cluster

expansion peer-to-peer

Tout d'abord, le concept de conception minimaliste de MinIO fait que le cluster distribué MinIO ne prend pas en charge la méthode d'expansion consistant à ajouter un seul nœud au cluster et à effectuer un ajustement automatique, car l'équilibre des données et la division des groupes d'effacement provoqués par l'ajout d'un seul nœud cause Il apporte des procédures complexes d'ordonnancement et de traitement à l'ensemble du cluster, ce qui n'est pas propice à la maintenance. Par conséquent, MinIO fournit une méthode d'expansion peer-to-peer, c'est-à-dire que le nombre de nœuds et de disques à augmenter doit être égal au cluster d'origine.

Remarque : chaque région ajoutée doit avoir le même nombre de disques (jeu de codes d'effacement) que la région d'origine afin de conserver le même SLA de redondance des données .
Par exemple, la première zone a 8 disques, vous pouvez étendre le cluster à des zones de 16, 32 ou 1024 disques, assurez-vous simplement que le SLA de déploiement est un multiple de la zone d'origine.

Le script de démarrage du nœud minio-1 ajoute la configuration

Pour l'extension de capacité, ajoutez le nœud étendu à la fin de la dernière ligne de la commande d'origine et redémarrez le cluster.

#!/bin/bash
  
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/home/minio/app
nohup ${MINIO_HOME}/minio server --address :9000 --console-address :8000  \
        http://minio-1/mnt/mongo{1...4} http://minio-2/mnt/mongo{1...4} > ${MINIO_HOME}/minio.log 2>&1 &

Script de démarrage de la synchronisation

Synchronisez le script de démarrage avec le nœud minio-2, puis les deux nœuds démarrent le service.

vérifier

Expansion de la fédération

MinIO fournit officiellement un autre mécanisme d'expansion - l'expansion fédérée, c'est-à-dire qu'en introduisant etcd, plusieurs clusters distribués MinIO sont logiquement formés dans une fédération, fournissant des services externes dans leur ensemble et fournissant un espace de noms unifié. L'architecture du cluster fédéré MinIO est illustrée à la Figure 3-1.

 Avantages et inconvénients de l'expansion fédérée

Par rapport à l'expansion peer-to-peer, les avantages de l'expansion de la fédération sont : ① chaque cluster de la fédération ne nécessite pas que le nombre de nœuds et de disques soit égal ; ② la fédération peut être étendue indéfiniment et de nouveaux clusters sont continuellement ajoutés ; ③ si un cluster de la fédération échoue, l'échec n'affectera pas les autres clusters de la fédération pour fournir des services. L'inconvénient est qu'etcd doit être introduit en plus et que le processus de configuration est plus compliqué.

Il a été vérifié que le cluster fédéré présente un défaut. Lorsque le cluster A est plein, seul le cluster A peut être développé ; sinon, les compartiments associés à A ne peuvent pas être ajoutés. L'extension du cluster B n'est pas valide .

installer etcd

Lieu d'installation : 192.168.10.153

yum install -y etcd

vi /etc/etcd/etcd.conf

#[Membre]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:3380"
ETCD_LISTEN_CLIENT_URLS="http://0.0. 0.0 :

3379" #ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="etcd_minio"
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES="157 2864"
# ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.10.153:3380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.10.153:3379"

#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
#ETCD_INITIAL_CLUSTER="default=http://localhost :2380"
#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
#ETCD_INITIAL_CLUSTER_STATE="nouveau"
#ETCD_STRICT_RECONFIG_CHECK="true"
#ETCD_ENABLE_V2="true"
#
#[Proxy]
#ETCD_PROXY="off"
#ETCD_PROXY_FAILURE_WAIT="5000"
#ETCD_PROXY_REFRESH_INTER VAL="30000 "
#ETCD_PROXY_DIAL_TIMEOUT="1000"
#ETCD_PROXY_WRITE_TIMEOUT="5000"
#ETCD_PROXY_READ_TIMEOUT="0"
#
#[Sécurité]
#ETCD_CERT_FILE=""
#ETCD_KEY_FILE=""
#ETCD_CLIENT_CERT_AUTH="faux"
#ETCD_TRUSTED_CA_FILE=""
#ETCD_AUTO_TLS="faux" #ETCD_PEER_CERT_FILE=""
#
ETCD_PEER_KEY_FILE ="" #ETCD_PEER_CLIENT_CERT_AUTH="
faux " #ETCD_PEER_TRUSTED_CA_FILE
=""
#ETCD_PEER_AUT O_TLS="faux"
#
#[Logging]
#ETCD_DEBUG="false"
#ETCD_LOG_PACKAGE_LEVELS=""
#ETCD_LOG_OUTPUT="default"
#
#[Unsafe]
#ETCD_FORCE_NEW_CLUSTER="false"
#
#[Version]
#ETCD_VERSION="false"
#ETCD_AUTO_COMPACTION_RETENTION="0"
##[Profilage] #ETCD_ENABLE_PPROF="false" #ETCD_METRICS="basique" #




#[Authentification]
#ETCD_AUTH_TOKEN="simple"
 

Assurez-vous qu'etcd est installé avec succès. Vous pouvez vérifier l'état d'installation d'etcd avec la commande suivante :

rpm -qa | grep etcd

Si les informations de version d'etcd s'affichent dans la sortie, etcd est déjà installé.

Démarrez le service etcd. Démarrez etcd avec la commande suivante :

systemctl démarrer etcd


Cela démarre le service etcd et fonctionne.

Vérifiez que le service etcd a démarré avec succès. Vous pouvez utiliser la commande suivante pour vérifier l'état d'exécution du service etcd :

statut systemctl etcd

Si actif (en cours d'exécution) est affiché dans la sortie, le service etcd a démarré avec succès.

Script de démarrage du cluster 1

minio_cluster.sh

#!/bin/bash
  
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/home/minio/app

export MINIO_ETCD_ENDPOINTS="http://192.168.10.153:3379"
export MINIO_PUBLIC_IPS=192.168.10.153
export MINIO_DOMAIN=bo.test.com


nohup ${MINIO_HOME}/minio server --address :9000 --console-address :8000  \
        http://minio-1/mnt/mongo{1...4} > ${MINIO_HOME}/minio.log 2>&1 &

Script de démarrage du cluster 2

minio_cluster.sh

#!/bin/bash
  
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/home/minio/app

export MINIO_ETCD_ENDPOINTS="http://192.168.10.153:3379"
export MINIO_PUBLIC_IPS=192.168.10.159
export MINIO_DOMAIN=bo.test.com

nohup ${MINIO_HOME}/minio server --address :9000 --console-address :8000  \
        http://minio-2/mnt/mongo{1...4} > ${MINIO_HOME}/minio.log 2>&1 &

explication de la configuration

Le paramètre MINIO_ETCD_ENDPOINTS doit correspondre aux adresses IP de tous les nœuds du cluster ETCD construit ;

Le paramètre MINIO_PUBLIC_IPS est l'adresse IP de tous les nœuds du cluster ;

Le paramètre MINIO_DOMAIN doit être configuré. Même si vous n'accédez pas au bucket via un nom de domaine, sinon la fédération ne prendra pas effet. Seuls les clusters avec la même valeur de paramètre MINIO_DOMAIN formeront une fédération.

vérifier

Créez un compartiment dans le cluster A, et s'il peut être vu immédiatement dans le cluster B, cela signifie que le cluster est construit avec succès.

déploiement de docker extension peer-to-peer

scène de la demande

La méthode de déploiement de cluster d'origine nécessite au moins 4 disques durs vides et nécessite beaucoup de ressources.Parfois, lorsque les ressources sont limitées, un cluster pouvant étendre les ressources de stockage est nécessaire , qui peut être déployé à la manière d'un docker.

Le cluster minio installé par docker peut utiliser un dossier au lieu d'un disque, et le répertoire de données du cluster minio d'installation d'origine doit utiliser un disque entier vide.
La version cluster utilise également des codes d'effacement pour conserver les données, assurant la sauvegarde des données (mais uniquement dans les dossiers), et la version autonome n'utilise pas de codes d'effacement.
Il est recommandé d'utiliser un répertoire de données et un disque dans l'environnement de production.

liste de serveurs

192.168.10.159,192.168.10.160

point important

1. Le réseau doit utiliser le mode --net-host Après avoir expérimenté le mode de mappage, il n'est pas disponible . L'hypothèse est que lors de l'utilisation du mode de mappage, lors du signalement de l'identité de chaque nœud au cluster, l'adresse IP obtenue est l'adresse IP du conteneur interne, ce qui est incohérent avec l'adresse IP des données sur les paramètres suivants.

2. Si les données doivent être conservées, le répertoire de données et le répertoire du fichier de configuration doivent être mappés sur l'hôte

3. Le port de service et le port de console peuvent être personnalisés à l'aide des paramètres --address, --console-address

4. Il est recommandé que le nombre de copies de tous les disques soit de 2 à la puissance n, supérieur ou égal à 4
 

Construire Dockerfile

FROM centos:centos7.9.2009
wget https://dl.min.io/server/minio/release/linux-amd64/minio
WORKDIR /opt
RUN  chmod +x minio
ENTRYPOINT ["./minio"]
CMD ["server", "--address :9000","--console-address :9999","http://10.22.1.27/data{1...4}"]

Si le fichier minio a été téléchargé, vous pouvez utiliser

FROM centos:centos7.9.2009
COPY ./minio /opt/
WORKDIR /opt
RUN  chmod +x minio
ENTRYPOINT ["./minio"]
CMD ["server", "--address :9000","--console-address :9999","http://10.22.1.27/data{1...4}"]

construire une image de construction

sudo docker build -t myminio .

script de démarrage

docker run   --name minio1   \
    --restart=always \
    --net=host \
    -e MINIO_ACCESS_KEY=minioadmin \
    -e MINIO_SECRET_KEY=minioadmin \
    -v /data1:/data1 \
    -v /data2:/data2 \
	-v /data3:/data3 \
    -v /data4:/data4 \
    myminio server \
    --address :29000 \
    --console-address :29001  \
    http://192.168.10.159/data{1...4} http://192.168.10.160/data{1...4}

Avis:

1. La raison pour laquelle wget obtient le fichier minio ci-dessus n'est pas l'image minio/minio par défaut. L'expérience a révélé que l'utilisation de la syntaxe {} pour l'image minio/minio signalera une erreur, de sorte que le dernier fichier binaire est utilisé directement.

2. Parfois, si le répertoire de mappage initial existe déjà, une erreur peut être signalée au démarrage. Le moyen le plus sûr est de s'assurer que le répertoire n'existe pas et de laisser docker le créer automatiquement au démarrage.

Fournir une idée d'expansion inverse

Montez d'abord autant de répertoires que possible, attendez que le répertoire de données soit presque plein, mv une partie du répertoire de données sur un nouveau disque dur vide, supprimez le conteneur, modifiez le chemin de montage dans le script de démarrage et redémarrez. Si 32 répertoires sont montés, il y a 5 opportunités d'extension, et si 16 répertoires sont montés, il y a 5 opportunités d'extension. S'il y a 8 répertoires, il y a 4 possibilités d'expansion. Enfin, s'il n'y a aucune possibilité d'étendre le répertoire mv, vous pouvez ajouter des nœuds de machine.

Par exemple, montez d'abord 16 répertoires

docker run   --name minio1  -d \
    --restart=always \
    --net=host \
    -e MINIO_ACCESS_KEY=minioadmin \
    -e MINIO_SECRET_KEY=minioadmin \
    -v /mnt/mongo1/data1:/data1 \
    -v /mnt/mongo1/data2:/data2 \
	-v /mnt/mongo1/data3:/data3 \
    -v /mnt/mongo1/data4:/data4 \
	-v /mnt/mongo1/data5:/data5 \
    -v /mnt/mongo1/data6:/data6 \
	-v /mnt/mongo1/data7:/data7 \
    -v /mnt/mongo1/data8:/data8 \
	-v /mnt/mongo1/data9:/data9 \
    -v /mnt/mongo1/data10:/data10 \
	-v /mnt/mongo1/data11:/data11 \
    -v /mnt/mongo1/data12:/data12 \
	-v /mnt/mongo1/data13:/data13 \
    -v /mnt/mongo1/data14:/data14 \
	-v /mnt/mongo1/data15:/data15 \
    -v /mnt/mongo1/data16:/data16 \
    myminio server  \
    --address :29000 \
    --console-address :29001  \
    http://192.168.10.159:29000/data{1...16}

Lorsque le disque dur où se trouve /mnt/mongo1 est presque plein, déplacez 9-16 vers un nouveau disque dur

mv /mnt/mongo1/data9 /total_min/
mv /mnt/mongo1/data10 /total_min/
mv /mnt/mongo1/data11 /total_min/
mv /mnt/mongo1/data12 /total_min/
mv /mnt/mongo1/data13 /total_min/
mv /mnt/mongo1/data14 /total_min/
mv /mnt/mongo1/data15 /total_min/
mv /mnt/mongo1/data16 /total_min/

Supprimez le conteneur, modifiez le script de démarrage et redémarrez le conteneur, afin que l'effet d'expansion soit activé et que la vérification expérimentale soit effective.

docker run   --name minio1  -d \
    --restart=always \
    --net=host \
    -e MINIO_ACCESS_KEY=minioadmin \
    -e MINIO_SECRET_KEY=minioadmin \
    -v /mnt/mongo1/data1:/data1 \
    -v /mnt/mongo1/data2:/data2 \
	-v /mnt/mongo1/data3:/data3 \
    -v /mnt/mongo1/data4:/data4 \
	-v /mnt/mongo1/data5:/data5 \
    -v /mnt/mongo1/data6:/data6 \
	-v /mnt/mongo1/data7:/data7 \
    -v /mnt/mongo1/data8:/data8 \
	-v /total_min/data9:/data9 \
    -v /total_min/data10:/data10 \
	-v /total_min/data11:/data11 \
    -v /total_min/data12:/data12 \
	-v /total_min/data13:/data13 \
    -v /total_min/data14:/data14 \
	-v /total_min/data15:/data15 \
    -v /total_min/data16:/data16 \
    myminio server  \
    --address :29000 \
    --console-address :29001  \
    http://192.168.10.159:29000/data{1...16}

Vous ne pouvez pas non plus supprimer le conteneur. Après avoir déplacé le fichier, utilisez ln pour créer un lien de fichier pointant vers l'emplacement d'origine.

 ln -s /mnt/mongo2/data9 /mnt/mongo1/data9
 ln -s /mnt/mongo2/data10 /mnt/mongo1/data10
 ln -s /mnt/mongo2/data11 /mnt/mongo1/data11
 ln -s /mnt/mongo2/data12 /mnt/mongo1/data12
 ln -s /mnt/mongo2/data13 /mnt/mongo1/data13
 ln -s /mnt/mongo2/data14 /mnt/mongo1/data14
 ln -s /mnt/mongo2/data15 /mnt/mongo1/data15
 ln -s /mnt/mongo2/data16 /mnt/mongo1/data16

Comme le montre la figure, vous pouvez redémarrer le conteneur sans modifier la commande docker startup.

Testez l'utilisation du disque dur, c'est une commande très utile

fallocate -l 8G /mnt/mongo1/test2.zip

source

Minio Distributed Cluster Deployment_51CTO Blog_Distributed Cluster Deployment

Minio Distributed Cluster Deployment_51CTO Blog_Distributed Cluster Deployment

minio cluster, expansion_minio cluster_leoppeng's blog-CSDN blog

Déploiement et extension de MinIO

 Parler de la méthode d'expansion du cluster MinIO

Extension fédérale minio basée sur Docker (ETCD) 2023 dernier blog de _minio expansion_qq_38343011 - blog CSDN

 etcd+minio fédération expansion plan_minio etcd_18-year-old Xu Song's Blog-CSDN Blog

docker-install minio cluster_docker deploy minio cluster_Don't wave your blog-CSDN blog

Minio cluster installation docker version_docker minio cluster est le meilleur

Je suppose que tu aimes

Origine blog.csdn.net/csdncjh/article/details/131754563
conseillé
Classement