7--命令行部署dpc多副本架构

命令行部署dpc多副本架构步骤

和单副本架构的部署步骤大致相同,参考http://t.csdnimg.cn/jNztN
主要就是多了一个配置归档和数据备份还原的步骤6,因为多副本架构就是相当于给每个BP节点单独配置了主备系统,以防止单点故障。

本文在命令行方式下,在单台虚拟机上,部署2个BP+1个SP+1个MP 的dpc多副本架构。
其中每个BP配置2个备节点,即每个BP RAFT组都有3个节点。

因为要创建8个实例,虚拟机的内存和硬盘尽量预留充足。

1,前期准备

参考http://t.csdnimg.cn/k16E2

  1. 关闭防火墙
  2. 修改系统资源
  3. 设置网络信息,IP地址:192.168.37.101
  4. 创建安装用户和安装路径
  5. 安装dm8,安装路径为 /home/dmdba/dpc

2,创建实例

在/home/dmdba/dpc目录下创建8个实例,未指定DB_NAME库名默认为DAMENG
注意端口号不能重复

raft组名实例名inst_portap_port路径
raft_sp1SP151016101/home/dmdba/dpc/sp1
raft_bp1BP1152116211/home/dmdba/dpc/bp11
BP1252126212/home/dmdba/dpc/bp12
BP1352136213/home/dmdba/dpc/bp13
raft_bp2BP2152216221/home/dmdba/dpc/bp21
BP2252226222/home/dmdba/dpc/bp22
BP2352236223/home/dmdba/dpc/bp23
mp_raftMP53016301/home/dmdba/dpc/mp
cd /home/dmdba/dpc/bin
./dminit path=/home/dmdba/dpc/sp1 instance_name=SP1 port_num=5101 ap_port_num=6101 dpc_mode=SP

./dminit path=/home/dmdba/dpc/bp11 instance_name=BP11 port_num=5211 ap_port_num=6211 dpc_mode=BP
./dminit path=/home/dmdba/dpc/bp12 instance_name=BP12 port_num=5212 ap_port_num=6212 dpc_mode=BP
./dminit path=/home/dmdba/dpc/bp13 instance_name=BP13 port_num=5213 ap_port_num=6213 dpc_mode=BP

./dminit path=/home/dmdba/dpc/bp21 instance_name=BP21 port_num=5221 ap_port_num=6221 dpc_mode=BP
./dminit path=/home/dmdba/dpc/bp22 instance_name=BP22 port_num=5222 ap_port_num=6222 dpc_mode=BP
./dminit path=/home/dmdba/dpc/bp23 instance_name=BP23 port_num=5223 ap_port_num=6223 dpc_mode=BP

./dminit path=/home/dmdba/dpc/mp instance_name=MP port_num=5301 ap_port_num=6301 dpc_mode=MP

全部创建完成之后,可以看到对应文件夹

3,编辑配置文件mp.ini

在8个实例对应的目录创建mp.ini文件,内容相同。

vi /home/dmdba/dpc/xxx/DAMENG/mp.ini
 
# mp.ini
mp_host = 192.168.37.101        # MP所在ip
mp_port = 9000                  # 端口号

4,启动MP节点服务器

启动MP节点的dmserver服务器,并在接下来的配置过程中始终保持开启状态

cd /home/dmdba/dpc
bin/dmserver mp/DAMENG/dm.ini dpc_mode=MP

5,添加节点到集群

先登录并添加MP节点,然后添加SP、BP节点

 创建dpc集群节点的函数

# 参数说明
SP_CREATE_DPC_INSTANCE (
    RAFT_NAME     VARCHAR(128),    # RAFT组名称
    NAME          VARCHAR(128),    # 实例名称
    DPC_MODE      VARCHAR(8),      # 注册的实例类型,取值:BP、SP或MP
    AP_PORT       INT,             # AP_PORT 端口号
    INST_PORT     INT,             # 实例服务 端口号
    IP_INTER      VARCHAR(256),    # 内网IP地址
    IP_EXTER      VARCHAR(256),    # 外网IP地址,空表示内外网地址相同
    SYS MODE      VARCHAR(32),     # 主备模式,取值: NORMAL,PRIMARY,STANDBY
    STATUS        INT,             # 实例状态,1:有效;0:无效;2:表示SP为正常退出状态,可动态删除此SP实例
    DESC          VARCHAR(256)     # 描述信息
)

5.1,登录MP

disql登录MP节点,注意检查端口号

cd /home/dmdba/dpc/bin
./disql SYSDBA/SYSDBA@192.168.37.200:5301

