达梦数据库DM8主备集群搭建详解

  • Post author:
  • Post category:其他





安装环境


操作系统:麒麟v10, 数据库版本:达梦8.1.2.18




一、安装环境检查


注意:达梦数据库各种适配版本众多,一定要注意版本的选择。



1、查看系统位数

getconf LONG_BIT



2、查看系统版本

cat /proc/version



3、查看内核版本

uname -a

根据以上信息选择适合的版本进行安装。



二、创建数据库安装用户


为了减少对操作系统的影响,非常不建议以 root 系统用户来安装和运行达梦数据库。可以在安装之前为达梦数据库创建一个专用的系统用户。



1.创建安装用户组 dinstall

groupadd -g dinstall



2.创建安装用户 dmdba

useradd  -g dinstall -m -d /home/dmdba -s /bin/bash dmdba



3.初始化用户密码

passwd dmdba



三、检查操作系统限制


在 Linux(Unix)系统中,因为 ulimit 命令的存在,会对程序使用操作系统资源进行限制。为了使 达梦数据库能够正常运行,建议用户检查当前安装用户的 ulimit 参数。



1、系统限制检查

su - dmdba   切换到需要检查的用户
ulimit -a   检查系统限制



2、参数使用限制说明

(1)data seg size (kbytes, -d) 建议用户设置为 1048576(即 1GB)以上或 unlimited(无限制),此参数过小将导致数据库启动失败

(2)file size(blocks, -f) 建议用户设置为unlimited(无限制),此参数过小将导致数据库安装或初始化失败。

(3)open files(-n) 建议用户设置为 65536以上或 unlimited(无限制)。

(4)virtual memory (kbytes, -v) 建议用户设置为 1048576(即1GB)以上或 unlimited(无限制),此参数过小将导致数据库启动失败。



3、系统限制参数修改

追加以下信息

vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 10240
* hard nproc 10240
* soft core unlimited
* hard core unlimited



四、命令行安装数据库软件


达梦数据库的安装要求内存256以上、磁盘空间5G以上、系统盘剩余空间1G以上、临时目录/tmp需要1G以上空间

如默认临时目录空间不足可以通过环境变量切换到其他路径

mkdir -p /dm_tmp
DM_INSTALL_TMPDIR=/dm_tmp
export DM_INSTALL_TMPDIR
echo DM_INSTALL_TMPDIR



1、创建安装目录

mkdir -p /dm8
chown -R dmdba.dinstall /dm8
chmod 755 /dm8



2、授权dmdba执行安装程序

下载的安装程序拷贝到安装目录。并授权文件的可执行权限

chmod a+x DMInstall.bin



3、命令行安装数据库

./DMInstall.bin -i

弹出如下交互窗口,根据提示进行输入

请添加图片描述

在这里插入图片描述

执行完成后会提示,使用root用户执行一个shell脚本,切换到root用户运行即可。

在这里插入图片描述

此时数据库的软件已经安装完成,但是但是这时还不能使用数据库,需要创建数据库实例。



五、主备集群安装



1.集群规划

组名称 组ID
GDW1 45331
业务IP 心跳IP 实例名 实例端口 MAL端口 MAL守护进程端口 守护进程端口
172.16.1.1 192.168.1.1 DW1_01 5236 5336 5436 5536
172.16.1.2 192.168.1.2 DW1_01B 5236 5336 5436 5536
192.168.1.2 监视器 5236 5336 5436 5536

为了避免集群的心跳监测和数据同步与业务网络产生影响,在实际生产环境业务网络和心跳网络一定要采用不同的网络。



2、主库的配置

–初始化实例

/opt/dmdbms/bin/dminit path=/opt/dmdbms/data/ page_size=32 extent_size=32 CASE_SENSITIVE=N CHARSET=1  LOG_SIZE=2048 INSTANCE_NAME=DW1_01

–修改dm.ini

SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
SP_SET_PARA_VALUE (2,'MAL_INI',1);
SP_SET_PARA_VALUE (2,'ARCH_INI',1);
SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);

