minio 配置

minio 
官方文檔全的一批: 
 https://docs.minio.io/cn/store-mongodb-backups-in-minio.html 
 https://www.moewah.com/archives/2886.html 
 https://www.jianshu.com/p/3e81b87d5b0b
中文文檔:https://www.bookstack.cn/read/MinioCookbookZH/67.md 
主要特點

(1)數據保護
分佈式 Minio 採用糾刪碼(erasure code)來防範多個節點宕機和位衰減(bit rot)。
分佈式 Minio 至少需要 4 個節點,使用分佈式 Minio 就自動引入了糾刪碼功能。

(2)高可用
單機 Minio 服務存在單點故障,相反,如果是一個 N 節點的分佈式 Minio ,只要有 N/2 節點在線,你的數據就是安全的。不過你需要至少有 N/2+1 個節點來創建新的對象。
例如,一個 8 節點的 Minio 集羣,每個節點一塊盤,就算 4 個節點宕機,這個集羣仍然是可讀的,不過你需要 5 個節點才能寫數據。

(3)限制

分佈式 Minio 單租戶存在最少 4 個盤最多 16 個盤的限制(受限於糾刪碼)。這種限制確保了 Minio 的簡潔,同時仍擁有伸縮性。如果你需要搭建一個多租戶環境,你可以輕鬆的使用編排工具(Kubernetes)來管理多個Minio實例。
注意,只要遵守分佈式 Minio 的限制,你可以組合不同的節點和每個節點幾塊盤。比如,你可以使用 2 個節點,每個節點 4 塊盤,也可以使用 4 個節點,每個節點兩塊盤,諸如此類。

(4)一致性
Minio 在分佈式和單機模式下,所有讀寫操作都嚴格遵守 read-after-write 一致性模型。


再次強調:注意:*********
1.分佈式Minio裏所有的節點需要有同樣的access祕鑰和secret祕鑰,這樣這些節點才能建立聯接。爲了實現這個,你需要在執行minio server命令之前,先將access祕鑰和secret祕鑰export成環境變量。
2.分佈式Minio使用的磁盤裏必須是乾淨的,裏面沒有數據。
3.分佈式Minio裏的節點時間差不能超過3秒,你可以使用NTP 來保證時間一致。
4.集羣服務意外停掉後,重啓文件自動會同步
5.雙掛載磁盤,每個磁盤都有備份
6.高可用,單機 Minio 服務存在單點故障,相反,如果是一個 N 節點的分佈式 Minio ,只要有 N/2 節點在線,你的數據就是安全的。不過你需要至少有 N/2+1 個節點來創建新的對象。
7.重要:磁盤要麼全是系統磁盤,要麼全是掛載磁盤,如果兩個服務採用系統盤,兩個採用掛載盤,會報錯。
參考:https://www.jianshu.com/p/52ca764d1efb
​​​
操作步驟:
1.下載啓動服務端
wget https://dl.min.io/server/minio/release/linux-amd64/minio 
chmod +x minio 
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password

2.啓動命令

(1)單主機單磁盤
cat /server/scripts/minio_run.sh
#!/bin/bash
#設置用戶名密碼
export Description=xxxx_Minio_Service
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=xxxxx
mkdir -p /server/minio/{data,etc}
#--console-address爲管理端口
#--address 9000爲api端口
nohup /usr/bin/minio server --address=':9000' --console-address ':9001' --config-dir /server/minio/etc/ /server/minio/data >2>&1 1>/server/minio/running.log &
###########################################

2.1 通過supervisorctl 啓動服務
cat /etc/supervisord.d/minio.ini 
[program:minio]
command=/usr/bin/minio server  --address ':9000'  --console-address ':9001' /minio_resources/minio
environment=Description="敏特昭陽_Minio_Service",MINIO_ROOT_USER="minio",MINIO_ROOT_PASSWORD="password"
autostart=true ;隨super一起啓動
autorestart=true ;停止後重新啓動
startsecs=10 ;重啓等待10s
startretries=10 ;重啓程序次數
stdout_logfile=/minio_resources/minio/minio9002.log
stderr_logfile=/minio_resources/minio/minio9002.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
啓動服務:supervisorctl restart minio

3.下載配置客戶端
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
#客戶端登錄認證
mc alias set myminio/ http://Api地址 用戶名 密碼
mc alias set myminio/ http://minioapi.test.com userminio passwdminio


4.存儲桶策略默認: 有三種策略:
        private: 未經過授權不能進行任何操作,所有Access Rules規則失效
        public : 不經過授權可直接訪問下載刪除
        custom : custom 策略是通過Access Rules 實現的;
              readonly:  只能讀取
              writeonly:只能寫入
              readwrite:可讀可寫可刪
                   
    WEB端口設置存儲桶策略:
    配置爲public策略: 儲存桶--Manage--Access Policy--public
    配置custom  策略  儲存桶--Manage--Access Rules--[ readonly, writeonly, readwrite] 如下圖所示:
    
