How to configure Ceph use memstore?

Configuration of memstore

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
— — in file: ceph_osd.cc
int main(int argc, const char **argv)
{
...
// the store
ObjectStore *store = ObjectStore::create(g_ceph_context,
g_conf->osd_objectstore,
g_conf->osd_data,
g_conf->osd_journal);
...
}


ObjectStore *ObjectStore::create(CephContext *cct,
const string& type,
const string& data,
const string& journal,
osflagbits_t flags)
{
if (type == "filestore") {
return new FileStore(data, journal, flags);
}
if (type == "memstore") {
return new MemStore(cct, data);
}
if (type == "keyvaluestore-dev") {
return new KeyValueStore(data);
}
return NULL;
}

— — in file: config_opts.h
OPTION(osd_objectstore, OPT_STR, "filestore") // ObjectStore backend type

So we can config OSD use memstore in file ceph.conf:

1
2
[osd]
osd objectstore = memstore

For Memstore, we could use Normal disk as storage of OSD, it would only use the host memory to store object data.
Only when OSD unmount, the data in memory would flush to disk.

create a memory virtual disk supported by linux

There are three type memory virtual disk supported in linux:

ramdisk

  1. 首先查看一下可用的RamDisk,使用 ls /dev/ram*
  2. 然后对/dev/ram0 创建文件系统,运行 mkfs.xfs /dev/ram0
  3. 最后挂载 /dev/ram0,运行 mount /dev/ram /mnt/test

ramfs

Ramfs顾名思义是内存文件系统,它处于虚拟文件系统(VFS)层,而不像ramdisk那样基于虚拟在内存中的其他文件系统(ex2fs)。
因而,它无需格式化,可以创建多个,只要内存足够,在创建时可以指定其最大能使用的内存大小。
在编译内核时须将File systems –>> pseudo filesystems –>> Virtual memory file system support支持选上。

1
# mount -t ramfs none /testRAM

缺省情况下,Ramfs被限制最多可使用内存大小的一半。可以通过maxsize(以kbyte为单位)选项来改变。

1
2
创建了一个限定最大使用内存为2M的ramdisk
# mount -t ramfs none /testRAM -o maxsize=2000

tmpfs

Tmpfs是一个虚拟内存文件系统,它不同于传统的用块设备形式来实现的Ramdisk,也不同于针对物理内存的Ramfs。
Tmpfs可以使用物理内存,也可以使用交换分区。
在Linux内核中,虚拟内存资源由物理内存(RAM)和交换分区组成,这些资源是由内核中的虚拟内存子系统来负责分配和管理。
Tmpfs向虚拟内存子系统请求页来存储文件,它同Linux的其它请求页的部分一样,不知道分配给自己的页是在内存中还是在交换分区中。
同Ramfs一样,其大小也不是固定的,而是随着所需要的空间而动态的增减。
在编译内核时须将File systems –>> pseudo filesystems –>> Virtual memory file system support支持选上。

1
2
3
4
5
# mkdir -p /mnt/tmpfs
# mount tmpfs /mnt/tmpfs -t tmpfs

同样可以在加载时指定tmpfs文件系统大小的最大限制:
# mount tmpfs /mnt/tmpfs -t tmpfs -o size=32m

use this memory virtual disk as the OSD device

After all this OSD had been deployed, then we can configure the CRUSH ruleset of one pool to decide which data would use this OSD.

支持原创