达梦数据库主备集群----高性能模式—搭建
环境描述
操作系统信息及服务器信息
服务器IP:10.4.33.2,10.4.33.3
达梦数据库版本:测试环境使用的DM8开发版
达梦服务相关路径
安装目录:/dm/dmdbms
数据目录:/dm/dmdata/
归档目录:/dm/dmarch/
备份目录:/dm/dmbak/
挂载目录:/mnt/dm/
达梦服务使用的用户及组名:dmdba:dinstall
服务分布情况:
主库ip:10.4.33.2
备库ip:10.4.33.3
监视器IP:暂无
单实例安装
操作系统
以Linux系统安装为例,glibc 2.3 以上,内核 2.6,预先安装 UnixODBC,系统性能监控等组件。
服务器硬件要求
按实际业务需求,选择合适的服务器,参考如下:
硬件 | 要求 |
---|---|
物理内存 | >= 16 GB |
交换区 | Swap 空间>=物理内存 |
/tmp大小 | > 1000 MB |
网络 | 物理机器需要 2 个网卡,2 个网卡做 band(实际安装过程只使用一个网卡) |
磁盘 | 根据实际应用系统需要挂载合适大小磁盘 |
时间服务器 | 按机房要求配置连接时间服务器 |
用户与组
DM 数据库不应该使用 root 用户安装和维护。需要在安装之前为 DM 数据库创建一个专用的系统用户 (dmdba) 和用户组 (dinstall)。
执行以下命令,新建用户组 dinstall:
groupadd dinstall
复制
执行以下命令,新建用户 dmdba:
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
复制
执行以下命令,修改 dmdba 用户密码:
passwd dmdba
复制
输入密码并确认,由于环境限制,本次搭建过程的dmdba没有密码。
系统参数设置
1.1.1 调整 sysctl.conf
[root@~]# vi /etc/sysctl.conf fs.file-max = 6815744 fs.aio-max-nr = 1048576 kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 4194304 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 vm.overcommit_memory = 0 vm.swappiness = 0 vm.dirty_background_ratio = 3 vm.dirty_ratio = 80 vm.dirty_expire_centisecs = 500 vm.dirty_writeback_centisecs = 100 [root@~]# sysctl -p [root@~]# sysctl -p /etc/sysctl.conf [root@~]# sysctl -q vm.swappiness
复制
1.1.2 调整 limits.conf
[root@~]# ulimit -n65536 [root@~]# vi /etc/security/limits.conf * soft nice 0 * hard nice 0 * soft as unlimited * hard as unlimited * soft fsize unlimited * hard fsize unlimited * soft nproc 65536 * hard nproc 65536 * soft nofile 65536 * hard nofile 65536 * soft core unlimited * hard core unlimited * soft data unlimited * hard data unlimited [root@~]# vi /etc/security/limits.d/90-nproc.conf * soft nproc 65536 [root@~]# vi /etc/profile ulimit -SHn 65536
复制
1.1.3 调整 login
[root@~]# vi /etc/pam.d/login session required /lib64/security/pam_limits.so session required pam_limits.so
复制
1.1.4 关闭 selinux
[root@~]# vi /etc/sysconfig/selinux SELINUX = disabled
复制
1.1.5 磁盘调度
cat /sys/block/sdb/queue/scheduler --查看当前的调度方法 lsbl --查看实际挂载盘 k dmesg | grep -i scheduler --查看支持的调度方法 echo deadline > /sys/block/sda/queue/scheduler --临时更改调度方法 永久修改: CentOS7: grubby --update-kernel=ALL --args="elevator=deadline" reboot cat /sys/block/sda/queue/scheduler noop [deadline] cfq CentOS6: vim /boot/grub/menu.lst 更改到如下内容: ## 在 rhgb quiet 前添加 elevator=deadline kernel /boot/vmlinuz-2.6.32-504.el6 ro root=LABEL=/ elevator=deadline rhgb quiet
复制
1.1.6 numa 检查
dmesg | grep -i numa grep -i numa /var/log/dmesg cat /proc/cmdline vi /etc/default/grub --关闭 numa和透明大页 在 GRUB_CMDLINE_LINUX后添加 numa=off transparent_hugepage=never 重新引导: grub2-mkconfig -o /etc/grub2.cfg --重启生效
复制
1.1.7 透明大页检查
cat /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/enabled --临时 关闭 vi /etc/default/grub --关闭 numa和透明大页 在 GRUB_CMDLINE_LINUX后添加 numa=off transparent_hugepage=never 重新引导: grub2-mkconfig -o /etc/grub2.cfg --重启生效
复制
统信系统关闭大页和NUMA
系统版本:UnionTech OS SERVER 20 1050 e
关闭参数添加位置在1.1.6与1.1.7中相同 在引导这步不同 find / -name grub.cfg ---find 找到的文件:/boot/efi/EFI/uos/grub.cfg grub2-mkconfig -o /boot/efi/EFI/uos/grub.cfg reboot 生效
复制
1.1.8 RemoveIPC 参数设置
使用麒麟 v10 SP1版本时,需要检查 RemoveIPC参数设置,要求为 no,否则将 会出现数据库信号量丢失的情况。 --------检查 RemoveIPC 参数设置 要求为 no systemctl show systemd-logind | grep -i removeipc --------如果不是 no,用以下方法调整, 修改/etc/systemd/logind.conf配置文件中的 RemoveIPC参数,将#注释去 掉,并修改 yes为 no, 重启服务 systemctl daemon-reload;systemctl restart systemd-logind
复制
1.1.9 ARENA 参数
请大家注意关于上线规范里的 ARENA参数未来要按 4进行配置,方法在数据库 服务启动目录中加入如下内容: vi DmServiceDW1_01 export MALLOC_ARENA_MAX=4
复制
用户环境变量设置
执行以下命令,修改 dmdba 用户环境变量:
vi /home/dmdba/.bash_profile
复制
文件末尾添加如下内容:
export DM_HOME=/dm/dmdbms export PATH=$PATH:$DM_HOME/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
复制
防火墙设置
生产环境应该对特定客户端开放数据库监听端口,并修改 DM 数据库默认的 5236 监听端口。
上传安装包,安装数据库软件
将安装包上传到服务器后使用 root 用户挂载 iso 安装包文件到 /mnt
或者其他可挂载目录下:
mount -oloop dm8_20211026_FTarm_kylin10_64_sp1_ent_8.1.2.84.iso /mnt
复制
切换至dmdba用户下,使用su 命令或者使用dmdba用户登录服务器
采用su方式
su - dmdba
复制
切换至/mnt目录下
cd /mnt/dm
复制
执行安装脚本
./DMInstall.bin -i
复制
选择安装程序的语言 c/C 为中文,e/E 为英文。
提示是否安装 key 文件,输入 N 跳过。
选择时区,21 即东 8 区。
选择安装类型,默认典型安装(包含所有内容)。
选择软件安装目录,为之前规划的目录
/dm/dmdbms
。确认安装目录。
确认安装概要。
开始安装。
安装完成后,会提示使用root用户执行以下脚本
/dm/dmdbms/script/root/root_installer.sh
复制
提示“启动DmAPServicee服务”,则安装完成
使用dminit工具初始化实例
初始化需求:大小写不敏感、兼容oracle、字符集UTF-8(兼容参数后期可以手动改,也可以直接修改dm.ini再重启)
切换至dmdba用户下,并切换至DM8的bin目录下
--10.4.33.2 cd /dm/dmdbms/bin ./dminit path=/dm/dmdata/ CHARSET=1 CASE_SENSITIVE=0 PAGE_SIZE=32 DB_NAME=dmms INSTANCE_NAME=dmms01 PORT_NUM=5236 log_size=2048 --10.4.33.2 cd /dm/dmdbms/bin ./dminit path=/dm/dmdata/ CHARSET=1 CASE_SENSITIVE=0 PAGE_SIZE=32 DB_NAME=dmms INSTANCE_NAME=dmms02 PORT_NUM=5236 log_size=2048
复制
初始参数说明
初始化参数中除了 path 参数必须指定,其它参数都有默认值,如果需求与默认值不同,初始化的时候请指定需要的值。因为部分参数初始化后是无法修改的例如:page_size(页大小),charset(字符集),case_sensitive(大小写敏感)等。更多参数./dminit help 查看,是否无法修改的参数可以查询 v$dm_ini 视图,para_type=’READ ONLY’ 表示无法修改。
复制
注册服务
root用户下,切换至/dm/dmdbms/script/root/
cd /dm/dmdbms/script/root/
复制
执行以下命令注册服务
--10.4.33.2 ./dm_service_installer.sh -t dmserver -p climb -dm_ini /dm/dmdata/climb/dm.ini --10.4.33.3 ./dm_service_installer.sh -t dmserver -p climb -dm_ini /dm/dmdata/climb/dm.ini #说明:-t 指服务类型是 dmserver;-p 为服务名的后缀;-dm_ini 为实例的 dm.ini 文件的绝对路径。
复制
服务名为 DmService+-p
参数后的内容,即 DmServicedmserver
。
启动、关闭实例
su - dmdba cd /dm/dmdbms/bin --启 ./DmServiceclimb start --停 ./DmServiceclimb stop
复制
主备集群搭建
基本安装信息可参考官网中单实例安装,以下为主备的端口配置
防火墙设置
端口规划
搭建 2 节点主备集群,端口规划如下:(实际中可以按需要修改端口号)
主机名 | public ip | private ip | 实例名 | 端口 | 用途 |
---|---|---|---|---|---|
dmdsc1 | 10.4.33.2 | 10.4.33.2 | CLIMB01 | 5236 | 数据库实例 CLIMB01 监听端口 |
dmdsc1 | 10.4.33.2 | 10.4.33.2 | CLIMB01 | 61141 | MAL 系统监听 TCP 连接的端口 |
dmdsc1 | 10.4.33.2 | 10.4.33.2 | CLIMB01 | 52141 | 实例本地的守护进程监听 TCP 连接的端口 |
dmdsc1 | 10.4.33.2 | 10.4.33.2 | CLIMB01 | 33141 | 实例监听守护进程 TCP 连接的端口 |
dmdsc2 | 10.4.33.3 | 10.4.33.3 | CLIMB02 | 5236 | 数据库实例 CLIMB02 监听端口 |
dmdsc2 | 10.4.33.3 | 10.4.33.3 | CLIMB02 | 61141 | MAL 系统监听 TCP 连接的端口 |
dmdsc2 | 10.4.33.3 | 10.4.33.3 | CLIMB02 | 52141 | 实例本地的守护进程监听 TCP 连接的端口 |
dmdsc2 | 10.4.33.3 | 10.4.33.3 | CLIMB02 | 33141 | 实例监听守护进程 TCP 连接的端口 |
**防火墙集群之间需开放以上所有端口,**集群对客户端只需要开通数据库实例监听端口。
注意:
正常环境中,public ip和private ip 应该是两块网卡,其中Public ip负责连接外部应用,private ip 负责集群内部的mal通信。
一块网卡的话也不影响部署使用
主库备份
注意 初始化实例必须先启动一次,才能脱机备份
复制
确认主库DMAP服务已启动
ps -ef | grep dmap
复制
如果服务未启动,使用dmdba用户到安装目录的bin下执行以下命令:
./DmAPService start
复制
启动数据库实例
/dm/dmdbms/bin/dmserver /dm/dmdata/climb/dm.ini
复制
开启归档
[dmdba@~]$ /dm/dmdbms/bin/disql SYSDBA/SYSDBA SQL> ALTER DATABASE MOUNT; SQL> ALTER DATABASE ARCHIVELOG; SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm/dmarch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200'; SQL> ALTER DATABASE OPEN;
复制
备份全库
SQL> BACKUP DATABASE BACKUPSET '/dm/dmbak/FULL_BAK_20221109';
复制
修改 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,'RLOG_SEND_APPLY_MON',64);
复制
关闭前台实例服务
CTRL+C停止前台启动的服务
复制
修改主库配置文件
配置归档文件dmarch.ini
主库添加以下内容
vi /dm/dmdata/climb/dmarch.ini ARCH_WAIT_APPLY = 0 #0:高性能(故障手切) 1:事务一致(故障自切) [ARCHIVE_LOCAL] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm/dmarch/ #本地归档存放路径 ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = CLIMB02 #实时归档目标实例名
复制
配置MAL系统配置文件 dmmal.ini
在实例目录下新建文件 dmmal.ini
,执行以下命令:
vi /dm/dmdata/climb/dmmal.ini
复制
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = CLIMB01 #与 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 10.4.33.2 #MAL 系统监听 TCP 内部网络 IP MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 10.4.33.2 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口 MAL_INST_DW_PORT = 33141 [MAL_INST2] MAL_INST_NAME = CLIMB02 #与 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 10.4.33.3 # MAL 系统监听 TCP 内部网络 IP MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 10.4.33.3 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口 MAL_INST_DW_PORT = 33141
复制
注意:
MAL_HOST 对应 private ip MAL_INST_HOST 对应 public ip
复制
配置守护进程配置文件 dmwatcher.ini
在实例目录下新建文件 dmwatcher.ini
,执行以下命令:
vi /dm/dmdata/climb/dmwatcher.ini
复制
[GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切 DW_ERROR_TIME = 20 #远程守护进程故障认定时间 INST_ERROR_TIME = 20 #本地实例故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_OGUID = 45331 #守护系统唯一 OGUID 值 INST_INI = /dm/dmdata/CLIMB/dm.ini #dm.ini 文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
复制
备库还原操作
拷贝备份文件夹至备库/app/dm/dmbak/下
可以使用scp命令、sftp传输,或者其他方便使用的命令
正常关闭数据库后,使用dmrman工具进行脱机还原
./dmrman
复制
执行restore
[dmdba@~]$/dm/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/dm/dmdata/CLIMB/dm.ini' FROM BACKUPSET '/dm/dmbak/FULL_BAK_20221109'"
复制
执行recover
[dmdba@~]$/dm/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm/dmdata/CLIMB/dm.ini' FROM BACKUPSET '/dm/dmbak/FULL_BAK_20221109'"
复制
执行执行 recover update db_magic
[dmdba@~]$/dm/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm/dmdata/CLIMB/dm.ini' UPDATE DB_MAGIC"
复制
修改备库配置文件
修改实例的配置文件dm.ini
主库主要修改以下参数
vi /dm/dmdata/climb/dm.ini INSTANCE_NAME = CLIMB02 PORT_NUM = 5236 #数据库实例监听端口 DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间 ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间 MAL_INI = 1 #打开 MAL 系统 ARCH_INI = 1 #打开归档配置 RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息
复制
配置归档文件dmarch.ini
备库添加以下内容
vi /dm/dmdata/climb/dmarch.ini ARCH_WAIT_APPLY = 0 #0:高性能(故障手切) 1:事务一致(故障自切) [ARCHIVE_LOCAL] ARCH_TYPE = LOCAL #本地归档类型 ARCH_DEST = /dm/dmarch/ #本地归档存放路径 ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB [ARCHIVE_REALTIME1] ARCH_TYPE = REALTIME #实时归档类型 ARCH_DEST = CLIMB01 #实时归档目标实例名
复制
配置MAL系统配置文件 dmmal.ini
在实例目录下新建文件 dmmal.ini
,执行以下命令:
vi /dm/dmdata/climb/dmmal.ini
复制
主备库文件内容要相同
MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔 MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间 [MAL_INST1] MAL_INST_NAME = CLIMB01 #与 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 10.4.33.2 #MAL 系统监听 TCP 内部网络 IP MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 10.4.33.2 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口 MAL_INST_DW_PORT = 33141 [MAL_INST2] MAL_INST_NAME = CLIMB02 #与 dm.ini 中的 INSTANCE_NAME 一致 MAL_HOST = 10.4.33.3 # MAL 系统监听 TCP 内部网络 IP MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口 MAL_INST_HOST = 10.4.33.3 #实例的对外服务 IP 地址 MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致 MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口 MAL_INST_DW_PORT = 33141
复制
注意:
MAL_HOST 对应 private ip MAL_INST_HOST 对应 public ip
复制
配置守护进程配置文件 dmwatcher.ini
在实例目录下新建文件 dmwatcher.ini
,执行以下命令:
vi /dm/dmdata/climb/dmwatcher.ini
复制
主备库文件内容要相同
[GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = MANUAL #MANUAL:故障手切 AUTO:故障自切 DW_ERROR_TIME = 20 #远程守护进程故障认定时间 INST_ERROR_TIME = 20 #本地实例故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_OGUID = 45331 #守护系统唯一 OGUID 值 INST_INI = /dm/dmdata/CLIMB/dm.ini #dm.ini 文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm/dmdbms/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
复制
配置监控器配置文件dmmonitor.ini
由于只有2台服务器,所以在备库10.4.33.3上部署监控器
vi /dm/dmdata/climb/dmmonitor.ini MON_DW_CONFIRM = 1 #确认监视器模式 MON_LOG_PATH = /dm/dmdata/climb/log #监视器日志文件存放路径 MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件 MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32 MB MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间 [GRP_RW] MON_INST_OGUID = 45331 #组 GRP_RW 的唯一 OGUID 值 #以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置 #IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT MON_DW_IP = 10.4.33.2:52141 MON_DW_IP = 10.4.33.3:52141
复制
启动服务及查看信息
以Mount方式启动数据库并修改参数
注意:在官方文档中是以数据库启动脚本 start的方式启动,需要修改一下数据库启动脚本中的内容,才能以mount的方式启动,不然正常以open试启动,后边修改OGUID会报错
vi /dm/dmdbms/bin/DmServiceclimb
复制
su - dmdba cd /dm/dmdbms/bin/ ./DmServiceclimb start
复制
此时通过ps -ef | grep dm.ini
命令即可以看到数据库实例是以mount形式启动的
主库修改参数
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL>sp_set_oguid(45331); SQL> ALTER DATABASE PRIMARY; SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
复制
修改备库
同样需要修改DmServiceclimb
脚本 中的mount后,再以数据库启动脚本的方式启动
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); SQL>sp_set_oguid(45331); SQL> ALTER DATABASE STANDBY; SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
复制
目前主、备库都牌mount
状态,把守护进程 启动后,守护进程自动将mount
更改为open
.
启动守护进程
启动报错:
前台可以启动:
说明启动脚本有问题:
vi /dm/dmdbms/bin/DmWatchServiceWatch
复制
修改后再次启动:
启停集群
## 启动 ## 主/备 机器 [dmdba@~]$ /dm/dmdbms/bin/DmWatcherServiceWatcher start ## 停止 ## 主/备机器 [dmdba@~]$ /dm/dmdbms/bin/DmWatcherServiceWatcher stop ## 主 机器 [dmdba@~]$ /dm/dmdbms/bin/DmServiceclimb stop ## 备 机器 [dmdba@~]$ /dm/dmdbms/bin/DmServiceclimb stop
https://eco.dameng.com/community/question/ec2466c7aaba20c47952e4dba7886875