20 изображений шаг за шагом научат вас, как построить и оптимизировать многоузловую распределенную файловую систему Minio в собственном облачном режиме.
20 изображений шаг за шагом научат вас, как построить и оптимизировать многоузловую распределенную файловую систему Minio в собственном облачном режиме.

Автор: Бинхэ Планета: http://m6z.cn/6aeFbs Краткое содержание статьи: https://binghe.gitcode.host/md/all/all.html.

Ускоряйтесь, растите, прорывайтесь, помогайте другим и достигайте себя.

Привет всем, я Бинхэ~~

Minio — это высокопроизводительный сервер объектного хранения с открытым исходным кодом, подходящий для создания распределенных систем хранения. Он обладает механизмами высокой доступности, масштабируемости и защиты данных, совместим с API Amazon S3 и широко используется в больших данных, облачных вычислениях и контейнерных средах, предоставляя надежные и эффективные услуги объектного хранения для приложений.

1. Предисловие

Распределенная система обмена мгновенными сообщениями IM обеспечивает функции одиночного и группового чата.,Нужна поддержка для отправки и получения сообщенийТекст, смайлики, картинки, файлы, голоса и видеои т. д.。В процессе отправки сообщения,Как хранить картинки, файлы, голоса и другие ресурсы? Очень эффективный способ хранения,Это сохранение его в высокопроизводительном распределенном хранилище.документв системе。

После сравнения других распределенных файловых систем мы наконец выбрали Minio для хранения ресурсов сообщений, таких как изображения, файлы и голоса. В основном учитывая, что файловая система Minio обладает высокой производительностью, высокой масштабируемостью, простой установкой и эксплуатацией, а также возможностью стирающего кодирования. Вы можете узнать больше о конкретных функциях в Интернете, здесь мы не будем вдаваться в подробности.

2. Описание окружающей среды

  • Версия сервера: CentOS7
  • Имя хоста: binghe102
  • IP-адрес: 192.168.106.102
  • docker-compose:v2.17.3
  • Зеркальное отображение Минио: минио/минио
  • Зеркало Nginx: nginx:1.19.2-alpine

3. Установите docker-compose

Установить среду docker-compose относительно просто. Запустите следующую команду в командной строке, чтобы загрузить и установить docker-compose.

Язык кода:javascript
копировать
curl -SL https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

После успешной загрузки и установки используйте следующую команду, чтобы создать программную ссылку docker-compose.

Язык кода:javascript
копировать
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Затем проверьте версию docker-compose, как показано ниже.

Язык кода:javascript
копировать
[root@binghe102]# docker-compose version
Docker Compose version v2.17.3

Вы можете видеть, что установлена ​​версия docker-compose — 2.17.3, что указывает на то, что docker-compose установлен успешно.

4. Напишите файлы конфигурации

Здесь устанавливаются и запускаются четыре контейнера Minio, а Nginx предоставляет унифицированные внешние адреса для доступа к ресурсам, таким как изображения или файлы. Поэтому помимо написания конфигурации для установки контейнера Minio на основе docker-compose вам также необходимо написать конфигурацию для установки Nginx на основе docker-compose. Кроме того, вам также необходимо настроить файл nginx.conf.

4.1 Написание конфигурации контейнера

И файловая система Minio, и Nginx устанавливаются на основе docker-compose. Поэтому при написании конфигурации контейнера прописываем установку контейнера Minio и контейнера Nginx в один файл конфигурации и называем его: docker-compose-minio.yml.

Подробности об исходном коде см. в разделе Environment/docker-compose-minio.yml.

Язык кода:javascript
копировать
version: '3.2'

# Общие настройки для всех контейнеров и Конфигурация.
x-minio-common: &minio-common
  image: minio/minio
  command: server --console-address ":9001" http://minio{1...4}/data
  expose:
    - "9000"
  environment:
    MINIO_ROOT_USER: binghe
    MINIO_ROOT_PASSWORD: binghe123
  healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
    interval: 30s
    timeout: 20s
    retries: 3

# Запустите 4 докер-контейнера, на которых работают экземпляры миниосервера.
# Используйте порт обратного прокси-сервера nginx 9000, балансировку нагрузки
# Доступ к их сети можно получить через порты 9001, 9002, 9003 и 9004. console
services:
  minio1:
    <<: *minio-common
    hostname: minio1
    ports:
      - "9001:9001"
    volumes:
      - ./data/data1:/data

  minio2:
    <<: *minio-common
    hostname: minio2
    ports:
      - "9002:9001"
    volumes:
      - ./data/data2:/data

  minio3:
    <<: *minio-common
    hostname: minio3
    ports:
      - "9003:9001"
    volumes:
      - ./data/data3:/data

  minio4:
    <<: *minio-common
    hostname: minio4
    ports:
      - "9004:9001"
    volumes:
      - ./data/data4:/data

  nginx:
    image: nginx:1.19.2-alpine
    hostname: nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "9000:9000"
    depends_on:
      - minio1
      - minio2
      - minio3
      - minio4

