读写分离集群部署
主机规划
主机名 | 服务ip | 心跳ip | 数据库名 | 实例名 |
dm-16 | 192.168.3.16 | 无需实例,仅做监视管理用 | 无需实例,仅做监视管理用 | |
dm-17 | 192.168.2.17 | 192.168.3.17 | dmrw | dmrw1 |
dm-18 | 192.168.3.18 | 192.168.3.18 | dmrw | dmrw2 |
端口规划
实例名 | 实例端口 | MAL 系统监听 TCP 连接的端口 | 实例本地的守护进程监听 TCP 连接的端口 | 实例监听守护进程 TCP 连接的端口 |
dmrw1 | 5236 | 7336 | 7436 | 7536 |
dmrw2 | 5236 | 7336 | 7436 | 7536 |
本地存储LVM磁盘
磁盘 | LVM磁盘名/用途 |
/dev/sda(25G) | /dev/mapper/centos-root数据库安装磁盘) |
/dev/sda(25G) | /dev/mapper/centos-root数据磁盘) |
目录规划
数据库软件安装目录 | /home/dmdba/dmdbms |
实例安装目录 | /home/dmdba/dmdata/ |
归档日志存放目录 | /home/dmdba/dmdata/arch |
备份文件存放目录 | /home/dmdba/dmdata/dmbak/ |
搭建步骤
修改主机名
vi /etc/hostname
修改规划上面的主机名
软件安装
dm数据库单节点安装步骤,此处略
初始化实例
二个节点都要操作(dm-17\dm-18)
dminit path=/home/dmdba/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=dmrw instance_name=dmrw
以主机dm-17为读写分离主库,启动实例
dmserver /home/dmdba/dmdata/dmrw/dm.ini
出现system is ready后输入exit停止数据库
脱机备份数据库
在主机dmdb01上执行以下命令,确认主库 dmap 服务已启动:
ps -ef|grep dmap
dmdba用户 启动dmrman工具
dmrman use_ap=2
执行 backup 全库:
backup database '/home/dmdba/dmdata/dmrw/dm.ini' backupset '/home/dmdba/dmdata/dmbak/bakfull';
备份还原备库
备份的文件/home/dmdba/dmdba/dmbak/bakfull 拷贝到服务器dm-18上。
scp -r /home/dmdba/dmdata/dmbak/bakfull 192.168.2.18:/home/dmdba/dmdata/dmbak/.
在主机dm-18上
使用 dmrman 工具还原备库,dmdba 用户执行:
dmrman use_ap=2
进入dmrman工具交互界面
执行 restore:
restore database '/home/dmdba/dmdata/dmrw/dm.ini' from backupset '/home/dmdba/dmdata/dmbak/bakfull'
完成后执行 recover:
recover database '/home/dmdba/dmdata/dmrw/dm.ini' from backupset '/home/dmdba/dmdata/dmbak/bakfull '
最后执行 recover update db_magic。
recover database '/home/dmdba/dmdata/dmrw/dm.ini' update db_magic;
修改dm.ini参数
所有节点都要修改
执行以下命令:
vi /home/dmdba/dmdata/dmrw/dm.ini
主库dm-17上修改以下参数值:
INSTANCE_NAME = dmrw1
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
备库dm-18上修改以下参数值:
INSTANCE_NAME = dmrw2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
配置归档配置文件
在实例目录下新建文件 dmarch.ini,执行以下命令:
vi /dmdata/dmdb/dmarch.ini
在实例目录下新建文件 dmarch.ini,执行以下命令:
vi /dmdata/dmdb/dmarch.ini
主库dm-17上添加以下内容:
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = dmrw2
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = dmrw3
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdata/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
备库dm-18上添加以下内容:
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = dmrw1
[ARCHIVE_REALTIME2]
ARCH_TYPE = REALTIME
ARCH_DEST = dmrw3
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/dmdata/arch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
配置dmmal.ini(心跳网络)
两个节点都要配置,且配置必须相同
[dmdba@dm-17 dmrw]$ cat dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 15
[MAL_INST1]
MAL_INST_NAME = dmrw1
MAL_HOST = 192.168.3.17
MAL_PORT = 7336
MAL_INST_HOST = 192.168.2.17
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
[MAL_INST2]
MAL_INST_NAME = dmrw2
MAL_HOST = 192.168.3.18
MAL_PORT = 7336
MAL_INST_HOST = 192.168.2.18
MAL_INST_PORT = 5236
MAL_DW_PORT = 7436
MAL_INST_DW_PORT = 7536
配置守护进程
二个节点都要配置,且配置必须相同
[dmdba@dm-17 dmrw]$ cat dmwatcher.ini
[GRP_RW]
DW_TYPE = GLOBAL
DW_MODE =MANUAL
DW_ERROR_TIME = 30
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 20
INST_OGUID = 453331
INST_INI = /home/dmdba/dmdata/dmrw/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver
方式启动数据库实例
使用 dmdba 用户,在主库上执行以下命令(主备库都执行):
dmserver /home/dmdba/dmdata/dmrw/dm.ini mount
在新的终端使用 disql 工具连接数据库:
./disql SYSDBA/SYSDBA
主备库都修改 oguid,执行以下命令:
sp_set_oguid(453331);
主库dm-17上修改数据库模式为 primary,执行以下命令:
alter database primary;
备库dm-18上类似操作,但注意修改数据库模式为 standby,执行以下命令:
alter database standby;
dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):
dmwatcher /home/dmdba/dmdata/dmrw/dmwatcher.ini
查看状态
使用DM管理工具,连上二个实例上面查看
配置监视器(服务器192.168.3.16)
192.168.3.16首先也要安装数据库软件再操作下面步骤
vi /home/dmdba/dmdbms/bin/dmmonitor.ini
添加以下内容:
说明:具体配置时,请把#和#之后的中文内容删除。
MON_DW_CONFIRM = 1
MON_LOG_PATH = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 200
MON_LOG_SPACE_LIMIT = 1024
[GRP_RW]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.3.17:7436
MON_DW_IP = 192.168.3.18:7436
启动监视器
在服务器dm-16上操作:
dmmonitor /dmdata/dmdb/dmmonitor.ini
可以看见集群状态ok
以上证明集群搭建成功
关库
按照关闭dmmonitor---dmwatcher关闭后(dmwatcher关闭顺序先主后备)---dmserver(dmserver关闭顺序先主后备)的顺序依次关闭数据库
添加服务作为系统启动服务
下面的操作在主备节点都要执行,执行顺序:先主库执行----备库执行:
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmwatcher -p dmrw -watcher_ini /home/dmdba/dmdata/dmrw/dmwatcher.ini
./dm_service_installer.sh -t dmserver -p dmrw -dm_ini /home/dmdba/dmdata/dmrw/dm.ini
监视器执行(192.168.3.16)执行
使用 root 用户,到数据库安装目录的script/root下。
cd /home/dmdba/dmdbms/script/root/
./dm_service_installer.sh -t dmmonitor -p monitor-confirm -monitor_ini /home/dmdba/dmdbms/bin/dmmonitor.ini
启动命令
systemctl start DmMonitorServicemonitor-confirm
主机dm-16再添加一个普通监视器
cd /home/dmdba/dmdbms/bin
cp dmmonitor.ini dmmonitor-normal.ini
修改dmmonitor-normal.ini
[dmdba@dm-16 bin]$ cat dmmonitor-normal.ini
MON_DW_CONFIRM = 0
MON_LOG_PATH = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 200
MON_LOG_SPACE_LIMIT = 1024
[GRP_RW]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.3.17:7436
MON_DW_IP = 192.168.3.18:7436
启动集群:
启动备库实例
192.168.2.18启动实例
systemctl start DmServicedmrw
启动主库实例
192.168.2.17
systemctl start DmServicedmrw
启动主库守护进程
192.168.2.17
systemctl start DmWatcherServicedmrw
启动备库守护进程
192.168.2.18
systemctl start DmWatcherServicedmrw
启动监视服务
192.168.3.16
查看集群状态
法一:查看日志:
cat /home/dmdba/dmdbms/log/DmMonitorservicemonitor-confirm.log
法二:前端查看
dmmonitor path= /home/dmdba/dmdbms/bin/dmmonitor-normal.ini
主备与读写分离比较归纳
主备及读写分离本质还是相同的,都是对redo日志的处理不同产生的几种解决模式,
主库redo 备库模式 | Realtime | Timely |
高性能 Arch_wait_apply=0 | 优点: 1、备库对主库性能影响小 2、保障备库最快收到redo日志 | 优点: 主库日志比备库只多不少 备库与主库能保证事务一致 |
缺点:备库数据因为redo未及时重演,可能会有延迟 | 缺点: 备库数据可能有延迟,一方面来自于redo未及时重演引起的延迟,另一方面来自于主库写联机日志这时间引发的延迟 | |
架构模式:实时主备 | 架构模式:普通主备架构 | |
适用场景:业务一致性要求一般,对主库可用性要求较高的场景 | 适用场景:备库对业务的实时一致性要求一般,但对容灾的备库有事务不能丢失要求 | |
事务一致 Arch_wait_apply=1 | 优点:在满足事务一致性基础上,对主库性能影响最低 | 优点: 强事务一致性保证,主备数据库能同步 |
缺点: 1、主库性能受备库的影响较高 2、当主库故障时有可能引起备库与主库数据不一致 | 缺点: 主库性能影响受备库居中, | |
架构模式:实时读写分离集群,要求守护进程是自动模式 | 架构架构模式:普通读写分离集群 | |
适用场景:业务一致性要求一般,对主库可用性要求较高的场景 | 适用场景:业务一致性要求高,对主库可用性没有高要求场景 |
达梦社区地址:https://eco.dameng.com