服务器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没有密码。
[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
[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
[root@~]# vi /etc/pam.d/login
session required /lib64/security/pam_limits.so
session required pam_limits.so
[root@~]# vi /etc/sysconfig/selinux
SELINUX = disabled
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
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 --重启生效
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 --重启生效
系统版本: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
生效
使用麒麟 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
请大家注意关于上线规范里的 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服务”,则安装完成
初始化需求:大小写不敏感、兼容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通信。
一块网卡的话也不影响部署使用
注意
初始化实例必须先启动一次,才能脱机备份
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';
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停止前台启动的服务
主库添加以下内容
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 #实时归档目标实例名
在实例目录下新建文件 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
,执行以下命令:
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
[dmdba@~]$/dm/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/dm/dmdata/CLIMB/dm.ini' FROM BACKUPSET '/dm/dmbak/FULL_BAK_20221109'"
[dmdba@~]$/dm/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm/dmdata/CLIMB/dm.ini' FROM BACKUPSET '/dm/dmbak/FULL_BAK_20221109'"
[dmdba@~]$/dm/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm/dmdata/CLIMB/dm.ini' UPDATE DB_MAGIC"
主库主要修改以下参数
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 次的日志重演信息
备库添加以下内容
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 #实时归档目标实例名
在实例目录下新建文件 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
,执行以下命令:
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 #指定备库重演日志的时间阈值,默认关闭
由于只有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
注意:在官方文档中是以数据库启动脚本 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
文章
阅读量
获赞