ZFS Ops
约 2 分钟阅读
zfs set atime=off relatime=on xattr=sa compression=lz4 data- ARC 默认 50% 内存
- 可以增加为 70-80%
- /sys/module/zfs/parameters/zfs_arc_max
System
# System
zfs create data/var
zfs create -o mountpoint=/var/log/ data/var/log
zfs create -o mountpoint=/var/lib/kubelet data/var/kubeletMySQL
zfs create data/mysql
zfs set recordsize=16K primarycache=metadata logbias=throughput data/mysqlinnodb_flush_method = fsync
innodb_doublewrite = 0 # ZIL 避免了 crash 问题
innodb_use_native_aio = 0
innodb_use_atomic_writes = 0
innodb_checksum_algorithm = none # 不需要考虑数据损坏
innodb_log_write_ahead_size = 16384 #=recordsize
innodb_flush_neighbors = 0 # 传统机械盘适用innodb_flush_method = O_DIRECTskip-log-bin
innodb_buffer_pool_size=
innodb_flush_log_at_trx_commit = 1 # TPCC reqs.
innodb_log_file_size = 1G
innodb_log_group_home_dir = /var/lib/mysql/log
innodb_flush_neighbors = 0
innodb_fast_shutdown = 2
innodb_read_io_threads = 10
innodb_write_io_threads = 10- sync_binlog=0
- binlog 不 sync
- innodb_flush_log_at_trx_commit=0
- zfs_prefetch_disable=1
- 临时增加性能
- MySQL
- innodb_flush_log_at_trx_commit=0
- sync_binlog=0
- 或 ZFS 层面
- sync=disabled
- MySQL
- bajrang0789/mysql-zfsGitHubbajrang0789/mysql-zfs
- www.percona.com/blog/mysql-zfs-performance-update
- shatteredsilicon.net/mysql-mariadb-innodb-on-zfs
cat /sys/block/*/queue/schedulerPostgres
zfs create data/postgres
zfs set recordsize=8K logbias=latency data/postgres- logbias=throughput 导致碎片
full_page_writes=false # ZFS always writes full blocks
random_page_cost = 1
effective_io_concurrency = 200- recordsize
- 更小 TPS 更高
- 更大 压缩比更高
- 倾向于使用 ARC 减少 shared_buffers
- 太小影响写入,减小到不影响写入的时候
- vadosware.io/post/everything-ive-seen-on-optimizing-postgres-on-zfs-on-linux
# pgtune https://pgtune.leopard.in.ua/
# SSD
random_page_cost = 1.1
effective_io_concurrency = 200
# HDD
random_page_cost = 4
effective_io_concurrency = 2Vol
- -s sparse volume 不保留空间
Kube Vol
- k3s, k0s
- avoid zfs snapshotter
zfs create -s -V 200GB data/kube-vol
mkfs.ext4 /dev/zvol/data/kube-vol
# 可以放在其他位置然后修改 data-dir
# mkdir -p /data/k3s
# mount /dev/zvol/data/kube-vol /data/k3s
mkdir -p /var/lib/rancher/k3s
mount /dev/zvol/data/kube-vol /var/lib/rancher/k3s
echo "/dev/zvol/data/kube-vol /var/lib/rancher/k3s ext4 rw,relatime,stripe=4 0 0" | tee -a /etc/fstabDocker Vol
zfs create -s -V 200GB data/docker-vol
mkfs.ext4 /dev/zvol/data/docker-vol
# 可以放在其他位置然后修改 data-dir
mkdir -p /var/lib/docker/
mount /dev/zvol/data/docker-vol /var/lib/docker/
echo "/dev/zvol/data/docker-vol /var/lib/docker ext4 rw,relatime,stripe=4 0 0" | tee -a /etc/fstab关联信息
反向链接、本文链接的其他页面和外部资料。
References
GitHub1 条
- bajrang0789/mysql-zfsgithub.com/bajrang0789/mysql-zfs
其他外链5 条
- bigstep.com/blog/zfs-best-practices-and-caveatsbigstep.com/blog/zfs-best-practices-and-caveats
- bun.uptrace.dev/postgres/tuning-zfs-aws-ebs.htmlbun.uptrace.dev/postgres/tuning-zfs-aws-ebs.html
- shatteredsilicon.net/mysql-mariadb-innodb-on-zfsshatteredsilicon.net/mysql-mariadb-innodb-on-zfs
- vadosware.io/post/everything-ive-seen-on-optimizing-postgres-on-zfs-on-linuxvadosware.io/post/everything-ive-seen-on-optimizing-postgres-on-zfs-on-linux
- www.percona.com/blog/mysql-zfs-performance-updatewww.percona.com/blog/mysql-zfs-performance-update