命令行安装#

如果您希望使用命令行的方式部署 Magma,请按照本章节步骤安装。

前提#

使用 root 用户登陆到 magma1 节点:

ssh magma1

创建 magmahosts 文件,包含 Magma 集群中所有机器:

touch ~/magmahosts

编写 magmahosts 文件内容如下:

magma1
magma2
magma3

配置yum源,安装lava命令行管理工具:

# 从yum源所在机器(假设为192.168.1.10)获取repo文件
scp root@192.168.1.10:/etc/yum.repos.d/oushu.repo /etc/yum.repos.d/oushu.repo
# 追加yum源所在机器信息到/etc/hosts文件
yum clean all
yum makecache
yum install -y lava

在 magma1 上和集群内其他节点交换公钥,以便ssh免密码登陆和分发配置文件,以密码代替*号:

lava ssh-exkeys -f ~/magmahosts -p ********

将repo文件分发给集群内其他机器:

lava scp -f ~/magmahosts /etc/yum.repos.d/oushu.repo =:/etc/yum.repos.d/

在 magma1 节点的系统配置文件 /etc/sysctl.conf 中追加如下内容:

kernel.shmmax = 3000000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sem = 250 512000 100 2048
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 200000
net.ipv4.conf.all.arp_filter = 1
net.ipv4.ip_local_port_range = 10000 65535
net.core.netdev_max_backlog = 200000
net.netfilter.nf_conntrack_max = 524288
fs.nr_open = 3000000
kernel.threads-max = 798720
kernel.pid_max = 798720
net.core.rmem_max=2097152
net.core.wmem_max=2097152
net.core.somaxconn=4096
kernel.core_pattern=/data1/oushudb/cores/core-%e-%s-%u-%g-%p-%t

为了方便软件调试分析,我们建议允许 Magma 生成 core dump 文件。

创建文件 /etc/security/limits.d/oushu.conf

touch  /etc/security/limits.d/oushu.conf

并向写入内容:

* soft nofile 1048576
* hard nofile 1048576
* soft nproc 131072
* hard nproc 131072
oushu soft core unlimited
oushu hard core unlimited

同步上述操作系统参数修改到所有节点:

lava scp -r -f ~/magmahosts /etc/sysctl.conf =:/etc/
lava scp -r -f ~/magmahosts /etc/security/limits.d/oushu.conf =:/etc/security/limits.d/
lava ssh -f ~/magmahosts -e "sysctl -p"

安装#

使用 yum install 的安装方式:

lava ssh -f ~/magmahosts -e "yum install -y oushudb"

配置#

为了方便管理,为 oushu 用户创建 magmahostfile, cataloghostfile 与 datahostfile 以分别管理集群所有节点、 集群 catalog 节点和 集群 data 节点。

在 oushu1 上 /home/oushu 目录下,

创建 magmahostfile 文件,包含集群所有节点:

touch /home/oushu/magmahostfile

编辑magmahostfile 文件如下:

magma1
magma2
magma3

创建 cataloghostfile 文件,包含集群所有 catalog 节点:

touch /home/oushu/cataloghostfile

编辑cataloghostfile 文件如下:

magma1
magma2
magma3

创建 datahostfile 文件,包含集群所有 data 节点:

touch /home/oushu/datahostfile

编辑datahostfile 文件如下:

magma1
magma2
magma3

同步hostfile文件到所有节点:

