环境搭建

准备环境

两台主机:节点1(192.168.1.21)、节点2(192.168.1.22),神通的共享存储多主集群最多支持32个节点

在两个节点上安装数据库 /opt/ShenTong

连接在两台主机上的共享存储

共享存储裸设备

在共享存储上创建若干分区,并配置相应的裸设备,用于数据库的文件存储:

以下配置裸设备的过程仅供参考,具体操作以使用的操作系统为准。

假设 /dev/sdb 为节点1和节点2均已挂载的共享存储磁盘。在节点1和节点2分别执行以下操作:

在 /dev/sdb 上创建分区(GPT partition table): sdb1 sdb2 sdb3 sdb4 sdb5 sdb6 sdb7 sdb8 sdb9 sdb10

通过raw命令配置裸设备,写入文件 /etc/udev/rules.d/99-oscar-rac-raw.rules:

ACTION=="add" KERNEL=="sdb1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="36001405fd2ba2fe88b04374a997bc8d3", RUN+="/usr/bin/raw /dev/raw/raw1 %N"
ACTION=="add" KERNEL=="sdb2", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="36001405fd2ba2fe88b04374a997bc8d3", RUN+="/usr/bin/raw /dev/raw/raw2 %N"
ACTION=="add" KERNEL=="sdb3", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="36001405fd2ba2fe88b04374a997bc8d3", RUN+="/usr/bin/raw /dev/raw/raw2 %N"
ACTION=="add" KERNEL=="sdb4", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="36001405fd2ba2fe88b04374a997bc8d3", RUN+="/usr/bin/raw /dev/raw/raw2 %N"
ACTION=="add" KERNEL=="sdb5", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="36001405fd2ba2fe88b04374a997bc8d3", RUN+="/usr/bin/raw /dev/raw/raw5 %N"
ACTION=="add" KERNEL=="sdb6", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="36001405fd2ba2fe88b04374a997bc8d3", RUN+="/usr/bin/raw /dev/raw/raw6 %N"
ACTION=="add" KERNEL=="sdb7", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="36001405fd2ba2fe88b04374a997bc8d3", RUN+="/usr/bin/raw /dev/raw/raw7 %N"
ACTION=="add" KERNEL=="sdb8", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="36001405fd2ba2fe88b04374a997bc8d3", RUN+="/usr/bin/raw /dev/raw/raw8 %N"
ACTION=="add" KERNEL=="sdb9", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="36001405fd2ba2fe88b04374a997bc8d3", RUN+="/usr/bin/raw /dev/raw/raw9 %N"
ACTION=="add" KERNEL=="sdb10", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="36001405fd2ba2fe88b04374a997bc8d3", RUN+="/usr/bin/raw /dev/raw/raw10 %N"
ACTION=="add" KERNEL=="sdb11", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$parent", RESULT=="36001405fd2ba2fe88b04374a997bc8d3", RUN+="/usr/bin/raw /dev/raw/raw11 %N"

其中,RESULT字段是共享磁盘的UUID,可以通过以下命令查看:

/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdb

上面的内容也可以通过如下脚本生成:

for i in 1 2 3 4 5 6 7 8 9 10
do
echo "ACTION==\"add\" KERNEL==\"sdb$i\", SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$parent\", RESULT==\"`/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdb${i:0:1}`\", RUN+=\"/usr/bin/raw /dev/raw/raw$i %N\""
done;

重新加载分区:

partprobe /dev/sdb

重启服务器:

reboot

查看裸设备是否已经配置好:

ls /dev/raw

创建数据库

文件 最小空间 数量 示例分区
仲裁盘 100MB 1 /dev/raw/raw1
控制文件 100MB 1 /dev/raw/raw2
系统数据文件 100MB 1 /dev/raw/raw3
用户数据文件 100MB 1 /dev/raw/raw4
审计文件 100MB 1 /dev/raw/raw5
临时文件 100MB 1 /dev/raw/raw6
REDO日志文件 100MB 每个节点1个 节点1: /dev/raw/raw7 节点2: /dev/raw/raw9
UNDO日志文件 100MB 每个节点1个 节点1: /dev/raw/raw8 节点2: /dev/raw/raw10

在节点1上使用如下命令创建数据库,以数据库名test为例:

oscar -e "CREATE DATABASE test CONTROLFILE '/dev/raw/raw2'  DATAFILE '/dev/raw/raw3' DEFAULT DATAFILE '/dev/raw/raw4' AUDITFILE '/dev/raw/raw5' TEMPFILE '/dev/raw/raw6' LOGFILE THREAD 1 '/dev/raw/raw7' UNDO TABLESPACE UNDOTS01 DATAFILE '/dev/raw/raw8' LOGFILE THREAD 2 '/dev/raw/raw9' UNDO TABLESPACE UNDOTS02 DATAFILE '/dev/raw/raw10' RAC NODE LIST NODE '192.168.1.21' UNDO TABLESPACE UNDOTS01 LOGFILE THREAD 1,NODE '192.168.1.22' UNDO TABLESPACE UNDOTS02 LOGFILE THREAD 2 VOTEDISK '/dev/raw/raw1'"

oscar -d test -o restrict

注意:上述建库命令中的ip地址为两节点间通信的网络ip

修改配置文件

/opt/ShenTong/admin/TEST.conf

# 仲裁盘路径
VOTE_DISK_PATH='`/dev/raw/raw1`'
# 仲裁盘心跳间隔时间,单位为毫秒
VOTEDISK_HEARTBEAT_INTERVAL=1000
# 仲裁盘心跳超时次数
VOTEDISK_HEARTBEAT_OFFLINE_MAXNUM=20
# 节点间网络超时时间,单位为秒
RAC_NET_HEARTBEAT_TIMEOUT_SEC=30
# rac集群节点间通信端口
RAC_SYNC_PORT=52199
# 查询端口
PORT=2003

将节点1上的 /opt/ShenTong,复制到节点2上/opt/ShenTong,作为节点2的神通数据库实例主目录

启动共享存储多主集群

在节点1和节点2上分别运行

oscar -d test -o normal

等待出现 “Sent The Database Starting Message to Agent” 信息后,数据库启动成功,可以通过isql进行连接.

JDBC驱动连接串

JDBC驱动针对神通数据库共享存储多主集群实现了负载均衡分发连接的功能:

jdbc:oscar://192.168.1.21:2003,192.168.1.22:2003/test?loadbalance=true&failover=true

其中loadbalance参数开启负载均衡分发,通过JDBC创建连接时会将连接均匀的分配到两个节点;failover参数开启failover功能,在建立连接时,如果选取的节点连接失败,尝试连接下一个节点直至连接成功;在连接使用过程中,如果连接中断,自动重新选择节点进行连接