| 项目 | 详情 |
|---|---|
| 虚拟机配置 | 6C 14G,本地 50G |
| 裸设备 | /dev/vdb 500M (DCR)<br>/dev/vdc 500M (VOTE)<br>/dev/vdd 20G (DATA)<br>/dev/vde 50G (LOG) |
| 用户/组 | dmdba:dinstall |
| DM_HOME | /home/dmdba/dmdbms |
| 节点 | IP | 实例名 | 数据库端口 | CSS端口 | ASM端口 | ASM MAL端口 |
|---|---|---|---|---|---|---|
| 节点0 | 192.168.200.208 | DSC01 | 5236 | 9341 | 9351 | 11266 |
| 节点1 | 192.168.201.128 | DSC02 | 5237 | 9342 | 9352 | 11267 |
# root 用户执行
cat > /etc/udev/rules.d/99-dsc-disks.rules << 'EOF'
KERNEL=="vdb", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="vdc", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="vdd", OWNER="dmdba", GROUP="dinstall", MODE="0660"
KERNEL=="vde", OWNER="dmdba", GROUP="dinstall", MODE="0660"
EOF
chown dmdba:dinstall /dev/vdb /dev/vdc /dev/vdd /dev/vde
chmod 660 /dev/vdb /dev/vdc /dev/vdd /dev/vde
udevadm control --reload-rules
udevadm trigger
/data/dsc_config/data/dmdata/DAMENG/data/dmdata_STB/DAMENG_STBmkdir -p /data/dsc_config
cat > /data/dsc_config/dmdcr_cfg.ini << 'EOF'
DCR_N_GRP = 3
DCR_VTD_PATH = /dev/vdc
DCR_OGUID = 453331
[GRP]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = GRP_CSS
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 65
[GRP_CSS]
DCR_EP_NAME = CSS0
DCR_EP_HOST = 192.168.200.208
DCR_EP_PORT = 9341
[GRP_CSS]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.201.128
DCR_EP_PORT = 9342
[GRP]
DCR_GRP_TYPE = ASM
DCR_GRP_NAME = GRP_ASM
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 61
[GRP_ASM]
DCR_EP_NAME = ASM0
DCR_EP_SHM_KEY = 42424
DCR_EP_SHM_SIZE = 1024
DCR_EP_HOST = 192.168.200.208
DCR_EP_PORT = 9351
DCR_EP_ASM_LOAD_PATH = /dev
[GRP_ASM]
DCR_EP_NAME = ASM1
DCR_EP_SHM_KEY = 42425
DCR_EP_SHM_SIZE = 1024
DCR_EP_HOST = 192.168.201.128
DCR_EP_PORT = 9352
DCR_EP_ASM_LOAD_PATH = /dev
[GRP]
DCR_GRP_TYPE = DB
DCR_GRP_NAME = GRP_DSC
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 57
[GRP_DSC]
DCR_EP_NAME = DSC01
DCR_EP_SEQNO = 0
DCR_EP_PORT = 5236
DCR_CHECK_PORT = 9741
[GRP_DSC]
DCR_EP_NAME = DSC02
DCR_EP_SEQNO = 1
DCR_EP_PORT = 5237
DCR_CHECK_PORT = 9742
EOF
cat > /data/dsc_config/dmasvrmal.ini << 'EOF'
[MAL_INST0]
MAL_INST_NAME = ASM0
MAL_HOST = 192.168.200.208
MAL_PORT = 11266
[MAL_INST1]
MAL_INST_NAME = ASM1
MAL_HOST = 192.168.201.128
MAL_PORT = 11267
EOF
cat > /data/dsc_config/dmdcr_node0.ini << 'EOF'
DMDCR_PATH = /dev/vdb
DMDCR_MAL_PATH = /data/dsc_config/dmasvrmal.ini
DMDCR_SEQNO = 0
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr DCR_INI=/data/dsc_config/dmdcr_node0.ini
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver /data/dmdata/DAMENG/dm.ini dcr_ini=/data/dsc_config/dmdcr_node0.ini
EOF
cat > /data/dsc_config/dmdcr_node1.ini << 'EOF'
DMDCR_PATH = /dev/vdb
DMDCR_MAL_PATH = /data/dsc_config/dmasvrmal.ini
DMDCR_SEQNO = 1
DMDCR_ASM_RESTART_INTERVAL = 0
DMDCR_ASM_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmasmsvr DCR_INI=/data/dsc_config/dmdcr_node1.ini
DMDCR_DB_RESTART_INTERVAL = 0
DMDCR_DB_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver /data/dmdata_STB/DAMENG_STB/dm.ini dcr_ini=/data/dsc_config/dmdcr_node1.ini
EOF
# 停止所有残留进程(dmdba用户)
kill -9 $(ps -ef | grep -E "dmcss|dmasmsvr|dmserver" | grep -v grep | awk '{print $2}') 2>/dev/null
# 清空磁盘头部旧签名
dd if=/dev/zero of=/dev/vdb bs=1M count=10
dd if=/dev/zero of=/dev/vdc bs=1M count=10
dd if=/dev/zero of=/dev/vdd bs=1M count=10
dd if=/dev/zero of=/dev/vde bs=1M count=10
# 初始化 DCR、Vote、ASM 磁盘
cd /home/dmdba/dmdbms/bin
./dmasmcmd << EOF
create dcrdisk '/dev/vdb' 'dcr'
create votedisk '/dev/vdc' 'vote'
create asmdisk '/dev/vdd' 'DATA0' 20480
create asmdisk '/dev/vde' 'LOG0' 51200
init dcrdisk '/dev/vdb' from '/data/dsc_config/dmdcr_cfg.ini' identified by 'Wei050210'
init votedisk '/dev/vdc' from '/data/dsc_config/dmdcr_cfg.ini'
EOF
# 启动 CSS0
nohup ./dmcss DCR_INI=/data/dsc_config/dmdcr_node0.ini > /data/dsc_logs/css0.log 2>&1 &
# 启动 CSS1
nohup ./dmcss DCR_INI=/data/dsc_config/dmdcr_node1.ini > /data/dsc_logs/css1.log 2>&1 &
sleep 5
grep "IS READY" /data/dsc_logs/css0.log && grep "IS READY" /data/dsc_logs/css1.log
# 启动 ASM0
nohup ./dmasmsvr DCR_INI=/data/dsc_config/dmdcr_node0.ini > /data/dsc_logs/asm0.log 2>&1 &
# 启动 ASM1
nohup ./dmasmsvr DCR_INI=/data/dsc_config/dmdcr_node1.ini > /data/dsc_logs/asm1.log 2>&1 &
sleep 5
ps -ef | grep dmasmsvr | grep -v grep # 确保两个ASM进程都在
./dmasmtool DCR_INI=/data/dsc_config/dmdcr_node1.ini << EOF
create diskgroup 'DMDATA' asmdisk '/dev/vdd'
create diskgroup 'DMLOG' asmdisk '/dev/vde'
EOF
cat > /data/dsc_config/dminit.ini << 'EOF'
DB_NAME = DSCDB
SYSDBA_PWD = Wei050210
SYSAUDITOR_PWD = Wei050210
SYSTEM_PATH = +DMDATA/data
SYSTEM = +DMDATA/data/SYSTEM.dbf
SYSTEM_SIZE = 1024
ROLL = +DMDATA/data/ROLL.dbf
ROLL_SIZE = 1024
MAIN = +DMDATA/data/MAIN.dbf
MAIN_SIZE = 1024
CTL_PATH = +DMDATA/data/dm.ctl
CTL_SIZE = 8
LOG_SIZE = 2048
DCR_PATH = /dev/vdb
DCR_SEQNO = 0
AUTO_OVERWRITE = 2
PAGE_SIZE = 32
EXTENT_SIZE = 16
BLANK_PAD_MODE = 1
CHARSET = 1
[DSC01]
CONFIG_PATH = /data/dmdata/DAMENG
PORT_NUM = 5236
MAL_HOST = 192.168.200.208
MAL_PORT = 61141
LOG_PATH = +DMLOG/DSC01_LOG01.log
LOG_PATH = +DMLOG/DSC01_LOG02.log
[DSC02]
CONFIG_PATH = /data/dmdata_STB/DAMENG_STB
PORT_NUM = 5237
MAL_HOST = 192.168.201.128
MAL_PORT = 61142
LOG_PATH = +DMLOG/DSC02_LOG01.log
LOG_PATH = +DMLOG/DSC02_LOG02.log
EOF
rm -rf /data/dmdata/DAMENG/* /data/dmdata_STB/DAMENG_STB/*
./dminit control=/data/dsc_config/dminit.ini
# 看到 "create dm database success" 即为成功
nohup ./dmserver /data/dmdata/DAMENG/dm.ini dcr_ini=/data/dsc_config/dmdcr_node0.ini > /data/dsc_logs/dsc01.log 2>&1 & nohup ./dmserver /data/dmdata_STB/DAMENG_STB/dm.ini dcr_ini=/data/dsc_config/dmdcr_node1.ini > /data/dsc_logs/dsc02.log 2>&1 & sleep 15
# 节点0 建表并插入
./disql SYSDBA/Wei050210@192.168.200.208:5236 << EOF
CREATE TABLE test_dsc(id INT PRIMARY KEY, name VARCHAR(50)) STORAGE(ON MAIN);
INSERT INTO test_dsc VALUES(1, 'Hello DSC');
COMMIT;
EOF
# 节点1 查询
./disql SYSDBA/Wei050210@192.168.201.128:5237 <<< "SELECT * FROM test_dsc;"
# 应返回 (1, 'Hello DSC')
# 模拟节点0故障
kill -9 $(ps -ef | grep "dmserver.*dmdcr_node0" | grep -v grep | awk '{print $2}')
# 在节点1 继续写入
./disql SYSDBA/Wei050210@192.168.201.128:5237 << EOF
INSERT INTO test_dsc VALUES(2, 'After failover');
COMMIT;
SELECT * FROM test_dsc;
EOF
# 应看到两条数据
# 重启节点0
nohup ./dmserver /data/dmdata/DAMENG/dm.ini dcr_ini=/data/dsc_config/dmdcr_node0.ini > /data/dsc_logs/dsc01.log 2>&1 &
sleep 15
./disql SYSDBA/Wei050210@192.168.200.208:5236 <<< "SELECT * FROM test_dsc;"
# 数据自动同步
| 现象 | 原因 | 解决 |
|---|---|---|
| [code: -4546] File open failure | 裸设备权限为 root | 执行 chown dmdba:dinstall 并添加 udev 规则 |
| DCRV磁盘过多 | 残留 loop 设备或旧签名 | losetup -D,dd 清空前 10MB |
| ASM 后台进程 Exit 255 | 使用普通文件模拟共享盘 | 改用真实裸设备 |
| 磁盘空间不足 (-523) | 数据文件总大小超过磁盘组容量 | 确保 DATA 磁盘组足够大(本例 20G) |
| MAIN.dbf 已存在 (-7004) | ASM 残留上次文件 | 删除并重建磁盘组,或擦除裸设备 |
文章
阅读量
获赞