В приведенной выше конфигурации будут установлены и запущены четыре сервисных контейнера Minio, а порты, сопоставленные контейнерами Minio с хостом: 9001~9004. Кроме того, следует отметить, что в приведенной выше конфигурации учетная запись внутреннего терминала управления Minio настроена как binghe, а пароль настроен как binhe123.

4.2 Напишите конфигурацию nginx.conf

После запуска четырех контейнеров Minio Nginx осуществляет доступ к внешнему миру с балансировкой нагрузки. При написании файла конфигурации контейнера мы также указали соответствующую связь между файлом nginx.conf в контейнере и файлом nginx.conf на хосте. , мы также должны настроить файл nginx.conf на хост-компьютере.

Подробную информацию об исходном коде см. в: Environment/nginx.conf.

Язык кода:javascript
копировать
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  4096;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;

    # include /etc/nginx/conf.d/*.conf;

    upstream minio {
        server minio1:9000;
        server minio2:9000;
        server minio3:9000;
        server minio4:9000;
    }

    server {
        listen       9000;
        listen  [::]:9000;
        server_name  localhost;

        # To allow special characters in headers
        ignore_invalid_headers off;
        # Allow any size file to be uploaded.
        # Set to a value such as 1000m; to restrict file size to a specific value
        client_max_body_size 0;
        # To disable buffering
        proxy_buffering off;

        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

            proxy_connect_timeout 300;
            # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            chunked_transfer_encoding off;

            proxy_pass http://minio;
        }
    }
}

5. Запустите контейнер

5.1 Создайте и запустите контейнер

Загрузите каталог среды на сервер, переключите командную строку сервера на каталог среды и введите следующие команды, чтобы создать и запустить контейнер Minio и контейнер Nginx.

Язык кода:javascript
копировать
docker-compose -f docker-compose-minio.yml up -d

Процесс создания и запуска контейнера выглядит следующим образом.