---------------------------------------------------------------------------------------------------
5.用戶權限策略
最新版本提供的一種細粒度授權的能力,可以精確到具體服務的操作、資源以及請求條件等。基於策略的授權是一種更加靈活的授權方式,能夠滿足企業對權限最小化的安全管控要求
管理員權限策略模板如下: json格式
系統默認策略:
consoleAdmin    控制檯管理員
diagnostics      診斷
readonly         只讀
readwrite        讀寫list列出
writeonly        只寫
--------------------------------------------
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
      ],
      "Resource": [
        "arn:aws:s3:::*"
      ]
    }
  ]
}
---------------------------------------
自定義策略:  Access-->Create Policy;
默認readonly策略無法list列出桶內資源: 比如修改默認測試如下:
---------------------------------------
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListAllMyBuckets",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        }
    ]
}
---------------------------------------
默認readwrite 具有刪除權限,這裏取消刪除權限如:
------------------------------------------------
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        }
    ]
}
注:---------------------------------------
|"s3:DeleteObject",DeleteObject 刪
|"s3:GetObject", get 獲取桶內文件
|"s3:ListAllMyBuckets", 列出所有存儲桶
|"s3:ListBucket", 列出桶
|"s3:PutObject" 新增寫
-----------------------------------------
如創建用戶並希望用戶可以查看,上傳資源但是不能刪除資源:


6 單主機多磁盤集羣:
cat /server/scripts/minio_run.sh
#!/bin/bash
#設置用戶名密碼
export Description=xxxx_Minio_Service 
export MINIO_ROOT_USER=minio 
export MINIO_ROOT_PASSWORD=xxxxx
mkdir -p /server/minio/etc
nohup /usr/bin/minio server --address=0.0.0.0:9000 --config-dir /server/minio/etc/ \
  /server/minio/data01 \
  /server/minio/data02 \
  /server/minio/data03 \
  /server/minio/data04 >/server/minio/running.log 2>&1 &

#或
export MINIO_ACCESS_KEY="minio"
export MINIO_SECRET_KEY="xxxx"
nohup ./minio server --address ":9001" http://127.0.0.1:9001/usr/minio/data1 http://127.0.0.1:9002/usr/minio/data2  http://127.0.0.1:9003/usr/minio/data3 http://127.0.0.1:9004/usr/minio/data4 > "/usr/minio/9001.log"& 2>&1
nohup ./minio server --address ":9002" http://127.0.0.1:9001/usr/minio/data1 http://127.0.0.1:9002/usr/minio/data2  http://127.0.0.1:9003/usr/minio/data3 http://127.0.0.1:9004/usr/minio/data4 > "/usr/minio/9002.log"& 2>&1
nohup ./minio server --address ":9003" http://127.0.0.1:9001/usr/minio/data1 http://127.0.0.1:9002/usr/minio/data2  http://127.0.0.1:9003/usr/minio/data3 http://127.0.0.1:9004/usr/minio/data4 > "/usr/minio/9003.log"& 2>&1
nohup ./minio server --address ":9004" http://127.0.0.1:9001/usr/minio/data1 http://127.0.0.1:9002/usr/minio/data2  http://127.0.0.1:9003/usr/minio/data3 http://127.0.0.1:9004/usr/minio/data4 > "/usr/minio/9004.log"& 2>&1


7#多主機單磁盤集羣
cat /server/scripts/minio_run.sh
#!/bin/bash
#設置用戶名密碼
export Description=xxxx_Minio_Service
export MINIO_ROOT_USER=minio 
export MINIO_ROOT_PASSWORD=xxxxx
mkdir -p /server/minio/etc
nohup /usr/bin/minio server --address=0.0.0.0:9000 --config-dir /server/minio/etc/ \
  http://192.168.0.1:9000/server/minio/data \
  http://192.168.0.2:9000/server/minio/data \
  http://192.168.0.3:9000/server/minio/data \
  http://192.168.0.4:9000/server/minio/data >/server/minio/running.log 2>&1 &

8 多主機多磁盤集羣
cat /server/scripts/minio_run.sh
#!/bin/bash
#設置用戶名密碼
export Description=xxxx_Minio_Service 
export MINIO_ROOT_USER=minio
export MINIO_ROOT_PASSWORD=xxxxx
mkdir -p /server/minio/etc
#!/bin/bash
#設置用戶名密碼
export Description=敏特昭陽_Minio_Service
export MINIO_ROOT_USER=minio
export MINIO_ROOT_PASSWORD=xxxxx
nohup /usr/bin/minio server --address=0.0.0.0:9000  \
  http://192.168.0.1:9000/server/minio/data01 \
  http://192.168.0.1:9001/server/minio/data02 \
  http://192.168.0.2:9000/server/minio/data01 \
  http://192.168.0.2:9001/server/minio/data02 >/server/minio/running.log 2>&1 &