5.2,添加MP节点

 在disql中添加当前登录的MP节点,MP的RAFT组名只能为'MP_RAFT',默认值也是。

SP_CREATE_DPC_INSTANCE('MP_RAFT','MP','MP',6301,5301, '192.168.37.101','192.168.37.101','NORMAL',1,'MP instance');

5.3,创建raft组并添加节点

创建BP类型raft组,组名为raft_bp1,向其中添加BP11、BP12、BP13节点
注意先ap_port,后inst_port,standby模式,状态0

SP_CREATE_DPC_RAFT('BP','raft_bp1');
SP_CREATE_DPC_INSTANCE('raft_bp1','BP11','BP',6211,5211, '192.168.37.101', '192.168.37.101','STANDBY',0,'BP instance');
SP_CREATE_DPC_INSTANCE('raft_bp1','BP12','BP',6212,5212, '192.168.37.101', '192.168.37.101','STANDBY',0,'BP instance');
SP_CREATE_DPC_INSTANCE('raft_bp1','BP13','BP',6213,5213, '192.168.37.101', '192.168.37.101','STANDBY',0,'BP instance');

创建BP类型raft组,组名为raft_bp2,向其中添加BP21、BP22、BP23节点
注意先ap_port,后inst_port,standby模式,状态0

SP_CREATE_DPC_RAFT('BP','raft_bp2');
SP_CREATE_DPC_INSTANCE('raft_bp2','BP21','BP',6221,5221, '192.168.37.101', '192.168.37.101','STANDBY',0,'BP instance');
SP_CREATE_DPC_INSTANCE('raft_bp2','BP22','BP',6222,5222, '192.168.37.101', '192.168.37.101','STANDBY',0,'BP instance');
SP_CREATE_DPC_INSTANCE('raft_bp2','BP23','BP',6223,5223, '192.168.37.101', '192.168.37.101','STANDBY',0,'BP instance');

创建SP类型raft组,组名为raft_sp1,向其中添加SP1节点,注意status为2
注意先ap_port,后inst_port,normal模式,状态2

SP_CREATE_DPC_RAFT('SP','raft_sp1');
SP_CREATE_DPC_INSTANCE('raft_sp1','SP1','SP',6101,5101, '192.168.37.101', '192.168.37.101','NORMAL',2,'SP instance');

5.4,创建BP组并添加raft组

创建一个BP组,组名为BG_1,并添加BP类型raft组

SP_CREATE_DPC_BP_GROUP('BG_1', 'bp group1');
SP_BP_GROUP_ADD_RAFT('BG_1', 'raft_bp1');
SP_BP_GROUP_ADD_RAFT('BG_1', 'raft_bp2');

5.5,检查一下添加的情况

select * from DPC_BP_GROUP;
select * from DPC_BP_RAFT;
select * from DPC_INSTANCE;

6,配置raft组的归档

6.1,配置BPx1的本地归档

修改dm.ini文件开启归档

vi /home/dmdba/dpc/bpx1/DAMENG/dm.ini

修改:ARCH_INI = 1

新建归档配置文件arch.ini,为防止提前开始选举,所以暂时只开启本地归档

vi /home/dmdba/dpc/bpx1/DAMENG/dmarch.ini

# dmarch.ini
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL       # 本地归档类型
ARCH_DEST = /home/dmdba/dpc/bpx1/DAMENG/arch  # 本地归档文件路径
ARCH_FILE_SIZE = 128    # 本地单个归档文件最大值, 单位MB
ARCH_SPACE_LIMIT = 0    # 本地归档文件总大小, 0表示无限制

6.2,备份还原

以下 x 表示省略的取值1、2或3

6.2.1,BPx1脱机备份

启动BPx1节点server

cd /home/dmdba/dpc/bin
./dmserver /home/dmdba/dpc/bpx1/DAMENG/dm.ini dpc_mode=BP

exit关闭server

然后使用dmrman工具生成BPx1节点的脱机的完全备份

cd /home/dmdba/dpc/bin
./dmrman CTLSTMT="BACKUP DATABASE '/home/dmdba/dpc/bpx1/DAMENG/dm.ini' FULL TO BACKUP_01 BACKUPSET '/home/dmdba/dpc/bpx1/DAMENG/bak/BACKUP_01'" USE_AP=2

会自动创建对应的文件夹

6.2.2,BPx2和BPx3脱机还原

仍使用dmrman工具,使用上一步中生成的备份对BPx2和BPx3节点进行脱机还原

