达梦数据库守护集群搭建笔记
环境准备修改服务器名称免密登录服务器名称访问磁盘合理分配与挂载磁盘分区格式化分区磁盘挂载 创建 dmdba 用户环境检查(略)安装数据库配置 A 服务器(dmdb1)实例、备份数据替换dmarch.ini创建dmmal.ini创建dmwatcher.ini拷贝实例到B服务器注册服务*备注* _删除自启服务_ 配置 B 服务器(dmdb2)修改dm.ini修改dmarch.ini与A服务器相同的配置项注册服务*备注* _删除自启服务_ 恢复数据 配置监视器确认监视器-配置文件注册服务*备注* _删除自启服务_ 非确认监视器-配置文件*备注* _非确认监视器_ 启动服务启动数据库服务A 服务器(dmdb1)B 服务器(dmdb2) 启动守护进程启动监视器*备注* _启动非确认监视器_ *备注* _集群启停操作顺序_启:停: dm_svc.conf配置应用连接环境准备
购买云服务器三台,按照之前的教程进行安装前的环境检查与修改
修改服务器名称
hostnamectl set-hostname dmdb1
hostnamectl set-hostname dmdb2
hostnamectl set-hostname dmdb3
免密登录
在三台服务器中依次执行如下命令
root@dmdb1:~# ssh-keygenroot@dmdb1:~# ssh-copy-id 124.239.252.27root@dmdb1:~# ssh-copy-id 106.120.188.121root@dmdb1:~# ssh-copy-id 106.120.188.209
重复上述步骤在另外两台服务器
服务器名称访问
同样是在三台服务器中都要修改/etc/hosts文件
root@dmdb1:~# nano /etc/hosts127.0.0.1 localhost106.120.188.201 dmdb1106.120.188.202 dmdb2106.120.188.203 dmdb3
磁盘合理分配与挂载
磁盘分区
个人非生产数据库磁盘分配可按此比例分配即可
dmdata:dmbak:dmarch=2:4:1
由于我的服务器只申请了一张数据盘,需要将磁盘分区并挂载到上述三个路径
root@dmdb1:~# fdisk /dev/vdbWelcome to fdisk (util-linux 2.34).Changes will remain in memory only, until you decide to write them.Be careful before using the write command.Device does not contain a recognized partition table.Created a new DOS disklabel with disk identifier mand (m for help): nPartition typep primary (0 primary, 0 extended, 4 free)e extended (container for logical partitions)Select (default p): pPartition number (1-4, default 1): 1First sector (2048-41943039, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): 12584345Created a new partition 1 of type 'Linux' and of size 6 mand (m for help): nPartition typep primary (1 primary, 0 extended, 3 free)e extended (container for logical partitions)Select (default p): pPartition number (2-4, default 2): 2First sector (12584346-41943039, default 12584960): Last sector, +/-sectors or +/-size{K,M,G,T,P} (12584960-41943039, default 41943039): 35651891Created a new partition 2 of type 'Linux' and of size 11 mand (m for help): nPartition typep primary (2 primary, 0 extended, 2 free)e extended (container for logical partitions)Select (default p): pPartition number (3,4, default 3): 3First sector (12584346-41943039, default 35653632): Last sector, +/-sectors or +/-size{K,M,G,T,P} (35653632-41943039, default 41943039): Created a new partition 3 of type 'Linux' and of size 3 mand (m for help): wThe partition table has been altered.Calling ioctl() to re-read partition table.Syncing disks.root@dmdb3:~# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda 252:0 0 40G 0 disk └─vda1 252:1 0 40G 0 part /vdb 252:16 0 20G 0 disk ├─vdb1 252:17 0 6G 0 part ├─vdb2 252:18 0 11G 0 part └─vdb3 252:19 0 3G 0 part
同样是三台服务器全部需要操作
格式化分区
root@dmdb1:~# mkfs -t ext4 /dev/vdb1root@dmdb1:~# mkfs -t ext4 /dev/vdb2root@dmdb1:~# mkfs -t ext4 /dev/vdb3
root@dmdb1:~# mkfs -t ext4 /dev/vdb1mke2fs 1.45.5 (07-Jan-)Discarding device blocks: done Creating filesystem with 1572787 4k blocks and 393216 inodesFilesystem UUID: 8aff0db1-dece-4598-a147-a1b1452bb34eSuperblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): doneWriting superblocks and filesystem accounting information: done root@dmdb1:~# mkfs -t ext4 /dev/vdb2mke2fs 1.45.5 (07-Jan-)Discarding device blocks: done Creating filesystem with 2883366 4k blocks and 720896 inodesFilesystem UUID: 26592a63-5b87-44d5-bc5d-6428b8b14a1eSuperblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): doneWriting superblocks and filesystem accounting information: done root@dmdb1:~# mkfs -t ext4 /dev/vdb3mke2fs 1.45.5 (07-Jan-)Discarding device blocks: done Creating filesystem with 786176 4k blocks and 196608 inodesFilesystem UUID: aeffbb7b-0429-492c-88ef-44cf2206fe57Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): doneWriting superblocks and filesystem accounting information: done
同样是三台服务器全部需要操作
磁盘挂载
root@dmdb1:~# mkdir -p /dmdataroot@dmdb1:~# mount /dev/vdb1 /dmdata/root@dmdb1:~# mkdir -p /dmbakroot@dmdb1:~# mount /dev/vdb2 /dmbak/root@dmdb1:~# mkdir -p /dmarchroot@dmdb1:~# mount /dev/vdb3 /dmarch/
设置开机启动自动挂载,即修改 /etc/fstab 文件,在最后添加
/dev/vdb1 /dmdata ext4 defaults 0 0/dev/vdb2 /dmbak ext4 defaults 0 0/dev/vdb3 /dmarch ext4 defaults 0 0
其中第一个0表示不会备份此文件系统,第二个0表示fsck不会检查此文件系统
同样是三台服务器全部需要操作,操作完效果:
root@dmdb1:~# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda 252:0 0 40G 0 disk └─vda1 252:1 0 40G 0 part /vdb 252:16 0 20G 0 disk ├─vdb1 252:17 0 6G 0 part /dmdata├─vdb2 252:18 0 11G 0 part /dmbak└─vdb3 252:19 0 3G 0 part /dmarch
创建 dmdba 用户
root@dmdb1:~# groupadd dinstall -g 2001root@dmdb1:~# useradd -g dinstall dmdba -u 1001root@dmdb1:~# passwd dmdbaroot@dmdb1:~# <输入密码>root@dmdb1:~# <再次输入密码>root@dmdb1:~# mkdir -p /opt/dmdbmsroot@dmdb1:~# chown dmdba.dinstall /opt/dmdbms -Rroot@dmdb1:~# chmod 777 /opt/dmdbms -Rroot@dmdb1:~# chown dmdba.dinstall /dmdata -Rroot@dmdb1:~# chmod 777 /dmdata -Rroot@dmdb1:~# chown dmdba.dinstall /dmbak -Rroot@dmdb1:~# chmod 777 /dmbak -Rroot@dmdb1:~# chown dmdba.dinstall /dmarch -Rroot@dmdb1:~# chmod 777 /dmarch -R
环境检查(略)
环境检查部分可见博客:
/NinjaKilling/article/details/125915056
安装数据库
创建存放ISO镜像文件的路径
root@dmdb1:~# mkdir -p /opt/dmsetuproot@dmdb2:~# mkdir -p /opt/dmsetuproot@dmdb3:~# mkdir -p /opt/dmsetup
上传ISO安装包到dmdb1该路径,并将ISO安装包从dmdb1传递到另外两台服务器
root@dmdb1:~# scp -r /opt/dmsetup/dm8_1111_x86_rh6_64_ent_8.1.2.18_pack16.iso root@dmdb2:/opt/dmsetup/root@dmdb1:~# scp -r /opt/dmsetup/dm8_1111_x86_rh6_64_ent_8.1.2.18_pack16.iso root@dmdb3:/opt/dmsetup/
挂载ISO镜像文件
root@dmdb1:~# chown dmdba.dinstall /opt/dmsetup -Rroot@dmdb1:~# chmod 777 /opt/dmsetup -Rroot@dmdb1:~# mount -o loop /opt/dmsetup/dm8_1111_x86_rh6_64_ent_8.1.2.18_pack16.iso /opt/dmsetup
安装数据库
root@dmdb1:~# su - dmdbadmdba@dmdb1:~$ /opt/dmsetup/DMInstall.bin -i
安装路径:/opt/dmdbms
请以root系统用户执行命令:
root@dmdb1:~# /opt/dmdbms/script/root/root_installer.sh
同样是三台服务器全部需要操作挂载镜像与安装命令
配置 A 服务器(dmdb1)
实例、备份数据
初始化实例,并前台启动
dmdba@dmdb1:~$ /opt/dmdbms/bin/dminit PATH=/dmdata/ INSTANCE_NAME=DM1_01 PAGE_SIZE=32 LOG_SIZE=2048dmdba@dmdb1:~$ /opt/dmdbms/bin/dmserver /dmdata/DAMENG/dm.ini
需要另开窗口
其中归档日志 SPACE_LIMIT 大小需要根据自己的磁盘空间设定(我的是3G)
dmdba@dmdb1:~$ /opt/dmdbms/bin/disql SYSDBA/SYSDBA@124.239.252.45:5236SQL> ALTER DATABASE MOUNT;SQL> ALTER DATABASE ARCHIVELOG;SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dmarch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=3072';SQL> ALTER DATABASE OPEN;
备份数据
SQL> BACKUP DATABASE BACKUPSET '/dmbak/BACKUP_FILE';
修改 dm.ini 参数
SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
关闭前台实例服务。如果上述热备时出现报错,可使用冷备进行备份
dmdba@dmdb1:~$ /opt/dmdbms/bin/dmrmanRMAN> BACKUP DATABASE '/dmdata/DAMENG/dm.ini' BACKUPSET '/dmbak/BACKUP_FILE';
替换dmarch.ini
dmdba@dmdb1:~$ nano /dmdata/DAMENG/dmarch.ini[ARCHIVE_LOCAL]ARCH_TYPE= LOCAL #本地归档类型ARCH_DEST= /dmarch/ #本地归档存放路径ARCH_FILE_SIZE = 1024 #单个归档大小,单位MBARCH_SPACE_LIMIT = 3072 #归档上限,单位MB[ARCHIVE_REALTIME]ARCH_TYPE= REALTIME #实时归档类型ARCH_DEST= DM1_02 #实时归档目标实例名
创建dmmal.ini
dmdba@dmdb1:~$ nano /dmdata/DAMENG/dmmal.iniMAL_CHECK_INTERVAL = 10 #MAL链路检测时间间隔MAL_CONN_FAIL_INTERVAL= 10 #判定MAL链路断开的时间MAL_TEMP_PATH = /dmdata/malpath/ #临时文件目录MAL_BUF_SIZE= 512 #单个MAL缓存大小,单位MBMAL_SYS_BUF_SIZE = 2048 #MAL总大小限制,单位MBMAL_COMPRESS_LEVEL = 0 #MAL消息压缩等级,0表示不压缩[MAL_INST1]MAL_INST_NAME = DM1_01 #实例名,和 dm.ini的INSTANCE_NAME一致MAL_HOST = 10.90.10.1 #MAL系统监听TCP连接的IP地址MAL_PORT = 5336 #MAL系统监听TCP连接的端口MAL_INST_HOST = 106.120.188.201 #实例的对外服务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 = DM1_02MAL_HOST = 10.90.10.2MAL_PORT = 5336MAL_INST_HOST = 106.120.188.202MAL_INST_PORT = 5236MAL_DW_PORT = 5436MAL_INST_DW_PORT = 5536
创建dmwatcher.ini
dmdba@dmdb1:~$ nano /opt/dmdbms/data/DAMENG/dmwatcher.ini[GRWC1]DW_TYPE = GLOBAL #全局守护类型DW_MODE = AUTO #故障自动切换模式DW_ERROR_TIME = 20 #远程守护进程故障认定时间INST_ERROR_TIME= 20 #本地实例故障认定时间INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间INST_OGUID= 45331 #守护系统唯一OGUID值INST_INI = /dmdata/DAMENG/dm.ini #dm.ini文件路径INST_AUTO_RESTART = 1 #打开实例的自动启动功能INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动RLOG_SEND_THRESHOLD= 0 #指定主库发送日志到备库的时间阈值,默认关闭RLOG_APPLY_THRESHOLD= 0 #指定备库重演日志的时间阈值,默认关闭
拷贝实例到B服务器
dmdba@dmdb1:~$ scp -r /dmdata/DAMENG/ dmdba@dmdb2:/dmdata/
注册服务
实例服务
root@dmdb1:~# /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DM1_01 -dm_ini /dmdata/DAMENG/dm.ini -m mount
守护进程服务
root@dmdb1:~# /opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/DAMENG/dmwatcher.ini
备注删除自启服务
实例服务
root@dmdb1:~# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDM1_01
守护进程服务
root@dmdb1:~# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher
配置 B 服务器(dmdb2)
修改dm.ini
dmdba@dmdb2:~$ nano /dmdata/DAMENG/dm.iniINSTANCE_NAME = DM1_02 #实例名称
修改dmarch.ini
dmdba@dmdb2:~$ nano /dmdata/DAMENG/dmarch.iniARCH_DEST= DM1_01#实时归档目标实例名
与A服务器相同的配置项
dmmal.ini、dmwatcher.ini
因为从dmdb1中传过来,故无需修改
注册服务
实例服务
root@dmdb2:~# /opt/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DM1_02 -dm_ini /dmdata/DAMENG/dm.ini -m mount
守护进程服务
root@dmdb2:~# /opt/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dmdata/DAMENG/dmwatcher.ini
备注删除自启服务
实例服务
root@dmdb2:~# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDM1_02
守护进程服务
root@dmdb2:~# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher
恢复数据
将备份文件从 dmdb1 传到 dmdb2
dmdba@dmdb1:~$ scp -r /dmbak/BACKUP_FILE/ dmdba@dmdb2:/dmbak/
还原数据
dmdba@dmdb1:~$ /opt/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmbak/BACKUP_FILE'"dmdba@dmdb1:~$ /opt/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmbak/BACKUP_FILE'"dmdba@dmdb1:~$ /opt/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"
配置监视器
确认监视器要在非主备节点的服务器上部署。确认监视器配置文件一定放在监视器所在服务器上面并注册后台自启服务。确认监视器-配置文件
dmdba@dmdb3:~$ nano /opt/dmdbms/bin/dmmonitor.iniMON_DW_CONFIRM= 1 #0:非确认(故障手切) 1:确认(故障自切)MON_LOG_PATH = /opt/dmdbms/log #监视器日志文件存放路径MON_LOG_INTERVAL = 60#每隔60s定时记录系统信息到日志文件MON_LOG_FILE_SIZE = 512#单个日志大小,单位MBMON_LOG_SPACE_LIMIT= 2048 #日志上限,单位MB[GDW1]MON_INST_OGUID = 45331 #组GRWC1的唯一OGUID值MON_DW_IP = 10.90.10.1:5436 #IP对应MAL_HOST,PORT对应MAL_DW_PORTMON_DW_IP = 10.90.10.2:5436
注册服务
root@dmdb3:~# /opt/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /opt/dmdbms/bin/dmmonitor.ini
备注删除自启服务
root@dmdb3:~# /opt/dmdbms/script/root/dm_service_uninstaller.sh -n DmMonitorServiceMonitor
非确认监视器-配置文件
只是 MON_DW_CONFIRM 参数与确认监视器不一样
dmdba@dmdb3:~$ nano /opt/dmdbms/bin/dmmonitor_manual.iniMON_DW_CONFIRM= 0 #0:非确认(故障手切) 1:确认(故障自切)MON_LOG_PATH = /opt/dmdbms/log #监视器日志文件存放路径MON_LOG_INTERVAL = 60#每隔60s定时记录系统信息到日志文件MON_LOG_FILE_SIZE = 512#单个日志大小,单位MBMON_LOG_SPACE_LIMIT= 2048 #日志上限,单位MB[GRWC1]MON_INST_OGUID = 45331 #组GRWC1的唯一OGUID值MON_DW_IP = 10.90.10.1:5436 #IP对应MAL_HOST,PORT对应MAL_DW_PORTMON_DW_IP = 10.90.10.2:5436
备注非确认监视器
非确认监视器用来前台启动,进行交互查看集群状态
监视器常用命令
启动服务
启动数据库服务
A 服务器(dmdb1)
dmdba@dmdb1:~$ /opt/dmdbms/bin/DmServiceDM1_01 startdmdba@dmdb1:~$ /opt/dmdbms/bin/disql SYSDBA/SYSDBA@106.120.188.201:5236SQL> SP_SET_OGUID(45331);SQL> ALTER DATABASE PRIMARY;
B 服务器(dmdb2)
dmdba@dmdb2:~$ /opt/dmdbms/bin/DmServiceDM1_02 startdmdba@dmdb2:~$ /opt/dmdbms/bin/disql SYSDBA/SYSDBA@106.120.188.202:5236SQL> SP_SET_OGUID(45331);SQL> ALTER DATABASE STANDBY;
启动守护进程
A/B 服务器(dmdb1和dmdb2)
dmdba@dmdb1:~$ /opt/dmdbms/bin/DmWatcherServiceWatcher startdmdba@dmdb2:~$ /opt/dmdbms/bin/DmWatcherServiceWatcher start
启动监视器
dmdba@dmdb3:~$ /opt/dmdbms/bin/DmMonitorServiceMonitor start
备注启动非确认监视器
dmdba@dmdb3:~$ /opt/dmdbms/bin/dmmonitor /opt/dmdbms/bin/dmmonitor_manual.ini
备注集群启停操作顺序
启:
开启主机实例
开启备机实例
开启备机的守护进程
开启主机的守护进程
开启监视器
停:
退出监视器
关闭备机的守护进程
关闭主机的守护进程
关闭主机实例
关闭备机实例
dm_svc.conf配置
dmdba@dmdb1:~$ nano /etc/dm_svc.confTIME_ZONE=(480)LANGUAGE=(cn)DM1=(106.120.188.201:5236,106.120.188.202:5236)[DM1]LOGIN_MODE=(1)SWITCH_TIME=(300)SWITCH_INTERVAL=(200)
LOGIN_MODE:指定优先登录的服务器模式。
0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;
1:只连接主库;
2:只连接备库;
3:优先连接 STANDBY 模式的库, PRIMARY 模式次之,最后选择 NORMAL 模式;
4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择STANDBY 模式 。
SWITCH_TIMES:以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。有效值范围1~9223372036854775807,默认值为1,可以设置至少3次用来避免由于网卡的波动照成数据库连接测频繁切换
SWITCH_INTERVAL :在服务器之间切换的时间间隔,单位为毫秒,有效值范围 1~9223372036854775807。
与参数SWITCH_TIMES、EP_SELECTOR配合使用,EP_SELECTOR设置为0,等待SWITCH_INTERVAL后会切换尝试连接下一个服务,EP_SELECTOR设置为1,等待SWITCH_INTERVAL后会继续尝试连接该服务器,直到SWITCH_TIMES次再切换下一个服务器。
应用连接
修改url连接串增加 jdbc:dm://DM1
如下:
static String dname = "dm.jdbc.driver.DmDriver";static String url = "jdbc:dm://DM1";
感谢各位!
技术博客社区地址
如果觉得《达梦数据库守护集群搭建笔记》对你有帮助,请点赞、收藏,并留下你的观点哦!