nohup /usr/bin/minio server --address=0.0.0.0:9001 \  
 http://192.168.0.1:9000/server/minio/data01 \ 
 http://192.168.0.1:9001/server/minio/data02 \ 
 http://192.168.0.2:9000/server/minio/data01 \  
 http://192.168.0.2:9001/server/minio/data02 >/server/minio/running.log 2>&1 &


9.服務器簡單優化
服務器優化:
echo "*   soft    nofile  65535" >> /etc/security/limits.conf
echo "*   hard    nofile  65535" >> /etc/security/limits.conf

10.nginx代理配置:
upstream minio{
        server 192.168.0.1:9000;
        server 192.168.0.2:9000;
        server 192.168.0.3:9000;
        server 192.168.0.4:9000;
}
server {
        listen 80;
        server_name minio.mintelcn.com;
        location / {
                proxy_pass http://minio;
                proxy_set_header Host $http_host;
                client_max_body_size 10G;
        }
}

11.配置訪問策略爲public

0.配置minio存儲
  mc config host add minio http://a.b.com xxx xxx
1.批量授權纔會生效(如果不執行上面命令,minio 會認爲你授權的localhost 所以切記
  for i in `mc ls minio|awk -F "[ ]+" '{print $5}'`;do mc policy set download  minio/${i};done;
2.單存儲桶授權
  mc policy set public   minio/aa/ #授權上傳,下載,刪除權限
  mc policy set download minio/bb/ #只授權爲下載權限


 12. minio 增量同步

1.安裝Minio client

wget https://dl.min.io/client/mc/release/linux-amd64/mc -P /usr/local/bin/ 
chmod +x /usr/local/bin/mc 

2.添加minio存儲
 mc alias set minio/ http://x.x.x.x minio-user minio-passwd

3.先創建一個存儲桶 
mc mb minio/muyun688
mc ls minio 

4.開始同步 
#如需要將本地:/wwwroot/test.mintelcn.com/muyun688 同步到遠程muyun688下執行:
mc mirror -w /wwwroot/test.mintelcn.com/muyun688 minio/muyun688

5.配置開機自動同步:新建 systemd配置文件,適用 CentOS 7 Debian 8+ Ubuntu 16+

#修改成你需要實時同步備份的文件夾
backup="/wwwroot/test.mintelcn.com/muyun688"
#修改成你要備份到的存儲桶
bucket="muyun688"
#將以下代碼一起復制到SSH運行

cat > /etc/systemd/system/minioc.service <<EOF
[Unit]
Description=minio
After=network.target

[Service]
Type=simple
ExecStart=$(command -v mc) mirror -w ${backup} minio/${bucket}
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl start minio
systemctl enable minio

13. minio mysql 數據備份

cd /usr/bin/ && wget http://124.207.22.2:9001/mt-server-minio-software/linux/mc && chmod +x /usr/bin/mc
mc config host add myminio http://124.207.22.2:9001 minio minioMt84540088
mc ls myminio/mt-server-mtmath-mysql-db/
mc mb myminio/mt-server-mtmath-mysql-db/pl/
例如:mysql全量備份:
#!/bin/bash
# use mysqldump to Fully backup mysql data per week!
#全量備份腳本 
BakDir=/home/mysql/backup/
LogFile=/home/mysql/backup/bak.log
Date=`date +%Y%m%d`
Begin=`date +"%Y年%m月%d日 %H:%M:%S"`
mkdir -p /home/mysql/backup/;
cd $BakDir
DumpFile=$Date.sql
GZDumpFile=$Date.sql.tgz
###此處需要寫您mysql的用戶名和密碼
/usr/local/mysql/bin/mysqldump -uroot -pquizii2016 -h127.0.0.1 --events --flush-logs  mtmath> $DumpFile
/bin/tar -zvcf $GZDumpFile $DumpFile
/bin/rm $DumpFile 
Last=`date +"%Y年%m月%d日 %H:%M:%S"` 
echo 開始:$Begin 結束:$Last $GZDumpFile succ >> $LogFile 
/usr/bin/mc cp  $BakDir/${GZDumpFile} myminio/mt-server-mtmath-mysql-db/sy/ && 
find $BakDir/ -mtime +2 -name "*.tgz" -exec rm -rf {} \; 


修復存儲桶:
mc admin heal -r myminio/xxxxx
mc admin heal -r minio1 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章