自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

20張圖手把手教你搭建并優(yōu)化云原生模式下的多節(jié)點Minio分布式文件系統(tǒng)

云計算 云原生
分布式IM即時通訊系統(tǒng)提供了單聊和群聊的功能,在消息的發(fā)送和接收上需要支持文本、表情、圖片、文件、語音和視頻等等。那在消息的發(fā)送過程中,如何存儲圖片、文件、語音等資源呢?一種非常有效的存儲方式,就是將其存儲到一款高性能的分布式文件系統(tǒng)中。

大家好,我是冰河~~

Minio是一個開源的高性能對象存儲服務(wù)器,適用于構(gòu)建分布式存儲系統(tǒng)。它具有高可用性、可擴展性和數(shù)據(jù)保護機制,兼容Amazon S3  API,在大數(shù)據(jù)、云計算和容器化環(huán)境中廣泛應(yīng)用,為應(yīng)用程序提供了可靠、高效的對象存儲服務(wù)。

一、前言

分布式IM即時通訊系統(tǒng)提供了單聊和群聊的功能,在消息的發(fā)送和接收上需要支持文本、表情、圖片、文件、語音和視頻等等。那在消息的發(fā)送過程中,如何存儲圖片、文件、語音等資源呢?一種非常有效的存儲方式,就是將其存儲到一款高性能的分布式文件系統(tǒng)中。

對比其他的分布式文件系統(tǒng)后,我們最終選擇了Minio來存儲消息的圖片、文件和語音等資源。主要是考慮到Minio文件系統(tǒng)具備高性能、高可擴展性、安裝和操作簡單、具備糾刪碼等特性。具體的特性大家可自行上網(wǎng)了解,這里不再贅述。

二、環(huán)境說明

  • 服務(wù)器版本:CentOS7
  • 主機名:binghe102
  • IP地址:192.168.106.102
  • docker-compose:v2.17.3
  • Minio鏡像:minio/minio
  • Nginx鏡像:nginx:1.19.2-alpine

三、安裝docker-compose

安裝docker-compose環(huán)境相對就比較簡單,在命令行執(zhí)行如下命令下載并安裝docker-compose。

curl -SL https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

下載并安裝成功后,使用如下命令創(chuàng)建docker-compose軟鏈接。

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

隨后查看docker-compose版本,如下所示。

[root@binghe102]# docker-compose version
Docker Compose version v2.17.3

可以看到,安裝的docker-compose版本為2.17.3,說明docker-compose安裝成功。

四、編寫配置文件

這里,安裝并啟動四個Minio容器,由Nginx統(tǒng)一對外提供訪問圖片或者文件等資源的地址。所以,除了要編寫基于docker-compose安裝Minio容器的配置,還需要編寫基于docker-compose安裝Nginx的配置,另外,也需要對nginx.conf文件進行配置。

1、編寫容器配置

無論是Minio文件系統(tǒng),還是Nginx,都是基于docker-compose安裝的。所以,在編寫容器配置時,我們將Minio容器和Nginx容器的安裝寫到同一個配置文件中,并將其命名為:docker-compose-minio.yml。

源碼詳見:environment/docker-compose-minio.yml。

version: '3.2'

# 所有容器通用的設(shè)置和配置
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個docker容器運行minio服務(wù)器實例
# 使用nginx反向代理9000端口,負載均衡
# 可以通過9001、9002、9003、9004端口訪問它們的web 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服務(wù)容器,并且Minio容器映射到宿主機的端口分別為:9001~9004。并且,需要注意的是,在上述配置中,將Minio后臺管理端的賬號配置成了binghe,密碼配置成了binghe123。

2、編寫nginx.conf配置

啟動四個Minio容器后,對外統(tǒng)一由Nginx進行負載均衡訪問,并且在編寫容器配置文件時,也指定了容器中的nginx.conf文件與宿主機中nginx.conf文件的對應(yīng)關(guān)系,所以,我們也需要在宿主機上配置nginx.conf文件。

源碼詳見:environment/nginx.conf。

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;
        }
    }
}

五、啟動容器

1、創(chuàng)建并啟動容器

將environment目錄上傳到服務(wù)器,并將服務(wù)器命令行切換到environment目錄下,并輸入如下命令來創(chuàng)建并啟動Minio容器和Nginx容器。

docker-compose -f docker-compose-minio.yml up -d

創(chuàng)建并啟動容器的過程如下所示。

