# 命令行部署 如果您希望使用命令行的方式部署 Magma,请按照本章节步骤安装。 ## 前提 使用 root 用户登陆到 magma1 节点: ```bash ssh magma1 ``` 创建 `magmahosts` 文件,包含 Magma 集群中所有机器: ```bash touch ~/magmahosts ``` 编写 `magmahosts` 文件内容如下: ```sh magma1 magma2 magma3 ``` 配置yum源,安装lava命令行管理工具: ```sh # 从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免密码登陆和分发配置文件,以密码代替*号: ```sh 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 中追加如下内容: ```bash 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 ` ```bash touch /etc/security/limits.d/oushu.conf ``` 并向写入内容: ```bash * soft nofile 1048576 * hard nofile 1048576 * soft nproc 131072 * hard nproc 131072 oushu soft core unlimited oushu hard core unlimited ``` 同步上述操作系统参数修改到所有节点: ```bash 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 的安装方式: ```bash 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 用户环境变量: ```bash 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): ```bash lava ssh -f /home/oushu/cataloghostfile -e "mkdir -p /data1/oushudb/magma_catalog" ``` 可以在多个盘下创建元数据文件夹以提升磁盘利用率, 例如: ```bash 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" ``` 修改对应文件夹的权限信息: ```bash lava ssh -f /home/oushu/cataloghostfile -e "chown -R oushu:oushu /data1/oushudb" ``` **在数据集群中创建数据文件目录** 如果不使用 Magma 作为用户数据存储引擎,可以跳过数据目录创建步骤。 在所有的数据节点中创建数据文件夹(magma_data): ```bash lava ssh -f /home/oushu/datahostfile -e "mkdir -p /data1/oushudb/magma_data" ``` 修改对应文件夹的权限信息: ```bash lava ssh -f /home/oushu/datahostfile -e "chown -R oushu:oushu /data1/oushudb" ``` **在所有节点上创建core dump文件路径** 按照 `kernel.core_pattern` 的配置值进行创建 : ```bash 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 用户密码,密码代替 * 号: ```bash lava ssh -f ~/magmahosts -e "echo '******' | passwd --stdin oushu" ``` 在 magma1 节点上, 切换 oushu 用户并与集群节点交换key,按照提示输入相应节点的 oushu 用户密码: ```bash 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` ```bash 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 下。 ```yaml 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-parameter-tuning.md)。 `magma-site.xml`中仅包含了属性名称,属性具体的配置需要体现在`mamga-topology.yaml`中的vsc属性部分。 为了方便配置,我们提供两套关键参数配置做参考: 如果机器的内存大于 64GB,我们建议使用方案1中的元数据集群与数据集群配置, 否则使用方案二中的元数据集群与数据集群配置。 方案1: 元数据集群关键配置参考(仅需要关注对应vsc中nbuffers及以下的部分): ```yaml 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及以下的部分): ```yaml 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及以下的部分): ```yaml 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及以下的部分): ```yaml 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 ``` 在上述配置完成后,将配置文件分发到所有节点。 ```bash 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 用户执行以下操作以启动集群: ```bash magma start cluster ``` 创建元数据集群 vsc_catalog (仅需创建一次): ```bash magma create vscluster --vsc=vsc_catalog ``` 创建数据存储集群 vsc_default(如果不使用 Magma 作为数据存储,则跳过该步骤): ```bash magma create vscluster --vsc=vsc_default ``` ### 检查状态 可以通过执行 magma status 来检查 Magma 的运行状态: ```bash 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 集群启停: ```bash # 启动 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,如果您尚未添加,请参考[注册机器](../start/install-lava.md)。 在 magma1 节点 上,使用root 用户 修改/usr/local/oushu/lava/conf配置`server.json`,替换localhost为skylab的服务器ip,具体skylab的基础服务lava安装步骤请参考:[lava安装](../start/start-installation.rst)。 ``` { "server": "localhost:1612", "admin": "localhost:1652" } ``` 创建一个request文件,包含Magma cluster信息: ``` touch ~/magma-register.json ``` 编写 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配置修改): ```bash 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 -T {租户id} 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进程在机器上的状态。 ![](./images/skylabui.png)