lava scp -r -f ~/magmahosts /home/oushu/* =:/home/oushu
lava ssh -f ~/magmahosts -e "chown -R oushu:oushu /home/oushu"

修改集群内 oushu 用户环境变量:

lava ssh -f ~/magmahosts -e "touch /home/oushu/.bashrc"
lava ssh -f ~/magmahosts -e "echo 'source /usr/local/oushu/oushudb/oushudb_path.sh' >> /home/oushu/.bashrc"

准备数据目录#

Magma 需要将元数据与用户数据保存到文件系统中,需要为 Magma 配置可用的文件路径。

在元数据集群中创建元数据文件目录

在所有的元数据节点中创建元数据文件夹(magma_catalog):

lava ssh -f /home/oushu/cataloghostfile -e "mkdir -p /data1/oushudb/magma_catalog" 

可以在多个盘下创建元数据文件夹以提升磁盘利用率, 例如:

lava ssh -f /home/oushu/cataloghostfile -e "mkdir -p /data1/oushudb/magma_catalog" 
lava ssh -f /home/oushu/cataloghostfile -e "mkdir -p /data2/oushudb/magma_catalog" 
lava ssh -f /home/oushu/cataloghostfile -e "mkdir -p /data3/oushudb/magma_catalog" 

修改对应文件夹的权限信息:

lava ssh -f /home/oushu/cataloghostfile -e "chown -R oushu:oushu /data1/oushudb"

在数据集群中创建数据文件目录

如果不使用 Magma 作为用户数据存储引擎,可以跳过数据目录创建步骤。

在所有的数据节点中创建数据文件夹(magma_data):

lava ssh -f /home/oushu/datahostfile -e "mkdir -p /data1/oushudb/magma_data" 

修改对应文件夹的权限信息:

lava ssh -f /home/oushu/datahostfile -e "chown -R oushu:oushu /data1/oushudb"

在所有节点上创建core dump文件路径

按照 kernel.core_pattern 的配置值进行创建 :

lava ssh -f /home/oushu/magmahostfile -e "mkdir -p /data1/oushudb/cores" 
lava ssh -f /home/oushu/magmahostfile -e "chmod 777 /data1/oushudb/cores" 

修改配置文件#

修改配置文件全程使用 oushu 用户,在配置前为 oushu 用户交换集群key:

使用 root 用户利用 lava 工具修改集群节点上 oushu 用户密码,密码代替 * 号:

lava ssh -f ~/magmahosts -e "echo '******' | passwd  --stdin oushu"

在 magma1 节点上, 切换 oushu 用户并与集群节点交换key,按照提示输入相应节点的 oushu 用户密码:

su - oushu
oushudb ssh-exkeys -f /home/oushu/magmahostfile

Magma 参数保存于 magma-site.xmlmagma-topology.yaml。模板配置文件保存于/usr/local/oushu/oushudb/conf.empty

文件名

作用描述

magma-topology.yaml

描述了 Magma 虚拟集群的部署信息,包括节点信息,拓扑信息,集群配置参数

magma-site.xml

描述了 Magma 运行的关键属性

进入/usr/local/oushu/conf/oushudb

cd /usr/local/oushu/conf/oushudb

配置magma-topology.yaml

magma-topology.yaml 描述了 Magma 集群的拓扑信息,包含所有节点信息、集群的逻辑结构、节点角色的分配情况以及虚拟存储集群的参数配置。

magma-topology.yaml 由两部分组成:描述节点信息的 nodes 段以及描述集群配置信息的 vsc 段。

修改 magma-topology.yaml 文件中的节点信息,并设置其所属 vsc。

如下的文件添加了 m1、m2、m3 三个节点,设置了地址标签,并将三节点添加到了 vsc_catalog 与 vsc_default 下。

nodes:
 - id: m1
   addr: 192.168.1.21
   label: { region: "regionA", zone: "zoneA"}
 - id: m2
   addr: 192.168.1.22
   label: { region: "regionA", zone: "zoneA"}
 - id: m3
   addr: 192.168.1.23
   label: { region: "regionA", zone: "zoneA"}

vsc:
 - name: vsc_catalog
   nodes: m1,m2,m3
   port: 6666
   num_ranges: 3
   num_replicas: 3
   data_dir: /data1/oushudb/magma_catalog
   log_dir:
   replica_locations: "regionA.zoneA:3"
   leader_preferences: "regionA.zoneA"
 - name: vsc_default
   nodes: m1,m2,m3
   port: 6676
   num_ranges: 18
   num_replicas: 3
   data_dir: /data1/oushudb/magma_data
   log_dir:
   replica_locations: "regionA.zoneA:3"
   leader_preferences: "regionA.zoneA"

如果不使用 Magma 作为用户数据存储引擎,可在 vsc段中 仅配置名称为 vsc_catalog的vsc。

参数项的含义如下:

nodes 参数项

含义

id

节点标识

addr

节点的ip地址或者hostname

label

节点标签

vsc 参数项

含义

name

vsc 的名称

nodes

vsc 包含的所有节点

port

该 vsc 中节点的监听端口

num_ranges

该 vsc 集群的总分片数量

num_replicas

副本数

data_dir

vsc集群中节点存放数据的路径,可以有多个路径,按逗号无空格的隔开

log_dir

vsc集群中每一个节点存放日志的路径,默认是$OUSHUDB_LOG_PATH/vsc_name[可选]

replica_locations

副本所在位置

leader_preferences

集群 leader 所在位置

配置magma-topology.yaml中的vsc属性

magma-site.xml 定义了 Magma 运行的关键参数,一般由开发者预先定义好,可以直接使用, 获得更多关键参数说明,可以参照 Magma 调优

magma-site.xml中仅包含了属性名称,属性具体的配置需要体现在mamga-topology.yaml中的vsc属性部分。

为了方便配置,我们提供两套关键参数配置做参考:

如果机器的内存大于 64GB,我们建议使用方案1中的元数据集群与数据集群配置, 否则使用方案二中的元数据集群与数据集群配置。

方案1:

元数据集群关键配置参考(仅需要关注对应vsc中nbuffers及以下的部分):

nodes:
 - id: m1
   addr: 192.168.1.21
   label: { region: "regionA", zone: "zoneA"}
 - id: m2
   addr: 192.168.1.22
   label: { region: "regionA", zone: "zoneA"}
 - id: m3
   addr: 192.168.1.23
   label: { region: "regionA", zone: "zoneA"}

vsc:
 - name: vsc_catalog
   nodes: m1,m2,m3
   port: 6666
   num_ranges: 3
   num_replicas: 3
   data_dir: /data1/oushudb/magma_catalog
   log_dir:
   replica_locations: "regionA.zoneA:3"
   leader_preferences: "regionA.zoneA"
   nbuffers: 204800
   follower_nbuffers: 204800
   shared_buffer_size_per_table_per_range: 4194304
   shared_buffer_size_max_per_table_per_range: 8388608
   shared_buffer_min_tuples: 5000
   compact_trigger_ap_ratio_limit: 0.1
   compact_data_worker_limit_perrg: 2
   compact_cleanup_worker_limit_perrg: 4
   compact_clear_interval: 60000
   shared_buffer_fixed_page_size: 131072
   shared_buffer_fixed_pool_size: 40960
   rpc_server_work_thread_num: 32
 - name: vsc_default
   nodes: m1,m2,m3
   port: 6676
   num_ranges: 18
   num_replicas: 3
   data_dir: /data1/oushudb/magma_data
   log_dir:
   replica_locations: "regionA.zoneA:3"
   leader_preferences: "regionA.zoneA"

数据集群关键配置参考(仅需要关注对应vsc中nbuffers及以下的部分):

nodes:
 - id: m1
   addr: 192.168.1.21
   label: { region: "regionA", zone: "zoneA"}
 - id: m2
   addr: 192.168.1.22
   label: { region: "regionA", zone: "zoneA"}
 - id: m3
   addr: 192.168.1.23
   label: { region: "regionA", zone: "zoneA"}

vsc:
 - name: vsc_catalog
   nodes: m1,m2,m3
   port: 6666
   num_ranges: 3
   num_replicas: 3
   data_dir: /data1/oushudb/magma_catalog
   log_dir:
   replica_locations: "regionA.zoneA:3"
   leader_preferences: "regionA.zoneA"
- name: vsc_default
   nodes: m1,m2,m3
   port: 6676
   num_ranges: 18
   num_replicas: 3
   data_dir: /data1/oushudb/magma_data
   log_dir:
   replica_locations: "regionA.zoneA:3"
   leader_preferences: "regionA.zoneA"
   nbuffers: 51200
   follower_nbuffers: 51200
   shared_buffer_size_per_table_per_range: 8388608
   shared_buffer_size_max_per_table_per_range: 33554432
   shared_buffer_min_tuples: 10000
   compact_trigger_ap_ratio_limit: 0.1
   compact_data_worker_limit_perrg: 2
   compact_cleanup_worker_limit_perrg: 4
   compact_clear_interval: 60000
   shared_buffer_fixed_page_size: 131072
   shared_buffer_fixed_pool_size: 40960
   rpc_server_work_thread_num: 32
   create_index_sort_work_dir: /data1/oushudb/tmp
   raftlog_fsync: false
   raftlog_checkflush_num: 300000
   compactlog_checkflush_num: 10240

方案二:

元数据集群关键配置参考(仅需要关注对应vsc中nbuffers及以下的部分):

nodes:
 - id: m1
   addr: 192.168.1.21
   label: { region: "regionA", zone: "zoneA"}
 - id: m2
   addr: 192.168.1.22
   label: { region: "regionA", zone: "zoneA"}
 - id: m3
   addr: 192.168.1.23
   label: { region: "regionA", zone: "zoneA"}

vsc:
 - name: vsc_catalog
   nodes: m1,m2,m3
   port: 6666
   num_ranges: 3
   num_replicas: 3
   data_dir: /data1/oushudb/magma_catalog
   log_dir:
   replica_locations: "regionA.zoneA:3"
   leader_preferences: "regionA.zoneA"
   nbuffers: 40960
   follower_nbuffers: 40960
   shared_buffer_size_per_table_per_range: 4194304
   shared_buffer_size_max_per_table_per_range: 8388608
   shared_buffer_min_tuples: 5000
   compact_trigger_ap_ratio_limit: 0.1
   compact_data_worker_limit_perrg: 2
   compact_cleanup_worker_limit_perrg: 4
   compact_clear_interval: 60000
   shared_buffer_fixed_page_size: 131072
   shared_buffer_fixed_pool_size: 10240
   rpc_server_work_thread_num: 32
 - name: vsc_default
   nodes: m1,m2,m3
   port: 6676
   num_ranges: 18
   num_replicas: 3
   data_dir: /data1/oushudb/magma_data
   log_dir:
   replica_locations: "regionA.zoneA:3"
   leader_preferences: "regionA.zoneA"

数据集群关键参数配置参考(仅需要关注对应vsc中nbuffers及以下的部分):

nodes:
 - id: m1
   addr: 192.168.1.21
   label: { region: "regionA", zone: "zoneA"}
 - id: m2
   addr: 192.168.1.22
   label: { region: "regionA", zone: "zoneA"}
 - id: m3
   addr: 192.168.1.23
   label: { region: "regionA", zone: "zoneA"}

vsc:
 - name: vsc_catalog
   nodes: m1,m2,m3
   port: 6666
   num_ranges: 3
   num_replicas: 3
   data_dir: /data1/oushudb/magma_catalog
   log_dir:
   replica_locations: "regionA.zoneA:3"
   leader_preferences: "regionA.zoneA"
- name: vsc_default
   nodes: m1,m2,m3
   port: 6676
   num_ranges: 18
   num_replicas: 3
   data_dir: /data1/oushudb/magma_data
   log_dir:
   replica_locations: "regionA.zoneA:3"
   leader_preferences: "regionA.zoneA"
   nbuffers: 10240
   follower_nbuffers: 10240
   shared_buffer_size_per_table_per_range: 8388608
   shared_buffer_size_max_per_table_per_range: 33554432
   shared_buffer_min_tuples: 10000
   compact_trigger_ap_ratio_limit: 0.1
   compact_data_worker_limit_perrg: 2
   compact_cleanup_worker_limit_perrg: 4
   compact_clear_interval: 60000
   shared_buffer_fixed_page_size: 131072
   shared_buffer_fixed_pool_size: 40960
   rpc_server_work_thread_num: 32 
   create_index_sort_work_dir: /data1/oushudb/tmp
   raftlog_fsync: false
   raftlog_checkflush_num: 300000
   compactlog_checkflush_num: 10240

在上述配置完成后,将配置文件分发到所有节点。

oushudb scp -f ~/magmahostfile /usr/local/oushu/conf/oushudb/magma-site.xml =:/usr/local/oushu/conf/oushudb/
oushudb scp -f ~/magmahostfile /usr/local/oushu/conf/oushudb/magma-topology.yaml =:/usr/local/oushu/conf/oushudb/

启动#

启动 Magma 集群#

在 magma1节上,使用 oushu 用户执行以下操作以启动集群:

magma start cluster

创建元数据集群 vsc_catalog (仅需创建一次):

magma create vscluster --vsc=vsc_catalog

创建数据存储集群 vsc_default(如果不使用 Magma 作为数据存储,则跳过该步骤):

magma create vscluster --vsc=vsc_default

检查状态#

可以通过执行 magma status 来检查 Magma 的运行状态:

magma status

该命令会输出 Magma 集群中所有节点状态与VSC状态, 确认所有节点中RG的 healthy 状态为健康状态,例如:

  nodeaddress: 192.168.1.21:6666
         topo: regionA.zoneA
      vscname: vsc_catalog
compactstatus: 0,0,0,0
      healthy: healthy
replicastatus:
	RG:id=1,isLeader=0,raftGroupId=raft_0_group,raftMembers=(1,0,2),status=serving
	RG:id=4,isLeader=0,raftGroupId=raft_1_group,raftMembers=(4,3,5),status=serving
	RG:id=6,isLeader=1,raftGroupId=raft_2_group,raftMembers=(6,7,8),status=serving
	RG:id=11,isLeader=0,raftGroupId=raft_3_group,raftMembers=(11,10,9),status=serving

常用命令#

在 Magma 集群的任意节点可控制 Magma 集群启停:

# 启动 Magma 集群
magma start cluster
# 启动指定的 VSC 集群,例如 vsc_catalog
magma start vscluster --vsc vsc_catalog
# 停止 Magma 集群
magma stop cluster
# 停止指定的 VSC 集群, 例如 vsc_catalog
magma stop vscluster --vsc vsc_catalog

注册到skylab(可选)#

注册工作需要将 Magma 所有节点添加到Skylab,如果您尚未添加,请参考注册机器

在 magma1 节点 上,使用root 用户 修改/usr/local/oushu/lava/conf配置server.json,替换localhost为skylab的服务器ip,具体skylab的基础服务lava安装步骤请参考:lava安装

{
  "server": "localhost:1612",
  "admin": "localhost:1652"
}

创建一个request文件,包含Magma cluster信息:

touch ~/magma-register.json

编写 json 文件内容如下:

{
  "data": {
    "name": "magmaserver",
    "group_roles": [
      {
        "role": "magma.node",
        "cluster_name": "vsc_catalog",
        "group_name": "vsc_catalog",
        "machines": [
          {
            "id": 1,
            "name": "catalog1",
            "subnet": "magma",
            "data_ip": "192.168.1.21",
            "manage_ip": "192.168.1.21",
            "assist_port": 1622,
            "ssh_port": 22
          },
          {
            "id": 2,
            "name": "catalog2",
            "subnet": "magma",
            "data_ip": "192.168.1.22",
            "manage_ip": "192.168.1.22",
            "assist_port": 1622,
            "ssh_port": 22
          },
          {
            "id": 3,
            "name": "catalog3",
            "subnet": "magma",
            "data_ip": "192.168.1.23",
            "manage_ip": "192.168.1.23",
            "assist_port": 1622,
            "ssh_port": 22
          }
        ]
      },
      {
        "role": "magma.node",
        "cluster_name": "vsc_default",
        "group_name": "vsc_default",
        "machines": [
          {
            "id": 4,
            "name": "datanode1",
            "subnet": "oushu",
            "data_ip": "192.168.1.21",
            "manage_ip": "192.168.1.21",
            "assist_port": 1622,
            "ssh_port": 22
          },
          {
            "id": 5,
            "name": "datanode2",
            "subnet": "oushu",
            "data_ip": "192.168.1.22",
            "manage_ip": "192.168.1.22",
            "assist_port": 1622,
            "ssh_port": 22
          },
          {
            "id": 6,
            "name": "datanode3",
            "subnet": "oushu",
            "data_ip": "192.168.1.23",
            "manage_ip": "192.168.1.23",
            "assist_port": 1622,
            "ssh_port": 22
          }        
        ]
      }
    ]
  }
}

配置文件说明,整个json分为3部分:

  • 第一部分name,为集群名称,个性化填写。

  • 第二部分为group_roles,对于 Magma 为1个角色,magma.node,不可修改。

  • 第三部分,为每个角色添加机器,需要添加的机器信息可以通过下面的方式获得。

在平台基础组件lava所安装的机器执行(端口和用户名按照lava配置修改):

psql lavaadmin -p 4432 -U oushu -c "select m.id,m.name,s.name as subnet,m.private_ip as data_ip,m.public_ip as manage_ip,m.assist_port,m.ssh_port from machine as m,subnet as s where m.subnet_id=s.id;"

获取到所需的机器信息,根据服务角色对应的节点,将机器信息添加到machines数组中。

在 magma1 上调用 lava 命令注册集群:

lava login -u oushu -p Oushu6@China
lava onprem-register service -s Magma -f ~/magma-register.json

如果返回值为:

Add service by self success

则表示注册成功,如果有错误信息,请根据错误信息处理。

例如skylab部署在192.168.1.10,访问

http://192.168.1.10:3000/main/Deploy/magma

从页面登录后,在自动部署模块对应服务中可以查看到新添加的集群,同时列表中会实时监控magma进程在机器上的状态。