[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

2、查看啟動狀態(tài)

啟動完成后,在服務(wù)器命令行輸入 docker ps 命令來查看啟動的容器,如圖4-1所示。

圖片

當看到minio容器STATUS列中標有healthy狀態(tài)時,說明Minio容器創(chuàng)建并啟動成功。

六、配置Minio

1、Minio

打開瀏覽器,在地址欄中輸入http://192.168.106.102:9001,如圖4-2所示。

輸入賬號binghe,密碼binghe123登錄Minio,如圖4-3所示。

登錄后的頁面如圖4-4所示。

圖片

可以看到,總共有4個Minio服務(wù)實例。

滑動頁面右側(cè)的滾動條,在SERVERS選項下,我們可以看到四個具體的服務(wù)實例信息,如圖4-5所示。

圖片

切換到DRIVES選項下,可以看到四個服務(wù)實例的DRIVE信息,如圖4-6所示。

圖片

2、創(chuàng)建分桶

在Minio文件系統(tǒng)中創(chuàng)建一個名稱為bh-im的分桶,用來存儲分布式IM即時通訊系統(tǒng)消息發(fā)送過程中的圖片、文件和語音等資源,如圖4-7所示。

圖片

接下來,在Bucket Name一欄中填寫bh-im,如圖4-8所示。

圖片

點擊Create Bucket按鈕即可創(chuàng)建分桶。隨后,點擊Buckets菜單來查看分桶信息,如圖4-9所示。

圖片

可以看到,名稱為bh-im的分桶已經(jīng)創(chuàng)建成功,點擊Manage后,如圖4-10所示。

圖片

將bh-im分桶中Summary的Access Policy,也就是訪問策略,由Private修改成Public,如圖4-11所示。

圖片

修改完成后,如圖4-12所示。

圖片

3、優(yōu)化性能

創(chuàng)建完分桶后,我們來優(yōu)化下Minio文件系統(tǒng)多節(jié)點之間的同步性能,選擇Settings菜單-Scanner子菜單,配置Delay multiplier、Max Wait和Cycle的值,如圖4-13所示。

圖片

可以看到,這里我們將Delay multiplier配置成10,Max Wait和Cycle都配置成了1s,以此來加快Minio多個節(jié)點之間的同步效率。

七、測試Minio

選擇Buckets-Browse,如圖4-14所示。

圖片

進入Browse頁面后如圖4-15所示。

圖片

這里,我們點擊向上的箭頭按鈕來上傳一張圖片,上傳完成后如圖4-16所示。

圖片

接下來,點擊圖片進入詳情,如圖4-17所示。

圖片

進入圖片詳情頁面后,點擊分享按鈕,如圖4-18所示。

圖片

點擊分享按鈕后,如圖4-19所示。

圖片

可以看到,在分享頁面中,給出了圖片的訪問鏈接,這里,我們點擊Copy按鈕復制圖片鏈接,復制出的圖片鏈接如下所示。

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&versinotallow=null&X-Amz-Signature=4d2128b0da332fbbba8dfedea4ede07051c9376365e76bf12e4e658b8020747f

由于我們已經(jīng)配置了可以基于Nginx統(tǒng)一訪問Minio分布式文件系統(tǒng)中的資源,所以,這里,我們將IP地址172.18.0.4修改成192.168.106.102,在瀏覽器地址欄中打開如下鏈接。

http://192.168.106.102:9000/bh-im/2.jpg

在瀏覽器地址欄打開修改IP地址后的鏈接地址,如圖4-20所示。

可以看到,瀏覽器中正常展示了我們上傳的圖片。

至此,云原生模式下的多節(jié)點Minio分布式文件系統(tǒng)環(huán)境搭建完畢。

八、寫在最后

這些真實場景的項目設(shè)計與落地實現(xiàn),在冰河的知識星球除了分布式IM即時通訊系統(tǒng)外,還有其他5個項目,這些項目的需求、方案、架構(gòu)、落地等均來自互聯(lián)網(wǎng)真實業(yè)務(wù)場景,讓你真正學到互聯(lián)網(wǎng)大廠的業(yè)務(wù)與技術(shù)落地方案,并將其有效轉(zhuǎn)化為自己的知識儲備。

責任編輯:姜華 來源: 冰河技術(shù)
相關(guān)推薦

2010-07-06 09:43:57

搭建私有云

2018-05-09 09:44:51

Java分布式系統(tǒng)

2018-05-22 15:30:30

Python網(wǎng)絡(luò)爬蟲分布式爬蟲

2010-07-06 09:38:51

搭建私有云

2021-06-23 07:16:06

buildroot Linux內(nèi)核根文件系統(tǒng)

2022-09-15 21:04:20

JuiceFS云原生

2022-03-14 14:47:21

HarmonyOS操作系統(tǒng)鴻蒙

2011-03-25 12:45:49

Oracle SOA

2021-03-05 08:52:00

Celery在Windows分布式

2022-01-04 08:52:14

博客網(wǎng)站Linux 系統(tǒng)開源

2020-08-12 07:41:39

SQL 優(yōu)化語句

2022-01-08 20:04:20

攔截系統(tǒng)調(diào)用

2021-12-28 08:38:26

Linux 中斷喚醒系統(tǒng)Linux 系統(tǒng)

2010-11-01 05:50:46

分布式文件系統(tǒng)

2022-01-17 07:50:37

Linux Patch項目

2009-06-15 16:58:57

Java安裝Linux

2020-07-27 10:15:51

LinuxJenkins命令

2009-11-09 14:57:37

WCF上傳文件

2021-02-04 09:00:57

SQLDjango原生

2018-07-02 08:25:14

點贊
收藏

51CTO技術(shù)棧公眾號