创建dmmal.ini 配置文件

[dmdba@~]# vi /opt/dmdbms/data/DAMENG/dmmal.ini
MAL_CHECK_INTERVAL         = 10  #MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL     = 10  #判定MAL链路断开的时间
MAL_TEMP_PATH              = /opt/dmdbms/data/malpath/  #临时文件目录
MAL_BUF_SIZE               = 512  #单个MAL缓存大小,单位MB
MAL_SYS_BUF_SIZE           = 2048  #MAL总大小限制,单位MB
MAL_COMPRESS_LEVEL         = 0  #MAL消息压缩等级,0表示不压缩


[MAL_INST1]
  MAL_INST_NAME            = DW1_01  #实例名,和 dm.ini的INSTANCE_NAME一致
  MAL_HOST                 = 192.168.1.1  #MAL系统监听TCP连接的IP地址
  MAL_PORT                 = 5336  #MAL系统监听TCP连接的端口
  MAL_INST_HOST            = 172.16.1.1  #实例的对外服务IP地址
  MAL_INST_PORT            = 5236  #实例对外服务端口,和dm.ini的PORT_NUM一致
  MAL_DW_PORT              = 5436  #实例对应的守护进程监听TCP连接的端口
  MAL_INST_DW_PORT         = 5536  #实例监听守护进程TCP连接的端口

[MAL_INST2]
  MAL_INST_NAME            = DW1_01B
  MAL_HOST                 = 192.168.1.2
  MAL_PORT                 = 5336
  MAL_INST_HOST            = 172.16.1.2
  MAL_INST_PORT            = 5236
  MAL_DW_PORT              = 5436
  MAL_INST_DW_PORT         = 5536

编辑归档配置文件

[dmdba@~]# vi /opt/dmdbms/data/DAMENG/dmarch.ini
[ARCHIVE_LOCAL]
  ARCH_TYPE                = LOCAL  #本地归档类型
  ARCH_DEST                = /opt/dmdbms/data/DAMENG/arch/  #本地归档存放路径
  ARCH_FILE_SIZE           = 1024  #单个归档大小,单位MB
  ARCH_SPACE_LIMIT         = 51200  #归档上限,单位MB
[ARCHIVE_REALTIME]
  ARCH_TYPE                = REALTIME  #实时归档类型
  ARCH_DEST                = DW1_01B  #实时归档目标实例名

创建守护进程配置文件

[dmdba@~]# vi /opt/dmdbms/data/DAMENG/dmwatcher.ini
[GDW1]
  DW_TYPE                  = GLOBAL  #全局守护类型
  DW_MODE                  = AUTO  #故障自动切换模式 
  DW_ERROR_TIME            = 20  #远程守护进程故障认定时间
  INST_ERROR_TIME          = 20  #本地实例故障认定时间
  INST_RECOVER_TIME        = 60  #主库守护进程启动恢复的间隔时间
  INST_OGUID               = 45331  #守护系统唯一OGUID值
  INST_INI                 = /opt/dmdbms/data/DAMENG/dm.ini  #dm.ini文件路径
  INST_AUTO_RESTART        = 1  #打开实例的自动启动功能
  INST_STARTUP_CMD         = /opt/dmdbms/bin/dmserver  #命令行方式启动
  RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭
  RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭

##主备之间大部分配置文件是相似的,可以通过复制主库的配置文件,在备库进行简单修改即可

[root@localhost PROD]# scp dm.ini dmarch.ini dmwatcher.ini dmmal.ini dmdba@192.168.1.2:/opt/dmdbms/data/DAMENG/

##以mount方式启动主库

[dmdba@~]# ./dmserver /opt/dmdbms/data/DAMENG/dm.ini mount

一定要以 Mount 方式启动数据库实例, 否则系统启动时会重构回滚表空间,生 成 Redo 日志; 并且,启动后应用可能连接到数据库实例进行操作,破坏主备 库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库

