搭建前的细节要求和注意事项
1.DM 数据库不应该使用 root 用户安装和维护。需要在安装之前为 DM 数据库创建一个专用的系统用户 (dmdba) 和用户组 (dinstall)。
2.数据库实例 监听端口为5236,MAL 系统监听 TCP 连接的端口为61141,实例本地的守护进程监听 TCP 连接的端口为52141,实例监听守护进程 TCP 连接的端口为33141.防火墙集群之间需开放以上所有端口,集群对客户端只需要开通数据库实例监听端口。
3.守护进程配置自动切换时,必须在监视器服务器上配置确认监视器,并且保证网络高可用。
修改与单机不同之处
DM 数据库安装在 Linux 操作系统所需条件:glibc 2.3 以上,内核 2.6,预先安装 UnixODBC,系统性能监控等组件。
与搭建单机达梦数据库操作一样,需要注意的是用户的资源限制:
vim /etc/security/limits.conf
#加入一下几行配置要求
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft stack 65536
dmdba hard stack 65536
core:限制内核文件的大小
nofile:打开文件的最大数目,一般设置为最大,即65536
stack:最大栈大小,栈是一种数据读取处理的结构,当把数据放入栈时,我们把数据push进入;当从栈取出数据时,我们把数据pop出来。栈随着数据被压入或者弹出而增长或者减小。
nproc:进程的最大数目,也就是系统最大的进程数
注意初始化实例的参数配置:
./dminit path=/dmdata db_name=dmrw page_size=32
#注意path和db_name的使用
上图代码中所展示的目录结构为 /dmdata/dmrw/
如果没有声明db_name那么安装目录下就会多出一个DAMENG的文件夹。
./dminit path=/dmdata/dmrw page_size=32
目录结构为/dmdata/dmrw/DAMENG/
其实也就是没有指定db_name时默认名称为DAMENG,path只是起到指定路径的作用,我们采用一种写法,自定义指定db_name。
初始化实例完成之后在进行主库的脱机备份,这里需要注意两点:1.确认DMAP已经启动2.确认数据库实例已经关闭,在进行脱机备份之前要将实例先启动一次,然后再关闭。
主库的脱机备份
确保DMAP已经启动,若未启动,则先启动 DMAP 服务,dmdba 到安装目录的 bin 下执行以下命令:
./DmAPService start
关闭数据库实例后,使用DMRMAN工具做脱机备份,同样是位于bin下:
backup database '/dmdata/dmrw/dm.ini' backupset '/dmbak/bakfull';
这里要先创建/dmbak目录并且把权限都交给dmdba。
这里会遇到一个常见的问题,在备份可能提示归档不完整或者归档不连续,以下是自用的解决方法
用repair对database做归档修复,必须关闭数据库服务。
1.通过ps -ef | grep dmserver找到pid号,kill -9 杀死进程。
2.进入DMRMAN执行修复语句
repair archivelog database ‘/dmdata/dmrw/dm.ini’;
3.执行完语句会报错“[-8351]:目标库未开启或者未配置归档”,这时就要先跳过脱机备份这一步,进入配置文件环节因为不开启归档无法修复,所以需要进入dm.ini开启归档ARCH_INI=1,MAL_INI=1,再创建归档文件夹,接着配置dmarch.ini,dmmal.ini重启服务器再关闭,关于配置文件书写可以跳到后文。
4.之后再执行repair语句,接着开启数据库并进入执行sql语句
backup database full to "DMDB_bak" backupset 'DMDB_bak';
#注意前的DMDB_bak要用双引号指备份名,后面的DMDB_bak表示文件名
5. 之后执行脱机备份就可以成功了,在/dmbak下会有bakfull文件夹,需要将这个文件夹传到备库上,备库上提前创建/dmbak,同样赋予dmdba权限。
scp -r /dmbak/bakfull 备库ip:/dmbak
接下来是备库的操作:
restore database '/dmdata/dmrw/dm.ini' from backupset '/dmbak/bakfull';
recover database '/dmdata/dmrw/dm.ini' from backupset '/dmbak/bakfull';
recover database '/dmdata/dmrw/dm.ini' update db_magic;
#三条语句依次分开执行
restore是将备份文件拷贝到数据库目录下进行替换,就是还原已备份的文件,recover就是将文件重新读取进数据库。
配置实例dm.ini文件
这里将主库的实例名叫做dmrw1,备库的实例名叫dmrw2,进入dm.ini仅修改以下参数,其他的参数不动,搜索方式举例:用vim进入文件可以用‘/INSTANCE’快速定位到关键词
#主库配置文件的操作
INSTANCE_NAME = dmrw1 #实例名
MAL_INI = 1 #是否开启MAL系统:是
ARCH_INI = 1 #是否开启实例:是
ALTER_MODE_STATUS = 0 #是否允许用户修改数据库状态:否
ENABLE_OFFLINE_TS = 2 #是否允许备份:禁止备库,其余操作允许
#备库配置文件的操作
INSTANCE_NAME = dmrw2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
对所做修改创建对应的配置文件和目录
创建归档配置文件dmarch.ini
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = dmrw2 #实时归档目标实例名(主库填写备库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmarch/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 10240 #单位 MB,0 表示无限制,范围 1024~4294967294 MB
注意实例名的填写,主库文件填备库实例名,备库文件填主库实例名
配置MAL系统配置文件dmmal.ini
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = dmrw1 #与 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.1.10 #MAL 系统监听 TCP 内部网络 IP
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.1.10 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = dmrw2 #与 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.1.11 # MAL 系统监听 TCP 内部网络 IP
MAL_PORT = 61142 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.1.11 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52142 #实例对应的守护进程监听 TCP 端口
MAL_INST_DW_PORT = 33142
在虚拟机上搭建可以直接把防火墙打开不需要设置访问限制,否则在监视器收不到守护进程发的信息。配置MAL系统配置文件要注意端口的设置,出现了实例和守护进程统统无法前台运行的情况,解决方法就是把主库和备库的端口做区分,避免内部的冲突。
配置守护进程配置文件dmwatcher.ini:
[GRP_RW]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dmdata/dmrw/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
启动数据库实例进行配置
#主备都执行
./dmserver /dmdata/dmrw/dm.ini mount 以配置状态运行数据库实例
./disql SYSDBA/SYSDBA
sp_set_oguid(453331);
#主库执行
alter database primary; #设置为主库
#备库执行
alter database standby; #设置为备库
配置完成后启动守护进程 :(守护进程启动后,自动将实例状态改为open,不需要手动操作)
./dmwatcher /dmdata/dmrw/dmwatcher.ini
配置确认监视器
在配置监视器时还是注意前面修改了主库的开放端口,如果端口不对监视器无法收到数据库的信息,启动监视器后能看到两台机器,一个primary,一个standby就表示能够检测到集群主机了。监视器是分为两种模式,监控模式和确认模式,他们的区别在于确认模式拥有状态确认和自动接管两个功能,可以在某台数据库发生宕机时自动切换主备,主库发生故障,监视器将备库切为priamry,避免引发”脑裂“,也就是守护进程组中出现多个主库。
在主备服务器之外的服务器上操作(需要安装DM)
配置监视器配置文件/dmdata/dmmonitor_auto.ini:
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /dmdata/dmmonitor_auto/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP_RW]
MON_INST_OGUID = 453331 #组 GRP_RW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.1.10:52141
MON_DW_IP = 192.168.1.11:52142
注意主备库ip和端口,启动监视器:
./dmmonitor /dmdata/dmmonitor_auto.ini
使用show来查看集群状态,其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 REALTIME,归档状态 RSTAT 为VALID。
客户端验证
登录主库,创建表,插入数据;登录备库查看数据。
./disql SYSDBA/SYSDBA@192.168.56.11:5236
create table test(id int);
insert into test values (1);
commit;
修改表后要记得commit否则备库收不到主库的更改。在备库里select * from test能够看数据说明集群搭建成功。
重启集群需要注意顺序要求
关闭监视器-->关闭主库守护进程-->关闭备库守护进程-->关闭主库实例-->关闭备库实例-->启动主库实例-->启动备库实例-->启动主库守护进程-->启动备库守护进程-->启动监视器.
在搭建集群时有可能会出时间不同步导致出错解决方法如下:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ,覆盖文件后使用date查看当前系统时间
关于技术交流分享请关注社区:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台