cd /home/dmdba/dpc/bin
./dmrman CTLSTMT="RESTORE DATABASE '/home/dmdba/dpc/bpxx/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dpc/bpx1/DAMENG/bak/BACKUP_01'" USE_AP=2
./dmrman CTLSTMT="RECOVER DATABASE '/home/dmdba/dpc/bpxx/DAMENG/dm.ini' UPDATE DB_MAGIC" USE_AP=2

6.3,配置所有BP的raft归档

修改 dmarch.ini,配置 RAFT 归档与本地归档

同一个raft组中的3个节点,选举时间设置不同,这里取为1500、1700和2000
注意节点ID、实例名、路径要对应

# dmarch.ini
XMAL_HB_INTERVAL = 5       # 节点通信检测间隔
RAFT_HB_INTERVAL = 150     # 选举心跳间隔
RAFT_VOTE_INTERVAL = 1500  # 选举超时时间,三个库设置不同以尽快选出主库
RAFT_SELF_ID = x           # 多副本自身节点ID

[ARCHIVE_RAFT1]
ARCH_TYPE = RAFT           # RAFT归档
ARCH_DEST = BPxx           # 归档目标实例名
ARCH_DEST_ID = x           # 归档目标多副本节点ID

[ARCHIVE_RAFT2]
ARCH_TYPE = RAFT           # RAFT归档
ARCH_DEST = BPxx           # 归档目标 实例名
ARCH_DEST_ID = x           # 归档目标多副本节点ID

