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