US3FS是一個(gè)在Linux/Windows系統(tǒng)環(huán)境中,將S3的存儲(chǔ)空間(Bucket)掛載到本地掛載點(diǎn)的工具,掛載成功后,您可以像操作本地文件一樣操作存儲(chǔ)空間(Bucket)中的文件。
軟件版本:
linux: v2.0.2
windows: v1.6.8
運(yùn)行環(huán)境:
Linux:
Ubuntu 16.04 及以上 (可通過(guò)cat /etc/issue查看)
CentOS 7.0 及以上 (可通過(guò)cat /etc/redhat-release查看)
Windows:
開(kāi)啟WinFsp服務(wù)
主要功能
支持POSIX文件系統(tǒng)的大部分功能,如讀;順序?qū)?;?quán)限;UID/GID。
使用US3的分片上傳功能上傳大文件。
支持Etag和MD5校驗(yàn),保證數(shù)據(jù)一致性。
使用限制
不支持隨機(jī)寫(xiě)/追加寫(xiě)
rename非原子操作
不支持硬/軟鏈接
多個(gè)客戶端掛載同一個(gè)US3 Bucket時(shí),需要用戶自行維護(hù)數(shù)據(jù)一致性。
不支持讀取歸檔類型的文件
運(yùn)行環(huán)境
US3FS基于Linux下fuse和Windows平臺(tái)下winfsp實(shí)現(xiàn),您的機(jī)器需要支持fuse或winfsp。
建議您將US3FS運(yùn)行在以下環(huán)境中:
Linux:
ceontos 7.0及以上 (可通過(guò)cat /etc/redhat-release查看)
ubuntu 16.04及以上 (可通過(guò)cat /etc/issue查看)
Windows:
根據(jù)官方說(shuō)明 進(jìn)行安裝
下載鏈接
curl -o us3fs https://ufile-release.cn-bj.ufileos.com/us3fs/us3fs_2.0.2CopyErrorSuccess配置賬號(hào)訪問(wèn)信息
Linux
編輯/etc/us3fs/us3fs.yaml并增加如下信息(如果沒(méi)有該目錄需要自行創(chuàng)建):
access_key: ************************************secret_key: ************************************endpoint: ufile.cn-north-02.ucloud.cnhosts: []CopyErrorSuccess冒號(hào)后有單個(gè)空格
access_key: 公鑰,支持token秘鑰和api秘鑰兩種模式,要有覆蓋上傳權(quán)限
secret_key: 私鑰,支持token秘鑰和api秘鑰兩種模式,要有覆蓋上傳權(quán)限
endpoint: 訪問(wèn)域名。填寫(xiě)域名為地域域名,并非具體的存儲(chǔ)空間域名。
hosts: 指定訪問(wèn)點(diǎn)IP列表,不會(huì)走DNS解析邏輯獲取US3接入層IP。如果指定個(gè)數(shù)小于3個(gè)不會(huì)生效。 如: hosts: [10.9.254.190, 117.50.123.23, 117.50.123.29, 117.50.123.8]
hosts指定的IP列表,在遇到異常(網(wǎng)絡(luò)不可達(dá))IP節(jié)點(diǎn)時(shí)會(huì)在5s檢測(cè)周期內(nèi)自動(dòng)標(biāo)記剔除,新的請(qǐng)求不受影響,但已經(jīng)發(fā)起的請(qǐng)求且使用異常網(wǎng)絡(luò)的鏈接,由于TCP采用退避指數(shù)重試算法,默認(rèn)重試次數(shù)為15次,所以最壞情況要到15min左右才能檢測(cè)異常,建議在使用該參數(shù)時(shí),修改Linux參數(shù)net.ipv4.tcp.retries2(或修改系統(tǒng)文件/proc/sys/net/ipv4/tcp_retries2)為6,可使如網(wǎng)絡(luò)不可達(dá)異常在25s左右能檢測(cè)到,從而剔除已建立異常鏈接;此外由于目前鏈接保活探測(cè)邏輯會(huì)占用一定量的文件描述符,建議調(diào)整系統(tǒng)設(shè)置,請(qǐng)參考場(chǎng)景問(wèn)題 中的系統(tǒng)日志出現(xiàn)too many open file問(wèn)題項(xiàng)解決。
當(dāng)需要在一臺(tái)機(jī)器上掛載多個(gè)Bucket時(shí),可以通過(guò)--passwd=passwd_file指定賬號(hào)信息(默認(rèn)路徑為 /etc/us3fs/us3fs.yaml,不需要指定)。
下載US3FS后。使用chmod +x us3fs增加可執(zhí)行權(quán)限,如果需要直接執(zhí)行,可將us3fs移動(dòng)到/bin目錄下。示例:
chmod +x us3fs./us3fs --passwd=passwd_file <bucket> <mountpoint> # 移動(dòng)到可執(zhí)行目錄下 mv us3fs /bin/us3fsus3fs --passwd=passwd_file <bucket> <mountpoint>CopyErrorSuccessWindows
配置信息內(nèi)同linux,配置路徑自定義。
下載好可執(zhí)行文件后移動(dòng)到us3fs的工作目錄(自定義),然后通過(guò)按鍵windows+R打開(kāi)運(yùn)行窗口,輸入cmd進(jìn)入命令行工具界面(后續(xù)支持圖形化界面),進(jìn)入可執(zhí)行文件us3fs.exe 所在路徑。示例:
# 進(jìn)入可執(zhí)行文件所在盤(pán)符,這里是D盤(pán) C:\Users\Administrator> D: # 進(jìn)入可執(zhí)行文件所在路徑 D:\>cd us3fsD:\us3fs>dir驅(qū)動(dòng)器 D 中的卷沒(méi)有標(biāo)簽。卷的序列號(hào)是 5CAF-F66B D:\us3fs 的目錄 2021/09/09 21:16 <DIR> . 2021/09/09 21:16 <DIR> .. 2021/09/09 19:13 19,475,146 us3fs.exe 2021/08/26 11:29 157 us3fs.yaml 2 個(gè)文件 19,475,303 字節(jié) 2 個(gè)目錄 213,768,716,288 可用字節(jié) # 進(jìn)行掛載操作 # * 這里掛載到x盤(pán),并且指定uid,gid為0的用戶,日志級(jí)別為debug,預(yù)讀窗口為32MiB,掛載的US3桶名為rickwu D:\us3fs>us3fs.exe --passwd=us3fs.yaml -o debug --uid=0 --gid=0 --level=debug --readahead=32m <bucket> x:CopyErrorSuccess注意目前Windows下掛載只能前臺(tái)掛載
掛載
us3fs [global options] <bucket> <mountpoint>CopyErrorSuccess
卸載
umount <mountpoint>CopyErrorSuccess
參數(shù)<bucket>和<mountpoint>必須依次作為最后兩個(gè)參數(shù),否則其他參數(shù)不能生效
windows 對(duì)cmd執(zhí)行Ctrl+C
us3fs掛載的默認(rèn)訪問(wèn)權(quán)限為當(dāng)前掛載用戶,如果需要允許其他用戶/用戶組訪問(wèn)掛載點(diǎn),可以使用如下參數(shù):
-o allow_other:允許任何用戶都可以訪問(wèn)文件。
--uid=xxx:指定默認(rèn)的用戶
--gid=xxx:指定默認(rèn)的用戶組
--mp_mask: 用來(lái)設(shè)置掛載點(diǎn)的權(quán)限掩碼,只有當(dāng)allow_other選項(xiàng)設(shè)置后,該選項(xiàng)才生效,默認(rèn)值為0000。使用方式基本于umask命令一致;例如需要設(shè)置掛載點(diǎn)的權(quán)限為770,則使用參數(shù) -o allow_other --mp_mask 0007;**注意root用戶會(huì)忽略非root用戶掛載時(shí)設(shè)置的mp_mask**。
可通過(guò)id命令獲取用戶的uid/gid信息,示例如下:
// 在ubuntu賬戶下掛載默認(rèn)用戶和用戶組為www的us3fsubuntu:~$ id www uid=1001(www) gid=1001(www) groups=1001(www) ubuntu:~$ us3fs --uid=1001 --gid=1001 -o allow_other <bucket> <mountpoint>CopyErrorSuccessmp_mask 配置示例如下:
掛載目錄權(quán)限 | mp_mask |
---|---|
rwxrwxrwx | 0000 |
rwxrwx--- | 0007 |
rwx------ | 0077 |
rwxr--r-- | 0033 |
rwxrwxr-- | 0003 |
rwxr-xr-x | 0022 |
如果掛載出現(xiàn)以下問(wèn)題
在/etc/fuse.conf中增加user_allow_other。
windows下只支持--uid和--gid
掛載時(shí)時(shí)指定-o ro。
windows下不支持
--level=info/debug/error 開(kāi)啟指定級(jí)別的us3fs日志
--debug_fuse 開(kāi)啟用戶態(tài)fuse日志
centos 日志在/var/log/messages
ubuntu 日志在/var/log/syslog
掛載時(shí)指定-f,us3fs會(huì)以前臺(tái)模式掛載,日志會(huì)輸出到屏幕上。
執(zhí)行如下命令:
us3fs --updateCopyErrorSuccess更新后的可執(zhí)行文件放在/bin/目錄下
windows無(wú)效
通過(guò)us3fs -h查看us3fs支持的參數(shù)
us3fs - a single posix file system based on us3USAGE us3fs [global options] bucket mountpointVersion US3FS Version: v1.6.8 Commit ID: c87ec9c Build: 2022-08-17:11:01:05 Go Version: go1.16.3 linux/amd64WinFSP -o value Specify fuse/winfsp option --dir_info_timeout value The expiration time of the directory information, in seconds (default: 5) --file_info_timeout value File information expiration time, in seconds (default: 5) --volume_info_timeout value Volume information expiration time, in seconds (default: 5) --case_insensitive Is case sensitive --keep_filecache keep filecacheOS --dcache_timeout value How long to cache dentry for us3fs (default: 5m0s) --retry value Number of times to retry a failed I/O (default: 5) --parallel value Number of parallel I/O thread (default: 32) --debug Set debug level for fuse/winfsp --level value Set log level: error/warn/info/debug (default: "info") --readahead value Readahead size. e.g.: 1m/1k/1 (default: "0") --etag value Check etag for part. value is percent(0~100) (default: 50) --passwd value specify access file (default: "/etc/us3fs/us3fs.conf") --enable_md5 Enalbe md5 in http header --uid value Specify default uid (default: -1) --gid value Specify default gid (default: -1) --disable_check_vdir disable detection of virtual directories --update Update us3fs to /bin/us3fs -n Doesn't check access when mount us3fs -l Enable local cache for small file -p value Specify local cache location (default: "/tmp/us3fs/") --prefix value Specify bucket prefix path --gfl Enable get_file_list --direct_read Enable cache bypass read --perf_dump value How long to output the performance dump (default: 1h0m0s) --skip_ne_dir_lookup Skip non-essential directory checking, such as files ending in ".log",".png",".jpg", etc. --storage_class value Storage type, including "STANDARD", "IA" (default: "STANDARD") MISC --help, -h show help -f foregroundCopyErrorSuccess
Linux和Windows的參數(shù)區(qū)別主要體現(xiàn)在FUSE和WinFsp
部分終端掛載參數(shù)支持配置在配置文件,配置文件的參數(shù)和終端參數(shù)的對(duì)應(yīng)關(guān)系如下:
終端掛載參數(shù)名稱 | 配置文件參數(shù)名稱 | 配置文件樣例 |
---|---|---|
gfl | get_file_list | get_file_list: true |
keep_pagecache | keep_pagecache | keep_pagecache: true |
n | no_check | no_check: true |
disable_check_vdir | disable_check_vdir | disable_check_vdir: true |
async_dio | async_dio | async_dio: true |
skip_ne_dir_lookup | skip_ne_dir_look | skip_ne_dir_look: true |
l | enable_local | enable_local: true |
wb | writeback | writeback: true |
direct_read | direct_read | direct_read: true |
enable_md5 | enable_md5 | enable_md5: true |
debug | debug | debug: true |
-o allow_other | allow_other | allow_other: true |
enable_load_dentries | enable_load_dentries | enable_load_dentries:true |
disable_async_read | disable_async_read | disable_async_read:true |
retry | retry | retry: 66 |
parallel | parallel | parallel: 77 |
disable_remove | disable_remove | disable_remove: true |
congestion_threshold | congestion_threshold | congestion_threshold: 88 |
max_background | max_background | max_background: 99 |
uid | uid | uid=100 |
gid | gid | gid :100 |
etag | etag | etag :100 |
dcache_timeout | dcache_timeout | dcache_timeout: 2h |
entry_timeout | entry_timeout | entry_timeout: 3h |
attr_timeout | attr_timeout | attr_timeout: 4h |
perf_dump | perf_dump | attr_timeout: 5h |
log_max_age | log_max_age | log_max_age: 6h |
log_dir | log_dir | log_dir:/a/b/c |
prefix | prefix | prefix: /a/b/c |
level | level | level: debug |
storage_class | storage_class | storage_class: STANDARD |
p | local_path | local_path:/a/b/c |
readahead | readahead | readahead: 8m |
max_cache_per_file | max_cache_per_file | max_cache_per_file: 1024m |
cache_db | cache_db | cache_db: leveldb:/data/us3fs_cachedb |
local_write | local_write | local_write: true |
max_local_file_size | max_local_file_size | max_local_file_size: 32M |
finish_write_when_release | finish_write_when_release | finish_write_when_release: true |
read_after_write_finish | read_after_write_finish | read_after_write_finish: true |
enable_remote_cache | enable_remote_cache | enable_remote_cache: true |
cache_dirs | cache_dirs | cache_dirs: /mnt/nvme01,/mnt/nvme02 |
cache_size_limit | cache_size_limit | cache_size_limit: 100 |
master_addr | master_addr | master_addr: : |
data_port | data_port | data_port: 3333 |
page_size | page_size | page_size: 8388608 |
fuse_session_cnt | fuse_session_cnt | fuse_session_cnt: 4 |
掛載參數(shù)配置在配置文件樣例 編輯/etc/us3fs/us3fs.yaml(如果沒(méi)有該目錄需要自行創(chuàng)建)依據(jù)具體需求將掛載參數(shù)寫(xiě)在配置文件,簡(jiǎn)化掛載命令
選項(xiàng)名稱 | 描述 |
---|---|
o | WinFsp支持的option參數(shù) |
dir_info_timeout | 目錄緩存的超時(shí)時(shí)間,默認(rèn)5s |
file_info_timeout | 文件緩存的超時(shí)時(shí)間,默認(rèn)5s |
volume_info_timeout | 卷信息的超時(shí)時(shí)間,默認(rèn)5s |
keep_filecache | 是否把文件放入緩存 |
選項(xiàng)名稱 | 描述 |
---|---|
o | FUSE支持的option參數(shù) |
entry_timeout | 指定fuse緩存被查找的文件名的時(shí)間 默認(rèn)為5min |
attr_timeout | 指定fuse緩存文件/目錄屬性的時(shí)間 默認(rèn)為5min |
disable_async_read | 關(guān)閉fuse kernel預(yù)讀使用異步模式。默認(rèn)開(kāi)啟 |
wb | 指定寫(xiě)入使用writeback方式。不支持覆蓋寫(xiě)/追加寫(xiě) |
max_background | 指定fuse kernel的max_background參數(shù)(fuse kernel版本>=7.13), 目前fuse usespace最多支持1024(默認(rèn):64),該參數(shù)能提升direct io的并行度 |
congestion_threshold | 指定fuse kernel(fuse kernel版本>=7.13)的congestion_threshold參 數(shù),目前fuse usespace最多支持768(默認(rèn):48),該參數(shù)會(huì)觸發(fā)并行IO的擁塞控制 |
async_dio | 開(kāi)啟fuse內(nèi)核的async_dio參數(shù),默認(rèn)關(guān)閉async_dio。該參數(shù)開(kāi)啟后, fuse kernel對(duì)direct io進(jìn)行異步處理 |
keep_pagecache | 開(kāi)啟pagecache,文件打開(kāi)時(shí)會(huì)根據(jù)inode的修改時(shí)間以及大小變化決 定是否更新,所以請(qǐng)注意entry_timeout和dcache_timeout參數(shù)對(duì)此會(huì) 有一定影響,使得未能及時(shí)感知到文件修改時(shí)間、大小變化 |
fuse常用選項(xiàng)列表(與-o一起使用)
選項(xiàng)名稱 | 描述 |
---|---|
allow_other | 指定文件系統(tǒng)可以所有用戶訪問(wèn) 默認(rèn)關(guān)閉 |
ro | 指定當(dāng)前文件系統(tǒng)為只讀 |
使用方式
-o option=valueCopyErrorSuccess選項(xiàng)名稱 | 描述 |
---|---|
dcache_timeout | dentry cache在us3fs中的緩存時(shí)長(zhǎng) 默認(rèn)為5min |
retry | 請(qǐng)求失敗后重試次數(shù),默認(rèn)5次 |
parallel | I/O并發(fā)線程數(shù) 默認(rèn)20個(gè) |
debug | 指定用戶態(tài)fuse日志級(jí)別為debuy 默認(rèn)關(guān)閉 |
level | 指定us3fs日志級(jí)別 默認(rèn)為Info級(jí)別 |
readahead | 預(yù)讀大小。 例如:1m/1k/1(默認(rèn):“0”) |
etag | 檢查上傳數(shù)據(jù)的 etag所占百分比。 值是百分比(0~100)(默認(rèn)值:50) |
passwd | 指定賬戶文件,默認(rèn)路徑/etc/us3fs/us3fs.yaml // windows 平臺(tái)自定義 |
enable_md5 | 在http請(qǐng)求頭中增加md5校驗(yàn),默認(rèn)關(guān)閉 |
uid | 指定文件所屬的默認(rèn)用戶,默認(rèn)當(dāng)前用戶 |
gid | 指定文件所屬的默認(rèn)用戶組,默認(rèn)當(dāng)前用戶組 |
disable_check_vdir | 禁用虛擬目錄檢測(cè) |
update | 更新us3fs版本,新版本路徑為/bin/us3fs |
n | 掛載時(shí)不檢查bucket權(quán)限,如果沒(méi)有所在地域沒(méi)有列表服務(wù)可開(kāi)啟 |
l | 開(kāi)啟后對(duì)小文件使用本地目錄做緩存,異步上傳。具體使用示例見(jiàn)小文件場(chǎng)景 |
p | 指定小文件異步上傳的本地緩存目錄 |
prefix | 指定掛載的bucket前綴目錄,默認(rèn)為空 |
gfl | 對(duì)于沒(méi)有ListObjects API支持的Endpoint, 該參數(shù)可以繞過(guò),通過(guò)PrefixFileList API模擬 |
direct_read | 開(kāi)啟后,繞過(guò)us3fs內(nèi)部緩存組織模塊,直接讀取us3數(shù)據(jù), 對(duì)于被頻繁訪問(wèn)的文件會(huì)有一定性能降低,反之有利于降低時(shí)延 |
perf_dump | 指定時(shí)間周期輸出時(shí)延統(tǒng)計(jì)信息,默認(rèn)周期是1hour |
skip_ne_dir_lookup | 跳過(guò)非必要的目錄檢查,目前過(guò)濾支持".jpe"、".jpeg"、".png"、 ".gz"、".tgz"、".gz"、".tgz"、".log"、".plot"、".js"、".html"、 ".css"、".apk"為后綴的文件,需要確保bucket下沒(méi)有用以上后綴 作為目錄后綴的情況 |
storage_class | 指定寫(xiě)入U(xiǎn)S3中文件的存儲(chǔ)類型,支持STANDARD(標(biāo)準(zhǔn)), IA(低頻)兩種。 (default: STANDARD) |
cache_db | 指定本地存儲(chǔ)us3fs元數(shù)據(jù)cache的方式及路徑,格式為:leveldb:/data/us3fs_cachedb |
finish_write_when_release | 開(kāi)啟后,支持文件異步結(jié)束上傳,用于支持一個(gè)fd有多次flush的場(chǎng)景 |
read_after_write_finish | 開(kāi)啟后,讀取文件時(shí),如果文件正在寫(xiě)入,會(huì)等待文件寫(xiě)入完成后才返回讀的內(nèi)容 |
local_write | 開(kāi)啟后,寫(xiě)入的數(shù)據(jù)會(huì)暫存到本地文件系統(tǒng)后再異步上傳到服務(wù)端 |
max_local_file_size | 和 local_write搭配使用,指定能寫(xiě)入到本地文件系統(tǒng)的最大文件大?。J(rèn)值:32M) |
選項(xiàng)名稱 | 描述 |
---|---|
help, h | 查看幫助 |
f | 掛載時(shí)啟用前臺(tái)模式,相關(guān)輸出會(huì)打印到標(biāo)準(zhǔn)輸出 |
windows下-f參數(shù)無(wú)效
設(shè)置dcache_timeout可增加文件/目錄屬性在內(nèi)存中的有效時(shí)間,增強(qiáng)使用體驗(yàn)。建議entry_timeout , attr_timeout設(shè)置時(shí)間小于dcache_timeout
注:開(kāi)啟緩存后,可能造成用戶讀取目錄的內(nèi)容和實(shí)際bucket中的內(nèi)容不一致。默認(rèn)為開(kāi)啟,需要關(guān)閉請(qǐng)?jiān)O(shè)置為0s
示例:ls包含10000個(gè)文件的目錄耗時(shí)
[root@10-9-120-211 ~]# us3fs --dcache_timeout=60s --entry_timeout=60s --attr_timeout=60s <your_bucket> <mountpoint> [root@10-9-120-211 ~]# time ls -la <your_dir> | wc -l10003real 0m5.964suser 0m0.033ssys 0m0.232s[root@10-9-120-211 ~]#[root@10-9-120-211 ~]#[root@10-9-120-211 ~]# time ls -la <your_dir> | wc -l10003real 0m0.872suser 0m0.029ssys 0m0.133sCopyErrorSuccess
disable_async_read
默認(rèn)讀取模式為異步,同步讀取性能較差。
示例如下:
[root@10-9-120-211 ~]# us3fs --disable_async_read <your_bucket> <mountpoint> [root@10-9-120-211 ~]# dd if=<your_file> of=/dev/null bs=4M count=1010+0 records in10+0 records out41943040 bytes (42 MB, 40 MiB) copied, 10.2345 s, 4.1 MB/s[root@10-9-120-211 ~]# us3fs <your_bucket> <mountpoint> [root@10-9-120-211 ~]# dd if=<your_file> of=/dev/null bs=4M count=1010+0 records in10+0 records out41943040 bytes (42 MB, 40 MiB) copied, 0.685801 s, 61.2 MB/sCopyErrorSuccess
parallel
增大并發(fā)數(shù)可提升讀寫(xiě)性能,相應(yīng)的也行增加系統(tǒng)資源占用。
示例如下:
// 默認(rèn)并發(fā)數(shù)20[root@10-9-120-211 ~]# us3fs <your_bucket> <mountpoint> [root@10-9-120-211 ~]# dd if=/dev/zero of=<your_file> bs=4M count=10241024+0 records in1024+0 records out4294967296 bytes (4.3 GB, 4.0 GiB) copied, 25.5351 s, 168 MB/s// 調(diào)整并發(fā)數(shù)為32[root@10-9-120-211 ~]# us3fs --parallel=32 <your_bucket> <mountpoint> [root@10-9-120-211 ~]# dd if=/dev/zero of=<your_file> bs=4M count=10241024+0 records in1024+0 records out4294967296 bytes (4.3 GB, 4.0 GiB) copied, 18.3614 s, 234 MB/sCopyErrorSuccess
readahead
調(diào)整預(yù)讀窗口大小對(duì)大文件的順序讀有較大影響,建議在16m~32m,但會(huì)增加內(nèi)存消耗,可以適當(dāng)縮小預(yù)讀窗口。
示例如下:
// 默認(rèn)預(yù)讀大小16MB [root@10-9-120-211 ~]# dd if=<your_file> of=/dev/null bs=4M count=1024 1024+0 records in 1024+0 records out 4294967296 bytes (4.3 GB, 4.0 GiB) copied, 60.0498 s, 71.5 MB/s// 調(diào)整預(yù)讀大小為32MB [root@10-9-120-211 ~]# us3fs --readahead=32m <your_bucket> <mountpoint> [root@10-9-120-211 ~]# dd if=<your_file> of=/dev/null bs=4M count=1024 1024+0 records in 1024+0 records out 4294967296 bytes (4.3 GB, 4.0 GiB) copied, 37.6013 s, 114 MB/sCopyErrorSuccessparallel:設(shè)置并發(fā)線程,對(duì)cpu負(fù)載有一定影響。建議設(shè)置在20~40較為合理
critical:寫(xiě)入文件時(shí)啟用本地etag校驗(yàn),相比未開(kāi)啟會(huì)提高約50%的cpu占用。
readahead:預(yù)讀窗口大小,由于fuse自身有讀寫(xiě)窗口的限制,一定的預(yù)讀大小對(duì)讀取性能有顯著提升。建議設(shè)置在16m~32m,但會(huì)增加內(nèi)存消耗,可以適當(dāng)縮小預(yù)讀窗口。
keep_pagecache: 盡可能緩存數(shù)據(jù)內(nèi)容在vfs pagecache中,直到文件的修改時(shí)間和大小發(fā)生變化,才無(wú)效掉pagecache中的歷史數(shù)據(jù)。
wb: 該參數(shù)會(huì)使得寫(xiě)入的IO會(huì)盡量在pagecache中合并,然后以大IO(默認(rèn)128K)發(fā)送到us3fs。
fuse_session_cnt: 設(shè)置與內(nèi)核fuse模塊通信的連接數(shù),對(duì)cpu和內(nèi)存負(fù)載有一定影響,建議在資源空閑的機(jī)器上可開(kāi)啟,并將數(shù)量設(shè)置在CPU核數(shù)以內(nèi),開(kāi)啟后讀寫(xiě)性能都有一定程度的提升
對(duì)于大量小文件場(chǎng)景,如果對(duì)性能有要求,可指定-l開(kāi)啟本地本地緩存。當(dāng)啟用本地緩存后,us3fs掛載后首先會(huì)將指定緩存目錄下已存在的所有小于等于4MB的文件按照其路徑上傳到bucket中。當(dāng)寫(xiě)入文件大小不大于4MB,文件會(huì)嘗試寫(xiě)入本地緩存目錄,寫(xiě)入成功后即返回,后端異步上傳到us3。寫(xiě)入失?。ㄈ鐧?quán)限不足,空間不足等)則仍然使用同步方式寫(xiě)入us3對(duì)象存儲(chǔ)
注:異步上傳可能出現(xiàn)寫(xiě)入后端失敗,us3fs會(huì)一直重試直到寫(xiě)入成功。
cache_dirs: 設(shè)置本地讀緩存磁盤(pán),推薦使用本地nvme盤(pán)來(lái)存放讀緩存內(nèi)容,可設(shè)置多個(gè)盤(pán),使用 , 號(hào)分割,注意緩存盤(pán)盡量不要使用系統(tǒng)盤(pán),避免由于瞬間的IO上漲導(dǎo)致系統(tǒng)hang住,推薦使用獨(dú)立的本地nvme盤(pán)(盤(pán)的讀寫(xiě)吞吐能在2GB+)。
cache_size_limit: 設(shè)置緩存盤(pán)存儲(chǔ)量使用上限,當(dāng)緩存的內(nèi)容達(dá)到該上限時(shí),會(huì)進(jìn)行LRU淘汰
page_size: 在開(kāi)啟本地讀緩存功能時(shí),需要將page_size從默認(rèn)的1048576調(diào)整到8388608
當(dāng)多個(gè)掛載點(diǎn)之間需要共享讀緩存內(nèi)容時(shí),可以通過(guò)執(zhí)行
us3fs run-master --listen_addr 192.168.0.10:6667CopyErrorSuccess命令來(lái)啟動(dòng)一個(gè)master節(jié)點(diǎn)運(yùn)行,同時(shí)將其余的掛載點(diǎn)的 master_addr 參數(shù)設(shè)置為 192.168.0.10:6667, 這樣各個(gè)掛載點(diǎn)會(huì)同該master定期保持心跳,這一組掛載點(diǎn)將會(huì)成為一個(gè)小型的讀緩存集群
enable_remote_cache: 當(dāng)一個(gè)掛載點(diǎn)開(kāi)啟該參數(shù)后,其余的掛載點(diǎn)就可能會(huì)連接上它檢查是否有緩存數(shù)據(jù)可讀,當(dāng)發(fā)現(xiàn)目標(biāo)數(shù)據(jù)存在時(shí),會(huì)嘗試從該掛載點(diǎn)讀取數(shù)據(jù)內(nèi)容
data_port: 當(dāng)一個(gè)掛載點(diǎn)開(kāi)啟enable_remote_cache后,暴露在哪個(gè)端口對(duì)外進(jìn)行訪問(wèn)
推薦的最佳實(shí)踐方案是采用systemctl來(lái)保證服務(wù)異常退出,或者機(jī)器重啟后能重新掛載us3fs,但需要注意Linux(Windows平臺(tái)暫未提供方案)的發(fā)行版本是否支持systemctl:
Ubuntu >= 15.04
Centos、RHEL >= 7
滿足系統(tǒng)要求后,經(jīng)過(guò)如下幾個(gè)簡(jiǎn)單步驟即可:
1.設(shè)置配置
在/etc/systemd/system/目錄下創(chuàng)建名為us3fs.service的文件,并增加如下內(nèi)容
[Unit]Description=US3FS (User Space FileSystem for US3)Requires=network-online.targetAfter=network-online.target[Service]Type=forkingUser=<user> Group=<group> Restart=alwaysRestartSec=10ExecStart=/bin/us3fs --passwd=/etc/us3fs/us3fs.conf --keep_pagecache <your_bucket> <mountpoint> ExecStop=/bin/umount <monutpoint> [Install]WantedBy=multi-user.targetCopyErrorSuccess
User為需要訪問(wèn)掛載點(diǎn)的用戶。如root。
Group為需要訪問(wèn)掛載點(diǎn)的用戶組。如root。
ExecStart為掛載命令,按照需要自行填寫(xiě)
執(zhí)行systemctl daemon-reload配置則會(huì)生效。
服務(wù)啟用或停止
執(zhí)行systemctl start us3fs.service啟動(dòng)服務(wù);
執(zhí)行systemctl stop us3fs.service停止服務(wù);
執(zhí)行systemctl restart us3fs.service重啟服務(wù);
執(zhí)行systemctl status us3fs.service查看服務(wù)狀態(tài);
設(shè)置為開(kāi)機(jī)自啟動(dòng)
執(zhí)行systemctl enable us3fs.service;