[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL          # 本地归档类型
ARCH_DEST = /home/dmdba/dpc/bpxx/DAMENG/arch  # 本地归档文件路径
ARCH_FILE_SIZE = 128       # 本地单个归档文件最大值, 单位MB
ARCH_SPACE_LIMIT = 0       # 本地归档文件总大小, 0表示无限制

7,启动SP、BP节点服务器

启动所有的SP和BP节点服务器,顺序随意

cd /home/dmdba/dpc/bin
./dmserver /home/dmdba/dpc/bp11/DAMENG/dm.ini dpc_mode=BP
./dmserver /home/dmdba/dpc/bp12/DAMENG/dm.ini dpc_mode=BP
./dmserver /home/dmdba/dpc/bp13/DAMENG/dm.ini dpc_mode=BP
./dmserver /home/dmdba/dpc/bp21/DAMENG/dm.ini dpc_mode=BP
./dmserver /home/dmdba/dpc/bp22/DAMENG/dm.ini dpc_mode=BP
./dmserver /home/dmdba/dpc/bp23/DAMENG/dm.ini dpc_mode=BP
./dmserver /home/dmdba/dpc/sp1/DAMENG/dm.ini dpc_mode=SP

8,登录SP节点

disql登录对外提供服务的 SP节点, 查看当前dpc集群信息

./disql SYSDBA/SYSDBA@192.168.37.101:5101

select * from v$instance;
select * from V$dm_ini where para_name='DPC_MODE' and sf_get_ep_seqno(rowid)=SF_GET_SELF_EP_SEQNO;
select * from DPC_INSTANCE;

MP、SP、BP 全部正常启动,且均处于 OPEN 状态,则搭建成功

9,关闭集群

使用 exit 命令退出 DMDPC 需要按照正确的顺序有序进行,按照如下顺序:

退出 SP -> 退出 BP -> 退出 MP

必须按照顺序 exit 退出,否则可能引起宕机

10,补充

因为要初始化多个实例,所以创建虚拟机的时候把硬盘空间预留充足一点,不然会报错,如果不想重建虚拟机重新开始,可以通过vmware扩展磁盘然后继续部署,参考http://t.csdnimg.cn/jhuaG

社区地址:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

你提供的是一组使用 Clang 编译器工具链(LLVM)来编译 CUDA 风格代码的命令,目标是将 `dpc_t.cu` 编译成一个包含 GPU 二进制和主机端逻辑的可执行程序。我们逐条分析这些命令是否正确。 --- ### **步骤解析与问题分析** #### 1. 生成 LLVM IR(中间表示) ```bash clang++ -S -emit-llvm --cuda-gpu-arch=ivcore10 --cuda-device-only -std=c++11 -Wall -x ivcore dpc_t.cu -o dpc.ll ``` - `-S -emit-llvm`: 生成 LLVM IR 汇编代码。 - `--cuda-gpu-arch=ivcore10`: 假设这是你自定义的 GPU 架构名称(类似 sm_50 或 gfx906)。 - `--cuda-device-only`: 只处理设备端代码。 - `-x ivcore`: 表示输入文件是 CUDA 风格的 `.cu` 文件。 - ✅ 这个命令用于提取设备端的 LLVM IR,是正确的。 #### 2. 使用 llc 将 LLVM IR 编译为对象文件 ```bash llc -march=bi -filetype=obj dpc.ll -o dpc.cuda.o ``` - `-march=bi`: 指定目标架构为 bi(可能是你自定义的 backend)。 - `-filetype=obj`: 输出为对象文件。 - ✅ 正确,前提是 `bi` 是支持的后端,并能处理前面生成的 IR。 #### 3. 使用 lld 链接设备端对象文件为 cubin ```bash lld -flavor ld.lld --no-warn-missing-entry - -no-undefined dpc.cuda.o -o dpc.cubin ``` - `-flavor ld.lld`: 使用 LLD 的链接器。 - `--no-warn-missing-entry`: 不警告缺少入口点。 - `-no-undefined`: 不允许未定义符号。 - ⚠️ 问题:这里 `-` 参数似乎多余或错误,可能应删除。 - 否则整体是合理的,用于将设备端对象链接为 `.cubin`。 #### 4. 使用 fatbinary 打包 fatbin ```bash fatbinary --cuda --64 --image=profile=ivcore10,file=dpc.cubin --create dpc.fatbin ``` - `fatbinary` 是 NVIDIA 工具,用于打包多个 GPU 架构的目标。 - `--cuda --64`: 64位 CUDA 构建。 - `--image=...`: 指定构建配置和文件。 - ✅ 如果 `fatbinary` 支持你自定义的 `ivcore10` 架构,这个命令是正确的。 #### 5. 编译主机端代码并嵌入 GPU 二进制 ```bash clang++ -c -std=c++11 -Wall -x ivcore --cuda-host-only -Xclang -fcuda-include-gpubinary -Xclang dpc.fatbin dpc_t.cu -o dpc.o ``` - `--cuda-host-only`: 只处理主机端代码。 - `-Xclang -fcuda-include-gpubinary`: 嵌入 GPU 二进制到最终可执行文件中。 - ✅ 正确地将 GPU 二进制嵌入到主机端对象中。 #### 6. 编译 C++ 主程序 ```bash clang++ -c -std=c++11 -Wall -x c++ -I/usr/local/corex/include dpc.cpp -o dpc.cpp.o ``` - `-x c++`: 强制作为 C++ 编译。 - `-I/usr/local/corex/include`: 添加头文件路径。 - ✅ 标准的 C++ 编译步骤,没问题。 #### 7. 最终链接阶段 ```bash clang++ -std=c++11 -Wall -x ivcore -lcudart -L/usr/local/corex/lib64 dpc.o dpc.cpp.o -o dpc ``` - `-lcudart`: 链接 CUDA 运行时库。 - `-L/usr/local/corex/lib64`: 添加库搜索路径。 - ❗**问题**:缺少了 `-Xclang -fcuda-include-gpubinary` 参数,导致 GPU 二进制没有被正确链接进最终可执行文件。 - ❗**问题**:`-x ivcore` 在链接阶段意义不大,应该去掉。 --- ### ✅ 正确流程建议 以下是修正后的完整命令: ```bash # Step 1: 提取设备端 LLVM IR clang++ -S -emit-llvm --cuda-gpu-arch=ivcore10 --cuda-device-only -std=c++11 -Wall -x cuda dpc_t.cu -o dpc.ll # Step 2: 编译为设备端对象文件 llc -march=bi -filetype=obj dpc.ll -o dpc.cuda.o # Step 3: 链接设备端对象文件为 cubin lld -flavor ld.lld --no-warn-missing-entry -no-undefined dpc.cuda.o -o dpc.cubin # Step 4: 打包为 fatbin fatbinary --cuda --64 --image=profile=ivcore10,file=dpc.cubin --create dpc.fatbin # Step 5: 编译主机端代码并嵌入 GPU 二进制 clang++ -c -std=c++11 -Wall -x cuda --cuda-host-only -Xclang -fcuda-include-gpubinary -Xclang dpc.fatbin dpc_t.cu -o dpc.o # Step 6: 编译主程序 clang++ -c -std=c++11 -Wall -x c++ -I/usr/local/corex/include dpc.cpp -o dpc.cpp.o # Step 7: 最终链接 clang++ -std=c++11 -Wall -Xclang -fcuda-include-gpubinary -Xclang dpc.fatbin dpc.o dpc.cpp.o -lcudart -L/usr/local/corex/lib64 -o dpc ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值