一、集群搭建
1.1 部署规划
读写分离集群适合读多写少的应用环境。
IP规划:
主机名 | 服务ip | 心跳ip | 数据库名 | 实例名 |
DMSERVER01 | 192.168.254.134 | 10.0.0.*** | dmdb | rw1 |
DMSERVER02 | 192.168.254.135 | 10.0.0.*** | dmdb | rw2 |
目录规划:(在对应服务器上创建目录owner为dmdba组为dinstall)
数据库软件安装目录 | /dm/dmdbms/bin |
实例安装目录 | /dm/dmdata |
归档日志存放目录 | /dm/dmarch |
备份文件存放目录 | /dm/dmbak |
1.2 数据库软件安装
同DM8单机简易部署,执行到执行DMInstall.bin安装即可
1.3 初始化实例
2个节点完成实例初始化
cd /dm/dmdbms/bin
./dminit path=/dm/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=DMSERVER instance_name=rw1 PORT_NUM=3300 CASE_SENSITIVE=N CHARSET=1 LENGTH_IN_CHAR=1 BLANK_PAD_MODE=0 SYSDBA_PWD="SYSDBA" SYSAUDITOR_PWD="SYSDBA" ELOG_PATH=/dm/dmdbms/log/slog
./dminit path=/dm/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=DMSERVER instance_name=rw2 PORT_NUM=3300 CASE_SENSITIVE=N CHARSET=1 LENGTH_IN_CHAR=1 BLANK_PAD_MODE=0 SYSDBA_PWD="SYSDBA" SYSAUDITOR_PWD="SYSDBA" ELOG_PATH=/dm/dmdbms/log/slog
以主机DMSERVER01为读写分离主库,启动实例
到 /dm/dmdbms/bin
./dmserver /dm/dmdata/DMSERVER/dm.ini
出现system is ready后输入exit停止数据库。
1.4 脱机备份数据库
在主机DMSERVER01上执行以下命令,确认主库 dmap 服务已启动:
ps -ef|grep dmap
若未启动,则先启动 DMAP 服务,dmdba 到安装目录的 bin 下执行以下命令:
./DmAPService start
dmdba用户 启动dmrman工具
dmrman use_ap=2
执行 backup 全库:
backup database '/dm/dmdata/DMSERVER/dm.ini' backupset '/dm/dmbak/bakfull';
将数据库目录和备份文件从节点01分别拷贝到每个节点上
scp -P 22 -r /dm/dmdata/dmdb 192.168.254.135:/dm/dmdata
scp -P 22 -r /dm/dmbak/bakfull 192.168.254.135:/dm/dmbak
1.5 备份还原备库
将备份的文件/dm/dmdba/bakfull拷贝到另外一台服务器上。
在主机DMSERVER02上
使用 dmrman 工具还原备库,dmdba 用户执行:
dmrman use_ap=2
进入dmrman工具交互界面
执行 restore:
restore database '/dm/dmdata/DMSERVER/dm.ini' from backupset '/dm/dmbak/bakfull';
完成后执行 recover:
recover database '/dm/dmdata/DMSERVER/dm.ini' from backupset '/dm/dmbak/bakfull';
最后执行 recover update db_magic。
recover database '/dm/dmdata/DMSERVER/dm.ini' update db_magic;
1.6 修改dm.ini参数
所有节点都要修改
执行以下命令:
vi /dm/dmdata/DMSERVER/dm.ini
主库DMSERVER01上修改以下参数值:
INSTANCE_NAME = rw1
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
备库DMSERVER02上修改以下参数值:
INSTANCE_NAME = rw2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
1.7 配置归档配置文件 dmarch.ini
在实例目录下新建文件 dmarch.ini,执行以下命令:
vi /dm/dmdata/DMSERVER/dmarch.ini
REALTIME自动切换模式下
需要指定ARCH_WAIT_APPLY=1保证主备事务一致:
在实例目录下新建文件 dmarch.ini,执行以下命令:
vi /dm/dmdata/DMSERVER/dmarch.ini
主库DMSERVER01上添加以下内容:
ARCH_WAIT_APPLY=1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = rw2
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 76800
备库DMSERVER02上添加以下内容:
ARCH_WAIT_APPLY=1
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = rw1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/dmarch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 76800
1.8 配置MAL系统配置文件 dmmal.ini
在实例目录下新建文件 dmmal.ini,执行以下命令。
vi /dm/dmdata/DMSERVER/dmmal.ini
主备库2个节点文件内容要相同。
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 15
[MAL_INST1]
MAL_INST_NAME = rw1
MAL_HOST = 192.168.254.134
MAL_PORT = 3301
MAL_INST_HOST = 192.168.254.134
MAL_INST_PORT = 3300
MAL_DW_PORT = 3302
MAL_INST_DW_PORT = 3303
[MAL_INST2]
MAL_INST_NAME = rw2
MAL_HOST = 192.168.254.135
MAL_PORT = 3301
MAL_INST_HOST = 192.168.254.135
MAL_INST_PORT = 3300
MAL_DW_PORT = 3302
MAL_INST_DW_PORT = 3303
1.9 配置守护进程配置文件 dmwatcher.ini
在实例目录下新建文件 dmwatcher.ini,执行以下命令:
vi /dm/dmdata/DMSERVER/dmwatcher.ini
主备库3节点文件内容要相同。
[GRP_RW]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 30
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 20
INST_OGUID = 202269
INST_INI = /dm/dmdata/dmdb/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver
以 mount 方式启动数据库实例
使用 dmdba 用户,执行以下命令(主备库都执行):
dmserver /dm/dmdata/DMSERVER/dm.ini mount (无需关闭)
在新的终端使用 disql 工具连接数据库:
./disql SYSDBA/SYSDBA@192.168.254.134:3300
主备库都修改 oguid,执行以下命令:
sp_set_oguid(202269);
主库DMSERVER01上修改数据库模式为 primary,执行以下命令:
alter database primary;
备库DMSERVER02上修改数据库模式为 standby,执行以下命令:
alter database standby;
启动守护进程dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):
./dmwatcher /dm/dmdata/DMSERVER/dmwatcher.ini
守护进程启动后,会将 Mount 的实例 Open。启动监视器守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。
新建确认监视器配置文件 dmmonitor.ini,执行以下命令:
vi /dm/dmdbms/bin/dmmonitor.ini
添加以下内容:
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 200
MON_LOG_SPACE_LIMIT = 1024
[GRP_RW]
MON_INST_OGUID = 202269
MON_DW_IP = 192.168.254.134:3302
MON_DW_IP = 192.168.254.135:3302
执行以下命令,启动监视器。
./dmmonitor /home/dmdba/dmdbms/bin/dmmonitor.ini
启动后输入 show 命令查看集群状态。
二、 注册服务
以上启动为前台方式启动,仅用户搭建过程中验证配置。配置没问题后需要将实例,守护进程和确认监视器注册为系统服务。
使用 root 用户,到数据库安装目录的script/root下。
cd /dm/dmdbms/script/root
注册守护进程服务(主备库都执行)。
./dm_service_installer.sh -t dmwatcher -p rw -watcher_ini /dm/dmdata/DMSERVER/dmwatcher.ini
注册数据库实例服务(主备库都执行):
./dm_service_installer.sh -t dmserver -p rw -dm_ini /dm/dmdata/DMSERVER/dm.ini
以服务方式启动
执行以下命令,启动数据库实例:(无法启动-可能是前台启动未退出,只能杀掉进程)
systemctl start DmServicerw
执行以下命令,启动守护进程:
systemctl start DmWatcherServicerw
注册监视器服务:
使用 root 用户,到数据库安装目录的script/root下。
./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini
以服务方式启动监视器服务
执行以下命令,启动数据库实例:
systemctl start DmMonitorServiceconfirm
2.1 验证主备集群同步状态
监视器查看读写分离集群状态
集群任意节点,配置普通监视器配置文件 dmmonitor.ini,执行以下命令:
vi /dm/dmdata/DMSERVER/dmmonitor.ini
添加以下内容:
MON_DW_Confirm = 0
MON_LOG_PATH = /dm/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP_RW]
MON_INST_OGUID = 202269
MON_DW_IP = 192.168.254.134:3302
MON_DW_IP = 192.168.254.135:3302
执行以下命令,启动监视器:
./dmmonitor /dm/dmdata/DMSERVER/dmmonitor.ini
输入 show 命令查看集群状态:
其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 REALTIME,归档状态 RSTAT 为VALID。
isql 客户端验证
使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令:
./disql SYSDBA/SYSDBA@192.168.254.134:3300
SQL 提示符下执行以下命令:
create table test(id int);insert into test values (1);
commit;
使用 disql 客户端登录备库,查询测试表验证,执行以下命令:
./disql SYSDBA/'""'@localhost:3300
SQL 提示符下执行以下命令:
select * from test;
达梦数据库实例状态为 MOUNT 。AnyBackup 备份达梦数据库是以热备份的形式备份的,需要达梦数据库为 OPEN 状态。
解决方案
为了解决此问题,需要将对应的达梦数据库实例状态调整为 OPEN ,请按照以下步骤执行:
1.以达梦数据库安装用户登录达梦数据库所在服务器的操作系统;
2.执行以下命令并输入 sysdba 用户的密码,登录达梦数据库:
disql sysdba
3.执行以下命令,启动达梦数据库到 OPEN 状态:
ALTER DATABASE OPEN;
4.使用操作员登录 AnyBackup 管理控制台,再次发起备份任务。
2.2 配置sql日志
所有节点修改sqllog.ini
到实例路径下
vi /dm/dmdata/DMSERVER/sqllog.ini
BUF_TOTAL_SIZE = 10240
BUF_SIZE = 1024
BUF_KEEP_CNT = 6
[SLOG_ALL]
FILE_PATH = /dm/dmdbms/log/slog
PART_STOR = 1
SWITCH_MODE = 2
SWITCH_LIMIT = 512
ASYNC_FLUSH = 1
FILE_NUM = 5
ITEMS = 0
SQL_TRACE_MASK = 2:3:25
MIN_EXEC_TIME = 1500
USER_MODE = 0
USERS =
2.3 启动服务
重启集群(参数修改后需要重启集群)
读写分离集群重启:
关闭确认监视器:systemctl stop DmMonitorServiceconfirm
关闭备库守护进程:systemctl stop DmWatcherServicerw
关闭主库守护进程:systemctl stop DmWatcherServicerw
关闭主库实例:systemctl stop DmServicerw
关闭备库实例:systemctl stop DmServicerw
启动备库实例:systemctl start DmServicerw
启动主库实例:systemctl start DmServicerw
启动主库守护进程:systemctl start DmWatcherServicerw
启动备库守护进程:systemctl start DmWatcherServicerw
启动确认监视器:systemctl start DmMonitorServiceconfirm