命令行安装#
如果您希望使用命令行的方式部署 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.xml
,magma-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进程在机器上的状态。