After a month of development, JuiceFS brings the first new version v0.16 in the fall of 2021. This update involves 11 changes, fixes 16 bugs, and adds 6 new features.
With the eager anticipation of community users, JucieFS officially opened TiKV database as a metadata engine support.
It is worth mentioning that the implementation of TiKV as a metadata engine is derived from the PingCAP 2rd Hacking Camp activity. In more than a month, the JuiceFS team worked closely with community users to successfully implement support for the TiKV database.
TiKV Metadata Engine
TiKV is a key-value database that supports distributed transactions. Compared with Redis, it has more ideal reliability and horizontal expansion capabilities. Compared with ordinary SQL databases, it can provide more reliability on the basis of higher reliability. Excellent performance. TiKV is a good new choice for JuiceFS metadata engine.
Using the TiKV metadata engine, JuiceFS can provide tens of billions of file sizes and EB-level data storage capabilities.
Using TiKV as the metadata engine of JuiceFS is very simple. You only need to specify the PD address of the TiKV cluster when formatting the file system. The format is as follows:
tikv://<pd_addr>[,<pd_addr>...]/<prefix>
For example:
$ juicefs format \
--storage minio \
--bucket http://127.0.0.1:9000/mystor \
--access-key minioadmin \
--secret-key minioadmin \
tikv://127.0.0.1:2379/mystor \
mystor
The above command creates a file system named mystor
. Please pay attention to the second-to-last line of the database. When specifying the PD server address, use the tikv://
protocol. The last /mystor
of the address is an optional prefix
, when multiple file systems or applications use the same TiKV cluster, setting the prefix can avoid confusion and conflicts.
Then, use the following command to mount the file system:
$ sudo juicefs mount -d tikv://127.0.0.1:2379/mystor ~/jfs
In terms of performance, we tested the performance of Redis, MySQL, and TiKV as metadata engines in the same computing environment using the benchmark tool included with the Golang. The results obtained are as follows.
Result description:
- In the test environment, both Redis and MySQL are stand-alone versions, and TiKV uses a three-copy distributed architecture.
- The value of the result represents the operation time, the unit is (microseconds per operation), the smaller the value, the better.
- The numbers in parentheses are the ratios to the
Redis-Always
mode.
Even if TiKV adopts a multi-copy architecture, its performance in conventional file system operations is still better than that of the MySQL database. Compared with Redis full-memory storage, although there is an average performance gap of about 2~3 times, this is only a gap in pure metadata operations. In terms of data storage, the latency of object storage will account for a larger proportion, so In actual business scenarios, the performance gap between TiKV and Redis will be much smaller, and reliability and scalability will further highlight the advantages of TiKV.
Added stats command
This version also adds the stats
subcommand to view the running status of the file system in real time.
This command displays the host resources consumed by the file system, FUSE operations, metadata, block cache, object storage bandwidth and other information in columns, and prints one line per second by default. You can view more through juicefs stats --help
. The stats command can customize the information items to be displayed and the printing interval by matching the corresponding options.
The stats
command interface was inspired by dstat, thanks to the author! 🍻
Added .config virtual file
The new version adds a virtual file named .config
in the root directory of the mount point, which makes it easy to view the detailed configuration information of the file system.
$ sudo cat ~/mnt/.config
{
"Meta": {
"Strict": true,
"Retries": 10,
"CaseInsensi": false,
"ReadOnly": false,
"OpenCache": 0,
"MountPoint": "mnt",
"Subdir": ""
},
"Format": {
"Name": "herald-jfs",
"UUID": "a703ea9f-b70d-41b0-8fe6-ab44cbe8d734",
"Storage": "minio",
"Bucket": "http://127.0.0.1:9000/herald",
"AccessKey": "minioadmin",
"SecretKey": "removed",
"BlockSize": 4096,
"Compression": "none",
"Shards": 0,
"Partitions": 0,
"Capacity": 0,
"Inodes": 0
},
"Chunk": {
"CacheDir": "/var/jfsCache/a703ea9f-b70d-41b0-8fe6-ab44cbe8d734",
"CacheMode": 384,
"CacheSize": 1024,
"FreeSpace": 0.1,
"AutoCreate": true,
"Compress": "none",
"MaxUpload": 20,
"Writeback": false,
"Partitions": 0,
"BlockSize": 4194304,
"GetTimeout": 60000000000,
"PutTimeout": 60000000000,
"CacheFullBlock": true,
"BufferSize": 314572800,
"Readahead": 0,
"Prefetch": 1
},
"Version": "0.16.1 (2021-08-16 2edcfc0)",
"Mountpoint": "mnt"
}
Add progress bar for gc and fsck
The gc
and fsck
commands have added a progress bar, which makes the operation progress more intuitive. Thanks to the community developer @zhijian-pro for his contribution to this feature.
Note the changes related to the Redis engine
Starting from v0.16, the meaning of the password in the Redis Sentinel URI has changed, from the password of Sentinel to the password of Redis Server. If Sentinel also sets a password, it needs to be specified by the environment variable SENTINEL_PASSWORD
.
Other changes
- Support upload/download bandwidth limit
- Updatedb disabled
For more information about JuiceFS v0.16, please visit the GitHub repository View Details.
Open Source Contribution Guide
JuiceFS is an open source project under the AGPLv3, and its development is inseparable from everyone's support. An article, a page of documentation, an idea, a suggestion, a report, or a bug fix, no matter how big or small the contribution is, it is the driving force to promote the progress of an open source project.
Things you can do for the community:
- Starring the project https://github.com/juicedata/juicefs
- Post your opinions in Forum
- Pick development tasks in Issues
- Improve the document of JuiceFS
- Share everything about JuiceFS on your blog, twitter, Vlog and other self-media.
- Join Slack channel of JuiceFS
- Tell more people about JuiceFS and let them use it.
We sincerely invite everyone who loves open source to join our community, let us make JuiceFS better together!