Язык кода:javascript
копировать
[root@binghe102 environment]# docker-compose -f docker-compose-minio.yml up -d
[+] Running 17/17
 ✔ minio2 Pulled                                                         219.5s 
 ✔ minio3 Pulled                                                         219.5s 
 ✔ minio1 7 layers [⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                      219.5s 
   ✔ d46336f50433 Pull complete                                           45.3s 
   ✔ be961ec68663 Pull complete                                           45.7s 
   ✔ 44173c602141 Pull complete                                           46.1s 
   ✔ a9809a6a679b Pull complete                                           46.2s 
   ✔ df29d4a76971 Pull complete                                           46.3s 
   ✔ 2b5a8853d302 Pull complete                                           46.3s 
   ✔ 84f01ee8dfc1 Pull complete                                          210.3s 
 ✔ minio4 Pulled                                                         219.5s 
 ✔ nginx 5 layers [⣿⣿⣿⣿⣿]      0B/0B      Pulled                          54.9s 
   ✔ df20fa9351a1 Pull complete                                            5.3s 
   ✔ 3db268b1fe8f Pull complete                                           31.6s 
   ✔ f682f0660e7a Pull complete                                           31.7s 
   ✔ 7eb0e8838bc0 Pull complete                                           31.7s 
   ✔ e8bf1226cc17 Pull complete                                           32.1s 
[+] Running 6/6
 ✔ Network environment_default     Created                                14.3s 
 ✔ Container environment-minio1-1  Started                               140.1s 
 ✔ Container environment-minio3-1  Started                               140.2s 
 ✔ Container environment-minio2-1  Started                               140.1s 
 ✔ Container environment-minio4-1  Started                               140.0s 
 ✔ Container environment-nginx-1   Started 

5.2 Проверка статуса запуска

После завершения запуска введите в командной строке сервера docker ps команда для просмотра запущенных контейнеров, как показано на рисунке 4-1.

Когда вы видите состояние работоспособности в столбце СТАТУС контейнера minio, это означает, что контейнер Minio был создан и успешно запущен.

6. Настройте Минио

6.1 Войдите в Minio

Открыть браузер,Введите в адресную строкуhttp://192.168.106.102:9001,Как показано на рисунке 4-2.

Введите учетную запись binghe и пароль binghe123 для входа в Minio, как показано на рисунке 4-3.

Страница после входа в систему показана на рисунке 4-4.

Как видите, всего существует 4 экземпляра сервиса Minio.

Передвигая полосу прокрутки в правой части страницы в разделе «СЕРВЕРЫ», мы можем увидеть информацию о четырех конкретных экземплярах службы, как показано на рис. 4-5.

Переключитесь на опцию ДИСКОВ, и вы увидите информацию о ДИСКЕ четырех экземпляров службы, как показано на рисунке 4-6.

6.2 Создание сегментов

Создайте корзину с именем bh-im в файловой системе Minio для хранения таких ресурсов, как изображения, файлы и голоса, во время процесса отправки сообщений распределенной системы обмена мгновенными сообщениями IM, как показано на рисунке 4-7.

Затем введите bh-im в столбце Имя сегмента, как показано на рисунке 4-8.

Нажмите кнопку «Создать сегмент», чтобы создать сегмент. Затем щелкните меню «Корзины», чтобы просмотреть информацию о сегменте, как показано на рисунке 4-9.

После нажатия кнопки «Управление» вы увидите, что бакет с именем bh-im был успешно создан, как показано на рисунке 4-10.

Измените политику доступа сводки в бакете bh-im, то есть политику доступа, с частной на общедоступную, как показано на рисунке 4-11.

После завершения модификации это показано на рисунке 4-12.

6.3 Оптимизация производительности

После создания сегментов давайте оптимизируем производительность синхронизации между несколькими узлами файловой системы Minio. Выберите меню «Настройки» — подменю «Сканер» и настройте значения множителя задержки, максимального ожидания и цикла, как показано на рисунке 4-13.

Как видите, здесь мы настраиваем множитель задержки на 10, а Макс. ожидание и цикл на 1 с, чтобы повысить эффективность синхронизации между несколькими узлами Minio.

7. Тест Минио

Выберите Buckets-Browse, как показано на рисунке 4-14.

После входа на страницу обзора, как показано на рисунке 4-15.

Здесь мы нажимаем кнопку со стрелкой вверх, чтобы загрузить изображение, как показано на рисунке 4-16, после завершения загрузки.

Затем нажмите на изображение, чтобы ввести детали, как показано на рисунке 4-17.

После входа на страницу сведений об изображении нажмите кнопку «Поделиться», как показано на рисунке 4-18.

После нажатия кнопки «Поделиться», как показано на рисунке 4-19.

Как вы можете видеть, на странице обмена указана ссылка для доступа к изображению. Здесь мы нажимаем кнопку «Копировать», чтобы скопировать ссылку на изображение, как показано ниже.

Язык кода:javascript
копировать
http://172.18.0.4:9000/bh-im/2.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=9X4104YB84KCT5XGQKSW%2F20231224%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231224T073947Z&X-Amz-Expires=604800&X-Amz-Security-Token=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiI5WDQxMDRZQjg0S0NUNVhHUUtTVyIsImV4cCI6MTcwMzQwNDY3MCwicGFyZW50IjoiYmluZ2hlIn0.h611ez9SqsGcw-pEeXLp59_IpotFGmx1LeNzgGQdjJdAiYXm4f0EQ-ADgkxlr3UPIbR6-hQxYR__As_oo02BHg&X-Amz-SignedHeaders=host&versionId=null&X-Amz-Signature=4d2128b0da332fbbba8dfedea4ede07051c9376365e76bf12e4e658b8020747f

Поскольку у нас есть Конфигурацияможет быть основано наNginxединый доступMinioраспределенныйдокументв системересурсы,так,здесь,мы будемIPадрес172.18.0.4Изменить на192.168.106.102,Откройте следующую ссылку в адресной строке браузера.

Язык кода:javascript
копировать
http://192.168.106.102:9000/bh-im/2.jpg

Откройте адрес ссылки после изменения IP-адреса в адресной строке браузера, как показано на рисунке 4-20.

Как видите, загруженное нами изображение нормально отображается в браузере.

На этом этапе создание среды распределенной файловой системы Minio с несколькими узлами в собственном облачном режиме завершено.

8. Напишите в конце

Для разработки проекта и реализации этих реальных сценариев, помимо распределенной системы обмена мгновенными сообщениями IM, у Knowledge Planet of Glacier также есть 5 других проектов. Требования, планы, архитектура, реализация и т. д. этих проектов взяты из реальных условий. бизнес-сценарии в Интернете, позволяющие Вам по-настоящему изучить бизнес-планы внедрения технологий крупнейших Интернет-компаний и эффективно превратить их в собственные резервы знаний.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода