存储管理简介
===============
OushuDB 原生支持 HDFS 和自研分布式表存储 Magma。这两大存储可以通过多虚拟存储集群的机制原生的接入 OushuDB ,实现 IO 资源的物理隔离。
------------------
Magma集群配置
------------------
用户通过配置 ``magma-topology.yaml`` 文件,定制 Magma 虚拟集群,但必须配置名为 ``vsc_catalog`` 的子集群作为 OushuDB 的元数据存储集群。
如下是一个配置了由单个节点组成的 ``vsc_catalog`` 的子集群和3个节点组成的 ``vsc_default`` 子集群。
.. code-block:: yaml
nodes:
- id: "cn1"
addr: "192.168.1.100"
label: { region: "region1", zone: "zone1"}
- id: "dn[1-3]"
addr: "192.168.1.[101-103]"
label: { region: "region1", zone: "zone1"}
vsc:
- name: vsc_catalog
nodes: cn1
port: 6666
num_ranges: 3
num_replicas: 3
data_dir: /data1/oushudb/magma_catalog
log_dir:
replica_locations: "region1.zone1:3"
leader_preferences: "region1.zone1"
- name: vsc_default
nodes: dn1,dn2,dn3
port: 6676
num_ranges: 18
num_replicas: 3
data_dir: /data1/oushudb/magma_data
log_dir:
replica_locations: "region1.zone1:3"
leader_preferences: "region1.zone1"
其中 ``nodes`` 下配置Magma集群的节点,并通过 ``addr`` 指定监听地址, ``label`` 指定机器所在的数据中心。 ``vsc`` 下配置Magma虚拟集群,通过 ``num_replicas`` 配置对应虚拟集群的副本数,通过 ``num_ranges`` 配置对应虚拟集群的数据分片数,通过 ``replica_locations`` 配置对应多个副本分别放置在哪些数据中心,通过 ``leader_preferences`` 配置对应虚拟集群的raft leader的位置。
用户还需要配置 ``magma-client.xml`` 为 Oushudb 提供 Magma 虚拟集群的 name service 以及连接 URL。
.. code-block:: html
nameservices
magma_catalog
magma_catalog
magma_node1
magma_catalog.magma_node1
192.168.1.100:6666
上述样例配置了一个名为 ``magma_catalog`` 的name service,并且该name service包含一个名为 ``magma_node1`` 的节点,该节点的URL为 ``192.168.1.100:6666`` 。 ``magma-client.xml`` 配置文件需要包含 ``vsc_catalog`` 中的所有节点,每一个节点的URL必须和 ``magma-topology.yaml`` 中配置的一致。
在数据库中,可以通过 ``TABLESPACE`` 来动态创建并使用Magma VSC:
::
create tablespace magma_default location 'magma://magma_catalog/vsc_default' with (default_create_table_option='appendonly=true,orientation=magmaap', bucket_number=18)
该命令创建了一个名为 ``magma_default`` 的tablespace,对应的URL为 ``magma://magma_catalog/vsc_default`` ,默认的建表选项为 ``(appendonly=true,orientation=magmaap)`` ,桶数为 ``18`` 。Magma存储集群的桶数和 ``num_ranges`` 配置项一致。
为了在初始化阶段自动创建 ``TABLESPACE`` ,需要配置 ``oushudb-tablespace.yaml`` 文件。
.. code-block:: yaml
- name: magma_default
url: [magma://magma_catalog/vsc_default]
default_create_table_option: appendonly=true,orientation=magmaap
bucket_number: 18
default: true
其中的参数配置和 ``CREATE TABLESPACE`` 的 ``WITH`` 选项保持一致。 ``default: true`` 指明 ``magma_default`` 这个tablespace是 ``postgres`` 数据库的默认建表tablespace。
Oushudb 集群通过 ``catalog_url`` 这个GUC来访问Magma元数据集群 ``vsc_catalog``。需要在 ``oushudb-site.xml`` 中配置:
.. code-block:: html
catalog_url
magma_catalog/vsc_catalog
urls for accessing magma.
其中 ``magma_catalog/vsc_catalog`` 指明了 ``catalog_url`` 使用的name service为 ``magma_catalog`` ,VSC的名称为 ``vsc_catalog`` 。name service的名称必须和 ``magma-client.xml`` 中配置的一致,VSC的名称只能为 ``vsc_catalog`` ,且和 ``magma-topology.yaml`` 中保持一致。