ceph块存储场景
1、创建rbd使用的存储池。
admin节点需要安装ceph才能使用该命令,如果没有,也可以切换到ceph-node1节点去操作。
[cephfsd@ceph-admin ceph]$ ceph osd pool create rbd_data 64 64
pool 'rbd_data' created
[cephfsd@ceph-admin ceph]$ rbd pool init rbd_data
[cephfsd@ceph-admin ceph]$ ceph -s
cluster:
id: 6d3fd8ed-d630-48f7-aa8d-ed79da7a69eb
health: HEALTH_OK services:
mon: 1 daemons, quorum ceph-admin
mgr: ceph-admin(active)
mds: cephfs-1/1/1 up {0=ceph-node3=up:active}, 2 up:standby
osd: 3 osds: 3 up, 3 in data:
pools: 3 pools, 192 pgs
objects: 21 objects, 7.77KiB
usage: 3.00GiB used, 27.0GiB / 30.0GiB avail
pgs: 192 active+clean [cephfsd@ceph-admin ceph]$
注:
# 不能使用之前已经注册的pool。
[cephfsd@ceph-admin opt]$ sudo rbd pool init cephfs_data
rbd: pool already registered to a different application.
[cephfsd@ceph-admin opt]$
2、创建rbd
可以看到,rbd池的pg创建完成了,默认情况下,使用的pool是3副本配置,测试创建一块rbd试下
[cephfsd@ceph-admin ceph]$ rbd create testrbd --size=10G
rbd: error opening default pool 'rbd'
Ensure that the default pool has been created or specify an alternate pool name.
[cephfsd@ceph-admin ceph]
# 加上-p参数,指定pool的名字
[cephfsd@ceph-admin ceph]$ rbd create testrbd --size=10G -p rbd_data
或者
[cephfsd@ceph-admin ceph]$ rbd create rbd_data/testrbd --size=10G
[cephfsd@ceph-admin ceph]$ rbd info rbd_data/testrbd
rbd image 'testrbd':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.373e6b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
create_timestamp: Fri Dec 6 16:06:55 2019
[cephfsd@ceph-admin ceph]$
3、映射rbd块设备到服务器。
# 在Ceph client端将该rbd镜像映射为本地设备时出错。
[cephfsd@ceph-admin ceph]$ sudo rbd map rbd_data/testrbd
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable rbd_data/testrbd object-map fast-diff deep-flatten".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address
# 查看系统打印的信息
[cephfsd@ceph-admin ceph]$ dmesg | tail
[147187.581929] fuse init (API version 7.23)
[154167.356761] libceph: mon0 172.16.143.121:6789 session established
[154167.356931] libceph: client14124 fsid 6d3fd8ed-d630-48f7-aa8d-ed79da7a69eb
[171895.244253] rbd: loaded (major 252)
[174742.162661] libceph: mon0 172.16.143.121:6789 session established
[174742.162851] libceph: client14145 fsid 6d3fd8ed-d630-48f7-aa8d-ed79da7a69eb
[174742.166056] rbd: image testrbd: image uses unsupported features: 0x38
[175730.260351] libceph: mon0 172.16.143.121:6789 session established
[175730.260439] libceph: client14148 fsid 6d3fd8ed-d630-48f7-aa8d-ed79da7a69eb
[175730.263530] rbd: image testrbd: image uses unsupported features: 0x38
[cephfsd@ceph-admin ceph]$
# 查看系统内核版本
[cephfsd@ceph-admin ceph]$ uname -a
Linux ceph-admin 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[cephfsd@ceph-admin ceph]$ ceph --version
ceph version 12.2.12 (1436006594665279fe734b4c15d7e08c13ebd777) luminous (stable)
# 再查看testrbd映像的特性
[cephfsd@ceph-admin ceph]$ rbd info rbd_data/testrbd
rbd image 'testrbd':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.373e6b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
create_timestamp: Fri Dec 6 16:06:55 2019
[cephfsd@ceph-admin ceph]$
可以看到testrbd拥有特性:layering, exclusive-lock, object-map, fast-diff, deep-flatten
这些特性分别表示:
- layering: 支持分层
- striping: 支持条带化 v2
- exclusive-lock: 支持独占锁
- object-map: 支持对象映射(依赖 exclusive-lock )
- fast-diff: 快速计算差异(依赖 object-map )
- deep-flatten: 支持快照扁平化操作
- journaling: 支持记录 IO 操作(依赖独占锁)
不过遗憾的是CentOS的3.10内核仅支持其中的layering feature,其他feature概不支持。我们需要手动disable这些features:
方法一:直接disable
# 禁止其他features
[cephfsd@ceph-admin ceph]$ rbd feature disable rbd_data/testrbd exclusive-lock, object-map, fast-diff, deep-flatten
[cephfsd@ceph-admin ceph]$ rbd info rbd_data/testrbd
rbd image 'testrbd':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.373e6b8b4567
format: 2
features: layering
flags:
create_timestamp: Fri Dec 6 16:06:55 2019
[cephfsd@ceph-admin ceph]$
禁用特性后,再次映射成功。
[cephfsd@ceph-admin ceph]$ sudo rbd map rbd_data/testrbd
/dev/rbd0
[cephfsd@ceph-admin ceph]$ ll /dev/rbd0
brw-rw----. 1 root disk 252, 0 Dec 6 17:09 /dev/rbd0
方法二:修改配置ceph.conf
# 不过每次这么来disable可是十分麻烦的,一劳永逸的方法是在各个cluster node的/etc/ceph/ceph.conf中加上这样一行配置:
rbd_default_features = 1 #仅是layering对应的bit码所对应的整数
# 设置完后,通过下面命令查看配置变化
[cephfsd@ceph-admin ceph]$ ceph --show-config|grep rbd|grep features
rbd_default_features =
方法三:修改format版本
经过查看ceph文档rbd 块镜像有支持两种格式:
--image-format format-id
format-id取值为1或2,默认为 2。
format 1 - 新建 rbd 映像时使用最初的格式。此格式兼容所有版本的 librbd 和内核模块,但是不支持较新的功能,像克隆。
format 2 - 使用第二版 rbd 格式, librbd 和 3.11 版以上内核模块才支持(除非是分拆的模块)。此格式增加了克隆支持,使得扩展更容易,还允许以后增加新功能。
这里把format指定为1之后,重新映射就好了。
# 注意:需要重新建立镜像。
[cephfsd@ceph-admin ceph]$ rbd create rbd_data/testrbd2 --size=1G --image-format 1
# 查看已经建立的rbd
[cephfsd@ceph-admin ceph]$ rbd ls -p rbd_data
testrbd2
testrbd
# 映射该rbd
[cephfsd@ceph-admin ceph]$ sudo rbd map rbd_data/testrbd2
/dev/rbd1
[cephfsd@ceph-admin ceph]$ ll /dev/rbd1
brw-rw----. 1 root disk 252, 16 Dec 6 17:32 /dev/rbd1
方法四:指定开启哪个features
# 创建rbd镜像时就指明需要的特性
[cephfsd@ceph-admin ceph]$ rbd create rbd_data/testrbd3 --size=1G --image-feature layering
[cephfsd@ceph-admin ceph]$ rbd ls -p rbd_data
testrbd2
testrbd
testrbd3
[cephfsd@ceph-admin ceph]$ rbd map rbd_data/testrbd3
rbd: sysfs write failed
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (13) Permission denied
[cephfsd@ceph-admin ceph]$ sudo rbd map rbd_data/testrbd3
/dev/rbd2
[cephfsd@ceph-admin ceph]$ ll /dev/rbd
rbd/ rbd0 rbd1 rbd2
[cephfsd@ceph-admin ceph]$ ll /dev/rbd2
brw-rw----. 1 root disk 252, 32 Dec 6 17:38 /dev/rbd2
[cephfsd@ceph-admin ceph]$
# ok,映射成功,故障解决!
禁用特性后,再次映射成功。
# 查看块映射map情况
[cephfsd@ceph-admin rbd]$ rbd showmapped
id pool image snap device
0 rbd_data testrbd - /dev/rbd0
1 rbd_data testrbd2 - /dev/rbd1
2 rbd_data testrbd3 - /dev/rbd2
4、格式化并挂载该rbd块
map后,我们就可以像格式化一个空image那样对其进行格式化了,这里格成ext4文件系统(格式化这一步大可不必,在后续小节中你会看到):
# 格式化该rbd设备
[cephfsd@ceph-admin ceph]$ sudo mkfs.xfs /dev/rbd0
meta-data=/dev/rbd0 isize=512 agcount=16, agsize=163840 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=1024 swidth=1024 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 创建挂载目录
[cephfsd@ceph-admin ceph]$ sudo mkdir /mnt/rbd
# 开始挂载
[cephfsd@ceph-admin ceph]$ sudo mount /dev/rbd0 /mnt/rbd/
[cephfsd@ceph-admin ceph]$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 484M 0 484M 0% /dev
tmpfs tmpfs 496M 0 496M 0% /dev/shm
tmpfs tmpfs 496M 39M 458M 8% /run
tmpfs tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 46G 1.9G 44G 5% /
/dev/sda1 xfs 497M 130M 368M 26% /boot
tmpfs tmpfs 100M 0 100M 0% /run/user/0
172.16.143.121:6789:/ ceph 8.5G 0 8.5G 0% /opt
/dev/rbd0 xfs 10G 33M 10G 1% /mnt/rbd
[cephfsd@ceph-admin ceph]$
# 挂载成功,写点东西进去
[cephfsd@ceph-admin rbd]$ sudo touch rbd_test
[cephfsd@ceph-admin rbd]$ ll
total 0
-rw-r--r--. 1 root root 0 Dec 6 18:38 rbd_test
[cephfsd@ceph-admin rbd]$ sudo vim rbd_test
[cephfsd@ceph-admin rbd]$ ll
total 4
-rw-r--r--. 1 root root 12 Dec 6 18:38 rbd_test
[cephfsd@ceph-admin rbd]$ cat rbd_test
adsga
rbd 0
[cephfsd@ceph-admin rbd]$
rbd其他命令
映射块设备
# 用 rbd 把映像名映射为内核模块。必须指定映像名、存储池名、和用户名。若 RBD 内核模块尚未加载, rbd 命令会自动加载。
sudo rbd map {pool-name}/{image-name} --id {user-name}
# 例如:
sudo rbd map rbd/myimage --id admin
# 如果你启用了 cephx 认证,还必须提供密钥,可以用密钥环或密钥文件指定密钥。
sudo rbd map rbd/myimage --id admin --keyring /path/to/keyring
sudo rbd map rbd/myimage --id admin --keyfile /path/to/fil
查看已经映射的块设备
rbd showmappe
取消块设备映射
sudo rbd unmap /dev/rbd/{poolname}/{imagename}
查看块设备映像
# 要列出 rbd 存储池中的块设备,可以用下列命令(即 rbd 是默认存储池名字):
rbd ls
# 用下列命令罗列某个特定存储池中的块设备,用存储池的名字替换 {poolname} :
rbd ls {poolname}
例如:
rbd ls swimmingpool
查看映像信息
# 用下列命令检索某个特定映像的信息,用映像名字替换 {image-name} :
rbd info {image-name}
# 例如:
rbd info foo
# 用下列命令检索某存储池内的映像的信息,用映像名字替换 {image-name} 、用存储池名字替换 {pool-name} :
rbd info {pool-name}/{image-name}
# 例如:
rbd info swimmingpool/bar
调整块设备映像大小
sudo rbd resize --size 512 test/foo --allow-shrink #调小
sudo rbd resize --size 4096 test/foo #调大
删除块设备
sudo rbd rm test/foo
5、创建快照
[cephfsd@ceph-admin rbd]$ rbd snap create --snap mysnap rbd_data/testrbd
[cephfsd@ceph-admin rbd]$ rbd snap ls rbd_data/testrbd
SNAPID NAME SIZE TIMESTAMP
4 mysnap 10GiB Fri Dec 6 19:14:07 2019
[cephfsd@ceph-admin rbd]$
如上,创建了一个rbd_data/testrbd的快照,快照名叫mysnap。
6、回滚
# 回滚前先看一下现在是什么样子。
[cephfsd@ceph-admin rbd]$ ll
total 4
-rw-r--r--. 1 root root 0 Dec 6 19:17 abc
-rw-r--r--. 1 root root 12 Dec 6 18:38 rbd_test
# rbd_test是建快照之前就有的,把所有文件删除
[cephfsd@ceph-admin rbd]$ sudo rm -rf *
[cephfsd@ceph-admin rbd]$ ll
total 0
[cephfsd@ceph-admin rbd]$ df -TH
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 508M 0 508M 0% /dev
tmpfs tmpfs 520M 0 520M 0% /dev/shm
tmpfs tmpfs 520M 40M 480M 8% /run
tmpfs tmpfs 520M 0 520M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 49G 2.0G 47G 5% /
/dev/sda1 xfs 521M 136M 386M 26% /boot
tmpfs tmpfs 104M 0 104M 0% /run/user/0
172.16.143.121:6789:/ ceph 9.2G 0 9.2G 0% /opt
/dev/rbd0 xfs 11G 35M 11G 1% /mnt/rbd
# 卸载块
[cephfsd@ceph-admin rbd]$ sudo umount /dev/rbd0
umount: /mnt/rbd: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[cephfsd@ceph-admin rbd]$ pwd
/mnt/rbd
# 因为当前进入了这个块设备目录,所以无法卸载,先离开当前目录。
[cephfsd@ceph-admin rbd]$ cd
# 卸载成功
[cephfsd@ceph-admin ~]$ sudo umount /dev/rbd0
[cephfsd@ceph-admin ~]$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 484M 0 484M 0% /dev
tmpfs tmpfs 496M 0 496M 0% /dev/shm
tmpfs tmpfs 496M 39M 458M 8% /run
tmpfs tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 46G 1.9G 44G 5% /
/dev/sda1 xfs 497M 130M 368M 26% /boot
tmpfs tmpfs 100M 0 100M 0% /run/user/0
172.16.143.121:6789:/ ceph 8.5G 0 8.5G 0% /opt
[cephfsd@ceph-admin ~]$ ll /mnt/rbd/
total 0
# 开始回滚
[cephfsd@ceph-admin ~]$ rbd snap rollback rbd_data/testrbd@mysnap
Rolling back to snapshot: 100% complete...done.
# 重新挂载
[cephfsd@ceph-admin ~]$ sudo mount /dev/rbd0 /mnt/rbd/
# 检查该文件是否和建立快照时一模一样
[cephfsd@ceph-admin ~]$ ll /mnt/rbd/
total 4
-rw-r--r--. 1 root root 12 Dec 6 18:38 rbd_test
[cephfsd@ceph-admin ~]$ cat /mnt/rbd/rbd_test
adsga
rbd 0
[cephfsd@ceph-admin ~]$
7、克隆
查看该块设备支不支持克隆,image-format必须为2
[cephfsd@ceph-admin ~]$ rbd info rbd_data/testrbd
rbd image 'testrbd':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.373e6b8b4567
format: 2
features: layering
flags:
create_timestamp: Fri Dec 6 16:06:55 2019
# 如果不是,则需要在创建快照的时候就指定--image-format为2
rbd create rbd_data/testrbd4 --size 1G --image-format 2
把该块做成模板,需要先把该模板的快照设置成protect(重要)
# 设置快照为protect
[cephfsd@ceph-admin ~]$ rbd snap protect rbd_data/testrbd@mysnap
# 可以通过unprotect取消保护,但是这样就不能克隆了
[cephfsd@ceph-admin ~]$ rbd snap unprotect rbd_data/testrbd@mysnap
[cephfsd@ceph-admin ~]$ rbd info rbd_data/testrbd
rbd image 'testrbd':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.373e6b8b4567
format: 2
features: layering
flags:
create_timestamp: Fri Dec 6 16:06:55 2019
# 这里我们把它设置回来,设为protect
[cephfsd@ceph-admin ~]$ rbd snap protect rbd_data/testrbd@mysnap
卸载该块
[cephfsd@ceph-admin ~]$ sudo umount /dev/rbd0
[cephfsd@ceph-admin ~]$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 484M 0 484M 0% /dev
tmpfs tmpfs 496M 0 496M 0% /dev/shm
tmpfs tmpfs 496M 45M 452M 9% /run
tmpfs tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 46G 1.9G 44G 5% /
/dev/sda1 xfs 497M 130M 368M 26% /boot
tmpfs tmpfs 100M 0 100M 0% /run/user/0
172.16.143.121:6789:/ ceph 8.5G 0 8.5G 0% /opt
[cephfsd@ceph-admin ~]$
开始克隆
[cephfsd@ceph-admin ~]$ rbd clone rbd_data/testrbd@mysnap rbd_data/testrbd_clone
[cephfsd@ceph-admin ~]$ rbd -p rbd_data ls
testrbd2
testrbd
testrbd3
testrbd_clone
[cephfsd@ceph-admin ~]
# 可以看到多出了一个克隆出来的块testrbd_clone
查看区别
检查克隆出来的testrbd_clone和之前的testrbd有没有什么区别:
# 映射testrbd_clone
[cephfsd@ceph-admin ~]$ sudo rbd map rbd_data/testrbd_clone
/dev/rbd3
# 创建挂载目录
[cephfsd@ceph-admin ~]$ sudo mkdir /mnt/rbd_clone
# 挂载克隆的块
[cephfsd@ceph-admin ~]$ sudo mount /dev/rbd3 /mnt/rbd_clone/
# 查看克隆的块的详情
[cephfsd@ceph-admin ~]$ ll /mnt/rbd_clone/
total 4
-rw-r--r--. 1 root root 12 Dec 6 18:38 rbd_test
[cephfsd@ceph-admin ~]$ cat /mnt/rbd_clone/rbd_test
adsga
rbd 0
[cephfsd@ceph-admin ~]$
# 发现testrbd_clone和testrbd快照的内容是一模一样的,因为是从那个快照克隆过来的
# 查看 testrbd_clone信息
[cephfsd@ceph-admin ~]$ rbd info rbd_data/testrbd_clone
rbd image 'testrbd_clone':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.375f6b8b4567
format: 2
features: layering
flags:
create_timestamp: Fri Dec 6 19:56:21 2019
parent: rbd_data/testrbd@mysnap
overlap: 10GiB
[cephfsd@ceph-admin ~]$
flatten合并
父镜像与克隆镜像合并
这个时候的testrbd_clone还是依赖testrbd的镜像mysnap的,如果testrbd的mysnap被删除或者怎么样,testrbd_clone也不能够使用了,要想独立出去,就必须将父镜像的信息合并flattern到子镜像中
# 合并前
[cephfsd@ceph-admin ~]$ rbd info rbd_data/testrbd_clone
rbd image 'testrbd_clone':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.375f6b8b4567
format: 2
features: layering
flags:
create_timestamp: Fri Dec 6 19:56:21 2019
parent: rbd_data/testrbd@mysnap
overlap: 10GiB
[cephfsd@ceph-admin ~]$
# 开始flatten合并
[cephfsd@ceph-admin ~]$ rbd flatten rbd_data/testrbd_clone
Image flatten: 100% complete...done.
# 合并后,查看testrbd_clone发现已经没有parent信息了,因为已经独立了
[cephfsd@ceph-admin ~]$ rbd info rbd_data/testrbd_clone
rbd image 'testrbd_clone':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.375f6b8b4567
format: 2
features: layering
flags:
create_timestamp: Fri Dec 6 19:56:21 2019
[cephfsd@ceph-admin ~]$
# 此时就可以删除快照模板了
[cephfsd@ceph-admin ~]$ rbd snap unprotect rbd_data/testrbd@mysnap
[cephfsd@ceph-admin ~]$ rbd snap rm rbd_data/testrbd@mysnap
[cephfsd@ceph-admin ~]$ rbd snap ls rbd_data/testrbd
# 镜像模板已删除
8、k8s使用rbd作后端存储
参考下一篇文档:https://www.cnblogs.com/doublexi/p/15618609.html
引用:
参考:http://www.strugglesquirrel.com/2019/04/23/centos7%E9%83%A8%E7%BD%B2ceph/
http://docs.ceph.org.cn/rbd/rbd/
ceph块存储场景的更多相关文章
- 二十八. Ceph概述 部署Ceph集群 Ceph块存储
client :192.168.4.10 node1 :192.168.4.11 ndoe2 :192.168.4.12 node3 :192.168.4.13 1.实验环境 准备四台KVM虚 ...
- Ceph块存储介绍
1. 块存储是什么 块存储简称RBD(RADOS Block Device),是一种有序的字节序块,也是在Ceph三大存储类型中最为常用的存储方式 ,Ceph的块存储是基于RADOS的,因此它也借助R ...
- Ceph 块存储
任何普通的linux主机都可以充当ceph客户机,客户机通过网络与ceph存储集群交互以存储或检索用户数据.Ceph RBD支持已经添加到linux主线内核中,从2.6.34以及以后版本开始. === ...
- ceph对象存储场景
安装ceph-radosgw [root@ceph-node1 ~]# cd /etc/ceph # 这里要注意ceph的源,要和之前安装的ceph集群同一个版本 [root@ceph-node1 c ...
- Ceph 块存储 创建的image 映射成块设备
将创建的volume1映射成块设备 [root@mysql-server ceph]# rbd map rbd_pool/volume1 rbd: sysfs write failed RBD ima ...
- ceph rbd块存储挂载及文件存储建立
一.rbd块存储挂载 1 创建一个OSD pool # ceph osd pool create rbd1 128 查询存储空间使用 # ceph df GLOBAL: SIZE AVAIL RAW ...
- 我们为什么选择Ceph来建立块存储
我们为什么选择Ceph来建立块存储?国内知名黑客组织东方联盟是这样回答的,卷管理器的大小和增长受到管理程序的驱动器补充的限制,与其他Droplet共享.一旦Droplet被摧毁,储存就会被释放.术语“ ...
- 3.Ceph 基础篇 - RBD 块存储使用
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485253&idx=1&sn=24d9b06a ...
- Ceph分层存储分析
最近弄Ceph集群考虑要不要加入分层存储 因此花了点时间研究了下 1,首先肯定要弄清Ceph分层存储的结构 ,结构图大概就是下图所示 缓存层(A cache tier)为Ceph客户端提供更好的I/O ...
随机推荐
- Python matplotlib pylot和pylab的区别
matplotlib是Python中强大的绘图库. matplotlib下pyplot和pylab均可以绘图. 具体来说两者的区别 pyplot 方便快速绘制matplotlib通过pyplot模块提 ...
- Mybatis的分页插件com.github.pagehelper
1. 需要引入PageHelper的jar包 如果没有使用maven,那直接把jar包导入到lib文件夹下即可,这个PageHelper插件在github上有开源, 地址为:https://githu ...
- 开发笔记-----Ajax 基础使用
一.GET 方式的用法: 1 <!--html --> 2 <div class="layui-form"> 3 <div class="l ...
- centos如何上网
问题 centos如何上网 解决方法 第一步: 打开VMware,选择菜单栏的Edit->Virtual Network Editor(虚拟网络编辑器).点击Restore Defaults(即 ...
- C#练习3
using System; class Test { static void F(params int[]args) { Console.WriteLine("# of argument:{ ...
- [loj2469]最小方差生成树
2018年论文题 约定:令点集$V=[1,n]$.边集$E=[1,m]$,记$m$条边依次为$e_{i}=(x_{i},y_{i},c_{i})$(其中$1\le i\le m$),将其按照$c_{i ...
- [noi253]A
定义f[i][j]表示从(i,j)走到最后一行的期望,不断从下往上dp那么对于每一行都可以得到m个方程. 但由于这m个方程不是DAG,因此考虑用高斯消元,但时间复杂度不对. 观察方程可以发现如果不断将 ...
- Java ArrayList小记
1.基本用法 ArrayList是一个泛型容器,新建ArrayList需要实例化泛型参数,比如: ArrayList<String> StrList = new ArrayList< ...
- FJD1T3(LOJ 2773 学习轨迹)
发现了\(FJOI\)原题 没什么想法,想到自己考场上连\(n^2\)做法都不会就很感慨. 考虑如果只选择一个序列的任务,那么肯定全部选择会更加优秀. 那么考虑如果我们选择了两个序列的一部分. 如果\ ...
- Codeforces 643F - Bears and Juice(思维题)
Codeforces 题目传送门 & 洛谷题目传送门 首先直接暴力枚举显然是不现实的,我们不妨换个角度来处理这个问题,考虑这 \(R_i\) 个瓶子中每一瓶被哪些熊在哪一天喝过. 我们考虑对这 ...