#启动命令行工具 DIsql

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(45331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
SQL>alter database primary;



3、备库的配置

–初始化实例

/opt/dmdbms/bin/dminit path=/opt/dmdbms/data/ page_size=32 extent_size=32 CASE_SENSITIVE=N CHARSET=1  LOG_SIZE=2048 INSTANCE_NAME=DW1_01B

#修改dm.ini,使用主库复制的配置文件,只需修改数据库实例名称

[dmdba@~]# vi /opt/dmdbms/data/DAMENG/dm.ini

INSTANCE_NAME = DW1_01B #数据库实例名

#替换dmarch.ini,使用主库复制的配置文件,只需修改实时归档目标实例名

[dmdba@~]# vi /opt/dmdbms/data/DAMENG/dmarch.ini

[ARCHIVE_LOCAL]

ARCH_TYPE = LOCAL #本地归档类型

ARCH_DEST = /opt/dmdbms/data/DAMENG/arch/ #本地归档存放路径

ARCH_FILE_SIZE = 1024 #单个归档大小,单位MB

ARCH_SPACE_LIMIT = 51200 #归档上限,单位MB

[ARCHIVE_REALTIME]

ARCH_TYPE = REALTIME #实时归档类型

ARCH_DEST = DW1_01 #实时归档目标实例名

###B机器与A机器DW1_01的dmmal.ini、dmwatcher.ini相同,无需修改

##以mount方式启动主库

[dmdba@~]# ./dmserver /dm/data/DAMENG/dm.ini mount

#启动命令行工具 DIsql

SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL>sp_set_oguid(45331);
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
SQL>alter database standby; 



4、配置监视器

创建监视器配置文件

[dmdba@~]# vi /opt/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM             = 1  #0为非确认,1为确认
MON_LOG_PATH               = ../log  #监视器日志文件存放路径
MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位MB
MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位MB

[GDW1]
  MON_INST_OGUID           = 45331  #组GDW1的唯一OGUID 值
  MON_DW_IP                = 192.168.1.1:5436  #IP对应MAL_HOST,PORT对应MAL_DW_PORT
  MON_DW_IP                = 192.168.1.2:5436

####启动各个主备库上的守护进程:

./dmwatcher /opt/dmdbms/data/DAMENG/dmwatcher.ini

####确认守护进程启动正常后,可以将守护进程加入到服务,这样开机可以服务自启动

[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /opt/dmdbms/data/DAMENG/dmwatcher.ini


备注:删除服务
[root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

####启动监视器

./dmmonitor /opt/dmdbms/bin/dmmonitor.ini

将监视器加入到服务

[root@~]# /opt/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /opt/dmdbms/bin/dmmonitor.ini


备注:删除自启
[root@~]# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor



六、配置应用连接

Linux环境:dm_svc.conf放在应用服务器/etc目录下。

Windows32环境:dm_svc.conf放在应用服务器System32目录下。

Windows64环境:dm_svc.conf放在应用服务器System32和SysWOW64目录下。

创建dm_svc.conf

[root@~]# vi /etc/dm_svc.conf
TIME_ZONE=(+8:00)
LANGUAGE=(cn)
DW1=(172.16.1.1:5236,172.16.1.2:5236)

[DW1]
LOGIN_MODE=(1)
SWITCH_TIME=(300)
SWITCH_INTERVAL=(200)

应用连接

<DRIVER>dm.jdbc.driver.DmDriver</DRIVER>
<URL>jdbc:dm://DW1</URL>



七、监视器管理常用命令

#检查指定组的指定库是否满足自动恢复条件
check recover [group_name.]db_name

#检查指定组的指定库是否满足自动Open条件
check open [group_name.]db_name

#强制Open指定组的指定库
open database [group_name.] db_name

#切换指定组的指定库为Primary库
switchover [group_name[.]] [db_name]

#使用指定组的指定库接管故障Primary库
takeover [group_name[.]] [db_name]

#使用指定组的指定库强制接管故障Primary库
takeover force [group_name[.]] [db_name]


达梦技术社区地址:https://eco.dameng.com



版权声明:本文为liuyanwei1024原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。